@unotest/web 0.9.1 → 0.11.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/.claude/skills/write-e2e-test/SKILL.md +118 -38
- package/.claude/skills/write-e2e-test-ground/SKILL.md +787 -0
- package/CHANGELOG.md +297 -0
- package/dist/config/schema.d.ts +29 -10
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.d.ts +5 -2
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +19 -3
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/inspection/page-inject.d.ts +11 -35
- package/dist/inspection/page-inject.js +173 -1032
- package/dist/{interfaces-dbZG10RS.d.ts → interfaces-MxHi1Air.d.ts} +50 -3
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.d.ts +11 -1
- 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 +103 -2
- package/guides/dsl-reference.md +150 -13
- package/package.json +10 -38
- package/src/mcp/prompts/agent-test-author.md +71 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0xe93819=_0x1d2c;(function(_0x14c85d,_0x41cbe5){const _0x427889={_0x2f1ee9:0x8f,_0x5e5f6c:0x93},_0x101c8=_0x1d2c,_0x5f4698=_0x14c85d();while(!![]){try{const _0x382684=parseInt(_0x101c8(0x92))/0x1+-parseInt(_0x101c8(_0x427889._0x2f1ee9))/0x2+-parseInt(_0x101c8(_0x427889._0x5e5f6c))/0x3+parseInt(_0x101c8(0x9b))/0x4*(parseInt(_0x101c8(0x8d))/0x5)+parseInt(_0x101c8(0x87))/0x6+parseInt(_0x101c8(0x9c))/0x7+-parseInt(_0x101c8(0xa0))/0x8;if(_0x382684===_0x41cbe5)break;else _0x5f4698['push'](_0x5f4698['shift']());}catch(_0x132ec3){_0x5f4698['push'](_0x5f4698['shift']());}}}(_0x20f8,0xb4469));var __defProp=Object[_0xe93819(0x90)],__name=(_0x259df8,_0xb1a55d)=>__defProp(_0x259df8,_0xe93819(0x88),{'value':_0xb1a55d,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';function _0x1d2c(_0x5f117c,_0x438070){_0x5f117c=_0x5f117c-0x87;const _0x20f84a=_0x20f8();let _0x1d2c61=_0x20f84a[_0x5f117c];if(_0x1d2c['ChVSbS']===undefined){var _0x5153a7=function(_0x25b804){const _0xabea35='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x259df8='',_0xb1a55d='';for(let _0x27a254=0x0,_0x5ed29c,_0x29cc37,_0x7d12be=0x0;_0x29cc37=_0x25b804['charAt'](_0x7d12be++);~_0x29cc37&&(_0x5ed29c=_0x27a254%0x4?_0x5ed29c*0x40+_0x29cc37:_0x29cc37,_0x27a254++%0x4)?_0x259df8+=String['fromCharCode'](0xff&_0x5ed29c>>(-0x2*_0x27a254&0x6)):0x0){_0x29cc37=_0xabea35['indexOf'](_0x29cc37);}for(let _0x2cbbc6=0x0,_0x1e59a1=_0x259df8['length'];_0x2cbbc6<_0x1e59a1;_0x2cbbc6++){_0xb1a55d+='%'+('00'+_0x259df8['charCodeAt'](_0x2cbbc6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xb1a55d);};_0x1d2c['fhtcfI']=_0x5153a7,_0x1d2c['IBVTxc']={},_0x1d2c['ChVSbS']=!![];}const _0x2ee8d3=_0x20f84a[0x0],_0x295fce=_0x5f117c+_0x2ee8d3,_0xc7b11f=_0x1d2c['IBVTxc'][_0x295fce];return!_0xc7b11f?(_0x1d2c61=_0x1d2c['fhtcfI'](_0x1d2c61),_0x1d2c['IBVTxc'][_0x295fce]=_0x1d2c61):_0x1d2c61=_0xc7b11f,_0x1d2c61;}import{existsSync}from'fs';function _0x20f8(){const _0x84cdc4=['mZGYmti5nxDMvMzqCa','Dw5VDgvZDenVBMzPz01QCW','mte5mde1ngznyMzWAG','zgvMAw5LuhjVCgvYDhK','iYb1BM90zxn0lxDLyIdIGjqGy29WAwvKihrVihvUB3rLC3qVlMvUDIbIEsbGAw5PDgaGAwyGBM90ihbYzxnLBNqUcImkiYbgAwXSigLUihzHBhvLCYb0Agf0igfWCgX5ihrVihLVDxiGChjVAMvJDc4GvMfYAwfIBgvZigfYzsbSB2fKzwqGyNKGDgHLcImGCNvUBMvYigf0ihnJzw5HCMLVihn0yxj0lGOJcImGuMvMzxjLBMnLigfUEsb2yxjPywjSzsbMCM9TigeGC2nLBMfYAw8GyNKGAxrZigjHCMuGvvbqrvjFu05bs0uGBMfTzsdIGjqkiYbUBYbLBNyOks9ZzwnYzxqOksb3CMfWCgvYoGOJcImGicbNB3rVkcCVBg9NAw4NktSGicaGicaGicaGicaGicaGicaGicaGicaGicmGCMvSyxrPDMuG4OcuihnLzsbbufbFqKftrv9vuKWkiYaGigzPBgWOz2v0qNLmywjLBcGNrw1HAwWNksWGvevtvf9vu0vsx0vnquLmktSkiWOJifnLy3jLDcb2ywX1zxmGkhbHC3n3B3jKCYWGDg9Rzw5ZksbNBYbPBIb1BM90zxn0lY5ZzwnYzxrZigLUC3rLywqG4OcuihnHBwukiYbMB3jTyxqSigj1DcbTyxnRzwqGAw4GzxzLCNKGBg9NlIbbBIb1BMTUB3DUifvquevsx1noquTfig5HBwuGzMfPBhmGDgHLcImGCNvUihDPDgGGysbJBgvHCIaIywrKigL0ihrVihvUB3rLC3qVlMvUDIiGBwvZC2fNzs4kiWOJievUDMLYB25Tzw50CZOGB3zLCNjPzguGyw55ihzHBhvLihbLCIbLBNzPCM9UBwvUDcb3AxrOig92zxjSyxKGzMLSzxmG4OcucImGDw5VDgvZDc8Uzw52lNn0ywDPBMCSihvUB3rLC3qVlMvUDI5WCM9KDwn0Aw9UicHZzwnYzxrZoIaUC2vJCMv0CY48zw52pIKUcImGu2vSzwn0ig9UztOGyg5WEcbaDw5VDgvZDc93zwiGztjLidXUyw1LpIaTlwvUDIbZDgfNAw5Nyc4GvgHLig92zxjSyxKGBgf5zxjZcImGB3zLCIb0AgLZigjHC2uGzMLSzsaOB3zLCMXHEsb3Aw5ZktSGDgHLihnOzwXSigvUDMLYB25Tzw50ihDPBNmGB3zLCIbIB3rOlGOkiYaTls0GqxbWihvUzgvYihrLC3qGls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0kiYbuAguGyxbWj3mGyMfZzsbvuKWUifjLBgf0AxzLigDVDg8OjY9WyxrOjYKGCMvZB2X2zxmGywDHAw5ZDcbPDcaOD2LYzwqGAw50BWOJifbSyxL3CMLNAhqNCYbIyxnLvvjmigf1Dg9TyxrPy2fSBhKPlcbZBYb3CML0zsbNB3rVkcCVBg9NAw4NksdIGjqGBMv2zxikiYbNB3rVkefquf9cqvnfx1vstcaRicCVBg9NAw4Nks4GqwXZBYb1C2vKigzVCIbHC3nLCNrvCMWGC3vIC3rYAw5Nig1HDgnOAw5NlGOJierLzMf1BhrZihrVihrOzsb1BM90zxn0ihbSyxLNCM91BMqGC28GDgHLigv4yw1WBguGC2nLBMfYAw9Zihj1BIbVDxqGB2yGDgHLcImGyM94oYbWB2LUDcbPDcbHDcb5B3vYig93BIbHChaUcKfquf9cqvnfx1vstd1ODhrWCZOVl3bSyxLNCM91BMqUDw5VDgvZDc5JB20kcImGls0TierHDgfIyxnLic0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0TcImGvxnLzcbIEsbKyLf1zxj5ic8GzgjfEgvJlIbjBNn0ywXSihrOzsbTyxrJAgLUzYbKCML2zxiGyxmGysbWzwvYlwrLCdOkiYaGihbUCg0GywrKic1eihbNieb0ExbLCY9WzYaGicaGicaGicaJigzVCIbWB3n0z3jLC3fSoI8VcImGicbWBNbTigfKzcaTrcbTExnXBdiGicaGicaGicaGicaGicaGiYbMB3iGBxLZCwW6lY8kiYaOu1fmAxrLihzPysbIzxr0zxiTC3fSAxrLmYdIGjqGAw5ZDgfSBcbVBMX5igLMig5LzwrLzc4PcKrbvefcqvnfx1vstd1WB3n0z3jLC3fSoI8VCg9ZDgDYzxm6Cg9ZDgDYzxnaBg9JywXOB3n0oJu0mZiVBxLHChbFDgvZDaOkiYaTls0GuNvUBMvYic0Tls0Tls0Tls0Tls0Tls0Tls0Tls0Tls0T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','mtmYodKWnhvHy3botG','mZi0mdm1mwfnB2LxuG','Dw5VDgvZDa','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','lY8GqhvUB3rLC3qVD2vIihbYB2PLy3qGy29UzMLNlIbbBgWGzMLLBgrZigfYzsbVChrPB25HBcdIGjqGzgvMyxvSDhmGyxbWBhKklY8GD2HLBIbVBwL0DgvKlGOVlWOVlYbtyxzLzcbHCYaUBwPZihnVihrOzsbYDw50Aw1LigXVywrZigL0igfZievttsbYzwDHCMrSzxnZig9MihrOzsbWCM9Qzwn0j3mklY8GCgfJA2fNzs5QC29Uicj0ExbLiIbMAwvSzc4GrM9YieLersbHDxrVy29TCgXLDguSihr5CguTAw1WB3j0ihrOzsbZy2HLBwe6cI8VcI8VicaGlYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcI8VicaGzxHWB3j0igrLzMf1BhqGEYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYb9oWOklYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcMv4Cg9YDcbKzwzHDwX0ihSkicaVlYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYWkicaVlYbICM93C2vYCZOGwYDJAhjVBwL1BsCSicDMAxjLzM94jYWGj3DLyMTPDcDDlcaGlY8Gq0KGB3zLCNjPzgukicaVlYb2Awv3Cg9YDdOGEYb3Awr0AdOGmti4mcWGAgvPz2H0oIa3mJaGFsWkicaVlYbYzxrYEtOGEYbJB3vUDdOGmsWGB246ifSNDhjHBNnPzw50j10GFsWGicaGicaGic8Vienjig92zxjYAwrLcIaGlY8GC3rVCMfNzvn0yxrLoIaNlNvUB3rLC3qVy2fJAguVyxv0Ac5QC29UjYWGicaGicaVlYbZzwuGAgvSCgvYCWO','x2HLBhbLCNm','icbJAgfUBMvSoIa','Dw5VDgvZDc5JB25MAwCUBwPZ','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4Guhv0ig5VBI1ZzwnYzxqGDMfSDwvZicHvuKXZlcbLBwfPBhmSigLKCYKGAw4GDw5VDgvZDc8Uzw52lGOJcImGrKXfrvrFrvHbtvbmrqPmt0DjtJ0kueftu1DpuKq9cLrps0vopqO','nfHKsLrtqG','nJK3otDRD3rIt04','zw52rxHHBxbSzq','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','ztjL','mtK5nZKXmLDWue96ua','mdeTC21VA2uUANm','ChvZAa','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','mZm2mti0oer1r0Ppza','BMfTzq','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','zxHHBxbSzxm','lY8Gtw92zsaRihjLBMfTzsb0AgLZigzPBguGDg8GpgzLyxr1CMu+lZX5B3vYx25HBwu+lMPZicHLlMCUcI8Vigf1DgGVBg9NAw4UANmPigfUzcb0AguGzNvUy3rPB24GyMvSB3CGDg8GDgvZDf88Ew91CL9Uyw1LpIGPlIbty2vUyxjPB3mGBgL2zqOVlYbPBIbMzwf0DxjLihn1yMzVBgrLCNmSie5pvcb0AguGztjLihjVB3qG4OcuihrOzsbSAw50zxiGkgXPBNq6C2nLBMfYAw8TAw4TCM9VDcKklY8GCMvQzwn0CYbHihrLC3qGzMLSzsbWBgfJzwqGzgLYzwn0BhKGAw4GDw5VDgvZDc9LmMuVlIbuAguGBg9HzgvYigrLCML2zxmGDgHLcI8VigvUDhj5ig5HBwuGzNjVBsb0AguGzMLSzsbIyxnLBMfTzsdIGjqGA2vIywiTy2fZzsbKyxnOzxmGyMvJB21LihvUzgvYC2nVCMvZlGOklY8GrxzLCNKGzxHLy3v0ywjSzsbZDgvWig11C3qGC2L0igLUC2LKzsbHihn0zxaOiI4UlIiSicGPid0+ihSG4OcMih0PigjSB2nRlIbuAguklY8GDgL0BguGAxmGysbWBgfPBI1fBMDSAxnOigrLC2nYAxb0Aw9Uig9MihrOzsbNCM91CdSGDgHLihn0zxbZigLUC2LKzsbHCMuklY8GDgHLigLTCgXLBwvUDgf0Aw9UlIbhCM91CcbIEsbPBNrLBNqGkfnLDhvWic8Grw50zxiGlYbby3qGlYbbC3nLCNqGB3iklY8GD2HHDgv2zxiGCMvHzhmGD2vSBcKG4Ocuig9UzsbIBg9JAYbWzxiGBg9NAwnHBcbJAhvUAY4kcMz1BMn0Aw9UihrLC3rFEw91CL9Uyw1Lx2HLCMuOksb7cIaGC3rLCcGIu2vLzcbHigTUB3DUihvZzxiGDMLHiercic8GqvbjigzPEhr1CMvZigzYB20Gx2HLBhbLCNmViIWGkcKGpt4GEWOGicaGlY8GicaGD2LWzv9LmMvFDxnLCNmOktSkicaGic8VicaGihvZzxjFAwqGpsbZzwvKx3vZzxiOj2fSAwnLqgv4yw1WBguUy29TjYWGj3nLy3jLDcCPoWOGih0PoWOkicbZDgvWkcjtAwDUigLUigfZihrOzsbZzwvKzwqGDxnLCIiSicGPid0+ihSkicaGigDVDg8Oj2H0DhbZoI8VEw91CI1HChaUDgvZDc9SB2DPBICPoWOGicaGlY8GicaGzMLSBcHNzxrcEuXHyMvSkcDfBwfPBcCPlcaNywXPy2vazxHHBxbSzs5JB20NktSkicaGic8VicaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGj3nLy3jLDcCPoWOGicaGlY8GicaGy2XPy2SOz2v0qNLsB2XLkcDIDxr0B24Nlcb7BMfTztOGj0XVzYbPBID9ksK7cIaGFsK7cGOGihn0zxaOiKfZC2vYDcb0AguGzgfZAgjVyxjKihnOB3DZihrOzsbZAwDUzwqTAw4GDxnLCIiSicGPid0+ihSkicaGic8VicaGigfZC2vYDfvYBcGNl2rHC2HIB2fYzcCPoWOGicaGlY8GicaGyxnZzxj0vgv4DcHNzxrcEvjVBguOj2HLywrPBMCNksWGj1DLBgnVBwuSiefSAwnLjYK7cIaGicaVlYaGicbJB3vUDca9igrIuxvLCNKOj1nftevdvcbJB3vUDcGQksbguK9nihvZzxjZifDirvjfigfJDgL2zsa9ihrYDwuNktSkicaGic8VicaGigfZC2vYDfrYDwuOy291BNqGpIaWlcaNzxHWzwn0zwqGyxqGBgvHC3qGB25LigfJDgL2zsb1C2vYjYK7cIaGFsK7cN0k','C3rYAw5NAwz5'];_0x20f8=function(){return _0x84cdc4;};return _0x20f8();}import{join}from'path';var templates={'scenarioTemplate':_0xe93819(0x8b),'agentsMd':_0xe93819(0x89),'claudeMdBody':_0xe93819(0x9e),'examples':{'01-smoke.js':_0xe93819(0xa3),'02-form-fill.js':'//\x20Example\x2002\x20—\x20fill\x20an\x20input\x20+\x20assert\x20the\x20app\x20reacted.\x0a//\x0a//\x20Against\x20playground.unotest.com/scenarios/big-table.\x20Demonstrates\x20getByRole\x0a//\x20for\x20a\x20labelled\x20input,\x20typed\x20input\x20via\x20fill(),\x20and\x20a\x20locator\x20method-chain\x0a//\x20(getByRole(\x27row\x27).filter({hasText}).first())\x20in\x20an\x20assertion.\x0a//\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/02-form-fill\x0a\x0afunction\x20test_form_fill_happy_path()\x20{\x0a\x20\x20step(\x22Filter\x20the\x20Big\x20Table\x20by\x20a\x20name\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/scenarios/big-table\x27);\x0a\x20\x20\x20\x20fill(getByRole(\x27textbox\x27,\x20{name:\x20\x27Filter\x20by\x20name\x27}),\x20\x27Uma\x20Quinn\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Filtering\x20reveals\x20the\x20Clear\x20filter\x20control\x20and\x20matching\x20rows\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27button\x27,\x20{name:\x20\x27Clear\x20filter\x27}));\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27row\x27).filter({hasText:\x20\x27Uma\x20Quinn\x27}).first());\x0a\x20\x20});\x0a}\x0a'},'secretsExample':_0xe93819(0x9a),'envExample':_0xe93819(0x91)};function unotestConfigMjs(_0x27a254){const _0x4e3937={_0x3855d2:0x8c,_0x4ce11c:0x96},_0x479397=_0xe93819,_0x5ed29c=_0x27a254===void 0x0?_0x479397(0x95):_0x479397(0x98)+JSON[_0x479397(_0x4e3937._0x3855d2)](_0x27a254)+',';return _0x479397(_0x4e3937._0x4ce11c)+_0x5ed29c+'\x0a\x20\x20//\x20viewer:\x20{\x0a\x20\x20//\x20\x20\x20port:\x205173,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20default:\x20random\x20free\x20port\x0a\x20\x20//\x20\x20\x20browser:\x20true,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20default:\x20true\x20(auto-open\x20on\x20`viewer`)\x0a\x20\x20//\x20},\x0a};\x0a';}__name(unotestConfigMjs,_0xe93819(0x8e));async function scaffoldWorkspace(_0x29cc37,_0x7d12be={}){const _0x337c21={_0x14a4c5:0x94,_0x55e50a:0x9d,_0x4e86cd:0x9f,_0x52e117:0x8a,_0x2bea52:0xa1,_0x1eebe2:0xa1,_0x436de2:0xa2,_0x1680d0:0xa2},_0x4c224c=_0xe93819,_0x2cbbc6=[],_0x1e59a1=[];await mkdir(join(_0x29cc37,_0x4c224c(0x94),_0x4c224c(0x9f),'examples'),{'recursive':!![]}),await mkdir(join(_0x29cc37,_0x4c224c(0x94),_0x4c224c(0x9f),_0x4c224c(0x97)),{'recursive':!![]});const _0x50831c=[{'rel':_0x4c224c(0x99),'content':unotestConfigMjs(_0x7d12be['channel'])},{'rel':join(_0x4c224c(_0x337c21._0x14a4c5),'.env'),'content':templates[_0x4c224c(_0x337c21._0x55e50a)]},{'rel':join(_0x4c224c(0x94),_0x4c224c(_0x337c21._0x4e86cd),_0x4c224c(_0x337c21._0x52e117),_0x4c224c(_0x337c21._0x2bea52)),'content':templates[_0x4c224c(_0x337c21._0x52e117)][_0x4c224c(_0x337c21._0x1eebe2)]}];for(const {rel:_0xf7e9f6,content:_0x4b218a}of _0x50831c){const _0x3a0841=join(_0x29cc37,_0xf7e9f6);if(existsSync(_0x3a0841)){_0x1e59a1[_0x4c224c(_0x337c21._0x436de2)](_0xf7e9f6);continue;}await writeFile(_0x3a0841,_0x4b218a),_0x2cbbc6[_0x4c224c(_0x337c21._0x1680d0)](_0xf7e9f6);}return{'projectRoot':_0x29cc37,'created':_0x2cbbc6,'skipped':_0x1e59a1};}__name(scaffoldWorkspace,'scaffoldWorkspace');export{scaffoldWorkspace};
|
|
1
|
+
function _0x5f21(_0x1d7224,_0x1aa1fa){_0x1d7224=_0x1d7224-0x186;const _0x92880c=_0x9288();let _0x5f2129=_0x92880c[_0x1d7224];if(_0x5f21['HmbwBi']===undefined){var _0x5c26a1=function(_0x3304ef){const _0x4a31b1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x24650c='',_0xd5a10d='';for(let _0x2350b9=0x0,_0x70ac1c,_0x37d184,_0x5c4835=0x0;_0x37d184=_0x3304ef['charAt'](_0x5c4835++);~_0x37d184&&(_0x70ac1c=_0x2350b9%0x4?_0x70ac1c*0x40+_0x37d184:_0x37d184,_0x2350b9++%0x4)?_0x24650c+=String['fromCharCode'](0xff&_0x70ac1c>>(-0x2*_0x2350b9&0x6)):0x0){_0x37d184=_0x4a31b1['indexOf'](_0x37d184);}for(let _0x1babfa=0x0,_0x39ed32=_0x24650c['length'];_0x1babfa<_0x39ed32;_0x1babfa++){_0xd5a10d+='%'+('00'+_0x24650c['charCodeAt'](_0x1babfa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xd5a10d);};_0x5f21['qoWtft']=_0x5c26a1,_0x5f21['JcQlWh']={},_0x5f21['HmbwBi']=!![];}const _0x44852a=_0x92880c[0x0],_0x2c7dd3=_0x1d7224+_0x44852a,_0xec3923=_0x5f21['JcQlWh'][_0x2c7dd3];return!_0xec3923?(_0x5f2129=_0x5f21['qoWtft'](_0x5f2129),_0x5f21['JcQlWh'][_0x2c7dd3]=_0x5f2129):_0x5f2129=_0xec3923,_0x5f2129;}const _0x3ee982=_0x5f21;(function(_0x2ce18c,_0x2c08d4){const _0x4423db={_0x12e61c:0x197,_0x124743:0x18c,_0x567e3b:0x196,_0x10d6df:0x19f},_0x163100=_0x5f21,_0x30ad7a=_0x2ce18c();while(!![]){try{const _0xf10bb0=parseInt(_0x163100(0x198))/0x1*(parseInt(_0x163100(0x194))/0x2)+parseInt(_0x163100(0x19b))/0x3*(-parseInt(_0x163100(_0x4423db._0x12e61c))/0x4)+-parseInt(_0x163100(0x193))/0x5+parseInt(_0x163100(0x191))/0x6*(-parseInt(_0x163100(_0x4423db._0x124743))/0x7)+parseInt(_0x163100(0x18b))/0x8+-parseInt(_0x163100(0x18d))/0x9*(parseInt(_0x163100(_0x4423db._0x567e3b))/0xa)+parseInt(_0x163100(_0x4423db._0x10d6df))/0xb*(parseInt(_0x163100(0x189))/0xc);if(_0xf10bb0===_0x2c08d4)break;else _0x30ad7a['push'](_0x30ad7a['shift']());}catch(_0x1d74c9){_0x30ad7a['push'](_0x30ad7a['shift']());}}}(_0x9288,0xed073));var __defProp=Object[_0x3ee982(0x18e)],__name=(_0x24650c,_0xd5a10d)=>__defProp(_0x24650c,_0x3ee982(0x187),{'value':_0xd5a10d,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'scenarioTemplate':_0x3ee982(0x19a),'agentsMd':_0x3ee982(0x192),'claudeMdBody':_0x3ee982(0x186),'examples':{'01-smoke.js':_0x3ee982(0x1a2),'02-form-fill.js':'//\x20Example\x2002\x20—\x20fill\x20an\x20input\x20+\x20assert\x20the\x20app\x20reacted.\x0a//\x0a//\x20Against\x20playground.unotest.com/scenarios/big-table.\x20Demonstrates\x20getByRole\x0a//\x20for\x20a\x20labelled\x20input,\x20typed\x20input\x20via\x20fill(),\x20and\x20a\x20locator\x20method-chain\x0a//\x20(getByRole(\x27row\x27).filter({hasText}).first())\x20in\x20an\x20assertion.\x0a//\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/02-form-fill\x0a\x0afunction\x20test_form_fill_happy_path()\x20{\x0a\x20\x20step(\x22Filter\x20the\x20Big\x20Table\x20by\x20a\x20name\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/scenarios/big-table\x27);\x0a\x20\x20\x20\x20fill(getByRole(\x27textbox\x27,\x20{name:\x20\x27Filter\x20by\x20name\x27}),\x20\x27Uma\x20Quinn\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Filtering\x20reveals\x20the\x20Clear\x20filter\x20control\x20and\x20matching\x20rows\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27button\x27,\x20{name:\x20\x27Clear\x20filter\x27}));\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27row\x27).filter({hasText:\x20\x27Uma\x20Quinn\x27}).first());\x0a\x20\x20});\x0a}\x0a'},'secretsExample':_0x3ee982(0x1a1),'envExample':_0x3ee982(0x199)};function unotestConfigMjs(_0x2350b9){const _0x1916e7={_0x75644f:0x190,_0x160810:0x1a0,_0x1297c1:0x1a3,_0x33aacf:0x19d},_0x22ebdd=_0x3ee982,_0x70ac1c=_0x2350b9===void 0x0?_0x22ebdd(_0x1916e7._0x75644f):'\x20\x20channel:\x20'+JSON[_0x22ebdd(_0x1916e7._0x160810)](_0x2350b9)+',';return _0x22ebdd(_0x1916e7._0x1297c1)+_0x70ac1c+_0x22ebdd(_0x1916e7._0x33aacf);}function _0x9288(){const _0x2279a1=['nfjXuxzrra','n1bQshrPva','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','nta4ndG1m1rnD2XyqG','y2HHBM5LBa','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','mdeTC21VA2uUANm','ndy5mte3EgXsA2j3','C3rYAw5NAwz5','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','zw52rxHHBxbSzq','lMvUDG','ztjL','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','BMfTzq','C2nHzMzVBgrxB3jRC3bHy2u','mtiXmNrdsvDXza','ChvZAa','mtqXotmZnMPRzg9PCW','mZqZsxbHBejv','ow5zqwfkBa','zgvMAw5LuhjVCgvYDhK','Dw5VDgvZDa','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','mtKZotyYCvjHzhHI','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','mJC0nta5me93tePrEq','mJCWnty2z0nMA0D4','zxHHBxbSzxm','nJmYodG2merhAgLKBW'];_0x9288=function(){return _0x2279a1;};return _0x9288();}__name(unotestConfigMjs,'unotestConfigMjs');async function scaffoldWorkspace(_0x37d184,_0x5c4835={}){const _0x4b4373={_0x19f125:0x195,_0x1171a1:0x1a6,_0x4194bf:0x1a5,_0x6c7795:0x18f,_0x5bfd45:0x19e},_0x4818dd=_0x3ee982,_0x1babfa=[],_0x39ed32=[];await mkdir(join(_0x37d184,'unotest',_0x4818dd(0x1a6),_0x4818dd(_0x4b4373._0x19f125)),{'recursive':!![]}),await mkdir(join(_0x37d184,'unotest',_0x4818dd(_0x4b4373._0x1171a1),'_helpers'),{'recursive':!![]});const _0x20d599=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0x5c4835[_0x4818dd(0x19c)])},{'rel':join('unotest',_0x4818dd(_0x4b4373._0x4194bf)),'content':templates[_0x4818dd(0x1a4)]},{'rel':join(_0x4818dd(_0x4b4373._0x6c7795),_0x4818dd(0x1a6),_0x4818dd(_0x4b4373._0x19f125),'01-smoke.js'),'content':templates['examples'][_0x4818dd(_0x4b4373._0x5bfd45)]}];for(const {rel:_0x24a0ad,content:_0x2eb32c}of _0x20d599){const _0xd08239=join(_0x37d184,_0x24a0ad);if(existsSync(_0xd08239)){_0x39ed32[_0x4818dd(0x18a)](_0x24a0ad);continue;}await writeFile(_0xd08239,_0x2eb32c),_0x1babfa[_0x4818dd(0x18a)](_0x24a0ad);}return{'projectRoot':_0x37d184,'created':_0x1babfa,'skipped':_0x39ed32};}__name(scaffoldWorkspace,_0x3ee982(0x188));export{scaffoldWorkspace};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var _0x53da3f=_0x52b6;(function(_0x5d12c5,_0x1b5c90){var _0x1ed404={_0x260e12:0xb7,_0x3d2170:0xbb,_0x5a60e3:0xbf,_0x2b39cd:0xb2,_0x4ac6ee:0xc5,_0x37e103:0xc4,_0x4b0aee:0xbd},_0x2c93ae=_0x52b6,_0x1dad45=_0x5d12c5();while(!![]){try{var _0x4b0c8e=parseInt(_0x2c93ae(0xb9))/0x1*(parseInt(_0x2c93ae(0xc3))/0x2)+parseInt(_0x2c93ae(_0x1ed404._0x260e12))/0x3+-parseInt(_0x2c93ae(_0x1ed404._0x3d2170))/0x4*(parseInt(_0x2c93ae(_0x1ed404._0x5a60e3))/0x5)+-parseInt(_0x2c93ae(_0x1ed404._0x2b39cd))/0x6*(-parseInt(_0x2c93ae(_0x1ed404._0x4ac6ee))/0x7)+parseInt(_0x2c93ae(0xb4))/0x8*(parseInt(_0x2c93ae(0xb3))/0x9)+-parseInt(_0x2c93ae(_0x1ed404._0x37e103))/0xa*(-parseInt(_0x2c93ae(_0x1ed404._0x4b0aee))/0xb)+-parseInt(_0x2c93ae(0xc8))/0xc;if(_0x4b0c8e===_0x1b5c90)break;else _0x1dad45['push'](_0x1dad45['shift']());}catch(_0x5a95f5){_0x1dad45['push'](_0x1dad45['shift']());}}}(_0x5471,0x68aac));import{fileURLToPath}from'url';import{dirname,resolve}from'path';import{spawn}from'child_process';function _0x5471(){var _0x22d017=['D3jPDgu','mZvnvvPwAee','zMLUza','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zxHLy1bHDgG','mJbACK9HC3e','mtCWCfjisM1P','mZa1mdz5C21RELi','C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','C3rKzxjY','mtGZmZCYmJrqqLjZshi','yxjNDG','mtG2BvHbrxvu','oxbdsfLdDG','mZGZmZaZmLL4tNnhzG','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','Aw5OzxjPDa','mJa0mdi3m2HlCKrkzG','AM9PBG','nZK1otrnvgn6v3G','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','mZu0mJG0Bw5dv0Hr','zxHPDa','mZe0odmXtLb6r2ru'];_0x5471=function(){return _0x22d017;};return _0x5471();}function _0x52b6(_0x73e8c6,_0x560777){_0x73e8c6=_0x73e8c6-0xb1;var _0x5471ca=_0x5471();var _0x52b61a=_0x5471ca[_0x73e8c6];if(_0x52b6['gbHlhy']===undefined){var _0x149112=function(_0x1695dc){var _0x4308c9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1fc6d8='',_0xa14d08='';for(var _0x26283f=0x0,_0x22d68c,_0x5bf2b2,_0x55818c=0x0;_0x5bf2b2=_0x1695dc['charAt'](_0x55818c++);~_0x5bf2b2&&(_0x22d68c=_0x26283f%0x4?_0x22d68c*0x40+_0x5bf2b2:_0x5bf2b2,_0x26283f++%0x4)?_0x1fc6d8+=String['fromCharCode'](0xff&_0x22d68c>>(-0x2*_0x26283f&0x6)):0x0){_0x5bf2b2=_0x4308c9['indexOf'](_0x5bf2b2);}for(var _0xd36695=0x0,_0x37336a=_0x1fc6d8['length'];_0xd36695<_0x37336a;_0xd36695++){_0xa14d08+='%'+('00'+_0x1fc6d8['charCodeAt'](_0xd36695)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xa14d08);};_0x52b6['FqViBO']=_0x149112,_0x52b6['WXCUBW']={},_0x52b6['gbHlhy']=!![];}var _0x2bb86f=_0x5471ca[0x0],_0x3a2f7f=_0x73e8c6+_0x2bb86f,_0x1ccb2c=_0x52b6['WXCUBW'][_0x3a2f7f];return!_0x1ccb2c?(_0x52b61a=_0x52b6['FqViBO'](_0x52b61a),_0x52b6['WXCUBW'][_0x3a2f7f]=_0x52b61a):_0x52b61a=_0x1ccb2c,_0x52b61a;}import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x53da3f(0xb5)),resolve(here,_0x53da3f(0xc1))],serverEntry=candidates[_0x53da3f(0xc0)](_0x1fc6d8=>existsSync(_0x1fc6d8));!serverEntry&&(process[_0x53da3f(0xc7)][_0x53da3f(0xbe)](_0x53da3f(0xc6)+candidates['map'](_0xa14d08=>'\x20\x20'+_0xa14d08+'\x0a')[_0x53da3f(0xb8)]('')+_0x53da3f(0xba)),process[_0x53da3f(0xbc)](0x1));var child=spawn(process[_0x53da3f(0xc2)],[serverEntry,...process[_0x53da3f(0xb1)]['slice'](0x2)],{'stdio':_0x53da3f(0xb6)});child['on']('exit',_0x26283f=>process[_0x53da3f(0xbc)](_0x26283f??0x1));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x28effa=_0x5df4;(function(_0x53bb20,_0x3d3787){const _0x39d30c={_0x32b890:0x200,_0x11cfbf:0x1a9,_0x43a5b9:0x1c5,_0x2e21d0:0x1e3},_0x2f15dc=_0x5df4,_0x3af074=_0x53bb20();while(!![]){try{const _0x32564a=-parseInt(_0x2f15dc(_0x39d30c._0x32b890))/0x1+-parseInt(_0x2f15dc(_0x39d30c._0x11cfbf))/0x2+-parseInt(_0x2f15dc(0x1ca))/0x3+parseInt(_0x2f15dc(_0x39d30c._0x43a5b9))/0x4*(-parseInt(_0x2f15dc(0x1e6))/0x5)+parseInt(_0x2f15dc(0x1b9))/0x6+parseInt(_0x2f15dc(_0x39d30c._0x2e21d0))/0x7+-parseInt(_0x2f15dc(0x1b3))/0x8*(-parseInt(_0x2f15dc(0x1e1))/0x9);if(_0x32564a===_0x3d3787)break;else _0x3af074['push'](_0x3af074['shift']());}catch(_0x5cd5a7){_0x3af074['push'](_0x3af074['shift']());}}}(_0x2cc6,0x5706b));var __defProp=Object[_0x28effa(0x1ed)],__name=(_0x28c9b6,_0x13939a)=>__defProp(_0x28c9b6,_0x28effa(0x1ef),{'value':_0x13939a,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x59abd9}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){for(const _0x29c80b of[probeChrome,probeEdge,probeChromeBeta]){const _0x338913=_0x29c80b();if(_0x338913['channel']!==null)return _0x338913;}return{'channel':null};}__name(probeSystemBrowser,_0x28effa(0x1e5));function probeChrome(){const _0x34b658={_0xd2a988:0x1ee,_0x27e93a:0x1d1},_0x13ab35=_0x28effa,_0x107d84=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x107d84)return{'channel':_0x13ab35(_0x34b658._0xd2a988),'path':_0x107d84,'label':_0x13ab35(_0x34b658._0x27e93a)};return{'channel':null};}__name(probeChrome,_0x28effa(0x1fb));function probeEdge(){const _0x185428={_0x2e9231:0x1ea},_0x30086e=_0x28effa,_0x6db848=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x6db848)return{'channel':'msedge','path':_0x6db848,'label':_0x30086e(_0x185428._0x2e9231)};return{'channel':null};}__name(probeEdge,_0x28effa(0x1c8));function probeChromeBeta(){const _0x543a40={_0x2f44b8:0x1c6,_0x55c826:0x1ba},_0x2de730=_0x28effa,_0x41c5c9=firstExistingPath(CHROME_BETA_PATHS);if(_0x41c5c9)return{'channel':_0x2de730(_0x543a40._0x2f44b8),'path':_0x41c5c9,'label':_0x2de730(_0x543a40._0x55c826)};return{'channel':null};}__name(probeChromeBeta,_0x28effa(0x1d5));var CHROME_PATHS=((()=>{const _0x347a6a={_0x305365:0x1c7,_0x3aeb07:0x1db,_0x5544c8:0x1a5,_0x178038:0x1c3,_0x38d58b:0x1fc},_0x4db1df=_0x28effa;switch(process[_0x4db1df(0x1d6)]){case _0x4db1df(_0x347a6a._0x305365):return[_0x4db1df(_0x347a6a._0x3aeb07)];case _0x4db1df(0x1f3):return[process[_0x4db1df(0x1fe)][_0x4db1df(_0x347a6a._0x5544c8)]+_0x4db1df(_0x347a6a._0x178038),process[_0x4db1df(0x1fe)][_0x4db1df(_0x347a6a._0x38d58b)]+_0x4db1df(0x1c3),process[_0x4db1df(0x1fe)]['LOCALAPPDATA']+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x4db1df(0x1e7),'/usr/bin/google-chrome-stable','/snap/bin/google-chrome','/usr/bin/chromium',_0x4db1df(0x1ad)];}})()),CHROME_BIN_NAMES=[_0x28effa(0x1b6),_0x28effa(0x1cd),_0x28effa(0x1b2),'chromium-browser'],EDGE_PATHS=((()=>{const _0x5ddb53={_0xb7f18d:0x1fe,_0x29ea9c:0x1b1,_0x35eae5:0x1fe},_0x218198=_0x28effa;switch(process['platform']){case'darwin':return[_0x218198(0x1f2)];case _0x218198(0x1f3):return[process[_0x218198(_0x5ddb53._0xb7f18d)][_0x218198(0x1a5)]+_0x218198(_0x5ddb53._0x29ea9c),process[_0x218198(_0x5ddb53._0x35eae5)][_0x218198(0x1fc)]+_0x218198(0x1b1)];default:return['/usr/bin/microsoft-edge','/usr/bin/microsoft-edge-stable'];}})()),EDGE_BIN_NAMES=[_0x28effa(0x1ec),_0x28effa(0x1d7)],CHROME_BETA_PATHS=((()=>{const _0x4186f0={_0x428019:0x1cb},_0x1f4380=_0x28effa;switch(process['platform']){case'darwin':return['/Applications/Google\x20Chrome\x20Beta.app/Contents/MacOS/Google\x20Chrome\x20Beta'];case _0x1f4380(0x1f3):return[process['env'][_0x1f4380(0x1a5)]+_0x1f4380(_0x4186f0._0x428019)];default:return[_0x1f4380(0x1ae)];}})());function firstExistingPath(_0x53b240){const _0x2bb675=_0x28effa;for(const _0x56b8cd of _0x53b240){if(!_0x56b8cd||_0x56b8cd['startsWith'](_0x2bb675(0x1a3)))continue;if(existsSync(_0x56b8cd))return _0x56b8cd;}return null;}__name(firstExistingPath,_0x28effa(0x1b0));function whichOf(_0x586ad5){const _0x16c8ff={_0x344ebe:0x1d6,_0x5c0d4f:0x1f0,_0x11b5a4:0x1dd,_0x4bf0fb:0x1d3},_0x4030f5=_0x28effa;if(process[_0x4030f5(_0x16c8ff._0x344ebe)]==='win32')return void 0x0;for(const _0x36def0 of _0x586ad5){try{const _0x4c9f05=execFileSync(_0x4030f5(_0x16c8ff._0x5c0d4f),[_0x36def0],{'encoding':_0x4030f5(_0x16c8ff._0x11b5a4)})[_0x4030f5(0x1bf)]();if(_0x4c9f05[_0x4030f5(_0x16c8ff._0x4bf0fb)]>0x0&&existsSync(_0x4c9f05))return _0x4c9f05;}catch{}}return void 0x0;}__name(whichOf,_0x28effa(0x1c9));function runEnvironmentChecks(_0x69cdfa={}){const _0x345d00=_0x28effa,_0x3708d0=_0x69cdfa[_0x345d00(0x1da)]??process['cwd']();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x3708d0)];}function _0x5df4(_0x43fdd4,_0x8f6963){_0x43fdd4=_0x43fdd4-0x1a0;const _0x2cc633=_0x2cc6();let _0x5df425=_0x2cc633[_0x43fdd4];if(_0x5df4['xtnVRS']===undefined){var _0x2acbf2=function(_0x21c28f){const _0xf40cb4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59abd9='',_0x28c9b6='';for(let _0x13939a=0x0,_0x29c80b,_0x338913,_0x107d84=0x0;_0x338913=_0x21c28f['charAt'](_0x107d84++);~_0x338913&&(_0x29c80b=_0x13939a%0x4?_0x29c80b*0x40+_0x338913:_0x338913,_0x13939a++%0x4)?_0x59abd9+=String['fromCharCode'](0xff&_0x29c80b>>(-0x2*_0x13939a&0x6)):0x0){_0x338913=_0xf40cb4['indexOf'](_0x338913);}for(let _0x6db848=0x0,_0x41c5c9=_0x59abd9['length'];_0x6db848<_0x41c5c9;_0x6db848++){_0x28c9b6+='%'+('00'+_0x59abd9['charCodeAt'](_0x6db848)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x28c9b6);};_0x5df4['OdfOqG']=_0x2acbf2,_0x5df4['DVuMqN']={},_0x5df4['xtnVRS']=!![];}const _0xf819c8=_0x2cc633[0x0],_0x384fc7=_0x43fdd4+_0xf819c8,_0x435822=_0x5df4['DVuMqN'][_0x384fc7];return!_0x435822?(_0x5df425=_0x5df4['OdfOqG'](_0x5df425),_0x5df4['DVuMqN'][_0x384fc7]=_0x5df425):_0x5df425=_0x435822,_0x5df425;}__name(runEnvironmentChecks,_0x28effa(0x1ab));function checkNodeVersion(){const _0x4d6af4={_0x391856:0x1e4,_0x226e36:0x1af,_0x46baf4:0x1f7,_0x162b1a:0x1be},_0x5aa999=_0x28effa,_0x45cd50=process['versions']['node'],_0xa22e5c=Number(_0x45cd50[_0x5aa999(0x1e9)]('.')[0x0]);if(!Number[_0x5aa999(_0x4d6af4._0x391856)](_0xa22e5c)||_0xa22e5c<0x14)return{'name':_0x5aa999(_0x4d6af4._0x226e36),'severity':_0x5aa999(_0x4d6af4._0x46baf4),'message':'requires\x20Node\x20≥20\x20(running\x20'+_0x45cd50+')','detail':_0x5aa999(_0x4d6af4._0x162b1a)};return{'name':_0x5aa999(0x1af),'severity':'ok','message':_0x45cd50};}__name(checkNodeVersion,'checkNodeVersion');function checkSystemBrowser(){const _0x46229b={_0x1518ad:0x1f1,_0x5eefd7:0x1ce,_0x263dae:0x1a1,_0x11417c:0x1a8,_0xfd5220:0x1d8,_0x240bdb:0x1bc},_0x40aa29=_0x28effa,_0x17f8e8=probeSystemBrowser();if(_0x17f8e8[_0x40aa29(_0x46229b._0x1518ad)]!==null)return{'name':_0x40aa29(0x1d8),'severity':'ok','message':_0x17f8e8[_0x40aa29(_0x46229b._0x5eefd7)]+_0x40aa29(_0x46229b._0x263dae),'detail':_0x17f8e8[_0x40aa29(_0x46229b._0x11417c)]};return{'name':_0x40aa29(_0x46229b._0xfd5220),'severity':'warning','message':_0x40aa29(_0x46229b._0x240bdb),'detail':'init\x20will\x20offer\x20to\x20download\x20bundled\x20Chromium\x20(~150\x20MB).\x20Alternatively,\x20install\x20Chrome\x20from\x20https://www.google.com/chrome\x20and\x20re-run.'};}__name(checkSystemBrowser,'checkSystemBrowser');function checkWritableCwd(_0x1962cb){const _0x450911={_0x250769:0x1d2,_0x94f5f3:0x1c0,_0x4b076a:0x1cf},_0x23ec03=_0x28effa;if(!_0x59abd9(_0x1962cb))return{'name':_0x23ec03(_0x450911._0x250769),'severity':'error','message':_0x23ec03(_0x450911._0x94f5f3)+_0x1962cb+_0x23ec03(_0x450911._0x4b076a),'detail':_0x23ec03(0x1de)};return{'name':_0x23ec03(0x1d2),'severity':'ok','message':_0x1962cb};}__name(checkWritableCwd,'checkWritableCwd');var PACKAGE_NAME=_0x28effa(0x1f5),WebRunnerAdapter=class{static{__name(this,_0x28effa(0x1c1));}[_0x28effa(0x1ef)]=PACKAGE_NAME;['suffix']='';['debug']={'picker':!![],'attach':!![],'resumeFromFailure':![]};['supportedKinds']=[_0x28effa(0x1b4),_0x28effa(0x1bb),_0x28effa(0x1c2)];['resolveBin'](){const _0x5d5fce={_0x111f8e:0x1e0,_0x5a238c:0x1dc,_0x403936:0x1a4,_0x2230d7:0x1e8},_0x35218d=_0x28effa,_0x29910b=createRequire(import.meta.url),_0x5828fe=_0x29910b[_0x35218d(_0x5d5fce._0x111f8e)](PACKAGE_NAME+_0x35218d(_0x5d5fce._0x5a238c)),_0x31818e=JSON[_0x35218d(_0x5d5fce._0x403936)](readFileSync(_0x5828fe,_0x35218d(0x1dd))),_0x29c3f7=pickBin(_0x31818e);if(!_0x29c3f7)throw new Error(PACKAGE_NAME+_0x35218d(_0x5d5fce._0x2230d7));return join(dirname(_0x5828fe),_0x29c3f7);}[_0x28effa(0x1bd)](_0x55f0fa){const _0x47481c={_0x307073:0x1ff,_0x4df2df:0x1d3,_0x316b0a:0x1f8,_0x44c0da:0x1f6,_0x3466b1:0x1f4,_0x53909a:0x1a0,_0x1ba411:0x1bb,_0x42c1dc:0x1a7,_0x5e1e29:0x1ff,_0x3a4e19:0x1ff,_0x2c4434:0x1b7,_0x53908d:0x1ef},_0x58ae1c=_0x28effa;if(_0x55f0fa[_0x58ae1c(0x1a0)]===_0x58ae1c(0x1b4)){const _0x233335=[_0x58ae1c(0x1eb),_0x55f0fa['scenario']];if(_0x55f0fa[_0x58ae1c(0x1fd)])_0x233335[_0x58ae1c(_0x47481c._0x307073)](_0x58ae1c(0x1e2));return _0x55f0fa[_0x58ae1c(0x1f6)]&&_0x55f0fa[_0x58ae1c(0x1f6)][_0x58ae1c(_0x47481c._0x4df2df)]>0x0&&_0x233335[_0x58ae1c(0x1ff)](_0x58ae1c(_0x47481c._0x316b0a),_0x55f0fa[_0x58ae1c(_0x47481c._0x44c0da)][_0x58ae1c(_0x47481c._0x3466b1)](',')),_0x233335;}if(_0x55f0fa[_0x58ae1c(_0x47481c._0x53909a)]===_0x58ae1c(0x1bb)){const _0x51a0ef=[_0x58ae1c(_0x47481c._0x1ba411),_0x55f0fa[_0x58ae1c(_0x47481c._0x1ba411)]];_0x55f0fa[_0x58ae1c(_0x47481c._0x42c1dc)]!==void 0x0&&_0x55f0fa[_0x58ae1c(0x1a7)]>0x1&&_0x51a0ef[_0x58ae1c(_0x47481c._0x5e1e29)]('--workers='+_0x55f0fa['workers']);if(_0x55f0fa[_0x58ae1c(0x1d9)])_0x51a0ef[_0x58ae1c(_0x47481c._0x3a4e19)](_0x58ae1c(0x1c4));return _0x51a0ef;}if(_0x55f0fa[_0x58ae1c(0x1a0)]==='authoring')return[_0x58ae1c(_0x47481c._0x2c4434),_0x55f0fa[_0x58ae1c(0x1b4)]];const _0x58289f=_0x55f0fa;throw new UnsupportedRunKindError(_0x58289f[_0x58ae1c(0x1a0)],this[_0x58ae1c(_0x47481c._0x53908d)]);}[_0x28effa(0x1cc)](_0x232979){const _0x9c2163={_0x29ea5b:0x1aa},_0x1bd0ed=_0x28effa,_0x3e36cb={};if(_0x232979[_0x1bd0ed(_0x9c2163._0x29ea5b)])_0x3e36cb[_0x1bd0ed(0x1ac)]='1';return _0x3e36cb;}[_0x28effa(0x1f9)](){const _0x4cb06a=_0x28effa;return[_0x4cb06a(0x1a6)];}async[_0x28effa(0x1fa)](_0x4a3ee9){const _0x4a5393=_0x28effa;return runEnvironmentChecks({'cwd':_0x4a3ee9[_0x4a5393(0x1d4)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x10820a){const _0x537906={_0x5285e9:0x1b8,_0x3fa5fe:0x1df,_0x41acf0:0x1d0},_0xaa6bb6=_0x28effa;if(typeof _0x10820a[_0xaa6bb6(_0x537906._0x5285e9)]==='string')return _0x10820a['bin'];if(_0x10820a[_0xaa6bb6(0x1b8)]&&typeof _0x10820a[_0xaa6bb6(0x1b8)]===_0xaa6bb6(_0x537906._0x3fa5fe))return _0x10820a[_0xaa6bb6(_0x537906._0x5285e9)][_0xaa6bb6(0x1b5)]??Object[_0xaa6bb6(_0x537906._0x41acf0)](_0x10820a[_0xaa6bb6(0x1b8)])[0x0]??null;return null;}function _0x2cc6(){const _0x302a5d=['l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','D2LUmZi','AM9PBG','qhvUB3rLC3qVD2vI','yNjLywTWB2LUDhm','zxjYB3i','ls1ICMvHAW','yxbWu2vYDMvYqxjNCW','zg9JDg9Y','ChjVyMvdAhjVBwu','uhjVz3jHBuzPBgvZkhG4nIK','zgvIDwC','zw52','ChvZAa','ndu5mde3v0PYwK5g','A2LUza','igzVDw5K','CgLJA0jPBG','Dw5KzwzPBMvK','CgfYC2u','uhjVz3jHBuzPBgvZ','yxbWlxnLCNzLCG','D29YA2vYCW','Cgf0Aa','mtaYntm1mMnhuLrwAG','AgvHzgvK','CNvUrw52AxjVBM1LBNrdAgvJA3m','vu5pvevtvf9iruferuq','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','tM9Kzs5QCYb2zxjZAw9U','zMLYC3rfEgLZDgLUz1bHDgG','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','y2HYB21PDw0','mty0mJC5nJHOD3H4B1a','C2nLBMfYAw8','Dw5VDgvZDc13zwi','z29Vz2XLlwnOCM9Tzq','yxv0Ag9Y','yMLU','mJa0mdz1svrWqMO','r29Vz2XLienOCM9TzsbczxrH','y29SBgvJDgLVBG','BM8Gq2HYB21Lic8GrwrNzsaVienOCM9TAxvTigrLDgvJDgvK','yNvPBgrbCMDZ','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','DhjPBq','DgfYz2v0ia','v2vIuNvUBMvYqwrHChrLCG','yxv0Ag9YAw5N','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','ls1IywLS','mtjYuLfKsuq','y2HYB21LlwjLDge','zgfYD2LU','ChjVyMvfzgDL','D2HPy2HpzG','mtyYntK1nu1vD0XizW','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','yNvPBgrfBNy','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','BgfIzwW','igrVzxmGBM90igv4Axn0','DMfSDwvZ','r29Vz2XLienOCM9Tzq','vgfYz2v0igrPCMvJDg9YEq','BgvUz3rO','ChjVAMvJDfjVB3q','ChjVyMvdAhjVBwvczxrH','CgXHDgzVCM0','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','u3LZDgvTigjYB3DZzxi','yMfPBa','y3DK','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','l3bHy2THz2uUANnVBG','DxrMoa','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','B2jQzwn0','CMvZB2X2zq','ovnmDu5Oqq','ls1Kzwj1zW','mteXnZeZzMD5rej4','AxngAw5PDgu','ChjVyMvtExn0zw1cCM93C2vY','mZm3ody1qNH3rNvt','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','C3bSAxq','twLJCM9ZB2z0ievKz2u','ztjL','BwLJCM9ZB2z0lwvKz2u','zgvMAw5LuhjVCgvYDhK','y2HYB21L','BMfTzq','D2HPy2G','y2HHBM5LBa'];_0x2cc6=function(){return _0x302a5d;};return _0x2cc6();}__name(pickBin,_0x28effa(0x1a2));export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
1
|
+
const _0x27fbae=_0x1fe2;(function(_0x38f9a2,_0x32502a){const _0x74d110={_0x510192:0x12b,_0x4d2eac:0x130,_0x2c9d96:0x10a,_0x1ad60e:0x137},_0xa0b935=_0x1fe2,_0x36fbcd=_0x38f9a2();while(!![]){try{const _0x55fbd9=parseInt(_0xa0b935(0xf1))/0x1+-parseInt(_0xa0b935(_0x74d110._0x510192))/0x2+-parseInt(_0xa0b935(0x108))/0x3*(-parseInt(_0xa0b935(0x10b))/0x4)+-parseInt(_0xa0b935(_0x74d110._0x4d2eac))/0x5*(parseInt(_0xa0b935(0xf4))/0x6)+-parseInt(_0xa0b935(_0x74d110._0x2c9d96))/0x7+parseInt(_0xa0b935(_0x74d110._0x1ad60e))/0x8*(-parseInt(_0xa0b935(0x144))/0x9)+parseInt(_0xa0b935(0x13f))/0xa;if(_0x55fbd9===_0x32502a)break;else _0x36fbcd['push'](_0x36fbcd['shift']());}catch(_0x9a7a05){_0x36fbcd['push'](_0x36fbcd['shift']());}}}(_0x1571,0x1d5df));function _0x1fe2(_0x4fd5d5,_0x35d668){_0x4fd5d5=_0x4fd5d5-0xe2;const _0x1571aa=_0x1571();let _0x1fe2f7=_0x1571aa[_0x4fd5d5];if(_0x1fe2['fKIlLP']===undefined){var _0x4995bf=function(_0x416d3){const _0x423e7c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x15fc8b='',_0x3ecd13='';for(let _0x5028a0=0x0,_0x2883dd,_0x5b8b24,_0x10e10c=0x0;_0x5b8b24=_0x416d3['charAt'](_0x10e10c++);~_0x5b8b24&&(_0x2883dd=_0x5028a0%0x4?_0x2883dd*0x40+_0x5b8b24:_0x5b8b24,_0x5028a0++%0x4)?_0x15fc8b+=String['fromCharCode'](0xff&_0x2883dd>>(-0x2*_0x5028a0&0x6)):0x0){_0x5b8b24=_0x423e7c['indexOf'](_0x5b8b24);}for(let _0xcca118=0x0,_0x1319be=_0x15fc8b['length'];_0xcca118<_0x1319be;_0xcca118++){_0x3ecd13+='%'+('00'+_0x15fc8b['charCodeAt'](_0xcca118)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ecd13);};_0x1fe2['ReYNfG']=_0x4995bf,_0x1fe2['kGfYoc']={},_0x1fe2['fKIlLP']=!![];}const _0x53bb15=_0x1571aa[0x0],_0x3073d1=_0x4fd5d5+_0x53bb15,_0x25d8cf=_0x1fe2['kGfYoc'][_0x3073d1];return!_0x25d8cf?(_0x1fe2f7=_0x1fe2['ReYNfG'](_0x1fe2f7),_0x1fe2['kGfYoc'][_0x3073d1]=_0x1fe2f7):_0x1fe2f7=_0x25d8cf,_0x1fe2f7;}var __defProp=Object[_0x27fbae(0x10f)],__name=(_0x3ecd13,_0x5028a0)=>__defProp(_0x3ecd13,_0x27fbae(0xed),{'value':_0x5028a0,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x15fc8b}from'fs';function _0x1571(){const _0x59b01d=['xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','ChjVyMvdAhjVBwvczxrH','BxnLzgDL','nJu1surUzuzg','yNvPBgrfBNy','C3vWCg9YDgvKs2LUzhm','AM9PBG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','BgfIzwW','AgvHzgvK','mJy3mKDIAvziAa','ztjL','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','DxrMoa','A2LUza','uhjVz3jHBuzPBgvZ','ls1ICMvHAW','ndK1mdu5mhbjC3L6AG','y2HYB21PDw0TyNjVD3nLCG','DgfYz2v0ia','r29Vz2XLienOCM9Tzq','CMvZB2X2zujPBG','ntK0ovvMDerMwa','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','v2vIuNvUBMvYqwrHChrLCG','C3rHCNrZv2L0Aa','qhvUB3rLC3qVD2vI','zg9JDg9Y','zw52','u3LZDgvTigjYB3DZzxi','yNvPBgrbCMDZ','yNjLywTWB2LUDhm','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','D29YA2vYCW','D2LUmZi','vu5pvevtvf9iruferuq','zgvIDwC','BMfTzq','y2HLy2TxCML0ywjSzun3za','zxjYB3i','vgfYz2v0igrPCMvJDg9YEq','mJG5ndnYuePHy2C','AxngAw5PDgu','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','mJuYnK5Nvu9bBq','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','y2HYB21PDw0','yxv0Ag9YAw5N','y2HHBM5LBa','CgLJA0jPBG','y2HLy2TtExn0zw1cCM93C2vY','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','te9dquXbufbeqvrb','yxbWlxnLCNzLCG','DhjPBq','tM9Kzs5QCYb2zxjZAw9U','BgvUz3rO','ChjVAMvJDfjVB3q','Dw5VDgvZDc13zwi','D2HPy2G','ls1Kzwj1zW','ls13B3jRzxjZpq','ls1IywLS','nKPAsKjpqW','yMfPBa','mJiXmJyZsKPJBgH0','mJaYmZi0CezsAxbS','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','y29SBgvJDgLVBG','ChjVyMvtExn0zw1cCM93C2vY','zgvMAw5LuhjVCgvYDhK','r29Vz2XLienOCM9TzsbczxrH','ChvZAa','CgfYC2u','D2fYBMLUzW','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','igrVzxmGBM90igv4Axn0','uhjVz3jHBuzPBgvZkhG4nIK','CMvZB2X2zq','y3DK','twLJCM9ZB2z0ievKz2u','Cgf0Aa','C3bSAxq','D2HPy2HpzG','yxbWu2vYDMvYqxjNCW','BM9Kzq','y2HYB21L','ChjVyMvdAhjVBwu','l3bHy2THz2uUANnVBG','CgXHDgzVCM0','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','yMLU','zgfYD2LU','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','C3vMzML4','C2nLBMfYAw8','DMfSDwvZ','mZK0nJG2AhzqB09Y','DMvYC2LVBNm'];_0x1571=function(){return _0x59b01d;};return _0x1571();}import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x3979f6={_0x30da4a:0xf9},_0xf260c9=_0x27fbae;for(const _0x2883dd of[probeChrome,probeEdge,probeChromeBeta]){const _0x5b8b24=_0x2883dd();if(_0x5b8b24[_0xf260c9(_0x3979f6._0x30da4a)]!==null)return _0x5b8b24;}return{'channel':null};}__name(probeSystemBrowser,_0x27fbae(0x10e));function probeChrome(){const _0x2e6262={_0x221ee2:0x120},_0x17efe9=_0x27fbae,_0x10e10c=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x10e10c)return{'channel':_0x17efe9(_0x2e6262._0x221ee2),'path':_0x10e10c,'label':_0x17efe9(0x142)};return{'channel':null};}__name(probeChrome,_0x27fbae(0x121));function probeEdge(){const _0xa917ab=_0x27fbae,_0xcca118=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0xcca118)return{'channel':_0xa917ab(0x12f),'path':_0xcca118,'label':_0xa917ab(0x11a)};return{'channel':null};}__name(probeEdge,'probeEdge');function probeChromeBeta(){const _0x4fd733=_0x27fbae,_0x1319be=firstExistingPath(CHROME_BETA_PATHS);if(_0x1319be)return{'channel':'chrome-beta','path':_0x1319be,'label':_0x4fd733(0x110)};return{'channel':null};}__name(probeChromeBeta,_0x27fbae(0x12e));var CHROME_PATHS=((()=>{const _0x138f67={_0x42731c:0x126,_0x2a9c16:0xea,_0x25ad88:0x13d,_0x149dc5:0xf5,_0x1e9219:0xe4,_0x45db23:0x117,_0x2921f7:0x13a,_0xf13f83:0x139},_0x31c159=_0x27fbae;switch(process['platform']){case _0x31c159(_0x138f67._0x42731c):return['/Applications/Google\x20Chrome.app/Contents/MacOS/Google\x20Chrome'];case _0x31c159(_0x138f67._0x2a9c16):return[process['env'][_0x31c159(_0x138f67._0x25ad88)]+_0x31c159(_0x138f67._0x149dc5),process[_0x31c159(_0x138f67._0x1e9219)][_0x31c159(_0x138f67._0x45db23)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process[_0x31c159(0xe4)][_0x31c159(0xfd)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x31c159(_0x138f67._0x2921f7),'/usr/bin/google-chrome-stable','/snap/bin/google-chrome','/usr/bin/chromium',_0x31c159(_0x138f67._0xf13f83)];}})()),CHROME_BIN_NAMES=['google-chrome',_0x27fbae(0x145),_0x27fbae(0xf7),_0x27fbae(0x140)],EDGE_PATHS=((()=>{const _0x58382c={_0x31b90d:0x114,_0x4d972e:0xe4,_0x34fab5:0x124,_0x357fb8:0x117,_0x20b2ae:0xe8},_0x37ca02=_0x27fbae;switch(process[_0x37ca02(0x123)]){case'darwin':return[_0x37ca02(_0x58382c._0x31b90d)];case'win32':return[process[_0x37ca02(_0x58382c._0x4d972e)]['ProgramFiles']+_0x37ca02(_0x58382c._0x34fab5),process[_0x37ca02(0xe4)][_0x37ca02(_0x58382c._0x357fb8)]+_0x37ca02(0x124)];default:return[_0x37ca02(_0x58382c._0x20b2ae),_0x37ca02(0xf6)];}})()),EDGE_BIN_NAMES=['microsoft-edge',_0x27fbae(0x10c)],CHROME_BETA_PATHS=((()=>{const _0xe64779={_0x24c3ab:0x123,_0x4a8126:0xe4,_0x18a310:0x134},_0x25d6ea=_0x27fbae;switch(process[_0x25d6ea(_0xe64779._0x24c3ab)]){case _0x25d6ea(0x126):return['/Applications/Google\x20Chrome\x20Beta.app/Contents/MacOS/Google\x20Chrome\x20Beta'];case'win32':return[process[_0x25d6ea(_0xe64779._0x4a8126)][_0x25d6ea(0x13d)]+_0x25d6ea(0x12d)];default:return[_0x25d6ea(_0xe64779._0x18a310)];}})());function firstExistingPath(_0x23fbaa){const _0x55e6c1=_0x27fbae;for(const _0x34613c of _0x23fbaa){if(!_0x34613c||_0x34613c[_0x55e6c1(0x147)]('undefined'))continue;if(existsSync(_0x34613c))return _0x34613c;}return null;}__name(firstExistingPath,'firstExistingPath');function whichOf(_0x48d543){const _0x2c8c77={_0x487f1d:0x123,_0x33db95:0x13b,_0x96e831:0xff},_0x19b1ef=_0x27fbae;if(process[_0x19b1ef(_0x2c8c77._0x487f1d)]===_0x19b1ef(0xea))return void 0x0;for(const _0x130d67 of _0x48d543){try{const _0x51d8ab=execFileSync(_0x19b1ef(0x104),[_0x130d67],{'encoding':_0x19b1ef(_0x2c8c77._0x33db95)})[_0x19b1ef(_0x2c8c77._0x96e831)]();if(_0x51d8ab[_0x19b1ef(0x101)]>0x0&&existsSync(_0x51d8ab))return _0x51d8ab;}catch{}}return void 0x0;}__name(whichOf,_0x27fbae(0x11d));function runEnvironmentChecks(_0x3edcc5={}){const _0x154174={_0x1cb485:0x119},_0x190bc4=_0x27fbae,_0x58f7cb=_0x3edcc5[_0x190bc4(_0x154174._0x1cb485)]??process[_0x190bc4(_0x154174._0x1cb485)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x58f7cb)];}__name(runEnvironmentChecks,'runEnvironmentChecks');function checkNodeVersion(){const _0x11aafd={_0x4f5440:0x12c,_0x328821:0x11f,_0x57a6d5:0x11c,_0x1fbeea:0xef},_0x2968fe=_0x27fbae,_0x26f638=process[_0x2968fe(_0x11aafd._0x4f5440)][_0x2968fe(_0x11aafd._0x328821)],_0x557ac7=Number(_0x26f638[_0x2968fe(_0x11aafd._0x57a6d5)]('.')[0x0]);if(!Number[_0x2968fe(0xf2)](_0x557ac7)||_0x557ac7<0x14)return{'name':_0x2968fe(0x100),'severity':_0x2968fe(_0x11aafd._0x1fbeea),'message':'requires\x20Node\x20≥20\x20(running\x20'+_0x26f638+')','detail':_0x2968fe(0xf3)};return{'name':'Node.js\x20version','severity':'ok','message':_0x26f638};}__name(checkNodeVersion,'checkNodeVersion');function checkSystemBrowser(){const _0x25887b={_0x5b1508:0x135,_0x2001ba:0xe5,_0x58707c:0x113,_0x49e93d:0x127},_0xf46669=_0x27fbae,_0x27d530=probeSystemBrowser();if(_0x27d530[_0xf46669(0xf9)]!==null)return{'name':_0xf46669(0xe5),'severity':'ok','message':_0x27d530[_0xf46669(_0x25887b._0x5b1508)]+'\x20found','detail':_0x27d530[_0xf46669(0x11b)]};return{'name':_0xf46669(_0x25887b._0x2001ba),'severity':_0xf46669(_0x25887b._0x58707c),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':_0xf46669(_0x25887b._0x49e93d)};}__name(checkSystemBrowser,_0x27fbae(0xfb));function checkWritableCwd(_0x44f1ce){const _0x5e3491=_0x27fbae;if(!_0x15fc8b(_0x44f1ce))return{'name':'Target\x20directory','severity':_0x5e3491(0xef),'message':_0x5e3491(0x141)+_0x44f1ce+_0x5e3491(0x116),'detail':_0x5e3491(0x115)};return{'name':_0x5e3491(0xf0),'severity':'ok','message':_0x44f1ce};}__name(checkWritableCwd,_0x27fbae(0xee));var PACKAGE_NAME=_0x27fbae(0xe2),WebRunnerAdapter=class{static{__name(this,_0x27fbae(0x146));}[_0x27fbae(0xed)]=PACKAGE_NAME;[_0x27fbae(0x128)]='';[_0x27fbae(0xec)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x27fbae(0x132)]=['scenario','collection','authoring'];[_0x27fbae(0x143)](){const _0x4c2177={_0x40fad0:0xfc},_0x11e64d=_0x27fbae,_0x4394a5=createRequire(import.meta.url),_0x8fde3=_0x4394a5[_0x11e64d(0x118)](PACKAGE_NAME+_0x11e64d(0x122)),_0x4148e3=JSON[_0x11e64d(0x112)](readFileSync(_0x8fde3,'utf8')),_0x1d149e=pickBin(_0x4148e3);if(!_0x1d149e)throw new Error(PACKAGE_NAME+_0x11e64d(_0x4c2177._0x40fad0));return join(dirname(_0x8fde3),_0x1d149e);}[_0x27fbae(0xe6)](_0x532486){const _0x5e2444={_0x45f272:0xec,_0x5abf4d:0x101,_0x926ca2:0x13e,_0x231f14:0x133,_0x3ee2cc:0x13c,_0x50ffb5:0xe9,_0x101294:0xe9,_0x18bed6:0x109,_0x1a5122:0xf8,_0x2fd7af:0x129,_0x319850:0x13c},_0x328dab=_0x27fbae;if(_0x532486[_0x328dab(0x13c)]===_0x328dab(0x129)){const _0x3de5ee=[_0x328dab(0x138),_0x532486['scenario']];if(_0x532486[_0x328dab(_0x5e2444._0x45f272)])_0x3de5ee['push'](_0x328dab(0x105));return _0x532486[_0x328dab(0xe7)]&&_0x532486[_0x328dab(0xe7)][_0x328dab(_0x5e2444._0x5abf4d)]>0x0&&_0x3de5ee[_0x328dab(0x111)](_0x328dab(_0x5e2444._0x926ca2),_0x532486['breakpoints'][_0x328dab(_0x5e2444._0x231f14)](',')),_0x3de5ee;}if(_0x532486[_0x328dab(_0x5e2444._0x3ee2cc)]===_0x328dab(0x10d)){const _0x567cfe=['collection',_0x532486[_0x328dab(0x10d)]];_0x532486[_0x328dab(_0x5e2444._0x50ffb5)]!==void 0x0&&_0x532486[_0x328dab(0xe9)]>0x1&&_0x567cfe[_0x328dab(0x111)](_0x328dab(0x106)+_0x532486[_0x328dab(_0x5e2444._0x101294)]);if(_0x532486[_0x328dab(_0x5e2444._0x18bed6)])_0x567cfe[_0x328dab(0x111)](_0x328dab(0x107));return _0x567cfe;}if(_0x532486[_0x328dab(_0x5e2444._0x3ee2cc)]===_0x328dab(_0x5e2444._0x1a5122))return['author',_0x532486[_0x328dab(_0x5e2444._0x2fd7af)]];const _0x21f5fa=_0x532486;throw new UnsupportedRunKindError(_0x21f5fa[_0x328dab(_0x5e2444._0x319850)],this[_0x328dab(0xed)]);}[_0x27fbae(0x131)](_0x4bdb9e){const _0x24ecd5={_0x55d7a2:0x136},_0x5b993d=_0x27fbae,_0x307bff={};if(_0x4bdb9e[_0x5b993d(_0x24ecd5._0x55d7a2)])_0x307bff[_0x5b993d(0xeb)]='1';return _0x307bff;}[_0x27fbae(0x11e)](){const _0x1f633a={_0x448790:0xfe},_0x22cf89=_0x27fbae;return[_0x22cf89(_0x1f633a._0x448790)];}async[_0x27fbae(0xe3)](_0x4a6131){const _0x153c32={_0x27cff5:0x102},_0x30e276=_0x27fbae;return runEnvironmentChecks({'cwd':_0x4a6131[_0x30e276(_0x153c32._0x27cff5)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x345248){const _0x26f6fc={_0x5c1d71:0x125,_0x30c56c:0x103,_0xfb960b:0x12a},_0xd20272=_0x27fbae;if(typeof _0x345248[_0xd20272(0x125)]==='string')return _0x345248[_0xd20272(0x125)];if(_0x345248[_0xd20272(0x125)]&&typeof _0x345248[_0xd20272(0x125)]==='object')return _0x345248[_0xd20272(_0x26f6fc._0x5c1d71)][_0xd20272(_0x26f6fc._0x30c56c)]??Object[_0xd20272(_0x26f6fc._0xfb960b)](_0x345248[_0xd20272(0x125)])[0x0]??null;return null;}__name(pickBin,_0x27fbae(0xfa));export{web_runner_adapter_default as default,webRunnerAdapter};
|
|
@@ -56,7 +56,8 @@ 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: [...44 entries]` (default env: full
|
|
60
|
+
toolset, snapshots on, grounder off).
|
|
60
61
|
|
|
61
62
|
## Tool catalog
|
|
62
63
|
|
|
@@ -87,6 +88,32 @@ escape hatch when `get_page_snapshot` / `get_aria_snapshot` exceed
|
|
|
87
88
|
the MCP token cap (table-heavy fleet UIs with 100+ rows). Refs are
|
|
88
89
|
shared with outline / aria-snapshot.
|
|
89
90
|
|
|
91
|
+
`UNOTEST_SNAPSHOT=0` unregisters the three snapshot tools
|
|
92
|
+
(`get_page_snapshot`, `get_frame_snapshot`, `get_aria_snapshot`) — for
|
|
93
|
+
ground-only runs where discovery goes through `ground_element` (A/B
|
|
94
|
+
purity: the agent cannot fall back to snapshot reading). `find_element`
|
|
95
|
+
always stays, and tool descriptions that normally cross-reference the
|
|
96
|
+
snapshot tools switch to snapshot-free wording.
|
|
97
|
+
|
|
98
|
+
`UNOTEST_TOOLSET=core` narrows the whole surface to the minimal
|
|
99
|
+
explore-first loop for small local models: `new_context`,
|
|
100
|
+
`explore_start` / `explore_step` / `explore_steps` / `explore_stop`,
|
|
101
|
+
`ground_element` (still needs `UNOTEST_GROUNDER_MODE`),
|
|
102
|
+
`save_exploration_as_test`, `run_test`. assert_* actions and the
|
|
103
|
+
`autoRun` flag live inside `explore_steps` (actions are not tools), so
|
|
104
|
+
the core happy-path is `explore_start` (it opens the context itself) →
|
|
105
|
+
`explore_steps {…, autoRun: true}`; save/run stay registered as the
|
|
106
|
+
fallback when an autoRun gate skips. Fewer tools = smaller prefill
|
|
107
|
+
per turn, and no side doors around the grounder (`find_element`,
|
|
108
|
+
snapshot dumps). Default `full`. MCP is per-process: every client spawns
|
|
109
|
+
its own server with its own env, so Claude can run `full` while a local
|
|
110
|
+
driver runs `core` from the same code. Typical matrices:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
# Claude agent: UNOTEST_TOOLSET=full UNOTEST_SNAPSHOT=1 UNOTEST_GROUNDER_MODE=local
|
|
114
|
+
# local-model driver: UNOTEST_TOOLSET=core UNOTEST_SNAPSHOT=0 UNOTEST_GROUNDER_MODE=local
|
|
115
|
+
```
|
|
116
|
+
|
|
90
117
|
### Debugger (6)
|
|
91
118
|
|
|
92
119
|
The reason most agents pick this package over driving Playwright
|
|
@@ -151,6 +178,78 @@ Auto-switch runs **only** under `explore_step` (recording / ad-hoc).
|
|
|
151
178
|
- `get_failure_network` — HAR (tier 3 — not yet wired, see
|
|
152
179
|
`KNOWN_ISSUES.md`)
|
|
153
180
|
|
|
181
|
+
### `ground_element` (1, experimental, off by default)
|
|
182
|
+
|
|
183
|
+
Registered when `UNOTEST_GROUNDER_MODE` is `local` or `remote` for the
|
|
184
|
+
MCP server process (`off` by default → tool absent). Semantic element
|
|
185
|
+
lookup: the agent describes the target in natural language (any language)
|
|
186
|
+
and gets back the best-matching ref plus the top-20 candidate lines the
|
|
187
|
+
decision was made from. Positional intents pass `ordinal` (`"first" |
|
|
188
|
+
"last" | N`) instead of baking the position into the text. Refs share the
|
|
189
|
+
`data-unotest-ref` space with the snapshot tools, so a grounded `eN` goes
|
|
190
|
+
straight into `explore_step`.
|
|
191
|
+
|
|
192
|
+
For an element ref (`eN`) the response carries a **paste-ready
|
|
193
|
+
`locator`** (`{kind:"locator", steps:[{kind:"ref", ref:"eN"}]}`) — the
|
|
194
|
+
agent passes it to `explore_step` verbatim instead of assembling the
|
|
195
|
+
JSON by hand (the top format-error class in small models). A record/text
|
|
196
|
+
ref (`rN`/`tN`/…) is not addressable by a ref locator, so instead of a
|
|
197
|
+
`locator` the result carries a `locatorNote` telling the agent to act on
|
|
198
|
+
the record's inner controls (visible in the candidates list) or ground
|
|
199
|
+
one directly («the edit button in row X»).
|
|
200
|
+
|
|
201
|
+
Intent locators in `explore_step` / `explore_steps` are grounded with a
|
|
202
|
+
**target class** owned by the action: click/fill/hover targets ask for a
|
|
203
|
+
control (a record answer hops to the record's inner control), while
|
|
204
|
+
assert steps (`assert_text` / `assert_visible` / …) ask for the semantic
|
|
205
|
+
unit itself — a page heading, a table row, a text block. A unit with no
|
|
206
|
+
capture-time ref gets one materialized on its own DOM element at resolve
|
|
207
|
+
time, so "assert the page heading says X" works as a single intent step
|
|
208
|
+
with no discovery call.
|
|
209
|
+
|
|
210
|
+
`frame` (an iframe locator) grounds **inside** that iframe — the
|
|
211
|
+
page-level walk cannot see into iframes. Frame refs are frame-local
|
|
212
|
+
(`e5` inside the frame is unrelated to the page's `e5`): the agent runs
|
|
213
|
+
`explore_step {action:"enter_frame"}` before acting on one, and
|
|
214
|
+
`exit_frame` after. Page and frame indexes coexist (the index cache is
|
|
215
|
+
an LRU keyed by content hash, both locally and on the remote server),
|
|
216
|
+
so alternating page ↔ frame grounding does not re-index.
|
|
217
|
+
|
|
218
|
+
Two modes, same tool surface:
|
|
219
|
+
|
|
220
|
+
- **local** — grounding runs in-process against local models
|
|
221
|
+
(`UNOTEST_GROUNDER_*`; defaults: ollama at `http://localhost:11434`,
|
|
222
|
+
`embeddinggemma` + `gemma4:e4b`).
|
|
223
|
+
- **remote** — only the page walk runs locally; embed + picker run on a
|
|
224
|
+
GPU grounding server (`UNOTEST_GROUNDER_REMOTE_URL` +
|
|
225
|
+
`UNOTEST_GROUNDER_REMOTE_TOKEN`). Each MCP-server process is an isolated
|
|
226
|
+
session — two servers never share an index.
|
|
227
|
+
|
|
228
|
+
At MCP-server start a cheap reachability ping runs against the backend
|
|
229
|
+
(`/api/tags` for local ollama, `/health` for a remote server, no model
|
|
230
|
+
warm-up) — it never blocks or fails startup. A down backend produces one
|
|
231
|
+
actionable warning in the server log, and any later network-level failure
|
|
232
|
+
on an intent step or `ground_element` call surfaces as a typed
|
|
233
|
+
`grounder unreachable at <url> — …` error that cites the backend URL, a
|
|
234
|
+
mode-specific fix hint and whether the backend was reachable at server
|
|
235
|
+
start — instead of a raw `fetch failed`.
|
|
236
|
+
|
|
237
|
+
The page is **re-indexed automatically** whenever its content changes
|
|
238
|
+
(navigation, filter, sort, SPA update) — there is no `reindex` flag; an
|
|
239
|
+
unchanged page reuses its index. The first index on a page takes seconds
|
|
240
|
+
(longer on huge pages / when running locally on weak hardware).
|
|
241
|
+
|
|
242
|
+
For ground-only A/B runs combine with `UNOTEST_SNAPSHOT=0` (see the
|
|
243
|
+
core-tools section) so the agent cannot fall back to snapshot reading.
|
|
244
|
+
|
|
245
|
+
`ground_element` is the **discovery** path («what's on the page?»). For
|
|
246
|
+
acting on an element, `explore_step` / `explore_steps` accept an
|
|
247
|
+
**intent locator** directly — `{kind:"locator", steps:[{kind:"intent",
|
|
248
|
+
intent:"the login field", ordinal?}]}` — and the runner grounds it itself
|
|
249
|
+
(intent → ref → stable locator), saving the separate lookup call and
|
|
250
|
+
keeping refs out of the agent's context entirely. See
|
|
251
|
+
`exploration-mode.md` for details.
|
|
252
|
+
|
|
154
253
|
### `agent_fix` (1)
|
|
155
254
|
|
|
156
255
|
Build a structured fix-context for a failed run (D-25). Composes the
|
|
@@ -290,7 +389,9 @@ What it **can** do (with your approval):
|
|
|
290
389
|
- Read failure artifacts from `.unotest/failures/`
|
|
291
390
|
- Execute sandbox primitives — `shell(cmd, …args)` (execFile, not
|
|
292
391
|
shell), `dbQuery` / `dbExec` (against `sandbox.database`), `apiCall`
|
|
293
|
-
(path-only against `sandbox.apiBaseUrl
|
|
392
|
+
(path-only against `sandbox.apiBaseUrl`, or against an env-named base
|
|
393
|
+
via `{base: 'API_BASE_X'}`; upload files confined to
|
|
394
|
+
`sandbox.uploadDir`)
|
|
294
395
|
|
|
295
396
|
Pinning `sandbox.*` in `unotest.config.*` is how you constrain what the
|
|
296
397
|
agent's scenarios can touch: a scenario cannot redirect `shell` cwd or
|
package/guides/dsl-reference.md
CHANGED
|
@@ -301,6 +301,15 @@ Compares `inputValue()` (`<input>`, `<textarea>`, native `<select>`).
|
|
|
301
301
|
assertValue(getByLabel('Email'), 'a@b.c')
|
|
302
302
|
```
|
|
303
303
|
|
|
304
|
+
On a checkbox / radio / switch (native or `role=`) it asserts the
|
|
305
|
+
**checked state** instead — their DOM value is the submitted payload
|
|
306
|
+
(`"on"` by default), identical whether ticked or not. Pass `'true'` or
|
|
307
|
+
`'false'`; anything else is rejected as a usage error.
|
|
308
|
+
|
|
309
|
+
```js
|
|
310
|
+
assertValue(getByRole('checkbox', {name: 'Select row R-00147'}), 'true')
|
|
311
|
+
```
|
|
312
|
+
|
|
304
313
|
### `assertCount(loc, expected, options?)`
|
|
305
314
|
|
|
306
315
|
```js
|
|
@@ -388,7 +397,40 @@ waitFor(getByTestId('content-loaded'))
|
|
|
388
397
|
|
|
389
398
|
### `waitForText(text, options?)`
|
|
390
399
|
|
|
391
|
-
Wait
|
|
400
|
+
Wait until at least one **visible** element on the active page contains
|
|
401
|
+
`text` (chat feeds and repeated labels legally duplicate text — ≥1
|
|
402
|
+
visible match is the success condition; `{first: true}` from older
|
|
403
|
+
scenarios is accepted as a no-op).
|
|
404
|
+
|
|
405
|
+
Options: `{ exact?, state?, timeout? }`. Default matching is substring —
|
|
406
|
+
it also matches *inside* a word (`'hi'` hits `'anything'`). For precise
|
|
407
|
+
matching pass `{exact: true}` (full-text equality) or a regex with word
|
|
408
|
+
boundaries:
|
|
409
|
+
|
|
410
|
+
```js
|
|
411
|
+
waitForText('Active'); // ≥1 visible occurrence
|
|
412
|
+
waitForText('Active', {exact: true}); // full-text equality
|
|
413
|
+
waitForText(/\bhi\b/, {timeout: 60000}); // word-boundary, long poll
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
`state: 'hidden'` waits until **no** visible occurrence remains.
|
|
417
|
+
|
|
418
|
+
### `waitForCount(loc, count, options?)`
|
|
419
|
+
|
|
420
|
+
Poll until the locator matches **at least** `count` elements. The chat
|
|
421
|
+
pattern "wait for reply №N": at-least semantics don't flake when the
|
|
422
|
+
feed grows past N between polls. `{exact: true}` waits for exactly
|
|
423
|
+
`count` matches; timeout throws with the last observed count.
|
|
424
|
+
|
|
425
|
+
Options: `{ exact?, timeout? }` (default timeout 5000 ms — raise it for
|
|
426
|
+
slow producers like LLM replies).
|
|
427
|
+
|
|
428
|
+
```js
|
|
429
|
+
// Chat feed: the bot's reply is message #3 — wait for it, then assert
|
|
430
|
+
// on its text with a second, content-anchored wait:
|
|
431
|
+
waitForCount(locator('[data-id]'), 3, {timeout: 90000});
|
|
432
|
+
waitForText(/\bshipping\b/i, {timeout: 90000});
|
|
433
|
+
```
|
|
392
434
|
|
|
393
435
|
### `pause(ms)`
|
|
394
436
|
|
|
@@ -552,7 +594,7 @@ INSERT / UPDATE / DELETE.
|
|
|
552
594
|
dbExec('delete from sessions where user_id = ?', userId);
|
|
553
595
|
```
|
|
554
596
|
|
|
555
|
-
### `apiCall(method, path, body?, headers?)` → `{status, body, headers}`
|
|
597
|
+
### `apiCall(method, path, body?, headers?, options?)` → `{status, body, headers}`
|
|
556
598
|
|
|
557
599
|
HTTP via global `fetch`. **`path` must be relative** (starts with `/`) —
|
|
558
600
|
absolute URLs throw to prevent scenarios from hitting arbitrary hosts.
|
|
@@ -562,6 +604,47 @@ res = apiCall('POST', '/auth/login', {email: 'a@b.c', password: 'x'});
|
|
|
562
604
|
assertTrue(res.status == 200, 'login failed');
|
|
563
605
|
```
|
|
564
606
|
|
|
607
|
+
**Named API bases.** Without `options` the path goes against
|
|
608
|
+
`sandbox.apiBaseUrl`. A setup that talks to more than one host names
|
|
609
|
+
the base per call — `{base: 'API_BASE_X'}` is the **name of a
|
|
610
|
+
variable** from `unotest/.env` (overlays apply as usual), never a URL:
|
|
611
|
+
|
|
612
|
+
```js
|
|
613
|
+
// unotest/.env: API_BASE_CHAT=https://chatbackend.example.com
|
|
614
|
+
res = apiCall('DELETE', '/external/room/r1', null, {'x-api-key': KEY},
|
|
615
|
+
{base: 'API_BASE_CHAT'});
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
The variable must hold an http(s) URL; an unknown name fails with the
|
|
619
|
+
usual "add it to unotest/.env" message. URLs never appear in the
|
|
620
|
+
scenario — hosts are controlled by project env files only.
|
|
621
|
+
|
|
622
|
+
**Multipart file upload — `upload(path, options?)`.** Passing the
|
|
623
|
+
result of `upload(...)` as the body posts `multipart/form-data`:
|
|
624
|
+
|
|
625
|
+
```js
|
|
626
|
+
res = apiCall('POST', '/tenants/t1/documents',
|
|
627
|
+
upload('fixtures/manual.pdf', {fields: {source: 'e2e'}}),
|
|
628
|
+
{Authorization: BEARER});
|
|
629
|
+
assertTrue(res.status == 202, 'ingestion not accepted');
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
- `path` — **relative**, resolved against `sandbox.uploadDir`
|
|
633
|
+
(defaults to the project root). Absolute paths and `../` escapes
|
|
634
|
+
out of that root throw.
|
|
635
|
+
- `options.field` — form part name, default `"file"`.
|
|
636
|
+
`options.fields` — extra string parts. The part's content type
|
|
637
|
+
derives from the file extension.
|
|
638
|
+
- Don't set a `Content-Type` header with an `upload()` body — `fetch`
|
|
639
|
+
derives the boundary itself; a manual value throws.
|
|
640
|
+
- Plain JSON bodies are NEVER promoted to multipart — a body with a
|
|
641
|
+
`file` key posts as JSON. (Before 0.11, the exact shape
|
|
642
|
+
`{file, field?, fields?}` switched modes by key name; that magic
|
|
643
|
+
broke JSON APIs with a legitimate `file` field and is gone —
|
|
644
|
+
migrate to `upload(...)`.)
|
|
645
|
+
- `upload(...)` must be the body itself, not a field inside a JSON
|
|
646
|
+
body — extra form fields go in `options.fields`.
|
|
647
|
+
|
|
565
648
|
---
|
|
566
649
|
|
|
567
650
|
## Typed getters
|
|
@@ -617,6 +700,37 @@ Backticks are **raw** — `${…}` interpolation is rejected at parse time
|
|
|
617
700
|
|
|
618
701
|
---
|
|
619
702
|
|
|
703
|
+
## Diagnostics
|
|
704
|
+
|
|
705
|
+
### `screenshot(name?, options?)` → `string`
|
|
706
|
+
|
|
707
|
+
On-demand PNG capture of the active page into the run's artifact dir:
|
|
708
|
+
`unotest/.runs/<runId>/screenshot/<NNN>-<name>.png`. Returns the
|
|
709
|
+
project-relative path. Evidence tool — fixes what the page actually
|
|
710
|
+
looked like at this point, so a green run can be verified after the
|
|
711
|
+
fact (the viewer lists each capture as a `screenshot` event).
|
|
712
|
+
|
|
713
|
+
```js
|
|
714
|
+
screenshot(); // 001-shot.png
|
|
715
|
+
screenshot('bot-reply'); // 002-bot-reply.png
|
|
716
|
+
screenshot('landing', {fullPage: true}); // full scroll height
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
- `name` is slugified to `[a-z0-9._-]` (`'Bot Reply!'` → `bot-reply`);
|
|
720
|
+
omitted → `shot`. Files are numbered in capture order.
|
|
721
|
+
- **Options:** `fullPage?` (default `false` — viewport only).
|
|
722
|
+
- Before capturing, the call waits for the network to go quiet and for a
|
|
723
|
+
painted frame (up to 2s). Without it a `screenshot()` right after
|
|
724
|
+
`goto()` would freeze the blank pre-render frame — `goto` resolves on
|
|
725
|
+
`load`, which on a client-rendered app fires before any content is on
|
|
726
|
+
screen. A page that never goes quiet (polling, live feeds) costs the
|
|
727
|
+
2s cap and is then captured as-is.
|
|
728
|
+
- Not a visual assertion: the test does not compare images. In runtimes
|
|
729
|
+
with no artifact dir (exploration) the call logs a warning, returns
|
|
730
|
+
`null` and does NOT fail the run.
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
620
734
|
## Logging
|
|
621
735
|
|
|
622
736
|
### `log(...args)`
|
|
@@ -638,21 +752,44 @@ The DSL is JavaScript-shaped but parsed by a small AST engine
|
|
|
638
752
|
- **`function test_*(): { … }`** — scenario entry; each top-level
|
|
639
753
|
`function test_*` is a separately runnable test.
|
|
640
754
|
- **Assignments** — `name = expression;` (no `let`/`const`/`var`).
|
|
641
|
-
- **`if` / `else
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
755
|
+
- **`if` / `else`** and **`for` in the canonical shape**
|
|
756
|
+
`for (i = 0; i < N; i = i + 1) { … }` (increment must be an
|
|
757
|
+
assignment — `i++` is rejected everywhere).
|
|
758
|
+
- **`break`** — inside a loop body only. Typical polling loop:
|
|
759
|
+
|
|
760
|
+
```js
|
|
761
|
+
done = false;
|
|
762
|
+
for (i = 0; i < 60; i = i + 1) {
|
|
763
|
+
job = apiCall('GET', '/jobs/1');
|
|
764
|
+
if (job.body.status == 'DONE') {
|
|
765
|
+
done = true;
|
|
766
|
+
break;
|
|
767
|
+
}
|
|
768
|
+
pause(2000); // reason: ingestion job is async, poll every 2s
|
|
769
|
+
}
|
|
770
|
+
assertTrue(done, 'job never reached DONE');
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
- **Array literals** — `[1, 2, 3]`.
|
|
774
|
+
- **Index access on data** — `docs[0]`, `docs[0].objectsCount`. The
|
|
775
|
+
index goes on a **bare variable** (grammar restriction), so pull
|
|
776
|
+
nested arrays into one first: `docs = res.body; n = docs[0].count;`.
|
|
777
|
+
Indexing a **Locator** is rejected — disambiguate with chain methods
|
|
778
|
+
(`.filter(...)`), and `arr[i] = v` assignment stays unsupported.
|
|
779
|
+
- **Object literals — as call arguments only** (`click(loc, {force:
|
|
780
|
+
true})`); a standalone `x = {name: 'x'}` is rejected.
|
|
781
|
+
- **Member access** — `row.email` (dot form; `obj['key']` doesn't
|
|
782
|
+
parse).
|
|
647
783
|
- **Method chains** — `getByRole('row').filter({hasText:'X'}).click()`.
|
|
648
784
|
- **Backticks** — multi-line raw strings, no `${}` interpolation.
|
|
649
785
|
- **Booleans, numbers, strings, `null`**.
|
|
650
786
|
|
|
651
|
-
Not supported (and intentionally so):
|
|
652
|
-
(
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
787
|
+
Not supported (and intentionally so): `while` / `do…while` /
|
|
788
|
+
`continue` (bound loops keep every scenario terminating), `++`/`--`,
|
|
789
|
+
arrow functions, async/await (everything is sequenced by the AST
|
|
790
|
+
executor), classes, modules, promises, `try/catch`. Errors thrown from
|
|
791
|
+
a primitive abort the scenario; if the runtime is paused (debugger /
|
|
792
|
+
MCP step mode), the failure is captured for inspection.
|
|
656
793
|
|
|
657
794
|
See `vendor/dsl/EXTENSIONS.md` for the
|
|
658
795
|
exact grammar deltas from the upstream parser.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unotest/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.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": {
|
|
@@ -71,53 +71,25 @@
|
|
|
71
71
|
"README.md"
|
|
72
72
|
],
|
|
73
73
|
"dependencies": {
|
|
74
|
+
"@faker-js/faker": "^10.5.0",
|
|
74
75
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
75
76
|
"chokidar": "^4.0.3",
|
|
76
77
|
"dotenv": "^16.4.5",
|
|
77
|
-
"playwright": "^1.
|
|
78
|
+
"playwright": "^1.51.0",
|
|
78
79
|
"tsx": "^4.19.2",
|
|
79
80
|
"yaml": "^2.6.0",
|
|
80
81
|
"zod": "^3.23.8",
|
|
81
|
-
"@unotest/core": "^0.
|
|
82
|
-
"@unotest/dsl": "^0.
|
|
83
|
-
"@unotest/
|
|
84
|
-
"@unotest/
|
|
82
|
+
"@unotest/core": "^0.11.0",
|
|
83
|
+
"@unotest/dsl": "^0.11.0",
|
|
84
|
+
"@unotest/grounder-client": "^0.11.0",
|
|
85
|
+
"@unotest/protocol": "^0.11.0",
|
|
86
|
+
"@unotest/viewer": "^0.11.0"
|
|
85
87
|
},
|
|
86
88
|
"devDependencies": {
|
|
87
89
|
"@types/node": "^22.10.0",
|
|
88
90
|
"javascript-obfuscator": "^4.1.1",
|
|
89
91
|
"tsup": "^8.5.1",
|
|
90
|
-
"typescript": "^5.7.2"
|
|
91
|
-
|
|
92
|
-
"scripts": {
|
|
93
|
-
"typecheck": "tsc --noEmit",
|
|
94
|
-
"design": "npx serve -l 3111 design",
|
|
95
|
-
"test": "node --import tsx --test --test-reporter=spec 'src/**/*.test.ts' 'scripts/**/*.test.mjs' 'evals/**/*.test.ts'",
|
|
96
|
-
"compile": "tsup",
|
|
97
|
-
"compile:all": "pnpm -C ../unotest-dsl compile && pnpm -C ../unotest-web compile && pnpm -C ../unotest-viewer compile",
|
|
98
|
-
"lint:scenarios": "tsx src/runner/cli.ts lint",
|
|
99
|
-
"smoke:bundle": "node scripts/smoke-bundle.mjs",
|
|
100
|
-
"check:docs-sync": "node scripts/check-docs-sync.mjs",
|
|
101
|
-
"check:no-internal-refs": "node scripts/check-no-internal-refs.mjs",
|
|
102
|
-
"check:no-cyrillic": "node scripts/check-no-cyrillic.mjs",
|
|
103
|
-
"check:surface": "pnpm check:no-internal-refs && pnpm check:no-cyrillic && pnpm check:skill-prompt-sync",
|
|
104
|
-
"check:skill-prompt-sync": "node scripts/check-skill-prompt-sync.mjs",
|
|
105
|
-
"check:tarball": "node scripts/check-tarball.mjs",
|
|
106
|
-
"check:sibling-versions": "node scripts/check-sibling-versions.mjs",
|
|
107
|
-
"build:guides": "node scripts/build-guides.mjs",
|
|
108
|
-
"prepublish:check": "node scripts/prepublish-check.mjs",
|
|
109
|
-
"evals:run": "tsx evals/run.ts",
|
|
110
|
-
"evals:prepare": "tsx evals/prepare.ts",
|
|
111
|
-
"evals:check": "tsx evals/check.ts",
|
|
112
|
-
"evals:bless": "tsx evals/bless.ts",
|
|
113
|
-
"evals:diff": "tsx evals/diff.ts",
|
|
114
|
-
"perf:baseline": "node scripts/perf-baseline.mjs",
|
|
115
|
-
"verify": "pnpm typecheck && pnpm lint:scenarios && pnpm check:surface && pnpm test",
|
|
116
|
-
"obfuscate": "node scripts/obfuscate.mjs",
|
|
117
|
-
"build": "pnpm verify && pnpm compile && pnpm obfuscate && pnpm smoke:bundle && pnpm build:guides && pnpm check:tarball",
|
|
118
|
-
"e2e": "tsx src/runner/cli.ts e2e",
|
|
119
|
-
"m1:cross-browser": "node scripts/m1-cross-browser.mjs",
|
|
120
|
-
"mcp": "tsx src/mcp/server.ts",
|
|
121
|
-
"serve-fixture": "node examples/fixtures/break-fix-app/serve.mjs"
|
|
92
|
+
"typescript": "^5.7.2",
|
|
93
|
+
"@unotest/grounder": "^0.11.0"
|
|
122
94
|
}
|
|
123
95
|
}
|