@unotest/web 0.10.0 → 0.12.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 _0x359628=_0x1987;(function(_0x583a0a,_0xa33322){const _0x5614c7={_0x5e3e28:0x1eb,_0x3a7bab:0x202,_0x2f6f0c:0x1ee,_0xd32779:0x1f3},_0x87851d=_0x1987,_0x4eef28=_0x583a0a();while(!![]){try{const _0x485172=-parseInt(_0x87851d(0x1fd))/0x1*(-parseInt(_0x87851d(_0x5614c7._0x5e3e28))/0x2)+-parseInt(_0x87851d(0x1e7))/0x3+-parseInt(_0x87851d(_0x5614c7._0x3a7bab))/0x4*(parseInt(_0x87851d(0x1fa))/0x5)+parseInt(_0x87851d(_0x5614c7._0x2f6f0c))/0x6*(parseInt(_0x87851d(0x1ff))/0x7)+parseInt(_0x87851d(0x1f8))/0x8*(-parseInt(_0x87851d(_0x5614c7._0xd32779))/0x9)+-parseInt(_0x87851d(0x201))/0xa+-parseInt(_0x87851d(0x1f4))/0xb*(-parseInt(_0x87851d(0x1f2))/0xc);if(_0x485172===_0xa33322)break;else _0x4eef28['push'](_0x4eef28['shift']());}catch(_0x54ebd9){_0x4eef28['push'](_0x4eef28['shift']());}}}(_0x1dda,0x4b974));var __defProp=Object['defineProperty'],__name=(_0x3cb329,_0x176ad8)=>__defProp(_0x3cb329,_0x359628(0x1f5),{'value':_0x176ad8,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'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':_0x359628(0x1f0),'claudeMdBody':_0x359628(0x204),'examples':{'01-smoke.js':'//\x20Example\x2001\x20—\x20smoke:\x20navigate\x20+\x20click\x20+\x20URL\x20assertion.\x0a//\x0a//\x20The\x20minimal\x20three-step\x20pattern.\x20Hits\x20playground.unotest.com\x20so\x20no\x20project\x0a//\x20setup\x20is\x20needed.\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/01-smoke\x0a\x0afunction\x20test_smoke_playground()\x20{\x0a\x20\x20step(\x22Open\x20the\x20Big\x20Table\x20scenario\x20from\x20the\x20playground\x20index\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/\x27);\x0a\x20\x20\x20\x20click(getByRole(\x27link\x27,\x20{name:\x20\x27Big\x20Table\x27,\x20exact:\x20true}));\x0a\x20\x20\x20\x20assertUrl(\x27/scenarios/big-table\x27);\x0a\x20\x20});\x0a}\x0a','02-form-fill.js':_0x359628(0x200)},'secretsExample':'#\x20unotest-web\x20—\x20secret\x20scenario\x20variables.\x20Created\x20by\x20`init`,\x20gitignored.\x0a#\x0a#\x20Same\x20KEY=VALUE\x20format\x20as\x20unotest/.env,\x20but\x20values\x20here\x20are\x20treated\x20as\x0a#\x20SECRET:\x20they\x20are\x20masked\x20(shown\x20as\x20`‹secret:KEY›`)\x20anywhere\x20the\x20runner\x20or\x0a#\x20MCP\x20debug\x20log\x20would\x20otherwise\x20write\x20them\x20—\x20fill()\x20values,\x20URLs,\x20evaluate\x0a#\x20strings.\x20Reference\x20them\x20in\x20a\x20scenario\x20by\x20their\x20bare\x20UPPER_SNAKE\x20name,\x20the\x0a#\x20same\x20way\x20as\x20.env\x20variables:\x0a#\x0a#\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20PASSWORD);\x0a#\x0a#\x20Secrets\x20are\x20NOT\x20exported\x20to\x20subprocesses\x20(shell())\x20—\x20they\x20stay\x20in\x20the\x0a#\x20variable\x20store.\x20Put\x20non-secret\x20values\x20(URLs,\x20emails,\x20ids)\x20in\x20unotest/.env.\x0a#\x0a#\x20FLEET_EXAMPLE\x0aLOGIN=\x0aPASSWORD=\x0aTOKEN=\x0a','envExample':_0x359628(0x1fe)};function unotestConfigMjs(_0x3fe31c){const _0x58972a={_0xf5ad89:0x1ef,_0x5ae6de:0x1e9},_0x49605b=_0x359628,_0x25fb1c=_0x3fe31c===void 0x0?_0x49605b(_0x58972a._0xf5ad89):'\x20\x20channel:\x20'+JSON[_0x49605b(0x1f1)](_0x3fe31c)+',';return'//\x20@unotest/web\x20project\x20config.\x20All\x20fields\x20are\x20optional\x20—\x20defaults\x20apply\x0a//\x20when\x20omitted.\x0a//\x0a//\x20Saved\x20as\x20.mjs\x20so\x20the\x20runtime\x20loads\x20it\x20as\x20ESM\x20regardless\x20of\x20the\x20project\x27s\x0a//\x20package.json\x20\x22type\x22\x20field.\x20For\x20IDE\x20autocomplete,\x20type-import\x20the\x20schema:\x0a//\x0a//\x20\x20\x20/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0a//\x20\x20\x20export\x20default\x20{\x20baseUrl:\x20\x27https://your-app.test\x27\x20};\x0a\x0a/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0aexport\x20default\x20{\x0a\x20\x20//\x20baseUrl:\x20\x27https://your-app.test\x27,\x0a\x20\x20//\x20browsers:\x20[\x27chromium\x27,\x20\x27firefox\x27,\x20\x27webkit\x27],\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20viewport:\x20{\x20width:\x201280,\x20height:\x20720\x20},\x0a\x20\x20//\x20retry:\x20{\x20count:\x201,\x20on:\x20[\x27transient\x27]\x20},\x20\x20\x20\x20\x20\x20\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20storageState:\x20\x27.unotest/cache/auth.json\x27,\x20\x20\x20\x20\x20\x20//\x20see\x20helpers\x0a'+_0x25fb1c+_0x49605b(_0x58972a._0x5ae6de);}function _0x1987(_0xc68abd,_0x4cf71c){_0xc68abd=_0xc68abd-0x1e7;const _0x1dda49=_0x1dda();let _0x198715=_0x1dda49[_0xc68abd];if(_0x1987['SCphKi']===undefined){var _0x1af656=function(_0x27b556){const _0x191e5d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3cb329='',_0x176ad8='';for(let _0x3fe31c=0x0,_0x25fb1c,_0x12cfc2,_0xe6a663=0x0;_0x12cfc2=_0x27b556['charAt'](_0xe6a663++);~_0x12cfc2&&(_0x25fb1c=_0x3fe31c%0x4?_0x25fb1c*0x40+_0x12cfc2:_0x12cfc2,_0x3fe31c++%0x4)?_0x3cb329+=String['fromCharCode'](0xff&_0x25fb1c>>(-0x2*_0x3fe31c&0x6)):0x0){_0x12cfc2=_0x191e5d['indexOf'](_0x12cfc2);}for(let _0x2901ee=0x0,_0x44d515=_0x3cb329['length'];_0x2901ee<_0x44d515;_0x2901ee++){_0x176ad8+='%'+('00'+_0x3cb329['charCodeAt'](_0x2901ee)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x176ad8);};_0x1987['XExIzL']=_0x1af656,_0x1987['Awgbul']={},_0x1987['SCphKi']=!![];}const _0xb6ba43=_0x1dda49[0x0],_0x56a8bc=_0xc68abd+_0xb6ba43,_0x161460=_0x1987['Awgbul'][_0x56a8bc];return!_0x161460?(_0x198715=_0x1987['XExIzL'](_0x198715),_0x1987['Awgbul'][_0x56a8bc]=_0x198715):_0x198715=_0x161460,_0x198715;}__name(unotestConfigMjs,_0x359628(0x203));async function scaffoldWorkspace(_0x12cfc2,_0xe6a663={}){const _0x188de6={_0x381f5a:0x1fb,_0x57068d:0x1fb,_0x1befa6:0x1f9,_0x11c1a3:0x1fb,_0x282aa2:0x1ed,_0x23eeec:0x1fc},_0x4c24d5=_0x359628,_0x2901ee=[],_0x44d515=[];await mkdir(join(_0x12cfc2,_0x4c24d5(0x1f9),_0x4c24d5(_0x188de6._0x381f5a),_0x4c24d5(0x1f6)),{'recursive':!![]}),await mkdir(join(_0x12cfc2,_0x4c24d5(0x1f9),_0x4c24d5(_0x188de6._0x57068d),'_helpers'),{'recursive':!![]});const _0x5e19bf=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0xe6a663[_0x4c24d5(0x1e8)])},{'rel':join(_0x4c24d5(_0x188de6._0x1befa6),_0x4c24d5(0x1ea)),'content':templates[_0x4c24d5(0x1ec)]},{'rel':join('unotest',_0x4c24d5(_0x188de6._0x11c1a3),_0x4c24d5(0x1f6),'01-smoke.js'),'content':templates['examples'][_0x4c24d5(_0x188de6._0x282aa2)]}];for(const {rel:_0x2f05f3,content:_0x2d8864}of _0x5e19bf){const _0x5e6217=join(_0x12cfc2,_0x2f05f3);if(existsSync(_0x5e6217)){_0x44d515[_0x4c24d5(_0x188de6._0x23eeec)](_0x2f05f3);continue;}await writeFile(_0x5e6217,_0x2d8864),_0x2901ee[_0x4c24d5(_0x188de6._0x23eeec)](_0x2f05f3);}return{'projectRoot':_0x12cfc2,'created':_0x2901ee,'skipped':_0x44d515};}__name(scaffoldWorkspace,_0x359628(0x1f7));export{scaffoldWorkspace};function _0x1dda(){const _0x4c00c8=['Dw5VDgvZDa','mteWuwH0Cuv6','ztjL','ChvZAa','mJe1ouXNCfzvvG','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','mtK5nZG3wvnHtLjN','lY8GrxHHBxbSzsaWmIdIGjqGzMLSBcbHBIbPBNb1DcaRigfZC2vYDcb0AguGyxbWihjLywn0zwqUcI8VcI8ViefNywLUC3qGCgXHEwDYB3vUzc51BM90zxn0lMnVBs9Zy2vUyxjPB3mVyMLNlxrHyMXLlIbezw1VBNn0CMf0zxmGz2v0qNLsB2XLcI8VigzVCIbHigXHyMvSBgvKigLUChv0lcb0ExbLzcbPBNb1Dcb2AweGzMLSBcGPlcbHBMqGysbSB2nHDg9Yig1LDgHVzc1JAgfPBGOVlYaOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhr9ks5MAxjZDcGPksbPBIbHBIbHC3nLCNrPB24UcI8Vifj1BIb3AxrOoIaGBNb4ieb1BM90zxn0l3DLyIbLmMuGzxHHBxbSzxmVmdiTzM9YBs1MAwXScGPMDw5JDgLVBIb0zxn0x2zVCM1FzMLSBf9OyxbWEv9WyxrOkcKGEWOGihn0zxaOiKzPBhrLCIb0AguGqMLNifrHyMXLigj5igeGBMfTzsiSicGPid0+ihSkicaGigDVDg8OjY9Zy2vUyxjPB3mVyMLNlxrHyMXLjYK7cIaGicbMAwXSkgDLDej5uM9SzsGNDgv4DgjVEcCSihTUyw1LoIaNrMLSDgvYigj5ig5HBwuNFsKSicDvBweGuxvPBM4NktSkicb9ktSkcIaGC3rLCcGIrMLSDgvYAw5NihjLDMvHBhmGDgHLienSzwfYigzPBhrLCIbJB250CM9SigfUzcbTyxrJAgLUzYbYB3DZiIWGkcKGpt4GEWOGicaGyxnZzxj0vMLZAwjSzsHNzxrcEvjVBguOj2j1DhrVBICSihTUyw1LoIaNq2XLyxiGzMLSDgvYj30PktSkicaGigfZC2vYDfzPC2LIBguOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhq6icDvBweGuxvPBM4NFsKUzMLYC3qOksK7cIaGFsK7cN0k','ntyZnJG0mhfwwhHIDG','mteXnte2yNvyvLbP','Dw5VDgvZDenVBMzPz01QCW','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','mJqZnJuXz1LPzMHz','y2HHBM5LBa','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','lMvUDG','mJKYzKHtDK1g','zw52rxHHBxbSzq','mdeTC21VA2uUANm','mti2C05Vzg1P','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','C3rYAw5NAwz5','mZzKwwHADuW','mZy3mtG4m3fbDvbfvG','mZG5mtmYn2jTuNjlrW','BMfTzq','zxHHBxbSzxm','C2nHzMzVBgrxB3jRC3bHy2u','oeT6A3zptG'];_0x1dda=function(){return _0x4c00c8;};return _0x1dda();}
1
+ const _0x192e23=_0x1a6c;function _0x1c08(){const _0x54167b=['ChvZAa','lMvUDG','nLbPBwHOAq','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','y2HHBM5LBa','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','ndCZmhr1wLHpra','Dw5VDgvZDenVBMzPz01QCW','lY8Gtw92zsaRihjLBMfTzsb0AgLZigzPBguGDg8GpgzLyxr1CMu+lZX5B3vYx25HBwu+lMPZicHLlMCUcI8Vigf1DgGVBg9NAw4UANmPigfUzcb0AguGzNvUy3rPB24GyMvSB3CGDg8GDgvZDf88Ew91CL9Uyw1LpIGPlIbty2vUyxjPB3mGBgL2zqOVlYbPBIbMzwf0DxjLihn1yMzVBgrLCNmSie5pvcb0AguGztjLihjVB3qG4OcuihrOzsbSAw50zxiGkgXPBNq6C2nLBMfYAw8TAw4TCM9VDcKklY8GCMvQzwn0CYbHihrLC3qGzMLSzsbWBgfJzwqGzgLYzwn0BhKGAw4GDw5VDgvZDc9LmMuVlIbuAguGBg9HzgvYigrLCML2zxmGDgHLcI8VigvUDhj5ig5HBwuGzNjVBsb0AguGzMLSzsbIyxnLBMfTzsdIGjqGA2vIywiTy2fZzsbKyxnOzxmGyMvJB21LihvUzgvYC2nVCMvZlGOklY8GrxzLCNKGzxHLy3v0ywjSzsbZDgvWig11C3qGC2L0igLUC2LKzsbHihn0zxaOiI4UlIiSicGPid0+ihSG4OcMih0PigjSB2nRlIbuAguklY8GDgL0BguGAxmGysbWBgfPBI1fBMDSAxnOigrLC2nYAxb0Aw9Uig9MihrOzsbNCM91CdSGDgHLihn0zxbZigLUC2LKzsbHCMuklY8GDgHLigLTCgXLBwvUDgf0Aw9UlIbhCM91CcbIEsbPBNrLBNqGkfnLDhvWic8Grw50zxiGlYbby3qGlYbbC3nLCNqGB3iklY8GD2HHDgv2zxiGCMvHzhmGD2vSBcKG4Ocuig9UzsbIBg9JAYbWzxiGBg9NAwnHBcbJAhvUAY4kcMz1BMn0Aw9UihrLC3rFEw91CL9Uyw1Lx2HLCMuOksb7cIaGC3rLCcGIu2vLzcbHigTUB3DUihvZzxiGDMLHiercic8GqvbjigzPEhr1CMvZigzYB20Gx2HLBhbLCNmViIWGkcKGpt4GEWOGicaGlY8GicaGD2LWzv9LmMvFDxnLCNmOktSkicaGic8VicaGihvZzxjFAwqGpsbZzwvKx3vZzxiOj2fSAwnLqgv4yw1WBguUy29TjYWGj3nLy3jLDcCPoWOGih0PoWOkicbZDgvWkcjtAwDUigLUigfZihrOzsbZzwvKzwqGDxnLCIiSicGPid0+ihSkicaGigDVDg8Oj2H0DhbZoI8VEw91CI1HChaUDgvZDc9SB2DPBICPoWOGicaGlY8GicaGzMLSBcHNzxrcEuXHyMvSkcDfBwfPBcCPlcaNywXPy2vazxHHBxbSzs5JB20NktSkicaGic8VicaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGj3nLy3jLDcCPoWOGicaGlY8GicaGy2XPy2SOz2v0qNLsB2XLkcDIDxr0B24Nlcb7BMfTztOGj0XVzYbPBID9ksK7cIaGFsK7cGOGihn0zxaOiKfZC2vYDcb0AguGzgfZAgjVyxjKihnOB3DZihrOzsbZAwDUzwqTAw4GDxnLCIiSicGPid0+ihSkicaGic8VicaGigfZC2vYDfvYBcGNl2rHC2HIB2fYzcCPoWOGicaGlY8GicaGyxnZzxj0vgv4DcHNzxrcEvjVBguOj2HLywrPBMCNksWGj1DLBgnVBwuSiefSAwnLjYK7cIaGicaVlYaGicbJB3vUDca9igrIuxvLCNKOj1nftevdvcbJB3vUDcGQksbguK9nihvZzxjZifDirvjfigfJDgL2zsa9ihrYDwuNktSkicaGic8VicaGigfZC2vYDfrYDwuOy291BNqGpIaWlcaNzxHWzwn0zwqGyxqGBgvHC3qGB25LigfJDgL2zsb1C2vYjYK7cIaGFsK7cN0k','lY8GrxHHBxbSzsaWmIdIGjqGzMLSBcbHBIbPBNb1DcaRigfZC2vYDcb0AguGyxbWihjLywn0zwqUcI8VcI8ViefNywLUC3qGCgXHEwDYB3vUzc51BM90zxn0lMnVBs9Zy2vUyxjPB3mVyMLNlxrHyMXLlIbezw1VBNn0CMf0zxmGz2v0qNLsB2XLcI8VigzVCIbHigXHyMvSBgvKigLUChv0lcb0ExbLzcbPBNb1Dcb2AweGzMLSBcGPlcbHBMqGysbSB2nHDg9Yig1LDgHVzc1JAgfPBGOVlYaOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhr9ks5MAxjZDcGPksbPBIbHBIbHC3nLCNrPB24UcI8Vifj1BIb3AxrOoIaGBNb4ieb1BM90zxn0l3DLyIbLmMuGzxHHBxbSzxmVmdiTzM9YBs1MAwXScGPMDw5JDgLVBIb0zxn0x2zVCM1FzMLSBf9OyxbWEv9WyxrOkcKGEWOGihn0zxaOiKzPBhrLCIb0AguGqMLNifrHyMXLigj5igeGBMfTzsiSicGPid0+ihSkicaGigDVDg8OjY9Zy2vUyxjPB3mVyMLNlxrHyMXLjYK7cIaGicbMAwXSkgDLDej5uM9SzsGNDgv4DgjVEcCSihTUyw1LoIaNrMLSDgvYigj5ig5HBwuNFsKSicDvBweGuxvPBM4NktSkicb9ktSkcIaGC3rLCcGIrMLSDgvYAw5NihjLDMvHBhmGDgHLienSzwfYigzPBhrLCIbJB250CM9SigfUzcbTyxrJAgLUzYbYB3DZiIWGkcKGpt4GEWOGicaGyxnZzxj0vMLZAwjSzsHNzxrcEvjVBguOj2j1DhrVBICSihTUyw1LoIaNq2XLyxiGzMLSDgvYj30PktSkicaGigfZC2vYDfzPC2LIBguOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhq6icDvBweGuxvPBM4NFsKUzMLYC3qOksK7cIaGFsK7cN0k','mtvZrLDeuuy','zxHHBxbSzxm','lY8GqhvUB3rLC3qVD2vIihbYB2PLy3qGy29UzMLNlIbbBgWGzMLLBgrZigfYzsbVChrPB25HBcdIGjqGzgvMyxvSDhmGyxbWBhKklY8GD2HLBIbVBwL0DgvKlGOVlWOVlYbtyxzLzcbHCYaUBwPZihnVihrOzsbYDw50Aw1LigXVywrZigL0igfZievttsbYzwDHCMrSzxnZig9MihrOzsbWCM9Qzwn0j3mklY8GCgfJA2fNzs5QC29Uicj0ExbLiIbMAwvSzc4GrM9YieLersbHDxrVy29TCgXLDguSihr5CguTAw1WB3j0ihrOzsbZy2HLBwe6cI8VcI8VicaGlYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcI8VicaGzxHWB3j0igrLzMf1BhqGEYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYb9oWOklYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcMv4Cg9YDcbKzwzHDwX0ihSkicaVlYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYWkicaVlYbICM93C2vYCZOGwYDJAhjVBwL1BsCSicDMAxjLzM94jYWGj3DLyMTPDcDDlcaGlY8Gq0KGB3zLCNjPzgukicaVlYb2Awv3Cg9YDdOGEYb3Awr0AdOGmti4mcWGAgvPz2H0oIa3mJaGFsWkicaVlYbYzxrYEtOGEYbJB3vUDdOGmsWGB246ifSNDhjHBNnPzw50j10GFsWGicaGicaGic8Vienjig92zxjYAwrLcIaGlY8GC3rVCMfNzvn0yxrLoIaNlNvUB3rLC3qVy2fJAguVyxv0Ac5QC29UjYWGicaGicaVlYbZzwuGAgvSCgvYCWO','odi5nZG1ve94suvs','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','mte3mdHXvMnszxm','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','mZe4zLfKsfHH','mZi0oxjur3PJDG','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','ztjL','mJC2nZCYmfD3r1bbDW','mdeTC21VA2uUANm','mJuXmZyZn3f2CMLTvq','mJGXmhbyuhrrvG','Dw5VDgvZDa','x2HLBhbLCNm','zw52rxHHBxbSzq','icbJAgfUBMvSoIa','mte0otKXmtr3vKXYsKK','zgvMAw5LuhjVCgvYDhK','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO'];_0x1c08=function(){return _0x54167b;};return _0x1c08();}(function(_0x198967,_0x2c9038){const _0x1a1d09={_0x518861:0x141,_0xcb8264:0x13f,_0x333c4d:0x15d,_0x3b9872:0x152,_0x9a1f54:0x145,_0xe7b6b2:0x14d},_0x52033e=_0x1a6c,_0x531273=_0x198967();while(!![]){try{const _0x2cd4c7=parseInt(_0x52033e(0x148))/0x1*(-parseInt(_0x52033e(_0x1a1d09._0x518861))/0x2)+parseInt(_0x52033e(0x15a))/0x3*(parseInt(_0x52033e(_0x1a1d09._0xcb8264))/0x4)+-parseInt(_0x52033e(_0x1a1d09._0x333c4d))/0x5*(parseInt(_0x52033e(_0x1a1d09._0x3b9872))/0x6)+-parseInt(_0x52033e(0x147))/0x7+parseInt(_0x52033e(_0x1a1d09._0x9a1f54))/0x8+parseInt(_0x52033e(0x142))/0x9*(-parseInt(_0x52033e(0x156))/0xa)+parseInt(_0x52033e(_0x1a1d09._0xe7b6b2))/0xb;if(_0x2cd4c7===_0x2c9038)break;else _0x531273['push'](_0x531273['shift']());}catch(_0x1327ac){_0x531273['push'](_0x531273['shift']());}}}(_0x1c08,0x404d7));var __defProp=Object[_0x192e23(0x14e)],__name=(_0x35d767,_0x1f1906)=>__defProp(_0x35d767,'name',{'value':_0x1f1906,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';function _0x1a6c(_0x2331f4,_0x1329df){_0x2331f4=_0x2331f4-0x13e;const _0x1c08a6=_0x1c08();let _0x1a6c49=_0x1c08a6[_0x2331f4];if(_0x1a6c['HFDZvo']===undefined){var _0x373836=function(_0xb8f0bc){const _0xeb77a1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x35d767='',_0x1f1906='';for(let _0x1049f4=0x0,_0x16be92,_0x137f54,_0x521649=0x0;_0x137f54=_0xb8f0bc['charAt'](_0x521649++);~_0x137f54&&(_0x16be92=_0x1049f4%0x4?_0x16be92*0x40+_0x137f54:_0x137f54,_0x1049f4++%0x4)?_0x35d767+=String['fromCharCode'](0xff&_0x16be92>>(-0x2*_0x1049f4&0x6)):0x0){_0x137f54=_0xeb77a1['indexOf'](_0x137f54);}for(let _0x423465=0x0,_0x1fda55=_0x35d767['length'];_0x423465<_0x1fda55;_0x423465++){_0x1f1906+='%'+('00'+_0x35d767['charCodeAt'](_0x423465)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f1906);};_0x1a6c['mpPQqH']=_0x373836,_0x1a6c['mBietk']={},_0x1a6c['HFDZvo']=!![];}const _0x549a2b=_0x1c08a6[0x0],_0x543e2c=_0x2331f4+_0x549a2b,_0x39b78b=_0x1a6c['mBietk'][_0x543e2c];return!_0x39b78b?(_0x1a6c49=_0x1a6c['mpPQqH'](_0x1a6c49),_0x1a6c['mBietk'][_0x543e2c]=_0x1a6c49):_0x1a6c49=_0x39b78b,_0x1a6c49;}import{join}from'path';var templates={'scenarioTemplate':_0x192e23(0x158),'agentsMd':_0x192e23(0x13e),'claudeMdBody':_0x192e23(0x153),'examples':{'01-smoke.js':_0x192e23(0x14f),'02-form-fill.js':_0x192e23(0x159)},'secretsExample':'#\x20unotest-web\x20—\x20secret\x20scenario\x20variables.\x20Created\x20by\x20`init`,\x20gitignored.\x0a#\x0a#\x20Same\x20KEY=VALUE\x20format\x20as\x20unotest/.env,\x20but\x20values\x20here\x20are\x20treated\x20as\x0a#\x20SECRET:\x20they\x20are\x20masked\x20(shown\x20as\x20`‹secret:KEY›`)\x20anywhere\x20the\x20runner\x20or\x0a#\x20MCP\x20debug\x20log\x20would\x20otherwise\x20write\x20them\x20—\x20fill()\x20values,\x20URLs,\x20evaluate\x0a#\x20strings.\x20Reference\x20them\x20in\x20a\x20scenario\x20by\x20their\x20bare\x20UPPER_SNAKE\x20name,\x20the\x0a#\x20same\x20way\x20as\x20.env\x20variables:\x0a#\x0a#\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20PASSWORD);\x0a#\x0a#\x20Secrets\x20are\x20NOT\x20exported\x20to\x20subprocesses\x20(shell())\x20—\x20they\x20stay\x20in\x20the\x0a#\x20variable\x20store.\x20A\x20subprocess\x20that\x20genuinely\x20needs\x20one\x20(a\x20listener\x20with\x20a\x0a#\x20token)\x20gets\x20it\x20via\x20the\x20explicit\x20allowlist\x20in\x20unotest.config.*:\x0a#\x20\x20\x20sandbox:\x20{\x20exportSecrets:\x20[\x27TOKEN\x27]\x20}\x0a#\x20Put\x20non-secret\x20values\x20(URLs,\x20emails,\x20ids)\x20in\x20unotest/.env.\x0a#\x0a#\x20FLEET_EXAMPLE\x0aLOGIN=\x0aPASSWORD=\x0aTOKEN=\x0a','envExample':_0x192e23(0x140)};function unotestConfigMjs(_0x1049f4){const _0x45dde0={_0x4de54b:0x14c,_0x435be2:0x15c},_0x1e436d=_0x192e23,_0x16be92=_0x1049f4===void 0x0?_0x1e436d(0x143):_0x1e436d(_0x45dde0._0x4de54b)+JSON['stringify'](_0x1049f4)+',';return _0x1e436d(_0x45dde0._0x435be2)+_0x16be92+_0x1e436d(0x155);}__name(unotestConfigMjs,_0x192e23(0x157));async function scaffoldWorkspace(_0x137f54,_0x521649={}){const _0x11f0fe={_0x492292:0x15b,_0x47c3f7:0x144,_0x435f6a:0x14a,_0x548178:0x154,_0x4d5572:0x14b,_0x4647d7:0x15b,_0x19299a:0x146,_0x8103e3:0x150},_0x55fea3=_0x192e23,_0x423465=[],_0x1fda55=[];await mkdir(join(_0x137f54,'unotest',_0x55fea3(0x144),_0x55fea3(_0x11f0fe._0x492292)),{'recursive':!![]}),await mkdir(join(_0x137f54,_0x55fea3(0x149),_0x55fea3(_0x11f0fe._0x47c3f7),_0x55fea3(_0x11f0fe._0x435f6a)),{'recursive':!![]});const _0x4ea585=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0x521649[_0x55fea3(_0x11f0fe._0x548178)])},{'rel':join(_0x55fea3(0x149),_0x55fea3(0x151)),'content':templates[_0x55fea3(_0x11f0fe._0x4d5572)]},{'rel':join(_0x55fea3(0x149),_0x55fea3(_0x11f0fe._0x47c3f7),_0x55fea3(_0x11f0fe._0x4647d7),'01-smoke.js'),'content':templates['examples'][_0x55fea3(_0x11f0fe._0x19299a)]}];for(const {rel:_0x134246,content:_0x4b898e}of _0x4ea585){const _0x3a63c1=join(_0x137f54,_0x134246);if(existsSync(_0x3a63c1)){_0x1fda55[_0x55fea3(0x150)](_0x134246);continue;}await writeFile(_0x3a63c1,_0x4b898e),_0x423465[_0x55fea3(_0x11f0fe._0x8103e3)](_0x134246);}return{'projectRoot':_0x137f54,'created':_0x423465,'skipped':_0x1fda55};}__name(scaffoldWorkspace,'scaffoldWorkspace');export{scaffoldWorkspace};
@@ -1 +1 @@
1
- var _0x42f8f9=_0x546c;(function(_0x243460,_0x5064f5){var _0x1cfc0f={_0x435604:0xb2,_0x1f773a:0xb5,_0x9d8708:0xbe,_0x110204:0xc2,_0x52bb70:0xb3,_0x481a33:0xb1},_0x30d8f9=_0x546c,_0x564eaf=_0x243460();while(!![]){try{var _0x6fbd07=-parseInt(_0x30d8f9(_0x1cfc0f._0x435604))/0x1*(parseInt(_0x30d8f9(0xc1))/0x2)+-parseInt(_0x30d8f9(_0x1cfc0f._0x1f773a))/0x3+parseInt(_0x30d8f9(_0x1cfc0f._0x9d8708))/0x4+-parseInt(_0x30d8f9(_0x1cfc0f._0x110204))/0x5+parseInt(_0x30d8f9(0xc0))/0x6*(-parseInt(_0x30d8f9(_0x1cfc0f._0x52bb70))/0x7)+parseInt(_0x30d8f9(_0x1cfc0f._0x481a33))/0x8+parseInt(_0x30d8f9(0xbd))/0x9;if(_0x6fbd07===_0x5064f5)break;else _0x564eaf['push'](_0x564eaf['shift']());}catch(_0x2e44f6){_0x564eaf['push'](_0x564eaf['shift']());}}}(_0x556a,0x4122e));import{fileURLToPath}from'url';import{dirname,resolve}from'path';function _0x546c(_0x1bcfcb,_0x17428f){_0x1bcfcb=_0x1bcfcb-0xaf;var _0x556aea=_0x556a();var _0x546c70=_0x556aea[_0x1bcfcb];if(_0x546c['prpaCV']===undefined){var _0x46893a=function(_0x3f2507){var _0x1ddf5b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x2dc5e5='',_0x2a0ec3='';for(var _0x5c3a1b=0x0,_0x11aeaf,_0x230607,_0x486a33=0x0;_0x230607=_0x3f2507['charAt'](_0x486a33++);~_0x230607&&(_0x11aeaf=_0x5c3a1b%0x4?_0x11aeaf*0x40+_0x230607:_0x230607,_0x5c3a1b++%0x4)?_0x2dc5e5+=String['fromCharCode'](0xff&_0x11aeaf>>(-0x2*_0x5c3a1b&0x6)):0x0){_0x230607=_0x1ddf5b['indexOf'](_0x230607);}for(var _0x440b70=0x0,_0x265c65=_0x2dc5e5['length'];_0x440b70<_0x265c65;_0x440b70++){_0x2a0ec3+='%'+('00'+_0x2dc5e5['charCodeAt'](_0x440b70)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2a0ec3);};_0x546c['ckkhZX']=_0x46893a,_0x546c['FxmrFp']={},_0x546c['prpaCV']=!![];}var _0x40c501=_0x556aea[0x0],_0x5c5d07=_0x1bcfcb+_0x40c501,_0x6a8b10=_0x546c['FxmrFp'][_0x5c5d07];return!_0x6a8b10?(_0x546c70=_0x546c['ckkhZX'](_0x546c70),_0x546c['FxmrFp'][_0x5c5d07]=_0x546c70):_0x546c70=_0x6a8b10,_0x546c70;}import{spawn}from'child_process';function _0x556a(){var _0x4d9ade=['zxHLy1bHDgG','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zMLUza','C3rKzxjY','AM9PBG','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','nZuWoty2m0Lhq0rquW','oteXmJyWvKruyLnk','zxHPDa','mtKYmfzprNLQDa','mJe4mdz2wMrpBMK','ntiXotq1uKj4swne','C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','mJq3oda0ofbyCgjXEq','mtncELrSvM8','odiYnvH3wK9XAW','D3jPDgu','mtq0ote1nNHmt2zzqW','Aw5OzxjPDa'];_0x556a=function(){return _0x4d9ade;};return _0x556a();}import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x42f8f9(0xb8)),resolve(here,_0x42f8f9(0xb0))],serverEntry=candidates[_0x42f8f9(0xb9)](_0x2dc5e5=>existsSync(_0x2dc5e5));!serverEntry&&(process[_0x42f8f9(0xba)][_0x42f8f9(0xb4)](_0x42f8f9(0xaf)+candidates['map'](_0x2a0ec3=>'\x20\x20'+_0x2a0ec3+'\x0a')[_0x42f8f9(0xbb)]('')+_0x42f8f9(0xbc)),process[_0x42f8f9(0xbf)](0x1));var child=spawn(process[_0x42f8f9(0xb7)],[serverEntry,...process['argv']['slice'](0x2)],{'stdio':_0x42f8f9(0xb6)});child['on'](_0x42f8f9(0xbf),_0x5c3a1b=>process[_0x42f8f9(0xbf)](_0x5c3a1b??0x1));
1
+ var _0x5aa46b=_0x508d;(function(_0x2df4b5,_0x911980){var _0x453dfb={_0x46af6c:0x175,_0x3b7b94:0x180,_0x24f00e:0x174,_0x14d4a8:0x177,_0x519c13:0x17f},_0x175d2f=_0x508d,_0x43a8fb=_0x2df4b5();while(!![]){try{var _0x3c1987=-parseInt(_0x175d2f(_0x453dfb._0x46af6c))/0x1+-parseInt(_0x175d2f(0x176))/0x2+parseInt(_0x175d2f(_0x453dfb._0x3b7b94))/0x3*(-parseInt(_0x175d2f(_0x453dfb._0x24f00e))/0x4)+parseInt(_0x175d2f(0x17b))/0x5+-parseInt(_0x175d2f(_0x453dfb._0x14d4a8))/0x6+-parseInt(_0x175d2f(_0x453dfb._0x519c13))/0x7+parseInt(_0x175d2f(0x17e))/0x8;if(_0x3c1987===_0x911980)break;else _0x43a8fb['push'](_0x43a8fb['shift']());}catch(_0x4c6b8b){_0x43a8fb['push'](_0x43a8fb['shift']());}}}(_0x17f6,0xa0973));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,_0x5aa46b(0x17a)),resolve(here,_0x5aa46b(0x17d))],serverEntry=candidates['find'](_0x146361=>existsSync(_0x146361));!serverEntry&&(process[_0x5aa46b(0x183)]['write'](_0x5aa46b(0x179)+candidates['map'](_0x1cff6b=>'\x20\x20'+_0x1cff6b+'\x0a')[_0x5aa46b(0x17c)]('')+_0x5aa46b(0x184)),process['exit'](0x1));var child=spawn(process[_0x5aa46b(0x181)],[serverEntry,...process['argv'][_0x5aa46b(0x182)](0x2)],{'stdio':'inherit'});child['on'](_0x5aa46b(0x178),_0x3d4952=>process[_0x5aa46b(0x178)](_0x3d4952??0x1));function _0x508d(_0x4b2160,_0x27888b){_0x4b2160=_0x4b2160-0x174;var _0x17f6fb=_0x17f6();var _0x508d5c=_0x17f6fb[_0x4b2160];if(_0x508d['VZyjjE']===undefined){var _0x4edeea=function(_0x2f58b7){var _0x3a9f36='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x146361='',_0x1cff6b='';for(var _0x3d4952=0x0,_0x3b1ba3,_0x142b78,_0x2252f8=0x0;_0x142b78=_0x2f58b7['charAt'](_0x2252f8++);~_0x142b78&&(_0x3b1ba3=_0x3d4952%0x4?_0x3b1ba3*0x40+_0x142b78:_0x142b78,_0x3d4952++%0x4)?_0x146361+=String['fromCharCode'](0xff&_0x3b1ba3>>(-0x2*_0x3d4952&0x6)):0x0){_0x142b78=_0x3a9f36['indexOf'](_0x142b78);}for(var _0x2662cb=0x0,_0x5a67f4=_0x146361['length'];_0x2662cb<_0x5a67f4;_0x2662cb++){_0x1cff6b+='%'+('00'+_0x146361['charCodeAt'](_0x2662cb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1cff6b);};_0x508d['zEZPJw']=_0x4edeea,_0x508d['dmgebz']={},_0x508d['VZyjjE']=!![];}var _0x34f169=_0x17f6fb[0x0],_0x1758b5=_0x4b2160+_0x34f169,_0x5e2ad1=_0x508d['dmgebz'][_0x1758b5];return!_0x5e2ad1?(_0x508d5c=_0x508d['zEZPJw'](_0x508d5c),_0x508d['dmgebz'][_0x1758b5]=_0x508d5c):_0x508d5c=_0x5e2ad1,_0x508d5c;}function _0x17f6(){var _0x2c59ab=['nJy1mZy4mM9rDKPZsq','zxHPDa','C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','ntG5mZmYnxbsDhrrDW','AM9PBG','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','mJu2mdmZmJbgtgDxEwq','odu5mZqXn1j1tM1hAG','mZGZmxPntgHyEa','zxHLy1bHDgG','C2XPy2u','C3rKzxjY','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','oda0EuDTzfLV','nZu5mJK2BMr1z2Xv','nZm3ntaWs01Uv1vp'];_0x17f6=function(){return _0x2c59ab;};return _0x17f6();}
@@ -1 +1 @@
1
- const _0x412422=_0x3921;(function(_0xf7bf3,_0x27dc06){const _0x1faf85={_0x4e0a84:0x1be,_0x237b5d:0x20b,_0x270b06:0x1d3},_0x21eaa6=_0x3921,_0x25644a=_0xf7bf3();while(!![]){try{const _0x165780=-parseInt(_0x21eaa6(_0x1faf85._0x4e0a84))/0x1*(parseInt(_0x21eaa6(0x1f6))/0x2)+parseInt(_0x21eaa6(0x1b1))/0x3*(-parseInt(_0x21eaa6(0x1bd))/0x4)+-parseInt(_0x21eaa6(0x1c2))/0x5*(-parseInt(_0x21eaa6(0x1f1))/0x6)+parseInt(_0x21eaa6(0x1e8))/0x7*(parseInt(_0x21eaa6(_0x1faf85._0x237b5d))/0x8)+parseInt(_0x21eaa6(0x1da))/0x9+parseInt(_0x21eaa6(_0x1faf85._0x270b06))/0xa+parseInt(_0x21eaa6(0x1eb))/0xb;if(_0x165780===_0x27dc06)break;else _0x25644a['push'](_0x25644a['shift']());}catch(_0x2868f4){_0x25644a['push'](_0x25644a['shift']());}}}(_0x3cf5,0x3f8b1));var __defProp=Object['defineProperty'],__name=(_0x59bafa,_0x40845a)=>__defProp(_0x59bafa,_0x412422(0x1c0),{'value':_0x40845a,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x2d0397}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0xf5d718={_0x1a99c5:0x1cc},_0x2dceca=_0x412422;for(const _0x1da3d1 of[probeChrome,probeEdge,probeChromeBeta]){const _0x5b93f2=_0x1da3d1();if(_0x5b93f2[_0x2dceca(_0xf5d718._0x1a99c5)]!==null)return _0x5b93f2;}return{'channel':null};}__name(probeSystemBrowser,'probeSystemBrowser');function _0x3921(_0x5233f4,_0x4e398e){_0x5233f4=_0x5233f4-0x1b1;const _0x3cf5b2=_0x3cf5();let _0x392185=_0x3cf5b2[_0x5233f4];if(_0x3921['hbQHgp']===undefined){var _0x57ee8f=function(_0x2aed21){const _0x291c9f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2d0397='',_0x59bafa='';for(let _0x40845a=0x0,_0x1da3d1,_0x5b93f2,_0x206783=0x0;_0x5b93f2=_0x2aed21['charAt'](_0x206783++);~_0x5b93f2&&(_0x1da3d1=_0x40845a%0x4?_0x1da3d1*0x40+_0x5b93f2:_0x5b93f2,_0x40845a++%0x4)?_0x2d0397+=String['fromCharCode'](0xff&_0x1da3d1>>(-0x2*_0x40845a&0x6)):0x0){_0x5b93f2=_0x291c9f['indexOf'](_0x5b93f2);}for(let _0x4dcdf6=0x0,_0x8b3c5f=_0x2d0397['length'];_0x4dcdf6<_0x8b3c5f;_0x4dcdf6++){_0x59bafa+='%'+('00'+_0x2d0397['charCodeAt'](_0x4dcdf6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x59bafa);};_0x3921['YNDEcT']=_0x57ee8f,_0x3921['osdCVo']={},_0x3921['hbQHgp']=!![];}const _0x321485=_0x3cf5b2[0x0],_0x212232=_0x5233f4+_0x321485,_0x32943d=_0x3921['osdCVo'][_0x212232];return!_0x32943d?(_0x392185=_0x3921['YNDEcT'](_0x392185),_0x3921['osdCVo'][_0x212232]=_0x392185):_0x392185=_0x32943d,_0x392185;}function probeChrome(){const _0x2bddea={_0x2ffc7b:0x203},_0x39ad1d=_0x412422,_0x206783=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x206783)return{'channel':_0x39ad1d(_0x2bddea._0x2ffc7b),'path':_0x206783,'label':'Google\x20Chrome'};return{'channel':null};}__name(probeChrome,_0x412422(0x1f4));function probeEdge(){const _0x58d84b={_0xa5a4fc:0x1f7},_0xa071a3=_0x412422,_0x4dcdf6=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x4dcdf6)return{'channel':_0xa071a3(0x1b9),'path':_0x4dcdf6,'label':_0xa071a3(_0x58d84b._0xa5a4fc)};return{'channel':null};}__name(probeEdge,_0x412422(0x1ce));function probeChromeBeta(){const _0x8b3c5f=firstExistingPath(CHROME_BETA_PATHS);if(_0x8b3c5f)return{'channel':'chrome-beta','path':_0x8b3c5f,'label':'Google\x20Chrome\x20Beta'};return{'channel':null};}__name(probeChromeBeta,_0x412422(0x1ba));function _0x3cf5(){const _0x4dc07a=['xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','C3rYAw5N','vgfYz2v0igrPCMvJDg9YEq','l3vZCI9IAw4Vy2HYB21PDw0','DhjPBq','igrVzxmGBM90igv4Axn0','vu5pvevtvf9iruferuq','y2HHBM5LBa','DxrMoa','ChjVyMvfzgDL','zMLYC3rfEgLZDgLUz1bHDgG','y29SBgvJDgLVBG','AM9PBG','D2LUmZi','mJm5nteXmhvusKDqCa','u3LZDgvTigjYB3DZzxi','D2fYBMLUzW','AgvHzgvK','zw52','te9dquXbufbeqvrb','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','mJm5ndK5EePSvKPh','C3vWCg9YDgvKs2LUzhm','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','D2HPy2G','z29Vz2XLlwnOCM9Tzq','yxbWu2vYDMvYqxjNCW','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','CgLJA0jPBG','C3bSAxq','y2HLy2TxCML0ywjSzun3za','yNvPBgrbCMDZ','D2HPy2HpzG','uhjVz3jHBuzPBgvZ','ChjVAMvJDfjVB3q','mty1nJi3AuHgDMrI','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','A2LUza','mtK1mZy2nNHjANrNDG','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','qhvUB3rLC3qVD2vI','ChvZAa','DMvYC2LVBNm','CgXHDgzVCM0','nK5Yt3jhrq','ls1Kzwj1zW','ztjL','ChjVyMvdAhjVBwu','C2nLBMfYAw8','mJy4mJjvvgnPtgG','twLJCM9ZB2z0ievKz2u','yxv0Ag9YAw5N','yMfPBa','y3DK','AxngAw5PDgu','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','C3rHCNrZv2L0Aa','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','yxbWlxnLCNzLCG','v2vIuNvUBMvYqwrHChrLCG','ls1IywLS','ls13B3jRzxjZpq','y2HYB21L','yMLU','l3bHy2THz2uUANnVBG','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','y2HLy2TtExn0zw1cCM93C2vY','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','B2jQzwn0','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','mJrptfvfzgy','tM9Kzs5QCYb2zxjZAw9U','BM9Kzq','CMvZB2X2zujPBG','D29YA2vYCW','uhjVz3jHBuzPBgvZkhG4nIK','mtq5mJvrteLcyuW','zxjYB3i','yxv0Ag9Y','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','BwLJCM9ZB2z0lwvKz2u','y2HLy2ToB2rLvMvYC2LVBG','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','BxnLzgDL','ChjVyMvdAhjVBwvczxrH','BgvUz3rO','yNvPBgrfBNy','mJG4CgLjzuji','mZfcvuXOywW','y2HYB21PDw0','BMfTzq','Dw5VDgvZDc13zwi','mJu5nZuXnvvYBxjZBa','yNjLywTWB2LUDhm','zgfYD2LU'];_0x3cf5=function(){return _0x4dc07a;};return _0x3cf5();}var CHROME_PATHS=((()=>{const _0x340e21={_0x1199a3:0x1c4,_0x1227d0:0x1b4,_0x1e0810:0x208,_0x2bfadc:0x1d7,_0x48a24d:0x1fc,_0x3ec40f:0x1c8},_0x4c3ef4=_0x412422;switch(process[_0x4c3ef4(0x1f0)]){case _0x4c3ef4(_0x340e21._0x1199a3):return[_0x4c3ef4(_0x340e21._0x1227d0)];case'win32':return[process[_0x4c3ef4(0x1d7)][_0x4c3ef4(0x1e6)]+_0x4c3ef4(0x208),process[_0x4c3ef4(0x1d7)]['ProgramFiles(x86)']+_0x4c3ef4(_0x340e21._0x1e0810),process[_0x4c3ef4(_0x340e21._0x2bfadc)][_0x4c3ef4(0x1d8)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x4c3ef4(_0x340e21._0x48a24d),_0x4c3ef4(0x1dc),_0x4c3ef4(0x1e0),_0x4c3ef4(_0x340e21._0x3ec40f),'/usr/bin/chromium-browser'];}})()),CHROME_BIN_NAMES=[_0x412422(0x1de),'google-chrome-stable',_0x412422(0x1bf),'chromium-browser'],EDGE_PATHS=((()=>{const _0x2f0ef5={_0x40010f:0x1f0,_0x54968f:0x1c4,_0x24d47c:0x1b7},_0x17419d=_0x412422;switch(process[_0x17419d(_0x2f0ef5._0x40010f)]){case _0x17419d(_0x2f0ef5._0x54968f):return[_0x17419d(_0x2f0ef5._0x24d47c)];case _0x17419d(0x1d2):return[process['env']['ProgramFiles']+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe',process[_0x17419d(0x1d7)][_0x17419d(0x210)]+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe'];default:return[_0x17419d(0x1e9),'/usr/bin/microsoft-edge-stable'];}})()),EDGE_BIN_NAMES=[_0x412422(0x1b5),'microsoft-edge-stable'],CHROME_BETA_PATHS=((()=>{const _0x1df1f4={_0x1cf1f9:0x1f0,_0x5361de:0x1c4,_0x19ae6e:0x20a,_0x43bfc5:0x1c5},_0x34fa2b=_0x412422;switch(process[_0x34fa2b(_0x1df1f4._0x1cf1f9)]){case _0x34fa2b(_0x1df1f4._0x5361de):return[_0x34fa2b(_0x1df1f4._0x19ae6e)];case _0x34fa2b(0x1d2):return[process['env']['ProgramFiles']+_0x34fa2b(_0x1df1f4._0x43bfc5)];default:return[_0x34fa2b(0x1fe)];}})());function firstExistingPath(_0xa2b814){const _0x11aa71=_0x412422;for(const _0x267bd5 of _0xa2b814){if(!_0x267bd5||_0x267bd5[_0x11aa71(0x1fd)]('undefined'))continue;if(existsSync(_0x267bd5))return _0x267bd5;}return null;}__name(firstExistingPath,_0x412422(0x1cf));function whichOf(_0x4d3e83){const _0x1b04aa={_0x783c8c:0x1f0,_0x39e140:0x1cd,_0x520cc2:0x1c9,_0x2791a8:0x1bb},_0x1083c6=_0x412422;if(process[_0x1083c6(_0x1b04aa._0x783c8c)]===_0x1083c6(0x1d2))return void 0x0;for(const _0x52f68f of _0x4d3e83){try{const _0x5905b2=execFileSync(_0x1083c6(0x1dd),[_0x52f68f],{'encoding':_0x1083c6(_0x1b04aa._0x39e140)})[_0x1083c6(_0x1b04aa._0x520cc2)]();if(_0x5905b2[_0x1083c6(_0x1b04aa._0x2791a8)]>0x0&&existsSync(_0x5905b2))return _0x5905b2;}catch{}}return void 0x0;}__name(whichOf,_0x412422(0x1e5));function runEnvironmentChecks(_0x310b29={}){const _0x342d11={_0x346226:0x1fa},_0x54cc75=_0x412422,_0x4083dd=_0x310b29['cwd']??process[_0x54cc75(_0x342d11._0x346226)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x4083dd)];}__name(runEnvironmentChecks,'runEnvironmentChecks');function checkNodeVersion(){const _0xb55a2a={_0x4e052c:0x1ef,_0x41617b:0x20d,_0x464f09:0x1e2,_0xc72272:0x1fb,_0xf892bd:0x1ec,_0x4fc80b:0x20c},_0x36703f=_0x412422,_0x4845a2=process[_0x36703f(_0xb55a2a._0x4e052c)][_0x36703f(_0xb55a2a._0x41617b)],_0x5a3092=Number(_0x4845a2[_0x36703f(_0xb55a2a._0x464f09)]('.')[0x0]);if(!Number[_0x36703f(_0xb55a2a._0xc72272)](_0x5a3092)||_0x5a3092<0x14)return{'name':_0x36703f(0x20c),'severity':'error','message':_0x36703f(_0xb55a2a._0xf892bd)+_0x4845a2+')','detail':_0x36703f(0x206)};return{'name':_0x36703f(_0xb55a2a._0x4fc80b),'severity':'ok','message':_0x4845a2};}__name(checkNodeVersion,_0x412422(0x1b6));function checkSystemBrowser(){const _0x4af122={_0x2beb42:0x1d4,_0xcfca6c:0x1d5},_0x27a30f=_0x412422,_0x2e51ee=probeSystemBrowser();if(_0x2e51ee['channel']!==null)return{'name':'System\x20browser','severity':'ok','message':_0x2e51ee['label']+'\x20found','detail':_0x2e51ee['path']};return{'name':_0x27a30f(_0x4af122._0x2beb42),'severity':_0x27a30f(_0x4af122._0xcfca6c),'message':_0x27a30f(0x1b8),'detail':_0x27a30f(0x1d9)};}__name(checkSystemBrowser,_0x412422(0x207));function checkWritableCwd(_0x17fbdd){const _0x8a7adf={_0x722bb1:0x1b2,_0x31c927:0x1ca,_0x5a382a:0x1c7},_0x4aacab=_0x412422;if(!_0x2d0397(_0x17fbdd))return{'name':_0x4aacab(0x1c7),'severity':_0x4aacab(_0x8a7adf._0x722bb1),'message':'target\x20'+_0x17fbdd+_0x4aacab(_0x8a7adf._0x31c927),'detail':'Create\x20the\x20directory\x20or\x20run\x20init\x20in\x20an\x20existing\x20project\x20root.'};return{'name':_0x4aacab(_0x8a7adf._0x5a382a),'severity':'ok','message':_0x17fbdd};}__name(checkWritableCwd,_0x412422(0x1e3));var PACKAGE_NAME=_0x412422(0x1ed),WebRunnerAdapter=class{static{__name(this,_0x412422(0x200));}[_0x412422(0x1c0)]=PACKAGE_NAME;['suffix']='';['debug']={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x412422(0x1db)]=['scenario',_0x412422(0x1d0),'authoring'];[_0x412422(0x20e)](){const _0x4475d8={_0x52061d:0x205},_0x6d5b15=_0x412422,_0x269622=createRequire(import.meta.url),_0x4a895b=_0x269622['resolve'](PACKAGE_NAME+_0x6d5b15(_0x4475d8._0x52061d)),_0x1403ab=JSON['parse'](readFileSync(_0x4a895b,'utf8')),_0x1da7c3=pickBin(_0x1403ab);if(!_0x1da7c3)throw new Error(PACKAGE_NAME+'\x20package.json\x20declares\x20no\x20\x27bin\x27\x20field\x20—\x20broken\x20install?');return join(dirname(_0x4a895b),_0x1da7c3);}[_0x412422(0x1e4)](_0x3f455f){const _0x45d21b={_0x24abb9:0x1f3,_0x4429a9:0x1f2,_0x5e7f4f:0x1c3,_0x294532:0x1c3,_0x267b2f:0x1bb,_0x52b37f:0x1d0,_0x494055:0x20f,_0x1ece59:0x20f,_0x22e9dc:0x202,_0x49f1b2:0x201,_0x5f3739:0x1ea},_0x3f98ef=_0x412422;if(_0x3f455f[_0x3f98ef(0x1ea)]===_0x3f98ef(0x1f5)){const _0xaa4f70=[_0x3f98ef(_0x45d21b._0x24abb9),_0x3f455f['scenario']];if(_0x3f455f['debug'])_0xaa4f70['push'](_0x3f98ef(_0x45d21b._0x4429a9));return _0x3f455f[_0x3f98ef(_0x45d21b._0x5e7f4f)]&&_0x3f455f[_0x3f98ef(_0x45d21b._0x294532)][_0x3f98ef(_0x45d21b._0x267b2f)]>0x0&&_0xaa4f70[_0x3f98ef(0x1ee)]('--break',_0x3f455f[_0x3f98ef(0x1c3)][_0x3f98ef(0x1d1)](',')),_0xaa4f70;}if(_0x3f455f['kind']===_0x3f98ef(_0x45d21b._0x52b37f)){const _0x37f2a8=['collection',_0x3f455f[_0x3f98ef(0x1d0)]];_0x3f455f[_0x3f98ef(_0x45d21b._0x494055)]!==void 0x0&&_0x3f455f[_0x3f98ef(_0x45d21b._0x1ece59)]>0x1&&_0x37f2a8[_0x3f98ef(0x1ee)](_0x3f98ef(_0x45d21b._0x22e9dc)+_0x3f455f['workers']);if(_0x3f455f[_0x3f98ef(0x1f9)])_0x37f2a8[_0x3f98ef(0x1ee)](_0x3f98ef(_0x45d21b._0x49f1b2));return _0x37f2a8;}if(_0x3f455f[_0x3f98ef(_0x45d21b._0x5f3739)]===_0x3f98ef(0x1f8))return[_0x3f98ef(0x1b3),_0x3f455f[_0x3f98ef(0x1f5)]];const _0x1adce9=_0x3f455f;throw new UnsupportedRunKindError(_0x1adce9[_0x3f98ef(0x1ea)],this['name']);}[_0x412422(0x1bc)](_0x17f849){const _0x3c2e21={_0x1982e6:0x1d6},_0x556843=_0x412422,_0x1b2c41={};if(_0x17f849[_0x556843(_0x3c2e21._0x1982e6)])_0x1b2c41[_0x556843(0x1cb)]='1';return _0x1b2c41;}[_0x412422(0x1df)](){const _0x3db670=_0x412422;return[_0x3db670(0x1ff)];}async['doctor'](_0x3d9f7f){const _0x319e9a=_0x412422;return runEnvironmentChecks({'cwd':_0x3d9f7f[_0x319e9a(0x1e7)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x348db1){const _0x528758={_0x58eb72:0x1c6,_0x9fc9c1:0x204,_0x27a7c2:0x204,_0x5131ee:0x209},_0x4116f9=_0x412422;if(typeof _0x348db1[_0x4116f9(0x204)]===_0x4116f9(_0x528758._0x58eb72))return _0x348db1[_0x4116f9(_0x528758._0x9fc9c1)];if(_0x348db1[_0x4116f9(_0x528758._0x27a7c2)]&&typeof _0x348db1[_0x4116f9(_0x528758._0x27a7c2)]===_0x4116f9(_0x528758._0x5131ee))return _0x348db1[_0x4116f9(_0x528758._0x9fc9c1)][_0x4116f9(0x1c1)]??Object['values'](_0x348db1[_0x4116f9(0x204)])[0x0]??null;return null;}__name(pickBin,_0x412422(0x1e1));export{web_runner_adapter_default as default,webRunnerAdapter};
1
+ const _0x2241bf=_0x46c1;(function(_0x2edf81,_0x25f6a0){const _0x44892c={_0x2df36a:0x10e,_0x3ceff0:0xf4,_0x1d8961:0x126,_0x56dd13:0xf6,_0x35c0ec:0x132,_0xb257c9:0x151},_0x267eb5=_0x46c1,_0xc88ff6=_0x2edf81();while(!![]){try{const _0x37d423=-parseInt(_0x267eb5(0x12f))/0x1*(-parseInt(_0x267eb5(_0x44892c._0x2df36a))/0x2)+-parseInt(_0x267eb5(0x12a))/0x3*(-parseInt(_0x267eb5(_0x44892c._0x3ceff0))/0x4)+-parseInt(_0x267eb5(0xf1))/0x5+-parseInt(_0x267eb5(_0x44892c._0x1d8961))/0x6*(-parseInt(_0x267eb5(0x137))/0x7)+parseInt(_0x267eb5(_0x44892c._0x56dd13))/0x8*(parseInt(_0x267eb5(_0x44892c._0x35c0ec))/0x9)+-parseInt(_0x267eb5(0x11f))/0xa*(-parseInt(_0x267eb5(0x118))/0xb)+-parseInt(_0x267eb5(_0x44892c._0xb257c9))/0xc*(parseInt(_0x267eb5(0x100))/0xd);if(_0x37d423===_0x25f6a0)break;else _0xc88ff6['push'](_0xc88ff6['shift']());}catch(_0x4ba2c4){_0xc88ff6['push'](_0xc88ff6['shift']());}}}(_0x54ef,0xbfc40));var __defProp=Object[_0x2241bf(0x148)],__name=(_0x39334c,_0x4eff35)=>__defProp(_0x39334c,_0x2241bf(0x12b),{'value':_0x4eff35,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';function _0x54ef(){const _0x42b2ea=['xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','AxngAw5PDgu','mty5nduWmhDfugrzvW','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','mtaZodqWndb6sMHRquq','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','C3bSAxq','yNvPBgrfBNy','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','AgvHzgvK','yxv0Ag9YAw5N','BM9Kzq','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','mtCYouvKEgn3yq','C2nLBMfYAw8','DhjPBq','yNvPBgrbCMDZ','yxbWu2vYDMvYqxjNCW','uhjVz3jHBuzPBgvZkhG4nIK','r29Vz2XLienOCM9TzsbczxrH','vu5pvevtvf9iruferuq','l3vZCI9IAw4Vy2HYB21PDw0','igrVzxmGBM90igv4Axn0','y2HYB21PDw0','twLJCM9ZB2z0ievKz2u','ztjL','C3vWCg9YDgvKs2LUzhm','nZG2mZGYq1j2txPV','D2HPy2G','zg9JDg9Y','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','yNjLywTWB2LUDhm','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','ls13B3jRzxjZpq','DMfSDwvZ','Cgf0Aa','C3vMzML4','mtfTuefNug0','y2HLy2ToB2rLvMvYC2LVBG','AM9PBG','igzVDw5K','u3LZDgvTigjYB3DZzxi','CMvZB2X2zq','ChjVyMvdAhjVBwvczxrH','mtK2mZeZmhj3twvsDa','y29SBgvJDgLVBG','D29YA2vYCW','D2HPy2HpzG','ls1ICMvHAW','qhvUB3rLC3qVD2vI','CgfYC2u','nKvHAK5kAG','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','zxjYB3i','nMXstfL4qW','BMfTzq','BwLJCM9ZB2z0lwvKz2u','C3rHCNrZv2L0Aa','tM9Kzs5QCYb2zxjZAw9U','mwDcs1fNEG','y3DK','yxbWlxnLCNzLCG','ow1JChv3AW','D2fYBMLUzW','z29Vz2XLlwnOCM9Tzq','ls1Kzwj1zW','y2HHBM5LBa','odyZodKZmvvVALDjDG','y2HYB21PDw0TyNjVD3nLCG','ChjVyMvdAhjVBwu','y2HYB21LlwjLDge','zgfYD2LU','ChvZAa','zMLYC3rfEgLZDgLUz1bHDgG','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','C3rYAw5N','Dw5KzwzPBMvK','uhjVz3jHBuzPBgvZ','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','ChjVyMvtExn0zw1cCM93C2vY','B2jQzwn0','BgfIzwW','zgvMAw5LuhjVCgvYDhK','y2HYB21L','te9dquXbufbeqvrb','CNvUrw52AxjVBM1LBNrdAgvJA3m','y2HLy2TxCML0ywjSzun3za','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','zw52','vgfYz2v0igrPCMvJDg9YEq','BgvUz3rO','mtG4mda0qLH4tgD0','CgXHDgzVCM0','yMLU','DgfYz2v0ia','A2LUza','CMvZB2X2zujPBG','y2HLy2TtExn0zw1cCM93C2vY','ls1IywLS','D2LUmZi','ntq5odu0nxzlz2TQvG'];_0x54ef=function(){return _0x42b2ea;};return _0x54ef();}import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x544ab2}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x41fe91={_0x24f2d8:0x136},_0x34bdc5=_0x2241bf;for(const _0x582e6e of[probeChrome,probeEdge,probeChromeBeta]){const _0x2a1acc=_0x582e6e();if(_0x2a1acc[_0x34bdc5(_0x41fe91._0x24f2d8)]!==null)return _0x2a1acc;}return{'channel':null};}__name(probeSystemBrowser,_0x2241bf(0x145));function probeChrome(){const _0x2337ec={_0x360d48:0x149},_0x21e365=_0x2241bf,_0x453786=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x453786)return{'channel':_0x21e365(_0x2337ec._0x360d48),'path':_0x453786,'label':'Google\x20Chrome'};return{'channel':null};}__name(probeChrome,_0x2241bf(0x139));function probeEdge(){const _0x398842={_0x66414a:0x10b},_0x19c25a=_0x2241bf,_0x3dbe15=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x3dbe15)return{'channel':'msedge','path':_0x3dbe15,'label':_0x19c25a(_0x398842._0x66414a)};return{'channel':null};}__name(probeEdge,'probeEdge');function probeChromeBeta(){const _0x407daa={_0x31c5a0:0x13a},_0x13ebad=_0x2241bf,_0x6a709a=firstExistingPath(CHROME_BETA_PATHS);if(_0x6a709a)return{'channel':_0x13ebad(_0x407daa._0x31c5a0),'path':_0x6a709a,'label':_0x13ebad(0x106)};return{'channel':null};}__name(probeChromeBeta,_0x2241bf(0x11e));var CHROME_PATHS=((()=>{const _0x4ab7a4={_0x38bbf2:0x13b,_0x2d274a:0x144,_0x565e68:0x13e,_0x5a0685:0x14e,_0x3ab5dd:0xf5,_0x56d32e:0x108},_0x123e20=_0x2241bf;switch(process[_0x123e20(0x152)]){case _0x123e20(_0x4ab7a4._0x38bbf2):return[_0x123e20(_0x4ab7a4._0x2d274a)];case _0x123e20(0xf0):return[process['env'][_0x123e20(0x141)]+_0x123e20(_0x4ab7a4._0x565e68),process[_0x123e20(_0x4ab7a4._0x5a0685)][_0x123e20(0x105)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process[_0x123e20(0x14e)][_0x123e20(0x14a)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x123e20(_0x4ab7a4._0x3ab5dd),'/usr/bin/google-chrome-stable','/snap/bin/google-chrome',_0x123e20(_0x4ab7a4._0x56d32e),_0x123e20(0x143)];}})()),CHROME_BIN_NAMES=[_0x2241bf(0x134),_0x2241bf(0xf7),_0x2241bf(0x10a),_0x2241bf(0x138)],EDGE_PATHS=((()=>{const _0x24312f={_0x47998e:0x152,_0x1ec0db:0xf0,_0xfc4a8:0x14e,_0x4401c9:0xf2,_0x123f71:0x142},_0x25b124=_0x2241bf;switch(process[_0x25b124(_0x24312f._0x47998e)]){case'darwin':return['/Applications/Microsoft\x20Edge.app/Contents/MacOS/Microsoft\x20Edge'];case _0x25b124(_0x24312f._0x1ec0db):return[process[_0x25b124(_0x24312f._0xfc4a8)][_0x25b124(0x141)]+_0x25b124(0xf2),process[_0x25b124(0x14e)]['ProgramFiles(x86)']+_0x25b124(_0x24312f._0x4401c9)];default:return[_0x25b124(_0x24312f._0x123f71),'/usr/bin/microsoft-edge-stable'];}})()),EDGE_BIN_NAMES=[_0x2241bf(0x12c),_0x2241bf(0x14d)],CHROME_BETA_PATHS=((()=>{const _0x2bc30b={_0x1131b0:0xf8,_0x24805b:0x141,_0x53d5b1:0x128,_0x5d10c7:0xfb},_0x459bb5=_0x2241bf;switch(process[_0x459bb5(0x152)]){case'darwin':return[_0x459bb5(_0x2bc30b._0x1131b0)];case _0x459bb5(0xf0):return[process[_0x459bb5(0x14e)][_0x459bb5(_0x2bc30b._0x24805b)]+_0x459bb5(_0x2bc30b._0x53d5b1)];default:return[_0x459bb5(_0x2bc30b._0x5d10c7)];}})());function firstExistingPath(_0x1bff3b){const _0x2ff7a5={_0x501d5e:0x12d,_0xad3344:0x140},_0x278b05=_0x2241bf;for(const _0x3cd7ce of _0x1bff3b){if(!_0x3cd7ce||_0x3cd7ce[_0x278b05(_0x2ff7a5._0x501d5e)](_0x278b05(_0x2ff7a5._0xad3344)))continue;if(existsSync(_0x3cd7ce))return _0x3cd7ce;}return null;}__name(firstExistingPath,_0x2241bf(0x13d));function whichOf(_0x404c4b){const _0x50f790={_0x5baec4:0x10f,_0x1200dc:0x102},_0x344ab4=_0x2241bf;if(process[_0x344ab4(0x152)]==='win32')return void 0x0;for(const _0x1462d8 of _0x404c4b){try{const _0x2cff4c=execFileSync(_0x344ab4(_0x50f790._0x5baec4),[_0x1462d8],{'encoding':'utf8'})[_0x344ab4(_0x50f790._0x1200dc)]();if(_0x2cff4c[_0x344ab4(0x150)]>0x0&&existsSync(_0x2cff4c))return _0x2cff4c;}catch{}}return void 0x0;}__name(whichOf,_0x2241bf(0x122));function runEnvironmentChecks(_0x23ae79={}){const _0xfb6210={_0x50777e:0x130},_0x47aaa6=_0x2241bf,_0x25fa13=_0x23ae79['cwd']??process[_0x47aaa6(_0xfb6210._0x50777e)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x25fa13)];}__name(runEnvironmentChecks,_0x2241bf(0x14b));function checkNodeVersion(){const _0x54288b={_0x2df434:0xfe,_0x36af02:0xf9,_0x49dcc4:0xf3,_0x25bb53:0x129,_0x11c118:0x12e},_0x447a57=_0x2241bf,_0x57d40f=process['versions'][_0x447a57(_0x54288b._0x2df434)],_0x33a6c3=Number(_0x57d40f[_0x447a57(_0x54288b._0x36af02)]('.')[0x0]);if(!Number[_0x447a57(_0x54288b._0x49dcc4)](_0x33a6c3)||_0x33a6c3<0x14)return{'name':'Node.js\x20version','severity':_0x447a57(_0x54288b._0x25bb53),'message':_0x447a57(0x111)+_0x57d40f+')','detail':_0x447a57(0x127)};return{'name':_0x447a57(_0x54288b._0x11c118),'severity':'ok','message':_0x57d40f};}__name(checkNodeVersion,_0x2241bf(0x119));function checkSystemBrowser(){const _0x2e1ce8={_0x3067c3:0x136,_0x5c5b6f:0x147,_0x5b92ee:0x11b},_0xa356cc=_0x2241bf,_0x49f4fc=probeSystemBrowser();if(_0x49f4fc[_0xa356cc(_0x2e1ce8._0x3067c3)]!==null)return{'name':_0xa356cc(0x11c),'severity':'ok','message':_0x49f4fc[_0xa356cc(_0x2e1ce8._0x5c5b6f)]+_0xa356cc(_0x2e1ce8._0x5b92ee),'detail':_0x49f4fc[_0xa356cc(0x116)]};return{'name':_0xa356cc(0x11c),'severity':_0xa356cc(0x133),'message':_0xa356cc(0x113),'detail':'init\x20will\x20offer\x20to\x20download\x20bundled\x20Chromium\x20(~150\x20MB).\x20Alternatively,\x20install\x20Chrome\x20from\x20https://www.google.com/chrome\x20and\x20re-run.'};}__name(checkSystemBrowser,_0x2241bf(0xee));function checkWritableCwd(_0x4e8b6f){const _0x32b888={_0x285221:0x14f},_0xea6ccd=_0x2241bf;if(!_0x544ab2(_0x4e8b6f))return{'name':_0xea6ccd(0x14f),'severity':_0xea6ccd(0x129),'message':_0xea6ccd(0xeb)+_0x4e8b6f+_0xea6ccd(0x109),'detail':'Create\x20the\x20directory\x20or\x20run\x20init\x20in\x20an\x20existing\x20project\x20root.'};return{'name':_0xea6ccd(_0x32b888._0x285221),'severity':'ok','message':_0x4e8b6f};}__name(checkWritableCwd,_0x2241bf(0x14c));var PACKAGE_NAME=_0x2241bf(0x124),WebRunnerAdapter=class{static{__name(this,'WebRunnerAdapter');}[_0x2241bf(0x12b)]=PACKAGE_NAME;[_0x2241bf(0x117)]='';['debug']={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x2241bf(0x10d)]=[_0x2241bf(0x101),_0x2241bf(0x120),_0x2241bf(0xfd)];[_0x2241bf(0xed)](){const _0xc81ab5={_0x241464:0x125},_0x17cc37=_0x2241bf,_0x17c5a6=createRequire(import.meta.url),_0x4cbfbb=_0x17c5a6[_0x17cc37(0x11d)](PACKAGE_NAME+'/package.json'),_0x4d5f1d=JSON[_0x17cc37(_0xc81ab5._0x241464)](readFileSync(_0x4cbfbb,'utf8')),_0x3fd713=pickBin(_0x4d5f1d);if(!_0x3fd713)throw new Error(PACKAGE_NAME+_0x17cc37(0xff));return join(dirname(_0x4cbfbb),_0x3fd713);}[_0x2241bf(0x103)](_0x238427){const _0x327335={_0x51f442:0xec,_0x2b3661:0x101,_0x59fa2e:0x10c,_0x224f82:0x135,_0x583e38:0x112,_0x2413d8:0x120,_0x4f599d:0x121,_0x52a4e1:0x13c,_0xfa123e:0x12b},_0x2c42b3=_0x2241bf;if(_0x238427[_0x2c42b3(_0x327335._0x51f442)]===_0x2c42b3(_0x327335._0x2b3661)){const _0xf367ae=[_0x2c42b3(_0x327335._0x59fa2e),_0x238427['scenario']];if(_0x238427['debug'])_0xf367ae['push'](_0x2c42b3(_0x327335._0x224f82));return _0x238427[_0x2c42b3(0x112)]&&_0x238427[_0x2c42b3(_0x327335._0x583e38)][_0x2c42b3(0x150)]>0x0&&_0xf367ae[_0x2c42b3(0x13c)](_0x2c42b3(0x123),_0x238427['breakpoints'][_0x2c42b3(0x11a)](',')),_0xf367ae;}if(_0x238427[_0x2c42b3(_0x327335._0x51f442)]===_0x2c42b3(0x120)){const _0x369fd4=[_0x2c42b3(_0x327335._0x2413d8),_0x238427[_0x2c42b3(0x120)]];_0x238427[_0x2c42b3(_0x327335._0x4f599d)]!==void 0x0&&_0x238427[_0x2c42b3(_0x327335._0x4f599d)]>0x1&&_0x369fd4[_0x2c42b3(_0x327335._0x52a4e1)](_0x2c42b3(0x114)+_0x238427[_0x2c42b3(_0x327335._0x4f599d)]);if(_0x238427['bail'])_0x369fd4[_0x2c42b3(_0x327335._0x52a4e1)](_0x2c42b3(0xef));return _0x369fd4;}if(_0x238427['kind']===_0x2c42b3(0xfd))return['author',_0x238427[_0x2c42b3(0x101)]];const _0x238797=_0x238427;throw new UnsupportedRunKindError(_0x238797[_0x2c42b3(_0x327335._0x51f442)],this[_0x2c42b3(_0x327335._0xfa123e)]);}[_0x2241bf(0xfa)](_0x95124d){const _0x151cd0=_0x2241bf,_0xfaed03={};if(_0x95124d[_0x151cd0(0xfc)])_0xfaed03[_0x151cd0(0x107)]='1';return _0xfaed03;}[_0x2241bf(0x104)](){const _0x4fcd22={_0x5f2a45:0x131},_0x207191=_0x2241bf;return[_0x207191(_0x4fcd22._0x5f2a45)];}async[_0x2241bf(0x110)](_0x247216){return runEnvironmentChecks({'cwd':_0x247216['projectRoot']});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function _0x46c1(_0x590181,_0x2c564c){_0x590181=_0x590181-0xea;const _0x54ef51=_0x54ef();let _0x46c1ba=_0x54ef51[_0x590181];if(_0x46c1['TmGbJO']===undefined){var _0x5c2e9e=function(_0x405e96){const _0x123caf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x544ab2='',_0x39334c='';for(let _0x4eff35=0x0,_0x582e6e,_0x2a1acc,_0x453786=0x0;_0x2a1acc=_0x405e96['charAt'](_0x453786++);~_0x2a1acc&&(_0x582e6e=_0x4eff35%0x4?_0x582e6e*0x40+_0x2a1acc:_0x2a1acc,_0x4eff35++%0x4)?_0x544ab2+=String['fromCharCode'](0xff&_0x582e6e>>(-0x2*_0x4eff35&0x6)):0x0){_0x2a1acc=_0x123caf['indexOf'](_0x2a1acc);}for(let _0x3dbe15=0x0,_0x6a709a=_0x544ab2['length'];_0x3dbe15<_0x6a709a;_0x3dbe15++){_0x39334c+='%'+('00'+_0x544ab2['charCodeAt'](_0x3dbe15)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x39334c);};_0x46c1['aaWuch']=_0x5c2e9e,_0x46c1['NkrNdo']={},_0x46c1['TmGbJO']=!![];}const _0x294589=_0x54ef51[0x0],_0x5c4644=_0x590181+_0x294589,_0x219abe=_0x46c1['NkrNdo'][_0x5c4644];return!_0x219abe?(_0x46c1ba=_0x46c1['aaWuch'](_0x46c1ba),_0x46c1['NkrNdo'][_0x5c4644]=_0x46c1ba):_0x46c1ba=_0x219abe,_0x46c1ba;}function pickBin(_0x564479){const _0x41ece6={_0x54fb81:0xea,_0x383bd8:0x146,_0x26c5c8:0x115,_0x156e2b:0xea},_0x565b27=_0x2241bf;if(typeof _0x564479['bin']===_0x565b27(0x13f))return _0x564479[_0x565b27(0xea)];if(_0x564479[_0x565b27(_0x41ece6._0x54fb81)]&&typeof _0x564479[_0x565b27(_0x41ece6._0x54fb81)]===_0x565b27(_0x41ece6._0x383bd8))return _0x564479[_0x565b27(0xea)]['unotest-web']??Object[_0x565b27(_0x41ece6._0x26c5c8)](_0x564479[_0x565b27(_0x41ece6._0x156e2b)])[0x0]??null;return null;}__name(pickBin,'pickBin');export{web_runner_adapter_default as default,webRunnerAdapter};
@@ -268,6 +268,30 @@ the last failed call plus recent failing exits. `filter:"layer:resolver"`
268
268
  `filter:"tool:explore_step"` → recent events for that tool. `limit` caps
269
269
  the count (default 50).
270
270
 
271
+ ## Variable environments (dev / staging / prod)
272
+
273
+ Scenario variables come from `unotest/.env` + `unotest/.secrets`.
274
+ Setting `UNOTEST_ENV=<name>` layers `unotest/.env.<name>` /
275
+ `unotest/.secrets.<name>` on top (overlay wins — it holds only the keys
276
+ that differ; ambient shell env beats every file).
277
+
278
+ For MCP sessions the default environment is fixed at server start:
279
+ `run_test` / `explore_*` resolve against the `UNOTEST_ENV` the server
280
+ process inherited — set it in the MCP client's `env` block (e.g.
281
+ `.mcp.json`) and restart the server to switch the default.
282
+
283
+ `run_test` additionally accepts a per-call `env` parameter: the spawned
284
+ runner child gets `UNOTEST_ENV=<env>` for that run only (the server and
285
+ any explore session keep their own). CLI runs take `--env <name>` per
286
+ invocation.
287
+
288
+ You never have to guess the active state: `explore_start` and
289
+ `run_test` replies carry an `environment` field — the active name
290
+ (`null` = base) and every layer file with an `exists` flag — plus the
291
+ effective `baseUrl`. A missing variable error also lists the searched
292
+ layers, and every CLI run prints a one-line header with the layers and
293
+ the effective baseUrl.
294
+
271
295
  ## Debug logging
272
296
 
273
297
  Set `UNOTEST_DEBUG=1` in `unotest/.env` and restart the MCP server to
@@ -53,8 +53,9 @@ function test_my_scenario() {
53
53
  - [Multi-context](#multi-context) — multi-tab / iframes
54
54
  - [Storage](#storage) — localStorage / cookies
55
55
  - [Edge actions](#edge-actions) — drag, upload, paste
56
- - [Sandbox primitives](#sandbox-primitives) — shell / db / HTTP
56
+ - [Sandbox primitives](#sandbox-primitives) — shell / db / HTTP / files
57
57
  - [Typed getters](#typed-getters) — page properties
58
+ - [Generators](#generators) — random fixture data + time
58
59
  - [`evaluate`](#evaluate) — escape hatch into the page
59
60
  - [Logging](#logging)
60
61
 
@@ -330,8 +331,8 @@ assertUrl('https://example.com/checkout')
330
331
  Generic boolean assert. Throws with `message` when `value` is falsy.
331
332
 
332
333
  ```js
333
- result = shell('echo', 'ok');
334
- assertTrue(result.code == 0, 'shell exit code should be 0');
334
+ probe = shell('grep', '-q', 'ready', 'app.log', {allowNonZero: true});
335
+ assertTrue(probe.code == 0, 'app.log should contain "ready"');
335
336
  ```
336
337
 
337
338
  ---
@@ -350,6 +351,22 @@ Empty string when the element has no text node (does not throw).
350
351
 
351
352
  ### `isVisible(loc)` → `boolean`
352
353
 
354
+ ### `isDisabled(loc)` → `boolean` / `isEnabled(loc)` → `boolean`
355
+
356
+ Disabled = native `:disabled` (covers `<fieldset disabled>` inheritance)
357
+ **or** `aria-disabled="true"`. Use these — not `getAttribute(loc,
358
+ 'disabled')`, which cannot distinguish a present boolean attribute from
359
+ an absent one (both read as `""`).
360
+
361
+ ```js
362
+ assertTrue(isEnabled(getByRole('button', {name: 'Send'})), 'send button should be active');
363
+ ```
364
+
365
+ ### `hasAttribute(loc, name)` → `boolean`
366
+
367
+ Whether the attribute is present at all — the honest probe for boolean
368
+ attributes (`disabled`, `readonly`, `required`, …).
369
+
353
370
  ```js
354
371
  n = count(getByRole('row'));
355
372
  if (n > 10) {
@@ -415,6 +432,26 @@ waitForText(/\bhi\b/, {timeout: 60000}); // word-boundary, long poll
415
432
 
416
433
  `state: 'hidden'` waits until **no** visible occurrence remains.
417
434
 
435
+ **Echo trap — wait for the reply, not your own message.** In a chat/feed
436
+ UI the text you just sent is itself on the page, so
437
+ `waitForText('Bot Service')` after
438
+ `fill(box, '@Bot Service what is …')` goes green **before** the bot
439
+ answers — the wait matched your own input. The linter flags this
440
+ statically (`lint:echo-assert`). The robust pattern: count the messages,
441
+ send, then wait for the count to grow — and only then assert on reply
442
+ content:
443
+
444
+ ```js
445
+ n = count(locator('[data-message]'));
446
+ fill(getByRole('textbox'), '@Bot Service ' + question);
447
+ press(getByRole('textbox'), 'Enter');
448
+ waitForCount(locator('[data-message]'), n + 2, {timeout: 90000}); // echo + reply
449
+ waitForText(/Ital/i, {timeout: 90000}); // reply content
450
+ ```
451
+
452
+ A unique marker (`randomWord(8)`) in the outgoing message plus a wait on
453
+ reply-specific text also works when the feed has no stable item locator.
454
+
418
455
  ### `waitForCount(loc, count, options?)`
419
456
 
420
457
  Poll until the locator matches **at least** `count` elements. The chat
@@ -435,14 +472,18 @@ waitForText(/\bshipping\b/i, {timeout: 90000});
435
472
  ### `pause(ms)`
436
473
 
437
474
  Hard sleep. **Avoid** — the linter flags it (`lint:pause-explicit`). Use
438
- `waitFor` / `waitForText` / assertion polling instead. Allowed only with
439
- a justifying `// reason:` comment.
475
+ `waitFor` / `waitForText` / assertion polling instead. A justified
476
+ occurrence is silenced per-line with `// lint-ok: <reason>` (the reason
477
+ is required — a bare `// lint-ok` suppresses nothing):
440
478
 
441
479
  ```js
442
- // reason: third-party widget has no completion signal we can hook into
443
- pause(500);
480
+ pause(500); // lint-ok: third-party widget has no completion signal to hook into
444
481
  ```
445
482
 
483
+ `// lint-ok:` works for any warning/info diagnostic on its line (legacy
484
+ helpers with known warnings stop drowning out new ones). Error-severity
485
+ diagnostics are never suppressible.
486
+
446
487
  ---
447
488
 
448
489
  ## Multi-context
@@ -558,20 +599,76 @@ apiBaseUrl}` — the scenario **cannot** override.
558
599
  export default {
559
600
  sandbox: {
560
601
  shellCwd: process.cwd(),
602
+ shellTimeoutMs: 120000, // wall-clock budget per shell() call
603
+ exportSecrets: ['STAND_TOKEN'], // .secrets vars exported to shell() children
561
604
  database: 'postgres://app:app@localhost:5432/myapp_test',
562
605
  apiBaseUrl: 'http://localhost:3000/api',
563
606
  },
564
607
  };
565
608
  ```
566
609
 
567
- ### `shell(cmd, ...args)` → `{stdout, stderr, code}`
610
+ ### `shell(cmd, ...args, options?)` → `{stdout, stderr, code}`
568
611
 
569
612
  `execFile`-style — **no shell interpretation**, no `&&` / `|` /
570
613
  redirection. cwd from `sandbox.shellCwd`.
571
614
 
615
+ Semantics:
616
+
617
+ - **Non-zero exit code fails the step** (typed error with the exit code
618
+ and stderr/stdout tails). To inspect the code yourself — e.g. a probe
619
+ where non-zero is expected — pass `{allowNonZero: true}` as the last
620
+ argument; the call then resolves with `{stdout, stderr, code}`.
621
+ - A missing binary / permission fault is a distinct "failed to start"
622
+ error, never a fake `code: 1`.
623
+ - **Timeout**: each call has a wall-clock budget —
624
+ `sandbox.shellTimeoutMs` (default 120 000 ms) or per-call
625
+ `{timeoutMs}`. On expiry the child is killed and the step fails.
626
+ - Output capture is limited to 10 MiB per stream; exceeding it fails the
627
+ step (write bulk output to a file instead).
628
+ - **Env**: the child inherits the runner's `process.env` (which includes
629
+ `unotest/.env` layers). Secrets from `.secrets*` are **not** inherited;
630
+ export them explicitly via the `sandbox.exportSecrets` allowlist
631
+ (values stay masked in logs).
632
+
572
633
  ```js
573
- out = shell('pnpm', 'db:create-user', 'alice');
574
- assertTrue(out.code == 0, out.stderr);
634
+ out = shell('pnpm', 'db:create-user', 'alice'); // non-zero exit → step fails
635
+ probe = shell('grep', '-q', 'ready', 'app.log', {allowNonZero: true});
636
+ if (probe.code == 0) { /* … */ }
637
+ ```
638
+
639
+ **Background / detached processes.** `shell()` waits for the child's
640
+ stdout/stderr pipes to close, not just for the command to exit. A
641
+ command that spawns a background process (`nohup node listener.js &`
642
+ inside a wrapper script) keeps the pipes open — the call runs until the
643
+ timeout. Recipe: fully detach the worker inside the wrapper script by
644
+ redirecting all its descriptors, then await its output with
645
+ `waitForFile`:
646
+
647
+ ```bash
648
+ #!/bin/sh
649
+ # start-listener.sh — detach completely: new session, no inherited fds
650
+ node listener.js < /dev/null > listener.log 2>&1 &
651
+ ```
652
+
653
+ ```js
654
+ step("Start the listener", () => {
655
+ shell('./scripts/start-listener.sh');
656
+ waitForFile('listener.log', 'listening on', {timeoutMs: 10000});
657
+ });
658
+ ```
659
+
660
+ ### `waitForFile(path, pattern?, options?)` → `string`
661
+
662
+ The file-side analogue of `waitForText` — polls a file until it exists
663
+ and (optionally) contains `pattern` (substring or regex literal), then
664
+ returns the file content. Relative `path` resolves against
665
+ `sandbox.shellCwd`. `options`: `{timeoutMs}` (default 20 000 ms). On
666
+ expiry the step fails with the file path and the last observed state.
667
+
668
+ ```js
669
+ step("Wait for the bot reply in the JSONL feed", () => {
670
+ line = waitForFile('events.jsonl', /"type":"reply"/, {timeoutMs: 30000});
671
+ });
575
672
  ```
576
673
 
577
674
  ### `dbQuery(sql, ...params)` → `rows[]`
@@ -619,26 +716,31 @@ The variable must hold an http(s) URL; an unknown name fails with the
619
716
  usual "add it to unotest/.env" message. URLs never appear in the
620
717
  scenario — hosts are controlled by project env files only.
621
718
 
622
- **Multipart file upload.** A body of the exact shape
623
- `{file, field?, fields?}` posts as `multipart/form-data`:
719
+ **Multipart file upload `upload(path, options?)`.** Passing the
720
+ result of `upload(...)` as the body posts `multipart/form-data`:
624
721
 
625
722
  ```js
626
723
  res = apiCall('POST', '/tenants/t1/documents',
627
- {file: 'fixtures/manual.pdf', fields: {source: 'e2e'}},
724
+ upload('fixtures/manual.pdf', {fields: {source: 'e2e'}}),
628
725
  {Authorization: BEARER});
629
726
  assertTrue(res.status == 202, 'ingestion not accepted');
630
727
  ```
631
728
 
632
- - `file` — **relative** path, resolved against `sandbox.uploadDir`
729
+ - `path` — **relative**, resolved against `sandbox.uploadDir`
633
730
  (defaults to the project root). Absolute paths and `../` escapes
634
731
  out of that root throw.
635
- - `field` — form part name, default `"file"`. `fields` — extra string
636
- parts. The part's content type derives from the file extension.
637
- - Don't set a `Content-Type` header with a multipart body — `fetch`
732
+ - `options.field` — form part name, default `"file"`.
733
+ `options.fields` — extra string parts. The part's content type
734
+ derives from the file extension.
735
+ - Don't set a `Content-Type` header with an `upload()` body — `fetch`
638
736
  derives the boundary itself; a manual value throws.
639
- - A JSON body that happens to contain a `file` key **plus any other
640
- key** still posts as JSON only the exact multipart shape switches
641
- modes.
737
+ - Plain JSON bodies are NEVER promoted to multipart a body with a
738
+ `file` key posts as JSON. (Before 0.11, the exact shape
739
+ `{file, field?, fields?}` switched modes by key name; that magic
740
+ broke JSON APIs with a legitimate `file` field and is gone —
741
+ migrate to `upload(...)`.)
742
+ - `upload(...)` must be the body itself, not a field inside a JSON
743
+ body — extra form fields go in `options.fields`.
642
744
 
643
745
  ---
644
746
 
@@ -652,6 +754,11 @@ Read page properties directly into a local variable.
652
754
  href = getAttribute(getByRole('link', {name: 'Docs'}), 'href');
653
755
  ```
654
756
 
757
+ Returns `""` when the attribute is missing — which makes it **blind to
758
+ boolean attributes**: `<button disabled>` and a button without the
759
+ attribute both read `""`. For those use `isDisabled(loc)` /
760
+ `hasAttribute(loc, name)`.
761
+
655
762
  ### `getInnerText(loc)` → `string`
656
763
 
657
764
  Like `textContent` but trimmed and rendered (display-aware).
@@ -671,6 +778,39 @@ Active page URL.
671
778
 
672
779
  ---
673
780
 
781
+ ## Generators
782
+
783
+ Random fixture data and time values — no imports, no `Date` / `Math` in
784
+ scenarios.
785
+
786
+ ### `randomFirstName()` / `randomLastName()` / `randomEmail()` → `string`
787
+
788
+ ### `randomText(length)` → `string`
789
+
790
+ Lorem-style prose cut to `length` characters.
791
+
792
+ ### `randomWord(length?)` → `string`
793
+
794
+ Random lowercase letters, default 8 — digit-free unique markers for apps
795
+ whose content filters reject numbers in text.
796
+
797
+ ```js
798
+ marker = randomWord(10);
799
+ fill(getByRole('textbox'), 'ping ' + marker);
800
+ waitForText(marker);
801
+ ```
802
+
803
+ ### `nowMs()` → `number`
804
+
805
+ Current epoch milliseconds — unique numeric suffixes.
806
+
807
+ ### `today()` → `string` / `daysFromNow(n)` → `string`
808
+
809
+ Local date as `YYYY-MM-DD`; `daysFromNow` accepts negative `n` for past
810
+ dates.
811
+
812
+ ---
813
+
674
814
  ## `evaluate`
675
815
 
676
816
  `evaluate(js, ...args)` — escape hatch. Runs `js` in the active page
@@ -714,6 +854,12 @@ screenshot('landing', {fullPage: true}); // full scroll height
714
854
  - `name` is slugified to `[a-z0-9._-]` (`'Bot Reply!'` → `bot-reply`);
715
855
  omitted → `shot`. Files are numbered in capture order.
716
856
  - **Options:** `fullPage?` (default `false` — viewport only).
857
+ - Before capturing, the call waits for the network to go quiet and for a
858
+ painted frame (up to 2s). Without it a `screenshot()` right after
859
+ `goto()` would freeze the blank pre-render frame — `goto` resolves on
860
+ `load`, which on a client-rendered app fires before any content is on
861
+ screen. A page that never goes quiet (polling, live feeds) costs the
862
+ 2s cap and is then captured as-is.
717
863
  - Not a visual assertion: the test does not compare images. In runtimes
718
864
  with no artifact dir (exploration) the call logs a warning, returns
719
865
  `null` and does NOT fail the run.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unotest/web",
3
- "version": "0.10.0",
3
+ "version": "0.12.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,54 +79,17 @@
79
79
  "tsx": "^4.19.2",
80
80
  "yaml": "^2.6.0",
81
81
  "zod": "^3.23.8",
82
- "@unotest/core": "^0.10.0",
83
- "@unotest/dsl": "^0.10.0",
84
- "@unotest/protocol": "^0.10.0",
85
- "@unotest/viewer": "^0.10.0",
86
- "@unotest/grounder-client": "^0.10.0"
82
+ "@unotest/core": "^0.12.0",
83
+ "@unotest/protocol": "^0.12.0",
84
+ "@unotest/viewer": "^0.12.0",
85
+ "@unotest/dsl": "^0.12.0",
86
+ "@unotest/grounder-client": "^0.12.0"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@types/node": "^22.10.0",
90
90
  "javascript-obfuscator": "^4.1.1",
91
91
  "tsup": "^8.5.1",
92
92
  "typescript": "^5.7.2",
93
- "@unotest/grounder": "^0.10.0"
94
- },
95
- "scripts": {
96
- "typecheck": "tsc --noEmit",
97
- "design": "npx serve -l 3111 design",
98
- "test": "node --import tsx --test --test-reporter=spec 'src/**/*.test.ts' 'scripts/**/*.test.mjs' 'evals/**/*.test.ts'",
99
- "compile": "tsup",
100
- "compile:all": "pnpm -C ../dsl compile && pnpm compile && pnpm -C ../viewer compile",
101
- "lint:scenarios": "tsx src/runner/cli.ts lint",
102
- "smoke:bundle": "node scripts/smoke-bundle.mjs",
103
- "check:docs-sync": "node scripts/check-docs-sync.mjs",
104
- "check:no-internal-refs": "node scripts/check-no-internal-refs.mjs",
105
- "check:no-cyrillic": "node scripts/check-no-cyrillic.mjs",
106
- "check:surface": "pnpm check:no-internal-refs && pnpm check:no-cyrillic && pnpm check:skill-prompt-sync && pnpm check:skills-built",
107
- "check:skill-prompt-sync": "node scripts/check-skill-prompt-sync.mjs",
108
- "check:skills-built": "node scripts/build-skills.mjs --check",
109
- "build:skills": "node scripts/build-skills.mjs",
110
- "check:tarball": "node scripts/check-tarball.mjs",
111
- "check:sibling-versions": "node scripts/check-sibling-versions.mjs",
112
- "build:guides": "node scripts/build-guides.mjs",
113
- "prepublish:check": "node scripts/prepublish-check.mjs",
114
- "evals:chain": "tsx evals/chain.ts",
115
- "evals:replay": "tsx evals/replay.ts",
116
- "evals:run": "tsx evals/run.ts",
117
- "evals:drive": "tsx evals/drive.ts",
118
- "evals:ground-bench": "tsx evals/ground-bench.ts",
119
- "evals:prepare": "tsx evals/prepare.ts",
120
- "evals:check": "tsx evals/check.ts",
121
- "evals:bless": "tsx evals/bless.ts",
122
- "evals:diff": "tsx evals/diff.ts",
123
- "perf:baseline": "node scripts/perf-baseline.mjs",
124
- "verify": "pnpm typecheck && pnpm lint:scenarios && pnpm check:surface && pnpm test",
125
- "obfuscate": "node scripts/obfuscate.mjs",
126
- "build": "pnpm verify && pnpm compile && pnpm obfuscate && pnpm smoke:bundle && pnpm build:guides && pnpm check:tarball",
127
- "e2e": "tsx src/runner/cli.ts e2e",
128
- "m1:cross-browser": "node scripts/m1-cross-browser.mjs",
129
- "mcp": "tsx src/mcp/server.ts",
130
- "serve-fixture": "node examples/fixtures/break-fix-app/serve.mjs"
93
+ "@unotest/grounder": "^0.12.0"
131
94
  }
132
95
  }
@@ -235,6 +235,11 @@ result = evaluate(
235
235
  );
236
236
  ```
237
237
 
238
+ Index access reads data off a **bare variable** only — `obj.prop[i]`
239
+ does not parse; assign the member first:
240
+ `m = state.matches; last = m[m.length - 1];`. `arr[i] = v` stays
241
+ rejected.
242
+
238
243
  ## Sandbox primitives
239
244
 
240
245
  For test setup / teardown that touches the host machine, the registry
@@ -246,9 +251,13 @@ exposes four primitives — **but the consumer project's
246
251
  - **`dbQuery(sql, …params)`** / **`dbExec(sql, …params)`** —
247
252
  parameterized SQL against `sandbox.database` (postgres / mysql /
248
253
  sqlite, picked by URL scheme).
249
- - **`apiCall(method, path, body?, headers?)`** — HTTP fetch against
250
- `sandbox.apiBaseUrl`. **Path-only** — absolute URLs throw to prevent
251
- scenarios from hitting arbitrary hosts.
254
+ - **`apiCall(method, path, body?, headers?, opts?)`** — HTTP fetch
255
+ against `sandbox.apiBaseUrl`. **Path-only** — absolute URLs throw to
256
+ prevent scenarios from hitting arbitrary hosts. Multipart upload:
257
+ pass `upload('fixtures/doc.pdf', {field?, fields?})` as the body
258
+ (relative path inside the project / `sandbox.uploadDir`; don't set
259
+ Content-Type yourself). A JSON body with a `file` key posts as plain
260
+ JSON — there is no key-name magic.
252
261
 
253
262
  If a primitive throws with "sandbox.X is not configured", tell the
254
263
  user to add it to `unotest.config.*`. Do not infer secrets from the