@unotest/web 0.31.0 → 0.33.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.
- package/CHANGELOG.md +497 -0
- package/README.md +71 -4
- package/dist/config/schema.d.ts +6 -6
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +20 -0
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.d.ts +1 -6
- package/dist/runner/cli.js +1 -1
- package/dist/runner/init/chrome-probe.js +1 -1
- package/dist/runner/init.js +1 -1
- package/dist/runner/install-chromium.js +1 -1
- package/dist/runner/prepare-fix.js +1 -1
- package/dist/runner/scaffold-workspace.js +1 -1
- package/dist/runner/serve-fixture.js +1 -1
- package/dist/runner/web-runner-adapter.js +1 -1
- package/guides/agent-integration.md +148 -13
- package/package.json +9 -9
|
@@ -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 _0x2b0916=_0x5872;(function(_0x3db4c7,_0x51a9cb){const _0x30f14b={_0x5611a8:0x197,_0x424ab3:0x18c,_0x22b045:0x18e},_0x1a1ecc=_0x5872,_0x2b6618=_0x3db4c7();while(!![]){try{const _0x534cbf=-parseInt(_0x1a1ecc(_0x30f14b._0x5611a8))/0x1+parseInt(_0x1a1ecc(_0x30f14b._0x424ab3))/0x2+parseInt(_0x1a1ecc(0x193))/0x3*(parseInt(_0x1a1ecc(0x188))/0x4)+parseInt(_0x1a1ecc(0x190))/0x5+-parseInt(_0x1a1ecc(0x198))/0x6+parseInt(_0x1a1ecc(0x177))/0x7*(-parseInt(_0x1a1ecc(_0x30f14b._0x22b045))/0x8)+parseInt(_0x1a1ecc(0x173))/0x9;if(_0x534cbf===_0x51a9cb)break;else _0x2b6618['push'](_0x2b6618['shift']());}catch(_0x20c7f8){_0x2b6618['push'](_0x2b6618['shift']());}}}(_0x31f0,0xce0a4));var __defProp=Object[_0x2b0916(0x18f)],__name=(_0x3f3855,_0x427e6d)=>__defProp(_0x3f3855,_0x2b0916(0x171),{'value':_0x427e6d,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'jsconfigJson':_0x2b0916(0x186),'scenarioTemplate':_0x2b0916(0x174),'agentsMd':_0x2b0916(0x176),'claudeMdBody':_0x2b0916(0x179),'examples':{'01-smoke.js':_0x2b0916(0x18a),'02-form-fill.js':_0x2b0916(0x17b)},'secretsExample':_0x2b0916(0x194),'envExample':_0x2b0916(0x17c)};function unotestConfigMjs(_0x4c0833){const _0x48a79d={_0x332d1d:0x16f,_0x184ff9:0x175},_0xd10378=_0x2b0916,_0x40ba99=_0x4c0833===void 0x0?'\x20\x20//\x20channel:\x20\x27chrome\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\x20\x20//\x20\x27chrome\x27\x20/\x20\x27msedge\x27\x20/\x20null\x20(bundled)':_0xd10378(_0x48a79d._0x332d1d)+JSON[_0xd10378(_0x48a79d._0x184ff9)](_0x4c0833)+',';return _0xd10378(0x191)+_0x40ba99+_0xd10378(0x17d);}__name(unotestConfigMjs,'unotestConfigMjs');function suitePackageJson(_0x511088){const _0x3d819d=_0x2b0916;return JSON['stringify']({'name':_0x3d819d(0x17f),'private':!![],'devDependencies':{'@unotest/web':'^'+_0x511088}},null,0x2)+'\x0a';}function _0x5872(_0x306eae,_0xfcb353){_0x306eae=_0x306eae-0x16e;const _0x31f097=_0x31f0();let _0x587215=_0x31f097[_0x306eae];if(_0x5872['PNlrID']===undefined){var _0x2a72ff=function(_0x57ee93){const _0x3d1c5e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3f3855='',_0x427e6d='';for(let _0x4c0833=0x0,_0x40ba99,_0x511088,_0x50b0d0=0x0;_0x511088=_0x57ee93['charAt'](_0x50b0d0++);~_0x511088&&(_0x40ba99=_0x4c0833%0x4?_0x40ba99*0x40+_0x511088:_0x511088,_0x4c0833++%0x4)?_0x3f3855+=String['fromCharCode'](0xff&_0x40ba99>>(-0x2*_0x4c0833&0x6)):0x0){_0x511088=_0x3d1c5e['indexOf'](_0x511088);}for(let _0x3d08e1=0x0,_0x4f7ddf=_0x3f3855['length'];_0x3d08e1<_0x4f7ddf;_0x3d08e1++){_0x427e6d+='%'+('00'+_0x3f3855['charCodeAt'](_0x3d08e1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x427e6d);};_0x5872['mGOXlx']=_0x2a72ff,_0x5872['bWNjoX']={},_0x5872['PNlrID']=!![];}const _0x5044d4=_0x31f097[0x0],_0x5e152e=_0x306eae+_0x5044d4,_0x535675=_0x5872['bWNjoX'][_0x5e152e];return!_0x535675?(_0x587215=_0x5872['mGOXlx'](_0x587215),_0x5872['bWNjoX'][_0x5e152e]=_0x587215):_0x587215=_0x535675,_0x587215;}__name(suitePackageJson,_0x2b0916(0x17a));function _0x31f0(){const _0x3683fa=['Dw5VDgvZDc1ZDwL0zq','Dw5VDgvZDc5JB25MAwCUBwPZ','DxrMoa','x2HLBhbLCNm','lI4VlI4VCgfJA2fNzs5QC29U','lMvUDG','CgfYC2u','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4VBM9Kzv9TB2r1BgvZl0b1BM90zxn0l3DLyI90ExbLCY91BM90zxn0lwrZBc5KlNrZiGOGif0kFqO','zxHHBxbSzxm','ndiYmtC0oejhAM1sAa','mdeTC21VA2uUANm','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','CMvHze93BLzLCNnPB24','odyWote4ExP3sKnW','CgfJA2fNzs5QC29U','mZKZnde2oefNBfbeAW','zgvMAw5LuhjVCgvYDhK','ndy4odu1mgPUterrCW','lY8GqhvUB3rLC3qVD2vIihbYB2PLy3qGy29UzMLNlIbbBgWGzMLLBgrZigfYzsbVChrPB25HBcdIGjqGzgvMyxvSDhmGyxbWBhKklY8GD2HLBIbVBwL0DgvKlGOVlWOVlYbtyxzLzcbHCYaUBwPZihnVihrOzsbYDw50Aw1LigXVywrZigL0igfZievttsbYzwDHCMrSzxnZig9MihrOzsbWCM9Qzwn0j3mklY8GCgfJA2fNzs5QC29Uicj0ExbLiIbMAwvSzc4GrM9YieLersbHDxrVy29TCgXLDguSihr5CguTAw1WB3j0ihrOzsbZy2HLBwe6cI8VcI8VicaGlYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcI8VicaGzxHWB3j0igrLzMf1BhqGEYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYb9oWOklYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcMv4Cg9YDcbKzwzHDwX0ihSkicaVlYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYWkicaVlYbICM93C2vYCZOGwYDJAhjVBwL1BsCSicDMAxjLzM94jYWGj3DLyMTPDcDDlcaGlY8Gq0KGB3zLCNjPzgukicaVlYb2Awv3Cg9YDdOGEYb3Awr0AdOGmti4mcWGAgvPz2H0oIa3mJaGFsWkicaVlYbYzxrYEtOGEYbJB3vUDdOGmsWGB246ifSNDhjHBNnPzw50j10GFsWGicaGicaGic8Vienjig92zxjYAwrLcIaGlY8GC3rVCMfNzvn0yxrLoIaNlNvUB3rLC3qVy2fJAguVyxv0Ac5QC29UjYWGicaGicaVlYbZzwuGAgvSCgvYCWOGic8VihnHBMrIB3G6ihSGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GyxbPq2fSBcaVihvWBg9HzcaVigrIuxvLCNKGlYbZAgvSBaOGic8VicaGyxbPqMfZzvvYBdOGj2H0DhbZoI8VyxbPlNLVDxiTyxbWlNrLC3qNlcaGicaGlY8GyMfZzsbMB3iGyxbPq2fSBcGNue9tvcCSicCVCgf0AcCSiokaPIKkicaVlYaGihvWBg9HzerPCJOGj3vUB3rLC3qVzML4DhvYzxmNlcaGicaGicaGicaGicaGic8VihjVB3qGzM9YihvWBg9HzcGNzg9JlNbKzICPihbHDgHZoWOGic8VicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGChjVAMvJDcbYB290lIbvCgXVywrZig1HEqOGic8VicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GBM90igvZy2fWzsbPDcaOCMvSyxrPDMuGCgf0AhmGB25SEsKUcIaGlY8GicbKyxrHyMfZztOGj3bVC3rNCMvZCwW6lY9SB2nHBgHVC3q6ntqZmI9HChbFDgvZDcCSicaVlYbKyLf1zxj5ic8GzgjfEgvJcIaGlY8GFsWk','C3rYAw5N','m2XvCvLLta','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','zw52rxHHBxbSzq','ANnJB25MAwDkC29U','ntaWndeZC2PArxL0','odiWntu4oe5XqNjNzG','CgfJA2fNzs5QC29Uigf0ia','Dw5VDgvZDa','icbJAgfUBMvSoIa','ztjL','BMfTzq','BgvUz3rO','nZaYmta0neXeu3LjwG','lY8Gtw92zsaRihjLBMfTzsb0AgLZigzPBguGDg8GpgzLyxr1CMu+lZX5B3vYx25HBwu+lMPZicHLlMCUcI8Vigf1DgGVBg9NAw4UANmPigfUzcb0AguGzNvUy3rPB24GyMvSB3CGDg8GDgvZDf88Ew91CL9Uyw1LpIGPlIbty2vUyxjPB3mGBgL2zqOVlYbPBIbMzwf0DxjLihn1yMzVBgrLCNmSie5pvcb0AguGztjLihjVB3qG4OcuihrOzsbSAw50zxiGkgXPBNq6C2nLBMfYAw8TAw4TCM9VDcKklY8GCMvQzwn0CYbHihrLC3qGzMLSzsbWBgfJzwqGzgLYzwn0BhKGAw4GDw5VDgvZDc9LmMuVlIbuAguGBg9HzgvYigrLCML2zxmGDgHLcI8VigvUDhj5ig5HBwuGzNjVBsb0AguGzMLSzsbIyxnLBMfTzsdIGjqGA2vIywiTy2fZzsbKyxnOzxmGyMvJB21LihvUzgvYC2nVCMvZlGOklY8GrxzLCNKGzxHLy3v0ywjSzsbZDgvWig11C3qGC2L0igLUC2LKzsbHihn0zxaOiI4UlIiSicGPid0+ihSG4OcMih0PigjSB2nRlIbuAguklY8GDgL0BguGAxmGysbWBgfPBI1fBMDSAxnOigrLC2nYAxb0Aw9Uig9MihrOzsbNCM91CdSGDgHLihn0zxbZigLUC2LKzsbHCMuklY8GDgHLigLTCgXLBwvUDgf0Aw9UlIbhCM91CcbIEsbPBNrLBNqGkfnLDhvWic8Grw50zxiGlYbby3qGlYbbC3nLCNqGB3iklY8GD2HHDgv2zxiGCMvHzhmGD2vSBcKG4Ocuig9UzsbIBg9JAYbWzxiGBg9NAwnHBcbJAhvUAY4kcMz1BMn0Aw9UihrLC3rFEw91CL9Uyw1Lx2HLCMuOksb7cIaGC3rLCcGIu2vLzcbHigTUB3DUihvZzxiGDMLHiercic8GqvbjigzPEhr1CMvZigzYB20Gx2HLBhbLCNmViIWGkcKGpt4GEWOGicaGlY8GicaGD2LWzv9LmMvFDxnLCNmOktSkicaGic8VicaGihvZzxjFAwqGpsbZzwvKx3vZzxiOj2fSAwnLqgv4yw1WBguUy29TjYWGj3nLy3jLDcCPoWOGih0PoWOkicbZDgvWkcjtAwDUigLUigfZihrOzsbZzwvKzwqGDxnLCIiSicGPid0+ihSkicaGigDVDg8Oj2H0DhbZoI8VEw91CI1HChaUDgvZDc9SB2DPBICPoWOGicaGlY8GicaGzMLSBcHNzxrcEuXHyMvSkcDfBwfPBcCPlcaNywXPy2vazxHHBxbSzs5JB20NktSkicaGic8VicaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGj3nLy3jLDcCPoWOGicaGlY8GicaGy2XPy2SOz2v0qNLsB2XLkcDIDxr0B24Nlcb7BMfTztOGj0XVzYbPBID9ksK7cIaGFsK7cGOGihn0zxaOiKfZC2vYDcb0AguGzgfZAgjVyxjKihnOB3DZihrOzsbZAwDUzwqTAw4GDxnLCIiSicGPid0+ihSkicaGic8VicaGigfZC2vYDfvYBcGNl2rHC2HIB2fYzcCPoWOGicaGlY8GicaGyxnZzxj0vgv4DcHNzxrcEvjVBguOj2HLywrPBMCNksWGj1DLBgnVBwuSiefSAwnLjYK7cIaGicaVlYaGicbJB3vUDca9igrIuxvLCNKOj1nftevdvcbJB3vUDcGQksbguK9nihvZzxjZifDirvjfigfJDgL2zsa9ihrYDwuNktSkicaGic8VicaGigfZC2vYDfrYDwuOy291BNqGpIaWlcaNzxHWzwn0zwqGyxqGBgvHC3qGB25LigfJDgL2zsb1C2vYjYK7cIaGFsK7cN0k','C3rYAw5NAwz5','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','n0PMzM5Ztq','DMvYC2LVBG','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','C3vPDgvqywnRywDLsNnVBG','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','ChvZAa'];_0x31f0=function(){return _0x3683fa;};return _0x31f0();}import{readFileSync}from'fs';import{dirname,resolve}from'path';import{fileURLToPath}from'url';function readOwnVersion(){const _0xc0bcfa={_0x48d3cc:0x181,_0x2596af:0x192,_0x548000:0x178},_0x208923=_0x2b0916,_0x50b0d0=dirname(fileURLToPath(import.meta.url)),_0x3d08e1=resolve(_0x50b0d0,_0x208923(0x183)),_0x4f7ddf=readFileSync(_0x3d08e1,_0x208923(_0xc0bcfa._0x48d3cc)),_0x37d672=JSON[_0x208923(0x185)](_0x4f7ddf);if(typeof _0x37d672['version']!==_0x208923(_0xc0bcfa._0x2596af)||_0x37d672[_0x208923(_0xc0bcfa._0x548000)][_0x208923(0x172)]===0x0)throw new Error(_0x208923(0x199)+_0x3d08e1+'\x20has\x20no\x20usable\x20\x22version\x22\x20field');return _0x37d672[_0x208923(_0xc0bcfa._0x548000)];}__name(readOwnVersion,_0x2b0916(0x18b));async function scaffoldWorkspace(_0x3d7db8,_0x16c24b={}){const _0xc4580a={_0x1fc2de:0x16e,_0x3bf30d:0x182,_0x241110:0x195,_0x3acb10:0x187,_0x525da5:0x17e},_0x16a5cd=_0x2b0916,_0x1b5fbf=[],_0x31c3b1=[];await mkdir(join(_0x3d7db8,_0x16a5cd(_0xc4580a._0x1fc2de),_0x16a5cd(0x170),_0x16a5cd(0x187)),{'recursive':!![]}),await mkdir(join(_0x3d7db8,_0x16a5cd(0x16e),_0x16a5cd(0x170),_0x16a5cd(_0xc4580a._0x3bf30d)),{'recursive':!![]});const _0x3b429b=[{'rel':join(_0x16a5cd(0x16e),_0x16a5cd(0x180)),'content':unotestConfigMjs(_0x16c24b['channel'])},{'rel':join(_0x16a5cd(_0xc4580a._0x1fc2de),_0x16a5cd(0x18d)),'content':suitePackageJson(readOwnVersion())},{'rel':join(_0x16a5cd(_0xc4580a._0x1fc2de),_0x16a5cd(0x184)),'content':templates[_0x16a5cd(_0xc4580a._0x241110)]},{'rel':join(_0x16a5cd(0x16e),'jsconfig.json'),'content':templates[_0x16a5cd(0x196)]},{'rel':join(_0x16a5cd(_0xc4580a._0x1fc2de),_0x16a5cd(0x170),_0x16a5cd(_0xc4580a._0x3acb10),'01-smoke.js'),'content':templates[_0x16a5cd(_0xc4580a._0x3acb10)][_0x16a5cd(0x189)]}];for(const {rel:_0x444ede,content:_0x58a9e0}of _0x3b429b){const _0x2528ae=join(_0x3d7db8,_0x444ede);if(existsSync(_0x2528ae)){_0x31c3b1[_0x16a5cd(_0xc4580a._0x525da5)](_0x444ede);continue;}await writeFile(_0x2528ae,_0x58a9e0),_0x1b5fbf[_0x16a5cd(_0xc4580a._0x525da5)](_0x444ede);}return{'projectRoot':_0x3d7db8,'created':_0x1b5fbf,'skipped':_0x31c3b1};}__name(scaffoldWorkspace,'scaffoldWorkspace');export{scaffoldWorkspace};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _0x4a0b3a=_0x518a;(function(_0x3692f5,_0x3f0fc3){var _0x1b08b9={_0xb8b14e:0x16b,_0x4ba8e7:0x177,_0x43b8c4:0x162,_0x5401a9:0x169,_0x55e638:0x16e,_0x992eec:0x16d},_0x26ed30=_0x518a,_0x24dca2=_0x3692f5();while(!![]){try{var _0x3fd4c3=-parseInt(_0x26ed30(_0x1b08b9._0xb8b14e))/0x1*(-parseInt(_0x26ed30(_0x1b08b9._0x4ba8e7))/0x2)+parseInt(_0x26ed30(0x164))/0x3*(-parseInt(_0x26ed30(0x165))/0x4)+parseInt(_0x26ed30(_0x1b08b9._0x43b8c4))/0x5*(parseInt(_0x26ed30(0x168))/0x6)+parseInt(_0x26ed30(0x167))/0x7*(-parseInt(_0x26ed30(_0x1b08b9._0x5401a9))/0x8)+parseInt(_0x26ed30(_0x1b08b9._0x55e638))/0x9+-parseInt(_0x26ed30(0x176))/0xa*(-parseInt(_0x26ed30(0x173))/0xb)+parseInt(_0x26ed30(_0x1b08b9._0x992eec))/0xc;if(_0x3fd4c3===_0x3f0fc3)break;else _0x24dca2['push'](_0x24dca2['shift']());}catch(_0x4946c0){_0x24dca2['push'](_0x24dca2['shift']());}}}(_0x27d7,0xbc6e1));function _0x518a(_0x2bc822,_0xfcef76){_0x2bc822=_0x2bc822-0x161;var _0x27d7d4=_0x27d7();var _0x518a32=_0x27d7d4[_0x2bc822];if(_0x518a['BkIVFe']===undefined){var _0xfcd3a4=function(_0x825b23){var _0x40af33='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x43620c='',_0x44e454='';for(var _0x397b14=0x0,_0x47309a,_0x386d26,_0xabd7b2=0x0;_0x386d26=_0x825b23['charAt'](_0xabd7b2++);~_0x386d26&&(_0x47309a=_0x397b14%0x4?_0x47309a*0x40+_0x386d26:_0x386d26,_0x397b14++%0x4)?_0x43620c+=String['fromCharCode'](0xff&_0x47309a>>(-0x2*_0x397b14&0x6)):0x0){_0x386d26=_0x40af33['indexOf'](_0x386d26);}for(var _0x36b9f2=0x0,_0xd5222c=_0x43620c['length'];_0x36b9f2<_0xd5222c;_0x36b9f2++){_0x44e454+='%'+('00'+_0x43620c['charCodeAt'](_0x36b9f2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x44e454);};_0x518a['FjxLNN']=_0xfcd3a4,_0x518a['xJSjWU']={},_0x518a['BkIVFe']=!![];}var _0x530928=_0x27d7d4[0x0],_0x228b39=_0x2bc822+_0x530928,_0x4acc83=_0x518a['xJSjWU'][_0x228b39];return!_0x4acc83?(_0x518a32=_0x518a['FjxLNN'](_0x518a32),_0x518a['xJSjWU'][_0x228b39]=_0x518a32):_0x518a32=_0x4acc83,_0x518a32;}import{fileURLToPath}from'url';function _0x27d7(){var _0x41b2f7=['C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','yxjNDG','otu2nZKXtgPgve1K','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','zMLUza','mtaWDfL0CMXh','mJK3nZHqsw9cww8','zxHPDa','ndG1C1rYyu5Z','zxHLy1bHDgG','odK3mtu5AwPrtwre','mtzRD01VDgu','Aw5OzxjPDa','nZa4mdu3zMnuqKHM','mtqWotr4rNjrB2m','odHoBgzVt3e','AM9PBG','mtLes1flEum','C2XPy2u','mtm3ndmZndHptvHMuxq','ndK5mZy0mwHksurbzq','D3jPDgu','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm'];_0x27d7=function(){return _0x41b2f7;};return _0x27d7();}import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x4a0b3a(0x170)),resolve(here,'../../../examples/fixtures/break-fix-app/serve.mjs')],serverEntry=candidates[_0x4a0b3a(0x175)](_0x43620c=>existsSync(_0x43620c));!serverEntry&&(process['stderr'][_0x4a0b3a(0x16f)](_0x4a0b3a(0x171)+candidates['map'](_0x44e454=>'\x20\x20'+_0x44e454+'\x0a')[_0x4a0b3a(0x16a)]('')+_0x4a0b3a(0x174)),process[_0x4a0b3a(0x161)](0x1));var child=spawn(process[_0x4a0b3a(0x163)],[serverEntry,...process[_0x4a0b3a(0x172)][_0x4a0b3a(0x16c)](0x2)],{'stdio':_0x4a0b3a(0x166)});child['on'](_0x4a0b3a(0x161),_0x397b14=>process[_0x4a0b3a(0x161)](_0x397b14??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 _0x505b98=_0x560e;(function(_0x5197b4,_0x287f8e){const _0x526daf={_0x204699:0x1c5,_0x28607a:0x226,_0x3cfab5:0x1c4,_0x1b224f:0x1ff,_0xec1e30:0x1f0,_0x1f4184:0x225},_0x5db07f=_0x560e,_0xc89e43=_0x5197b4();while(!![]){try{const _0xe13114=-parseInt(_0x5db07f(0x209))/0x1*(parseInt(_0x5db07f(0x222))/0x2)+parseInt(_0x5db07f(_0x526daf._0x204699))/0x3+parseInt(_0x5db07f(_0x526daf._0x28607a))/0x4+parseInt(_0x5db07f(0x1ca))/0x5+parseInt(_0x5db07f(_0x526daf._0x3cfab5))/0x6*(parseInt(_0x5db07f(0x1c8))/0x7)+parseInt(_0x5db07f(_0x526daf._0x1b224f))/0x8*(-parseInt(_0x5db07f(_0x526daf._0xec1e30))/0x9)+-parseInt(_0x5db07f(_0x526daf._0x1f4184))/0xa;if(_0xe13114===_0x287f8e)break;else _0xc89e43['push'](_0xc89e43['shift']());}catch(_0x148778){_0xc89e43['push'](_0xc89e43['shift']());}}}(_0x4eca,0x63ccf));var __defProp=Object[_0x505b98(0x1ec)],__name=(_0x527daf,_0x1dea47)=>__defProp(_0x527daf,_0x505b98(0x220),{'value':_0x1dea47,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';function _0x4eca(){const _0x1f3247=['ChjVyMvfzgDL','ChvZAa','y2HYB21LlwjLDge','l3bHy2THz2uUANnVBG','AxngAw5PDgu','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','D29YA2vYCW','ChjVAMvJDfjVB3q','l3vZCI9IAw4Vy2HYB21PDw0','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','ls1Kzwj1zW','Cgf0Aa','D2HPy2HpzG','C2nLBMfYAw8','r29Vz2XLienOCM9TzsbczxrH','AM9PBG','ChjVyMvtExn0zw1cCM93C2vY','y3DK','yxv0Ag9Y','zgvMAw5LuhjVCgvYDhK','y2HLy2TtExn0zw1cCM93C2vY','D2HPy2G','CMvZB2X2zq','mtK4AefvyKr5','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','vu5pvevtvf9iruferuq','C3vWCg9YDgvKs2LUzhm','yMLU','igzVDw5K','A2LUza','yNvPBgrbCMDZ','CNvUrw52AxjVBM1LBNrdAgvJA3m','BM9Kzq','yxbWu2vYDMvYqxjNCW','BgfIzwW','C2nOzwr1BgvZ','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','ls1ICMvHAW','mtuWmZi4Dg9ZA1P5','y2HYB21PDw0TyNjVD3nLCG','D2LUmZi','igrVzxmGBM90igv4Axn0','DMfSDwvZ','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','DxrMoa','uhjVz3jHBuzPBgvZ','yNjLywTWB2LUDhm','vgfYz2v0igrPCMvJDg9YEq','odbTshrdDxq','yNvPBgrfBNy','y2HYB21PDw0','Dw5KzwzPBMvK','B2jQzwn0','ls13B3jRzxjZpq','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','qhvUB3rLC3qVD2vI','y2HLy2ToB2rLvMvYC2LVBG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','uhjVz3jHBuzPBgvZkhG4nIK','CgLJA0jPBG','zxjYB3i','ztjL','C3bSAxq','yMfPBa','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','zgvIDwC','zgfYD2LU','y2HYB21L','v2vIuNvUBMvYqwrHChrLCG','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','BMfTzq','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','mtm2mZzeweT0DNe','y2HHBM5LBa','BwLJCM9ZB2z0lwvKz2u','mJa5nZGWzvLPqMvR','mJiXnZaYngHqr2v4qq','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','D2fYBMLUzW','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','ChjVyMvdAhjVBwvczxrH','zw52','y29SBgvJDgLVBG','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','C3rHCNrZv2L0Aa','u3LZDgvTigjYB3DZzxi','CgXHDgzVCM0','mtuZmdG0t0rhAuDP','ntKWmtq1ve15wwrd','BxnLzgDL','y2HLy2TxCML0ywjSzun3za','n1LkCejxrG','ls1IywLS','mZa2mdu5mef5seL4Dq','BgvUz3rO','DhjPBq','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','CMvZB2X2zujPBG','C3vMzML4','C2nOzwr1BgvZqxjNCW','tM9Kzs5QCYb2zxjZAw9U','zMLYC3rfEgLZDgLUz1bHDgG','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','CgfYC2u','r29Vz2XLienOCM9Tzq','yxv0Ag9YAw5N'];_0x4eca=function(){return _0x1f3247;};return _0x4eca();}import{dirname,join}from'path';function _0x560e(_0x342713,_0x1c0ea4){_0x342713=_0x342713-0x1be;const _0x4eca57=_0x4eca();let _0x560eb3=_0x4eca57[_0x342713];if(_0x560e['dSuKYr']===undefined){var _0x263fa5=function(_0x498bde){const _0x1814e9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x19e569='',_0x527daf='';for(let _0x1dea47=0x0,_0x57a5b5,_0x253e82,_0x222c50=0x0;_0x253e82=_0x498bde['charAt'](_0x222c50++);~_0x253e82&&(_0x57a5b5=_0x1dea47%0x4?_0x57a5b5*0x40+_0x253e82:_0x253e82,_0x1dea47++%0x4)?_0x19e569+=String['fromCharCode'](0xff&_0x57a5b5>>(-0x2*_0x1dea47&0x6)):0x0){_0x253e82=_0x1814e9['indexOf'](_0x253e82);}for(let _0x4f9f19=0x0,_0x3ebe02=_0x19e569['length'];_0x4f9f19<_0x3ebe02;_0x4f9f19++){_0x527daf+='%'+('00'+_0x19e569['charCodeAt'](_0x4f9f19)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x527daf);};_0x560e['lpOmVh']=_0x263fa5,_0x560e['sLotbw']={},_0x560e['dSuKYr']=!![];}const _0x11cc53=_0x4eca57[0x0],_0x5f44f6=_0x342713+_0x11cc53,_0x687d79=_0x560e['sLotbw'][_0x5f44f6];return!_0x687d79?(_0x560eb3=_0x560e['lpOmVh'](_0x560eb3),_0x560e['sLotbw'][_0x5f44f6]=_0x560eb3):_0x560eb3=_0x687d79,_0x560eb3;}import{existsSync as _0x19e569}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x349c91={_0x3cfb18:0x223},_0x418bc9=_0x505b98;for(const _0x57a5b5 of[probeChrome,probeEdge,probeChromeBeta]){const _0x253e82=_0x57a5b5();if(_0x253e82[_0x418bc9(_0x349c91._0x3cfb18)]!==null)return _0x253e82;}return{'channel':null};}__name(probeSystemBrowser,_0x505b98(0x1e9));function probeChrome(){const _0x2b161a=_0x505b98,_0x222c50=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x222c50)return{'channel':_0x2b161a(0x21d),'path':_0x222c50,'label':_0x2b161a(0x1d6)};return{'channel':null};}__name(probeChrome,'probeChrome');function probeEdge(){const _0x13838f=_0x505b98,_0x4f9f19=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x4f9f19)return{'channel':_0x13838f(0x1c6),'path':_0x4f9f19,'label':'Microsoft\x20Edge'};return{'channel':null};}__name(probeEdge,_0x505b98(0x1d8));function probeChromeBeta(){const _0x4462e0=_0x505b98,_0x3ebe02=firstExistingPath(CHROME_BETA_PATHS);if(_0x3ebe02)return{'channel':_0x4462e0(0x1da),'path':_0x3ebe02,'label':_0x4462e0(0x1e7)};return{'channel':null};}__name(probeChromeBeta,_0x505b98(0x22a));var CHROME_PATHS=((()=>{const _0x22e5f3={_0x2f4e38:0x1de,_0xc99c06:0x1be,_0x1ba42c:0x206,_0x154d98:0x21f,_0x15c91f:0x1be,_0x37253f:0x213,_0x1d4915:0x212,_0x4aec8a:0x1fd,_0x480f53:0x1e1},_0xb9162c=_0x505b98;switch(process[_0xb9162c(0x1c3)]){case _0xb9162c(0x21c):return[_0xb9162c(_0x22e5f3._0x2f4e38)];case _0xb9162c(0x201):return[process[_0xb9162c(_0x22e5f3._0xc99c06)][_0xb9162c(_0x22e5f3._0x1ba42c)]+_0xb9162c(_0x22e5f3._0x154d98),process[_0xb9162c(_0x22e5f3._0x15c91f)][_0xb9162c(_0x22e5f3._0x37253f)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process[_0xb9162c(_0x22e5f3._0xc99c06)]['LOCALAPPDATA']+_0xb9162c(0x21f)];default:return[_0xb9162c(_0x22e5f3._0x1d4915),'/usr/bin/google-chrome-stable',_0xb9162c(_0x22e5f3._0x4aec8a),_0xb9162c(_0x22e5f3._0x480f53),'/usr/bin/chromium-browser'];}})()),CHROME_BIN_NAMES=['google-chrome',_0x505b98(0x1e2),_0x505b98(0x20b),_0x505b98(0x200)],EDGE_PATHS=((()=>{const _0x1db525={_0x5071c2:0x21c,_0x37a570:0x201,_0x4c6d79:0x1dd},_0x584a6b=_0x505b98;switch(process['platform']){case _0x584a6b(_0x1db525._0x5071c2):return[_0x584a6b(0x21a)];case _0x584a6b(_0x1db525._0x37a570):return[process['env']['ProgramFiles']+_0x584a6b(0x1dd),process['env'][_0x584a6b(0x213)]+_0x584a6b(_0x1db525._0x4c6d79)];default:return[_0x584a6b(0x20f),_0x584a6b(0x219)];}})()),EDGE_BIN_NAMES=[_0x505b98(0x224),_0x505b98(0x1ce)],CHROME_BETA_PATHS=((()=>{const _0x13331f={_0x2f8509:0x1c3,_0xe6f889:0x21c,_0x47d45f:0x1d4,_0x409e47:0x206,_0x335e08:0x1cd,_0x124026:0x227},_0x38ac51=_0x505b98;switch(process[_0x38ac51(_0x13331f._0x2f8509)]){case _0x38ac51(_0x13331f._0xe6f889):return[_0x38ac51(_0x13331f._0x47d45f)];case'win32':return[process[_0x38ac51(0x1be)][_0x38ac51(_0x13331f._0x409e47)]+_0x38ac51(_0x13331f._0x335e08)];default:return[_0x38ac51(_0x13331f._0x124026)];}})());function firstExistingPath(_0x4d0516){const _0x56bb27={_0x137107:0x1c1},_0x2be4c4=_0x505b98;for(const _0x6da55f of _0x4d0516){if(!_0x6da55f||_0x6da55f[_0x2be4c4(_0x56bb27._0x137107)](_0x2be4c4(0x20c)))continue;if(existsSync(_0x6da55f))return _0x6da55f;}return null;}__name(firstExistingPath,_0x505b98(0x1d3));function whichOf(_0x605e12){const _0x316736={_0x204bdd:0x201,_0x14db75:0x1ee,_0x476201:0x205,_0x107caa:0x1cb},_0x52716a=_0x505b98;if(process[_0x52716a(0x1c3)]===_0x52716a(_0x316736._0x204bdd))return void 0x0;for(const _0x564297 of _0x605e12){try{const _0x3dd310=execFileSync(_0x52716a(_0x316736._0x14db75),[_0x564297],{'encoding':_0x52716a(_0x316736._0x476201)})[_0x52716a(0x1cc)]();if(_0x3dd310[_0x52716a(_0x316736._0x107caa)]>0x0&&existsSync(_0x3dd310))return _0x3dd310;}catch{}}return void 0x0;}__name(whichOf,_0x505b98(0x1e5));function runEnvironmentChecks(_0x57c704={}){const _0x35c9fc={_0x499c90:0x1ea,_0x107bcb:0x1ea},_0x454ad7=_0x505b98,_0x5c1eb3=_0x57c704[_0x454ad7(_0x35c9fc._0x499c90)]??process[_0x454ad7(_0x35c9fc._0x107bcb)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x5c1eb3)];}__name(runEnvironmentChecks,_0x505b98(0x1f8));function checkNodeVersion(){const _0xb32aeb={_0x310c89:0x1f9,_0x40db17:0x217,_0x12acc7:0x215,_0x35ae91:0x221,_0x258b35:0x1d2},_0x1b4405=_0x505b98,_0x3451c7=process['versions'][_0x1b4405(_0xb32aeb._0x310c89)],_0x339099=Number(_0x3451c7[_0x1b4405(_0xb32aeb._0x40db17)]('.')[0x0]);if(!Number[_0x1b4405(0x1dc)](_0x339099)||_0x339099<0x14)return{'name':_0x1b4405(0x1d2),'severity':_0x1b4405(_0xb32aeb._0x12acc7),'message':_0x1b4405(_0xb32aeb._0x35ae91)+_0x3451c7+')','detail':'Install\x20Node\x2020+\x20via\x20nvm\x20/\x20fnm\x20/\x20volta\x20and\x20re-run.'};return{'name':_0x1b4405(_0xb32aeb._0x258b35),'severity':'ok','message':_0x3451c7};}__name(checkNodeVersion,_0x505b98(0x211));function checkSystemBrowser(){const _0x33600d={_0x548400:0x223,_0x3a1dce:0x1f5},_0x51d3b9=_0x505b98,_0x4d1ece=probeSystemBrowser();if(_0x4d1ece[_0x51d3b9(_0x33600d._0x548400)]!==null)return{'name':_0x51d3b9(0x1c2),'severity':'ok','message':_0x4d1ece[_0x51d3b9(0x1fb)]+_0x51d3b9(_0x33600d._0x3a1dce),'detail':_0x4d1ece[_0x51d3b9(0x1e4)]};return{'name':_0x51d3b9(0x1c2),'severity':_0x51d3b9(0x228),'message':_0x51d3b9(0x1c0),'detail':_0x51d3b9(0x1f1)};}__name(checkSystemBrowser,_0x505b98(0x1ed));function checkWritableCwd(_0xfbc4cc){const _0x3ab4a4={_0x5b4cb6:0x204},_0x2d5744=_0x505b98;if(!_0x19e569(_0xfbc4cc))return{'name':_0x2d5744(0x208),'severity':_0x2d5744(0x215),'message':'target\x20'+_0xfbc4cc+_0x2d5744(0x202),'detail':_0x2d5744(_0x3ab4a4._0x5b4cb6)};return{'name':'Target\x20directory','severity':'ok','message':_0xfbc4cc};}__name(checkWritableCwd,_0x505b98(0x1c7));var PACKAGE_NAME=_0x505b98(0x210),WebRunnerAdapter=class{static{__name(this,_0x505b98(0x21e));}[_0x505b98(0x220)]=PACKAGE_NAME;[_0x505b98(0x1d0)]='';[_0x505b98(0x21b)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x505b98(0x1f3)]=[_0x505b98(0x1e6),_0x505b98(0x1bf),'authoring'];[_0x505b98(0x1cf)](){const _0x12d2ed={_0x238dca:0x205},_0x4af0cf=_0x505b98,_0x398dbf=createRequire(import.meta.url),_0x3e94d3=_0x398dbf[_0x4af0cf(0x1ef)](PACKAGE_NAME+_0x4af0cf(0x1db)),_0x52f535=JSON[_0x4af0cf(0x1d5)](readFileSync(_0x3e94d3,_0x4af0cf(_0x12d2ed._0x238dca))),_0xdec5a1=pickBin(_0x52f535);if(!_0xdec5a1)throw new Error(PACKAGE_NAME+_0x4af0cf(0x229));return join(dirname(_0x3e94d3),_0xdec5a1);}[_0x505b98(0x1f7)](_0x867cd){const _0x318b82={_0x5b0eb9:0x21b,_0x577896:0x1d9,_0x38e880:0x1d9,_0x429343:0x207,_0x546dee:0x1e8,_0x33492b:0x1bf,_0x368eff:0x1df,_0x48ad0a:0x20e,_0x29fc56:0x218,_0x1ea4e1:0x1c9,_0x43be9f:0x1eb,_0x599756:0x1e6,_0x2ce03c:0x220},_0x442387=_0x505b98;if(_0x867cd[_0x442387(0x1f6)]===_0x442387(0x1e6)){const _0x3af973=[_0x442387(0x216),_0x867cd[_0x442387(0x1e6)]];if(_0x867cd[_0x442387(_0x318b82._0x5b0eb9)])_0x3af973[_0x442387(_0x318b82._0x577896)](_0x442387(0x1e3));return _0x867cd[_0x442387(0x207)]&&_0x867cd['breakpoints'][_0x442387(0x1cb)]>0x0&&_0x3af973[_0x442387(_0x318b82._0x38e880)](_0x442387(0x1fe),_0x867cd[_0x442387(_0x318b82._0x429343)][_0x442387(_0x318b82._0x546dee)](',')),_0x3af973;}if(_0x867cd[_0x442387(0x1f6)]===_0x442387(0x1bf)){const _0x15d162=['collection',_0x867cd[_0x442387(_0x318b82._0x33492b)]];_0x867cd[_0x442387(_0x318b82._0x368eff)]!==void 0x0&&_0x867cd['workers']>0x1&&_0x15d162['push'](_0x442387(_0x318b82._0x48ad0a)+_0x867cd[_0x442387(_0x318b82._0x368eff)]);if(_0x867cd[_0x442387(_0x318b82._0x29fc56)])_0x15d162[_0x442387(_0x318b82._0x577896)](_0x442387(_0x318b82._0x1ea4e1));return _0x15d162;}if(_0x867cd[_0x442387(0x1f6)]===_0x442387(0x1d7))return[_0x442387(_0x318b82._0x43be9f),_0x867cd[_0x442387(_0x318b82._0x599756)]];const _0x4f7ae4=_0x867cd;throw new UnsupportedRunKindError(_0x4f7ae4['kind'],this[_0x442387(_0x318b82._0x2ce03c)]);}[_0x505b98(0x20a)](_0x31b9c0){const _0x4b9b70={_0x5669b0:0x1f2},_0x5a9d26=_0x505b98,_0x1b72e6={};if(_0x31b9c0['headed'])_0x1b72e6[_0x5a9d26(_0x4b9b70._0x5669b0)]='1';return _0x1b72e6;}[_0x505b98(0x1fa)](){return['app-server'];}[_0x505b98(0x1d1)](){const _0x51430e=_0x505b98;return[_0x51430e(0x1fc),'--json'];}async['doctor'](_0x27ade4){const _0x1d1412={_0x4e4304:0x1e0},_0x586b02=_0x505b98;return runEnvironmentChecks({'cwd':_0x27ade4[_0x586b02(_0x1d1412._0x4e4304)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x1e3878){const _0x491e65={_0x3eaa2d:0x1f4,_0x48b899:0x20d,_0x142ca3:0x1f4,_0x2d1001:0x1f4},_0x4c82c3=_0x505b98;if(typeof _0x1e3878[_0x4c82c3(0x1f4)]==='string')return _0x1e3878[_0x4c82c3(_0x491e65._0x3eaa2d)];if(_0x1e3878[_0x4c82c3(0x1f4)]&&typeof _0x1e3878[_0x4c82c3(0x1f4)]===_0x4c82c3(_0x491e65._0x48b899))return _0x1e3878[_0x4c82c3(_0x491e65._0x142ca3)]['unotest-web']??Object[_0x4c82c3(0x203)](_0x1e3878[_0x4c82c3(_0x491e65._0x2d1001)])[0x0]??null;return null;}__name(pickBin,_0x505b98(0x214));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 **
|
|
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
|
-
|
|
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: [...
|
|
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
|
|
64
|
+
### Core lifecycle and observers (9)
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
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`, `
|
|
71
|
-
`
|
|
72
|
-
`
|
|
73
|
-
|
|
74
|
-
`
|
|
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
|
-
###
|
|
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.
|
|
3
|
+
"version": "0.33.0",
|
|
4
4
|
"description": "AI-native E2E testing for web applications. MCP server (run_test / step / resume / inspect_runtime / agent_fix) + CLI runner + JavaScript DSL scenarios on a sandboxed AST engine + semantic DOM snapshots.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -79,22 +79,22 @@
|
|
|
79
79
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
80
80
|
"chokidar": "^4.0.3",
|
|
81
81
|
"dotenv": "^16.4.5",
|
|
82
|
-
"playwright": "
|
|
82
|
+
"playwright": "1.62.1",
|
|
83
83
|
"tsx": "^4.19.2",
|
|
84
84
|
"yaml": "^2.6.0",
|
|
85
85
|
"zod": "^3.23.8",
|
|
86
|
-
"@unotest/core": "^0.
|
|
87
|
-
"@unotest/
|
|
88
|
-
"@unotest/
|
|
89
|
-
"@unotest/
|
|
90
|
-
"@unotest/
|
|
86
|
+
"@unotest/core": "^0.33.0",
|
|
87
|
+
"@unotest/protocol": "^0.33.0",
|
|
88
|
+
"@unotest/dsl": "^0.33.0",
|
|
89
|
+
"@unotest/viewer": "^0.33.0",
|
|
90
|
+
"@unotest/grounder-client": "^0.33.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/
|
|
98
|
-
"@unotest/
|
|
97
|
+
"@unotest/grounder": "^0.33.0",
|
|
98
|
+
"@unotest/judge": "^0.33.0"
|
|
99
99
|
}
|
|
100
100
|
}
|