@unotest/web 0.9.1 → 0.10.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 +115 -38
- package/.claude/skills/write-e2e-test-ground/SKILL.md +784 -0
- package/CHANGELOG.md +175 -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-BxviHxnr.d.ts} +42 -3
- package/dist/mcp/server.js +1 -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 +139 -13
- package/package.json +18 -9
- package/src/mcp/prompts/agent-test-author.md +59 -0
|
@@ -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
|
+
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 +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 +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 _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};
|
|
@@ -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,42 @@ 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.** A body of the exact shape
|
|
623
|
+
`{file, field?, fields?}` posts as `multipart/form-data`:
|
|
624
|
+
|
|
625
|
+
```js
|
|
626
|
+
res = apiCall('POST', '/tenants/t1/documents',
|
|
627
|
+
{file: 'fixtures/manual.pdf', fields: {source: 'e2e'}},
|
|
628
|
+
{Authorization: BEARER});
|
|
629
|
+
assertTrue(res.status == 202, 'ingestion not accepted');
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
- `file` — **relative** path, resolved against `sandbox.uploadDir`
|
|
633
|
+
(defaults to the project root). Absolute paths and `../` escapes
|
|
634
|
+
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`
|
|
638
|
+
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.
|
|
642
|
+
|
|
565
643
|
---
|
|
566
644
|
|
|
567
645
|
## Typed getters
|
|
@@ -617,6 +695,31 @@ Backticks are **raw** — `${…}` interpolation is rejected at parse time
|
|
|
617
695
|
|
|
618
696
|
---
|
|
619
697
|
|
|
698
|
+
## Diagnostics
|
|
699
|
+
|
|
700
|
+
### `screenshot(name?, options?)` → `string`
|
|
701
|
+
|
|
702
|
+
On-demand PNG capture of the active page into the run's artifact dir:
|
|
703
|
+
`unotest/.runs/<runId>/screenshot/<NNN>-<name>.png`. Returns the
|
|
704
|
+
project-relative path. Evidence tool — fixes what the page actually
|
|
705
|
+
looked like at this point, so a green run can be verified after the
|
|
706
|
+
fact (the viewer lists each capture as a `screenshot` event).
|
|
707
|
+
|
|
708
|
+
```js
|
|
709
|
+
screenshot(); // 001-shot.png
|
|
710
|
+
screenshot('bot-reply'); // 002-bot-reply.png
|
|
711
|
+
screenshot('landing', {fullPage: true}); // full scroll height
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
- `name` is slugified to `[a-z0-9._-]` (`'Bot Reply!'` → `bot-reply`);
|
|
715
|
+
omitted → `shot`. Files are numbered in capture order.
|
|
716
|
+
- **Options:** `fullPage?` (default `false` — viewport only).
|
|
717
|
+
- Not a visual assertion: the test does not compare images. In runtimes
|
|
718
|
+
with no artifact dir (exploration) the call logs a warning, returns
|
|
719
|
+
`null` and does NOT fail the run.
|
|
720
|
+
|
|
721
|
+
---
|
|
722
|
+
|
|
620
723
|
## Logging
|
|
621
724
|
|
|
622
725
|
### `log(...args)`
|
|
@@ -638,21 +741,44 @@ The DSL is JavaScript-shaped but parsed by a small AST engine
|
|
|
638
741
|
- **`function test_*(): { … }`** — scenario entry; each top-level
|
|
639
742
|
`function test_*` is a separately runnable test.
|
|
640
743
|
- **Assignments** — `name = expression;` (no `let`/`const`/`var`).
|
|
641
|
-
- **`if` / `else
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
744
|
+
- **`if` / `else`** and **`for` in the canonical shape**
|
|
745
|
+
`for (i = 0; i < N; i = i + 1) { … }` (increment must be an
|
|
746
|
+
assignment — `i++` is rejected everywhere).
|
|
747
|
+
- **`break`** — inside a loop body only. Typical polling loop:
|
|
748
|
+
|
|
749
|
+
```js
|
|
750
|
+
done = false;
|
|
751
|
+
for (i = 0; i < 60; i = i + 1) {
|
|
752
|
+
job = apiCall('GET', '/jobs/1');
|
|
753
|
+
if (job.body.status == 'DONE') {
|
|
754
|
+
done = true;
|
|
755
|
+
break;
|
|
756
|
+
}
|
|
757
|
+
pause(2000); // reason: ingestion job is async, poll every 2s
|
|
758
|
+
}
|
|
759
|
+
assertTrue(done, 'job never reached DONE');
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
- **Array literals** — `[1, 2, 3]`.
|
|
763
|
+
- **Index access on data** — `docs[0]`, `docs[0].objectsCount`. The
|
|
764
|
+
index goes on a **bare variable** (grammar restriction), so pull
|
|
765
|
+
nested arrays into one first: `docs = res.body; n = docs[0].count;`.
|
|
766
|
+
Indexing a **Locator** is rejected — disambiguate with chain methods
|
|
767
|
+
(`.filter(...)`), and `arr[i] = v` assignment stays unsupported.
|
|
768
|
+
- **Object literals — as call arguments only** (`click(loc, {force:
|
|
769
|
+
true})`); a standalone `x = {name: 'x'}` is rejected.
|
|
770
|
+
- **Member access** — `row.email` (dot form; `obj['key']` doesn't
|
|
771
|
+
parse).
|
|
647
772
|
- **Method chains** — `getByRole('row').filter({hasText:'X'}).click()`.
|
|
648
773
|
- **Backticks** — multi-line raw strings, no `${}` interpolation.
|
|
649
774
|
- **Booleans, numbers, strings, `null`**.
|
|
650
775
|
|
|
651
|
-
Not supported (and intentionally so):
|
|
652
|
-
(
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
776
|
+
Not supported (and intentionally so): `while` / `do…while` /
|
|
777
|
+
`continue` (bound loops keep every scenario terminating), `++`/`--`,
|
|
778
|
+
arrow functions, async/await (everything is sequenced by the AST
|
|
779
|
+
executor), classes, modules, promises, `try/catch`. Errors thrown from
|
|
780
|
+
a primitive abort the scenario; if the runtime is paused (debugger /
|
|
781
|
+
MCP step mode), the failure is captured for inspection.
|
|
656
782
|
|
|
657
783
|
See `vendor/dsl/EXTENSIONS.md` for the
|
|
658
784
|
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.10.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,42 +71,51 @@
|
|
|
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/protocol": "^0.
|
|
84
|
-
"@unotest/viewer": "^0.
|
|
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"
|
|
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"
|
|
92
|
+
"typescript": "^5.7.2",
|
|
93
|
+
"@unotest/grounder": "^0.10.0"
|
|
91
94
|
},
|
|
92
95
|
"scripts": {
|
|
93
96
|
"typecheck": "tsc --noEmit",
|
|
94
97
|
"design": "npx serve -l 3111 design",
|
|
95
98
|
"test": "node --import tsx --test --test-reporter=spec 'src/**/*.test.ts' 'scripts/**/*.test.mjs' 'evals/**/*.test.ts'",
|
|
96
99
|
"compile": "tsup",
|
|
97
|
-
"compile:all": "pnpm -C ../
|
|
100
|
+
"compile:all": "pnpm -C ../dsl compile && pnpm compile && pnpm -C ../viewer compile",
|
|
98
101
|
"lint:scenarios": "tsx src/runner/cli.ts lint",
|
|
99
102
|
"smoke:bundle": "node scripts/smoke-bundle.mjs",
|
|
100
103
|
"check:docs-sync": "node scripts/check-docs-sync.mjs",
|
|
101
104
|
"check:no-internal-refs": "node scripts/check-no-internal-refs.mjs",
|
|
102
105
|
"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",
|
|
106
|
+
"check:surface": "pnpm check:no-internal-refs && pnpm check:no-cyrillic && pnpm check:skill-prompt-sync && pnpm check:skills-built",
|
|
104
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",
|
|
105
110
|
"check:tarball": "node scripts/check-tarball.mjs",
|
|
106
111
|
"check:sibling-versions": "node scripts/check-sibling-versions.mjs",
|
|
107
112
|
"build:guides": "node scripts/build-guides.mjs",
|
|
108
113
|
"prepublish:check": "node scripts/prepublish-check.mjs",
|
|
114
|
+
"evals:chain": "tsx evals/chain.ts",
|
|
115
|
+
"evals:replay": "tsx evals/replay.ts",
|
|
109
116
|
"evals:run": "tsx evals/run.ts",
|
|
117
|
+
"evals:drive": "tsx evals/drive.ts",
|
|
118
|
+
"evals:ground-bench": "tsx evals/ground-bench.ts",
|
|
110
119
|
"evals:prepare": "tsx evals/prepare.ts",
|
|
111
120
|
"evals:check": "tsx evals/check.ts",
|
|
112
121
|
"evals:bless": "tsx evals/bless.ts",
|