skeptic-cli 0.2.1 → 1.0.1

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.
Files changed (79) hide show
  1. package/AGENTS.md +20 -53
  2. package/LICENSE +24 -0
  3. package/LICENSES.md +92 -3
  4. package/README.md +25 -49
  5. package/agent-skills/skeptic/SKILL.md +150 -38
  6. package/dist/adb-DUGGW3FV.mjs +2 -0
  7. package/dist/adb-driver-TBOCCKEO.mjs +3 -0
  8. package/dist/adb-session-AVVXL3QQ.mjs +2 -0
  9. package/dist/add-G7JFXU4S.mjs +67 -0
  10. package/dist/audit-ID2BSVYC.mjs +7 -0
  11. package/dist/auto-spawn-4TO4DBO6.mjs +2 -0
  12. package/dist/browser-verbs-R7R6PK2G.mjs +21 -0
  13. package/dist/browsers-install-F2ZWEBOX.mjs +3 -0
  14. package/dist/chokidar-KB6GLGX4.mjs +7 -0
  15. package/dist/chunk-2N64R5DC.mjs +457 -0
  16. package/dist/chunk-2VGKPSCR.mjs +8 -0
  17. package/dist/chunk-2VSGDT7T.mjs +7 -0
  18. package/dist/chunk-2YKSIUIN.mjs +3 -0
  19. package/dist/chunk-2ZORFJJP.mjs +11 -0
  20. package/dist/chunk-42J77CYA.mjs +3 -0
  21. package/dist/chunk-6TLKI7UN.mjs +4 -0
  22. package/dist/chunk-6U6H22OR.mjs +3 -0
  23. package/dist/chunk-7BFRKEFV.mjs +160 -0
  24. package/dist/chunk-7ZUWKIDM.mjs +3 -0
  25. package/dist/chunk-AH75LR2T.mjs +3 -0
  26. package/dist/chunk-B26AZRXU.mjs +41 -0
  27. package/dist/chunk-BIGNULF6.mjs +12 -0
  28. package/dist/chunk-COVGJJ47.mjs +3 -0
  29. package/dist/chunk-CWNYWHJ2.mjs +143 -0
  30. package/dist/chunk-EU3OXJX4.mjs +3 -0
  31. package/dist/chunk-EYVJTUBL.mjs +3 -0
  32. package/dist/chunk-G22LGRZ4.mjs +4 -0
  33. package/dist/chunk-I4JX25Y5.mjs +13 -0
  34. package/dist/chunk-IXBYLSGB.mjs +5 -0
  35. package/dist/chunk-IYLF56WL.mjs +3 -0
  36. package/dist/chunk-K65JNLTT.mjs +3 -0
  37. package/dist/chunk-LPJF33QP.mjs +3 -0
  38. package/dist/chunk-MHNEFL35.mjs +3 -0
  39. package/dist/chunk-N3533BCE.mjs +3 -0
  40. package/dist/chunk-NXTEMSUR.mjs +4 -0
  41. package/dist/chunk-OHVNABCL.mjs +10 -0
  42. package/dist/chunk-QICYK6XT.mjs +10 -0
  43. package/dist/chunk-RU7M6UGM.mjs +5 -0
  44. package/dist/chunk-S3M2RTHJ.mjs +7 -0
  45. package/dist/chunk-U3KRIAEU.mjs +3 -0
  46. package/dist/chunk-YB25SMQ2.mjs +141 -0
  47. package/dist/chunk-ZN6MI2TU.mjs +4 -0
  48. package/dist/client-UR65IKYX.mjs +2 -0
  49. package/dist/comment-F734YE5S.mjs +6 -0
  50. package/dist/cookies-X7W5U3VE.mjs +3 -0
  51. package/dist/daemon-7M5HNFD7.mjs +7 -0
  52. package/dist/device-fixture-MJSDIP75.mjs +2 -0
  53. package/dist/devices-NG4P5UPS.mjs +4 -0
  54. package/dist/devtools-N5AYAR54.mjs +12 -0
  55. package/dist/doctor-Q76JEQQI.mjs +4 -0
  56. package/dist/extractor-Y477MBN6.mjs +2 -0
  57. package/dist/html-reporter-7QHIRHEY.mjs +2 -0
  58. package/dist/index.d.ts +87 -120
  59. package/dist/index.mjs +26 -1741
  60. package/dist/init-6RHO2LGR.mjs +15 -0
  61. package/dist/ink-reporter-4EN7CRMK.mjs +3 -0
  62. package/dist/inspect-44KF3IPH.mjs +19 -0
  63. package/dist/ios-tools-WK66CQ7Q.mjs +2 -0
  64. package/dist/json-reporter-SXWPAXRY.mjs +2 -0
  65. package/dist/junit-reporter-5AT3OFWV.mjs +12 -0
  66. package/dist/mail-GTOZFXJ5.mjs +14 -0
  67. package/dist/observe-EDXYWK6C.mjs +3 -0
  68. package/dist/render-MHOBDOSP.mjs +383 -0
  69. package/dist/run-GUWITPL4.mjs +2 -0
  70. package/dist/scaffold-6ZF6K6Y5.mjs +38 -0
  71. package/dist/screenshot-GUJSIRQB.mjs +2 -0
  72. package/dist/session-daemon-cmd-QHVSSKSL.mjs +4 -0
  73. package/dist/simctl-driver-PNUN7W7G.mjs +5 -0
  74. package/dist/skeptic.mjs +3 -1754
  75. package/dist/slack-reporter-EEFO66V6.mjs +8 -0
  76. package/dist/watch-A7ZLUYR2.mjs +3 -0
  77. package/dist/webhook-reporter-BXJGZS2I.mjs +3 -0
  78. package/dist/worker.mjs +3 -724
  79. package/package.json +13 -11
@@ -0,0 +1,12 @@
1
+ import {createRequire}from'node:module';import {b,a,d}from'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
2
+ createRequire(import.meta.url);
3
+ var k=b((ks,Ye)=>{var ze=["nodebuffer","arraybuffer","fragments"],He=typeof Blob<"u";He&&ze.push("blob");Ye.exports={BINARY_TYPES:ze,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:He,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}};});var X=b((Cs,se)=>{var{EMPTY_BUFFER:Jt}=k(),Ee=Buffer[Symbol.species];function er(t,e){if(t.length===0)return Jt;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),s=0;for(let i=0;i<t.length;i++){let n=t[i];r.set(n,s),s+=n.length;}return s<e?new Ee(r.buffer,r.byteOffset,s):r}function Ke(t,e,r,s,i){for(let n=0;n<i;n++)r[s+n]=t[n]^e[n&3];}function Xe(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3];}function tr(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function ve(t){if(ve.readOnly=true,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Ee(t):ArrayBuffer.isView(t)?e=new Ee(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),ve.readOnly=false),e}se.exports={concat:er,mask:Ke,toArrayBuffer:tr,toBuffer:ve,unmask:Xe};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=a("bufferutil");se.exports.mask=function(e,r,s,i,n){n<48?Ke(e,r,s,i,n):t.mask(e,r,s,i,n);},se.exports.unmask=function(e,r){e.length<32?Xe(e,r):t.unmask(e,r);};}catch{}});var Je=b((Ls,Qe)=>{var Ze=Symbol("kDone"),be=Symbol("kRun"),we=class{constructor(e){this[Ze]=()=>{this.pending--,this[be]();},this.concurrency=e||1/0,this.jobs=[],this.pending=0;}add(e){this.jobs.push(e),this[be]();}[be](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Ze]);}}};Qe.exports=we;});var G=b((Ns,st)=>{var Z=a("zlib"),et=X(),rr=Je(),{kStatusCode:tt}=k(),sr=Buffer[Symbol.species],ir=Buffer.from([0,0,255,255]),ne=Symbol("permessage-deflate"),C=Symbol("total-length"),W=Symbol("callback"),P=Symbol("buffers"),q=Symbol("error"),ie,Te=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!ie){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ie=new rr(r);}}static get extensionName(){return "permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=true),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=true),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=true),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[W];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"));}}acceptAsServer(e){let r=this._options,s=e.find(i=>!(r.serverNoContextTakeover===false&&i.server_no_context_takeover||i.server_max_window_bits&&(r.serverMaxWindowBits===false||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>i.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!i.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(s.server_no_context_takeover=true),r.clientNoContextTakeover&&(s.client_no_context_takeover=true),typeof r.serverMaxWindowBits=="number"&&(s.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?s.client_max_window_bits=r.clientMaxWindowBits:(s.client_max_window_bits===true||r.clientMaxWindowBits===false)&&delete s.client_max_window_bits,s}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===false&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===false||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(s=>{let i=r[s];if(i.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(i=i[0],s==="client_max_window_bits"){if(i!==true){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n;}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else if(s==="server_max_window_bits"){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n;}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(i!==true)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else throw new Error(`Unknown parameter "${s}"`);r[s]=i;});}),e}decompress(e,r,s){ie.add(i=>{this._decompress(e,r,(n,o)=>{i(),s(n,o);});});}compress(e,r,s){ie.add(i=>{this._compress(e,r,(n,o)=>{i(),s(n,o);});});}_decompress(e,r,s){let i=this._isServer?"client":"server";if(!this._inflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[ne]=this,this._inflate[C]=0,this._inflate[P]=[],this._inflate.on("error",or),this._inflate.on("data",rt);}this._inflate[W]=s,this._inflate.write(e),r&&this._inflate.write(ir),this._inflate.flush(()=>{let n=this._inflate[q];if(n){this._inflate.close(),this._inflate=null,s(n);return}let o=et.concat(this._inflate[P],this._inflate[C]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[C]=0,this._inflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._inflate.reset()),s(null,o);});}_compress(e,r,s){let i=this._isServer?"server":"client";if(!this._deflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[C]=0,this._deflate[P]=[],this._deflate.on("data",nr);}this._deflate[W]=s,this._deflate.write(e),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=et.concat(this._deflate[P],this._deflate[C]);r&&(n=new sr(n.buffer,n.byteOffset,n.length-4)),this._deflate[W]=null,this._deflate[C]=0,this._deflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._deflate.reset(),s(null,n);});}};st.exports=Te;function nr(t){this[P].push(t),this[C]+=t.length;}function rt(t){if(this[C]+=t.length,this[ne]._maxPayload<1||this[C]<=this[ne]._maxPayload){this[P].push(t);return}this[q]=new RangeError("Max payload size exceeded"),this[q].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[q][tt]=1009,this.removeListener("data",rt),this.reset();}function or(t){if(this[ne]._inflate=null,this[q]){this[W](this[q]);return}t[tt]=1007,this[W](t);}});var V=b((Ps,oe)=>{var{isUtf8:it}=a("buffer"),{hasBlob:ar}=k(),lr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function fr(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function Oe(t){let e=t.length,r=0;for(;r<e;)if((t[r]&128)===0)r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return false;r+=2;}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return false;r+=3;}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return false;r+=4;}else return false;return true}function hr(t){return ar&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}oe.exports={isBlob:hr,isValidStatusCode:fr,isValidUTF8:Oe,tokenChars:lr};if(it)oe.exports.isValidUTF8=function(t){return t.length<24?Oe(t):it(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=a("utf-8-validate");oe.exports.isValidUTF8=function(e){return e.length<32?Oe(e):t(e)};}catch{}});var Pe=b((Bs,ct)=>{var{Writable:cr}=a("stream"),nt=G(),{BINARY_TYPES:ur,EMPTY_BUFFER:ot,kStatusCode:dr,kWebSocket:_r}=k(),{concat:ke,toArrayBuffer:mr,unmask:pr}=X(),{isValidStatusCode:gr,isValidUTF8:at}=V(),ae=Buffer[Symbol.species],v=0,lt=1,ft=2,ht=3,Ce=4,Le=5,le=6,Ne=class extends cr{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:true,this._binaryType=e.binaryType||ur[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[_r]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=false,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=false,this._fin=false,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=false,this._loop=false,this._state=v;}_write(e,r,s){if(this._opcode===8&&this._state==v)return s();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){s(this.createError(RangeError,"Too many buffered chunks",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s);}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new ae(s.buffer,s.byteOffset+e,s.length-e),new ae(s.buffer,s.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let s=this._buffers[0],i=r.length-e;e>=s.length?r.set(this._buffers.shift(),i):(r.set(new Uint8Array(s.buffer,s.byteOffset,e),i),this._buffers[0]=new ae(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length;}while(e>0);return r}startLoop(e){this._loop=true;do switch(this._state){case v:this.getInfo(e);break;case lt:this.getPayloadLength16(e);break;case ft:this.getPayloadLength64(e);break;case ht:this.getMask();break;case Ce:this.getData(e);break;case Le:case le:this._loop=false;return}while(this._loop);this._errored||e();}getInfo(e){if(this._bufferedBytes<2){this._loop=false;return}let r=this.consume(2);if((r[0]&48)!==0){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(i);return}let s=(r[0]&64)===64;if(s&&!this._extensions[nt.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(s){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._opcode=this._fragmented;}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._compressed=s;}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",true,1002,"WS_ERR_EXPECTED_FIN");e(i);return}if(s){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,true,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(i);return}}else {let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",true,1002,"WS_ERR_EXPECTED_MASK");e(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",true,1002,"WS_ERR_UNEXPECTED_MASK");e(i);return}this._payloadLength===126?this._state=lt:this._payloadLength===127?this._state=ft:this.haveLength(e);}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=false;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e);}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=false;return}let r=this.consume(8),s=r.readUInt32BE(0);if(s>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",false,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(i);return}this._payloadLength=s*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(e);}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=ht:this._state=Ce;}getMask(){if(this._bufferedBytes<4){this._loop=false;return}this._mask=this.consume(4),this._state=Ce;}getData(e){let r=ot;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=false;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&pr(r,this._mask);}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=Le,this.decompress(r,e);return}if(r.length){if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let s=this.createError(RangeError,"Too many message fragments",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(s);return}this._messageLength=this._totalPayloadLength,this._fragments.push(r);}this.dataMessage(e);}decompress(e,r){this._extensions[nt.extensionName].decompress(e,this._fin,(i,n)=>{if(i)return r(i);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(o);return}if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let o=this.createError(RangeError,"Too many message fragments",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");r(o);return}this._fragments.push(n);}this.dataMessage(r),this._state===v&&this.startLoop(r);});}dataMessage(e){if(!this._fin){this._state=v;return}let r=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;this._binaryType==="nodebuffer"?i=ke(s,r):this._binaryType==="arraybuffer"?i=mr(ke(s,r)):this._binaryType==="blob"?i=new Blob(s):i=s,this._allowSynchronousEvents?(this.emit("message",i,true),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,true),this._state=v,this.startLoop(e);}));}else {let i=ke(s,r);if(!this._skipUTF8Validation&&!at(i)){let n=this.createError(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8");e(n);return}this._state===Le||this._allowSynchronousEvents?(this.emit("message",i,false),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,false),this._state=v,this.startLoop(e);}));}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=false,this.emit("conclude",1005,ot),this.end();else {let s=e.readUInt16BE(0);if(!gr(s)){let n=this.createError(RangeError,`invalid status code ${s}`,true,1002,"WS_ERR_INVALID_CLOSE_CODE");r(n);return}let i=new ae(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!at(i)){let n=this.createError(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8");r(n);return}this._loop=false,this.emit("conclude",s,i),this.end();}this._state=v;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=v):(this._state=le,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=v,this.startLoop(r);}));}createError(e,r,s,i,n){this._loop=false,this._errored=true;let o=new e(s?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=n,o[dr]=i,o}};ct.exports=Ne;});var Ue=b((Us,_t)=>{var{Duplex:Rs}=a("stream"),{randomFillSync:yr}=a("crypto"),{types:{isUint8Array:xr}}=a("util"),ut=G(),{EMPTY_BUFFER:Sr,kWebSocket:Er,NOOP:vr}=k(),{isBlob:$,isValidStatusCode:br}=V(),{mask:dt,toBuffer:R}=X(),b=Symbol("kByteLength"),wr=Buffer.alloc(4),fe=8*1024,U,j=fe,w=0,Tr=1,Or=2,Be=class t{constructor(e,r,s){this._extensions=r||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=true,this._compress=false,this._bufferedBytes=0,this._queue=[],this._state=w,this.onerror=vr,this[Er]=void 0;}static frame(e,r){let s,i=false,n=2,o=false;r.mask&&(s=r.maskBuffer||wr,r.generateMask?r.generateMask(s):(j===fe&&(U===void 0&&(U=Buffer.alloc(fe)),yr(U,0,fe),j=0),s[0]=U[j++],s[1]=U[j++],s[2]=U[j++],s[3]=U[j++]),o=(s[0]|s[1]|s[2]|s[3])===0,n=6);let l;typeof e=="string"?(!r.mask||o)&&r[b]!==void 0?l=r[b]:(e=Buffer.from(e),l=e.length):(l=e.length,i=r.mask&&r.readOnly&&!o);let f=l;l>=65536?(n+=8,f=127):l>125&&(n+=2,f=126);let a=Buffer.allocUnsafe(i?l+n:n);return a[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(a[0]|=64),a[1]=f,f===126?a.writeUInt16BE(l,2):f===127&&(a[2]=a[3]=0,a.writeUIntBE(l,4,6)),r.mask?(a[1]|=128,a[n-4]=s[0],a[n-3]=s[1],a[n-2]=s[2],a[n-1]=s[3],o?[a,e]:i?(dt(e,s,a,n,l),[a]):(dt(e,s,e,0,l),[a,e])):[a,e]}close(e,r,s,i){let n;if(e===void 0)n=Sr;else {if(typeof e!="number"||!br(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0);else {let l=Buffer.byteLength(r);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");if(n=Buffer.allocUnsafe(2+l),n.writeUInt16BE(e,0),typeof r=="string")n.write(r,2);else if(xr(r))n.set(r,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[b]:n.length,fin:true,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:false,rsv1:false};this._state!==w?this.enqueue([this.dispatch,n,false,o,i]):this.sendFrame(t.frame(n,o),i);}ping(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=false):$(e)?(i=e.size,n=false):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:true,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:false};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,false,o,s]):this.getBlobData(e,false,o,s):this._state!==w?this.enqueue([this.dispatch,e,false,o,s]):this.sendFrame(t.frame(e,o),s);}pong(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=false):$(e)?(i=e.size,n=false):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:true,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:false};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,false,o,s]):this.getBlobData(e,false,o,s):this._state!==w?this.enqueue([this.dispatch,e,false,o,s]):this.sendFrame(t.frame(e,o),s);}send(e,r,s){let i=this._extensions[ut.extensionName],n=r.binary?2:1,o=r.compress,l,f;typeof e=="string"?(l=Buffer.byteLength(e),f=false):$(e)?(l=e.size,f=false):(e=R(e),l=e.length,f=R.readOnly),this._firstFragment?(this._firstFragment=false,o&&i&&i.params[i._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=i._threshold),this._compress=o):(o=false,n=0),r.fin&&(this._firstFragment=true);let a={[b]:l,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:f,rsv1:o};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,this._compress,a,s]):this.getBlobData(e,this._compress,a,s):this._state!==w?this.enqueue([this.dispatch,e,this._compress,a,s]):this.dispatch(e,this._compress,a,s);}getBlobData(e,r,s,i){this._bufferedBytes+=s[b],this._state=Or,e.arrayBuffer().then(n=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Re,this,l,i);return}this._bufferedBytes-=s[b];let o=R(n);r?this.dispatch(o,r,s,i):(this._state=w,this.sendFrame(t.frame(o,s),i),this.dequeue());}).catch(n=>{process.nextTick(kr,this,n,i);});}dispatch(e,r,s,i){if(!r){this.sendFrame(t.frame(e,s),i);return}let n=this._extensions[ut.extensionName];this._bufferedBytes+=s[b],this._state=Tr,n.compress(e,s.fin,(o,l)=>{if(this._socket.destroyed){let f=new Error("The socket was closed while data was being compressed");Re(this,f,i);return}this._bufferedBytes-=s[b],this._state=w,s.readOnly=false,this.sendFrame(t.frame(l,s),i),this.dequeue();});}dequeue(){for(;this._state===w&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][b],Reflect.apply(e[0],this,e.slice(1));}}enqueue(e){this._bufferedBytes+=e[3][b],this._queue.push(e);}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r);}};_t.exports=Be;function Re(t,e,r){typeof r=="function"&&r(e);for(let s=0;s<t._queue.length;s++){let i=t._queue[s],n=i[i.length-1];typeof n=="function"&&n(e);}}function kr(t,e,r){Re(t,e,r),t.onerror(e);}});var bt=b((Is,vt)=>{var{kForOnEventAttribute:Q,kListener:Ie}=k(),mt=Symbol("kCode"),pt=Symbol("kData"),gt=Symbol("kError"),yt=Symbol("kMessage"),xt=Symbol("kReason"),z=Symbol("kTarget"),St=Symbol("kType"),Et=Symbol("kWasClean"),L=class{constructor(e){this[z]=null,this[St]=e;}get target(){return this[z]}get type(){return this[St]}};Object.defineProperty(L.prototype,"target",{enumerable:true});Object.defineProperty(L.prototype,"type",{enumerable:true});var I=class extends L{constructor(e,r={}){super(e),this[mt]=r.code===void 0?0:r.code,this[xt]=r.reason===void 0?"":r.reason,this[Et]=r.wasClean===void 0?false:r.wasClean;}get code(){return this[mt]}get reason(){return this[xt]}get wasClean(){return this[Et]}};Object.defineProperty(I.prototype,"code",{enumerable:true});Object.defineProperty(I.prototype,"reason",{enumerable:true});Object.defineProperty(I.prototype,"wasClean",{enumerable:true});var H=class extends L{constructor(e,r={}){super(e),this[gt]=r.error===void 0?null:r.error,this[yt]=r.message===void 0?"":r.message;}get error(){return this[gt]}get message(){return this[yt]}};Object.defineProperty(H.prototype,"error",{enumerable:true});Object.defineProperty(H.prototype,"message",{enumerable:true});var J=class extends L{constructor(e,r={}){super(e),this[pt]=r.data===void 0?null:r.data;}get data(){return this[pt]}};Object.defineProperty(J.prototype,"data",{enumerable:true});var Cr={addEventListener(t,e,r={}){for(let i of this.listeners(t))if(!r[Q]&&i[Ie]===e&&!i[Q])return;let s;if(t==="message")s=function(n,o){let l=new J("message",{data:o?n:n.toString()});l[z]=this,he(e,this,l);};else if(t==="close")s=function(n,o){let l=new I("close",{code:n,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[z]=this,he(e,this,l);};else if(t==="error")s=function(n){let o=new H("error",{error:n,message:n.message});o[z]=this,he(e,this,o);};else if(t==="open")s=function(){let n=new L("open");n[z]=this,he(e,this,n);};else return;s[Q]=!!r[Q],s[Ie]=e,r.once?this.once(t,s):this.on(t,s);},removeEventListener(t,e){for(let r of this.listeners(t))if(r[Ie]===e&&!r[Q]){this.removeListener(t,r);break}}};vt.exports={CloseEvent:I,ErrorEvent:H,Event:L,EventTarget:Cr,MessageEvent:J};function he(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r);}});var ce=b((Ds,wt)=>{var{tokenChars:ee}=V();function T(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r);}function Lr(t){let e=Object.create(null),r=Object.create(null),s=false,i=false,n=false,o,l,f=-1,a=-1,h=-1,c=0;for(;c<t.length;c++)if(a=t.charCodeAt(c),o===void 0)if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(c!==0&&(a===32||a===9))h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let g=t.slice(f,h);a===44?(T(e,g,r),r=Object.create(null)):o=g,f=h=-1;}else throw new SyntaxError(`Unexpected character at index ${c}`);else if(l===void 0)if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(a===32||a===9)h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c),T(r,t.slice(f,h),true),a===44&&(T(e,o,r),r=Object.create(null),o=void 0),f=h=-1;}else if(a===61&&f!==-1&&h===-1)l=t.slice(f,c),f=h=-1;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(i){if(ee[a]!==1)throw new SyntaxError(`Unexpected character at index ${c}`);f===-1?f=c:s||(s=true),i=false;}else if(n)if(ee[a]===1)f===-1&&(f=c);else if(a===34&&f!==-1)n=false,h=c;else if(a===92)i=true;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(a===34&&t.charCodeAt(c-1)===61)n=true;else if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(f!==-1&&(a===32||a===9))h===-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let g=t.slice(f,h);s&&(g=g.replace(/\\/g,""),s=false),T(r,l,g),a===44&&(T(e,o,r),r=Object.create(null),o=void 0),l=void 0,f=h=-1;}else throw new SyntaxError(`Unexpected character at index ${c}`);if(f===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");h===-1&&(h=c);let _=t.slice(f,h);return o===void 0?T(e,_,r):(l===void 0?T(r,_,true):s?T(r,l,_.replace(/\\/g,"")):T(r,l,_),T(e,o,r)),e}function Nr(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.map(s=>[e].concat(Object.keys(s).map(i=>{let n=s[i];return Array.isArray(n)||(n=[n]),n.map(o=>o===true?i:`${i}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}wt.exports={format:Nr,parse:Lr};});var me=b((As,Dt)=>{var Pr=a("events"),Br=a("https"),Rr=a("http"),kt=a("net"),Ur=a("tls"),{randomBytes:Ir,createHash:Dr}=a("crypto"),{Duplex:Fs,Readable:Ms}=a("stream"),{URL:De}=a("url"),B=G(),Fr=Pe(),Mr=Ue(),{isBlob:Ar}=V(),{BINARY_TYPES:Tt,CLOSE_TIMEOUT:Wr,EMPTY_BUFFER:ue,GUID:qr,kForOnEventAttribute:Fe,kListener:Gr,kStatusCode:Vr,kWebSocket:y,NOOP:Ct}=k(),{EventTarget:{addEventListener:$r,removeEventListener:jr}}=bt(),{format:zr,parse:Hr}=ce(),{toBuffer:Yr}=X(),Lt=Symbol("kAborted"),Me=[8,13],N=["CONNECTING","OPEN","CLOSING","CLOSED"],Kr=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,d=class t extends Pr{constructor(e,r,s){super(),this._binaryType=Tt[0],this._closeCode=1006,this._closeFrameReceived=false,this._closeFrameSent=false,this._closeMessage=ue,this._closeTimer=null,this._errorEmitted=false,this._extensions={},this._paused=false,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=false,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(s=r,r=[]):r=[r]),Nt(this,e,r,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=true);}get binaryType(){return this._binaryType}set binaryType(e){Tt.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e));}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,s){let i=new Fr({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),n=new Mr(e,this._extensions,s.generateMask);this._receiver=i,this._sender=n,this._socket=e,i[y]=this,n[y]=this,e[y]=this,i.on("conclude",Qr),i.on("drain",Jr),i.on("error",es),i.on("message",ts),i.on("ping",rs),i.on("pong",ss),n.onerror=is,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",Rt),e.on("data",_e),e.on("end",Ut),e.on("error",It),this._readyState=t.OPEN,this.emit("open");}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[B.extensionName]&&this._extensions[B.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,s=>{s||(this._closeFrameSent=true,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end());}),Bt(this);}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=true,this._socket.pause());}ping(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||ue,r,s);}pong(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||ue,r,s);}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=false,this._receiver._writableState.needDrain||this._socket.resume());}send(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(s=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}let i={binary:typeof e!="string",mask:!this._isServer,compress:true,fin:true,...r};this._extensions[B.extensionName]||(i.compress=false),this._sender.send(e||ue,i,s);}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy());}}};Object.defineProperty(d,"CONNECTING",{enumerable:true,value:N.indexOf("CONNECTING")});Object.defineProperty(d.prototype,"CONNECTING",{enumerable:true,value:N.indexOf("CONNECTING")});Object.defineProperty(d,"OPEN",{enumerable:true,value:N.indexOf("OPEN")});Object.defineProperty(d.prototype,"OPEN",{enumerable:true,value:N.indexOf("OPEN")});Object.defineProperty(d,"CLOSING",{enumerable:true,value:N.indexOf("CLOSING")});Object.defineProperty(d.prototype,"CLOSING",{enumerable:true,value:N.indexOf("CLOSING")});Object.defineProperty(d,"CLOSED",{enumerable:true,value:N.indexOf("CLOSED")});Object.defineProperty(d.prototype,"CLOSED",{enumerable:true,value:N.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(d.prototype,t,{enumerable:true});});["open","error","close","message"].forEach(t=>{Object.defineProperty(d.prototype,`on${t}`,{enumerable:true,get(){for(let e of this.listeners(t))if(e[Fe])return e[Gr];return null},set(e){for(let r of this.listeners(t))if(r[Fe]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[Fe]:true});}});});d.prototype.addEventListener=$r;d.prototype.removeEventListener=jr;Dt.exports=d;function Nt(t,e,r,s){let i={allowSynchronousEvents:true,autoPong:true,closeTimeout:Wr,protocolVersion:Me[1],maxBufferedChunks:1048576,maxFragments:131072,maxPayload:104857600,skipUTF8Validation:false,perMessageDeflate:true,followRedirects:false,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=i.autoPong,t._closeTimeout=i.closeTimeout,!Me.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${Me.join(", ")})`);let n;if(e instanceof De)n=e;else try{n=new De(e);}catch{throw new SyntaxError(`Invalid URL: ${e}`)}n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),t._url=n.href;let o=n.protocol==="wss:",l=n.protocol==="ws+unix:",f;if(n.protocol!=="ws:"&&!o&&!l?f=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!n.pathname?f="The URL's pathname is empty":n.hash&&(f="The URL contains a fragment identifier"),f){let u=new SyntaxError(f);if(t._redirects===0)throw u;de(t,u);return}let a=o?443:80,h=Ir(16).toString("base64"),c=o?Br.request:Rr.request,_=new Set,g;if(i.createConnection=i.createConnection||(o?Zr:Xr),i.defaultPort=i.defaultPort||a,i.port=n.port||a,i.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket"},i.path=n.pathname+n.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(g=new B({...i.perMessageDeflate,isServer:false,maxPayload:i.maxPayload}),i.headers["Sec-WebSocket-Extensions"]=zr({[B.extensionName]:g.offer()})),r.length){for(let u of r){if(typeof u!="string"||!Kr.test(u)||_.has(u))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(u);}i.headers["Sec-WebSocket-Protocol"]=r.join(",");}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(n.username||n.password)&&(i.auth=`${n.username}:${n.password}`),l){let u=i.path.split(":");i.socketPath=u[0],i.path=u[1];}let m;if(i.followRedirects){if(t._redirects===0){t._originalIpc=l,t._originalSecure=o,t._originalHostOrSocketPath=l?i.socketPath:n.host;let u=s&&s.headers;if(s={...s,headers:{}},u)for(let[x,M]of Object.entries(u))s.headers[x.toLowerCase()]=M;}else if(t.listenerCount("redirect")===0){let u=l?t._originalIpc?i.socketPath===t._originalHostOrSocketPath:false:t._originalIpc?false:n.host===t._originalHostOrSocketPath;(!u||t._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,u||delete i.headers.host,i.auth=void 0);}i.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),m=t._req=c(i),t._redirects&&t.emit("redirect",t.url,m);}else m=t._req=c(i);i.timeout&&m.on("timeout",()=>{E(t,m,"Opening handshake has timed out");}),m.on("error",u=>{m===null||m[Lt]||(m=t._req=null,de(t,u));}),m.on("response",u=>{let x=u.headers.location,M=u.statusCode;if(x&&i.followRedirects&&M>=300&&M<400){if(++t._redirects>i.maxRedirects){E(t,m,"Maximum redirects exceeded");return}m.abort();let Y;try{Y=new De(x,e);}catch{let A=new SyntaxError(`Invalid URL: ${x}`);de(t,A);return}Nt(t,Y,r,s);}else t.emit("unexpected-response",m,u)||E(t,m,`Unexpected server response: ${u.statusCode}`);}),m.on("upgrade",(u,x,M)=>{if(t.emit("upgrade",u),t.readyState!==d.CONNECTING)return;m=t._req=null;let Y=u.headers.upgrade;if(Y===void 0||Y.toLowerCase()!=="websocket"){E(t,x,"Invalid Upgrade header");return}let Ve=Dr("sha1").update(h+qr).digest("base64");if(u.headers["sec-websocket-accept"]!==Ve){E(t,x,"Invalid Sec-WebSocket-Accept header");return}let A=u.headers["sec-websocket-protocol"],K;if(A!==void 0?_.size?_.has(A)||(K="Server sent an invalid subprotocol"):K="Server sent a subprotocol but none was requested":_.size&&(K="Server sent no subprotocol"),K){E(t,x,K);return}A&&(t._protocol=A);let $e=u.headers["sec-websocket-extensions"];if($e!==void 0){if(!g){E(t,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let xe;try{xe=Hr($e);}catch{E(t,x,"Invalid Sec-WebSocket-Extensions header");return}let je=Object.keys(xe);if(je.length!==1||je[0]!==B.extensionName){E(t,x,"Server indicated an extension that was not requested");return}try{g.accept(xe[B.extensionName]);}catch{E(t,x,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[B.extensionName]=g;}t.setSocket(x,M,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxBufferedChunks:i.maxBufferedChunks,maxFragments:i.maxFragments,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation});}),i.finishRequest?i.finishRequest(m,t):m.end();}function de(t,e){t._readyState=d.CLOSING,t._errorEmitted=true,t.emit("error",e),t.emitClose();}function Xr(t){return t.path=t.socketPath,kt.connect(t)}function Zr(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=kt.isIP(t.host)?"":t.host),Ur.connect(t)}function E(t,e,r){t._readyState=d.CLOSING;let s=new Error(r);Error.captureStackTrace(s,E),e.setHeader?(e[Lt]=true,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(de,t,s)):(e.destroy(s),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)));}function Ae(t,e,r){if(e){let s=Ar(e)?e.size:Yr(e).length;t._socket?t._sender._bufferedBytes+=s:t._bufferedAmount+=s;}if(r){let s=new Error(`WebSocket is not open: readyState ${t.readyState} (${N[t.readyState]})`);process.nextTick(r,s);}}function Qr(t,e){let r=this[y];r._closeFrameReceived=true,r._closeMessage=e,r._closeCode=t,r._socket[y]!==void 0&&(r._socket.removeListener("data",_e),process.nextTick(Pt,r._socket),t===1005?r.close():r.close(t,e));}function Jr(){let t=this[y];t.isPaused||t._socket.resume();}function es(t){let e=this[y];e._socket[y]!==void 0&&(e._socket.removeListener("data",_e),process.nextTick(Pt,e._socket),e.close(t[Vr])),e._errorEmitted||(e._errorEmitted=true,e.emit("error",t));}function Ot(){this[y].emitClose();}function ts(t,e){this[y].emit("message",t,e);}function rs(t){let e=this[y];e._autoPong&&e.pong(t,!this._isServer,Ct),e.emit("ping",t);}function ss(t){this[y].emit("pong",t);}function Pt(t){t.resume();}function is(t){let e=this[y];e.readyState!==d.CLOSED&&(e.readyState===d.OPEN&&(e._readyState=d.CLOSING,Bt(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=true,e.emit("error",t)));}function Bt(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout);}function Rt(){let t=this[y];if(this.removeListener("close",Rt),this.removeListener("data",_e),this.removeListener("end",Ut),t._readyState=d.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e);}t._receiver.end(),this[y]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Ot),t._receiver.on("finish",Ot));}function _e(t){this[y]._receiver.write(t)||this.pause();}function Ut(){let t=this[y];t._readyState=d.CLOSING,t._receiver.end(),this.end();}function It(){let t=this[y];this.removeListener("error",It),this.on("error",Ct),t&&(t._readyState=d.CLOSING,this.destroy());}});var Wt=b((qs,At)=>{me();var {Duplex:ns}=a("stream");function Ft(t){t.emit("close");}function os(){!this.destroyed&&this._writableState.finished&&this.destroy();}function Mt(t){this.removeListener("error",Mt),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t);}function as(t,e){let r=true,s=new ns({...e,autoDestroy:false,emitClose:false,objectMode:false,writableObjectMode:false});return t.on("message",function(n,o){let l=!o&&s._readableState.objectMode?n.toString():n;s.push(l)||t.pause();}),t.once("error",function(n){s.destroyed||(r=false,s.destroy(n));}),t.once("close",function(){s.destroyed||s.push(null);}),s._destroy=function(i,n){if(t.readyState===t.CLOSED){n(i),process.nextTick(Ft,s);return}let o=false;t.once("error",function(f){o=true,n(f);}),t.once("close",function(){o||n(i),process.nextTick(Ft,s);}),r&&t.terminate();},s._final=function(i){if(t.readyState===t.CONNECTING){t.once("open",function(){s._final(i);});return}t._socket!==null&&(t._socket._writableState.finished?(i(),s._readableState.endEmitted&&s.destroy()):(t._socket.once("finish",function(){i();}),t.close()));},s._read=function(){t.isPaused&&t.resume();},s._write=function(i,n,o){if(t.readyState===t.CONNECTING){t.once("open",function(){s._write(i,n,o);});return}t.send(i,o);},s.on("end",os),s.on("error",Mt),s}At.exports=as;});var We=b((Gs,qt)=>{var{tokenChars:ls}=V();function fs(t){let e=new Set,r=-1,s=-1,i=0;for(i;i<t.length;i++){let o=t.charCodeAt(i);if(s===-1&&ls[o]===1)r===-1&&(r=i);else if(i!==0&&(o===32||o===9))s===-1&&r!==-1&&(s=i);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${i}`);s===-1&&(s=i);let l=t.slice(r,s);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),r=s=-1;}else throw new SyntaxError(`Unexpected character at index ${i}`)}if(r===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let n=t.slice(r,i);if(e.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return e.add(n),e}qt.exports={parse:fs};});var Yt=b(($s,Ht)=>{var hs=a("events"),pe=a("http"),{Duplex:Vs}=a("stream"),{createHash:cs}=a("crypto"),Gt=ce(),D=G(),us=We(),ds=me(),{CLOSE_TIMEOUT:_s,GUID:ms,kWebSocket:ps}=k(),gs=/^[+/0-9A-Za-z]{22}==$/,Vt=0,$t=1,zt=2,qe=class extends hs{constructor(e,r){if(super(),e={allowSynchronousEvents:true,autoPong:true,maxBufferedChunks:1024*1024,maxFragments:128*1024,maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:false,handleProtocols:null,clientTracking:true,closeTimeout:_s,verifyClient:null,noServer:false,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ds,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=pe.createServer((s,i)=>{let n=pe.STATUS_CODES[426];i.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),i.end(n);}),this._server.listen(e.port,e.host,e.backlog,r)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ys(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(i,n,o)=>{this.handleUpgrade(i,n,o,s);}});}e.perMessageDeflate===true&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=false),this.options=e,this._state=Vt;}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===zt){e&&this.once("close",()=>{e(new Error("The server is not running"));}),process.nextTick(te,this);return}if(e&&this.once("close",e),this._state!==$t)if(this._state=$t,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=true:process.nextTick(te,this):process.nextTick(te,this);else {let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{te(this);});}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return false}return true}handleUpgrade(e,r,s,i){r.on("error",jt);let n=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){F(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){F(this,e,r,400,"Invalid Upgrade header");return}if(n===void 0||!gs.test(n)){F(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){F(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){re(r,400);return}let f=e.headers["sec-websocket-protocol"],a=new Set;if(f!==void 0)try{a=us.parse(f);}catch{F(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let h=e.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&h!==void 0){let _=new D({...this.options.perMessageDeflate,isServer:true,maxPayload:this.options.maxPayload});try{let g=Gt.parse(h);g[D.extensionName]&&(_.accept(g[D.extensionName]),c[D.extensionName]=_);}catch{F(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(g,m,u,x)=>{if(!g)return re(r,m||401,u,x);this.completeUpgrade(c,n,a,e,r,s,i);});return}if(!this.options.verifyClient(_))return re(r,401)}this.completeUpgrade(c,n,a,e,r,s,i);}completeUpgrade(e,r,s,i,n,o,l){if(!n.readable||!n.writable)return n.destroy();if(n[ps])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Vt)return re(n,503);let a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${cs("sha1").update(r+ms).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(s.size){let c=this.options.handleProtocols?this.options.handleProtocols(s,i):s.values().next().value;c&&(a.push(`Sec-WebSocket-Protocol: ${c}`),h._protocol=c);}if(e[D.extensionName]){let c=e[D.extensionName].params,_=Gt.format({[D.extensionName]:[c]});a.push(`Sec-WebSocket-Extensions: ${_}`),h._extensions=e;}this.emit("headers",a,i),n.write(a.concat(`\r
4
+ `).join(`\r
5
+ `)),n.removeListener("error",jt),h.setSocket(n,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(te,this);})),l(h,i);}};Ht.exports=qe;function ys(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let s of Object.keys(e))t.removeListener(s,e[s]);}}function te(t){t._state=zt,t.emit("close");}function jt(){this.destroy();}function re(t,e,r,s){r=r||pe.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${pe.STATUS_CODES[e]}\r
6
+ `+Object.keys(s).map(i=>`${i}: ${s[i]}`).join(`\r
7
+ `)+`\r
8
+ \r
9
+ `+r);}function F(t,e,r,s,i,n){if(t.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,F),t.emit("wsClientError",o,r,e);}else re(r,s,i,n);}});var Zt=b((Hs,Xt)=>{Xt.exports={};});d(Wt(),1);d(ce(),1);d(G(),1);d(Pe(),1);d(Ue(),1);d(We(),1);var Kt=d(me(),1);d(Yt(),1);var ge=Kt.default;var ye=globalThis;ye.WebSocket||=ge;ye.window||=globalThis;ye.self||=globalThis;ye.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:true},{type:2,value:"InternalApp",isEnabled:true,isValid:true},{type:2,value:"InternalAppContext",isEnabled:true,isValid:true},{type:2,value:"InternalStdoutContext",isEnabled:true,isValid:true},{type:2,value:"InternalStderrContext",isEnabled:true,isValid:true},{type:2,value:"InternalStdinContext",isEnabled:true,isValid:true},{type:2,value:"InternalFocusContext",isEnabled:true,isValid:true}];var Ge=d(Zt(),1),Os=async()=>new Promise(t=>{let e=new ge("ws://localhost:8097"),r=setTimeout(()=>{e.terminate(),t(false);},2e3);r.unref(),e.on("open",()=>{clearTimeout(r),e.terminate(),t(true);}),e.on("error",()=>{clearTimeout(r),e.terminate(),t(false);});});await Os()?(Ge.default.initialize(),Ge.default.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
10
+
11
+ $ npx react-devtools
12
+ `);
@@ -0,0 +1,4 @@
1
+ import {createRequire}from'node:module';import {a as a$2}from'./chunk-IXBYLSGB.mjs';import {a as a$3}from'./chunk-QICYK6XT.mjs';import {c}from'./chunk-CWNYWHJ2.mjs';import'./chunk-6U6H22OR.mjs';import {a,m,d as d$1,f as f$1,e,g,c as c$1,i,k,j,h as h$1}from'./chunk-2VSGDT7T.mjs';import {a as a$1}from'./chunk-IYLF56WL.mjs';import {d as d$2}from'./chunk-ZN6MI2TU.mjs';import {d,a as a$4}from'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';import*as f from'fs';import*as te from'os';import*as h from'path';import {execFile}from'child_process';import {createRequire as createRequire$1}from'module';import'crypto';import'fs/promises';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
2
+ createRequire(import.meta.url);
3
+ var se=16e3,ie=new Set(["Locator","ElementHandle","JSHandle","Frame","Page","BrowserContext","Browser","CDPSession"]),L=e=>{try{return String(e)}catch{return "[unserializable]"}},z=(e,n={})=>{let r=new WeakSet,i=n.maxStringLength??se,a=n.spaces??2;return JSON.stringify(e,(u,t)=>{if(t===void 0)return;if(t===null)return null;switch(typeof t){case "bigint":return `${t}n`;case "function":return `[Function: ${t.name||"anonymous"}]`;case "symbol":return L(t);case "string":return t.length>i?`${t.slice(0,i)}... [truncated ${t.length-i} chars]`:t;case "object":break;default:return t}let d=t;if(r.has(d))return "[Circular]";if(r.add(d),Buffer.isBuffer(t))return `[Buffer: ${t.length} bytes]`;if(t instanceof RegExp)return L(t);if(t instanceof Error)return {error:t.name,message:t.message,stack:t.stack};if(t instanceof Map)return Array.from(t.entries());if(t instanceof Set)return Array.from(t.values());let m=t.constructor?.name;return typeof m=="string"&&ie.has(m)?`[${m}: ${L(t)}]`:t},a)};var le=createRequire$1(import.meta.url),o=(e,n,r,i,a,u)=>{e.push({id:n,status:r,title:i,detail:a,...u?{data:u}:{}});},Z=(e,n)=>{try{if(!f.existsSync(e)){if(!n)return {ok:!1,detail:"directory does not exist"};f.mkdirSync(e,{recursive:!0});}return f.accessSync(e,f.constants.W_OK),{ok:!0,detail:"writable"}}catch(r){return {ok:false,detail:r instanceof Error?r.message:String(r)}}},Y=(e,n)=>{try{return le.resolve(n??e),!0}catch{return false}},p=e=>{try{return f.readFileSync(e,"utf-8").split(/\r?\n/,1)[0]??null}catch{return null}},fe=()=>{let e=process.env.ANDROID_HOME??process.env.ANDROID_SDK_ROOT;return e?h.join(e,"platform-tools","adb"):"adb"},ee=(e,n,r=4e3)=>new Promise(i=>{execFile(e,n,{timeout:r},(a,u,t)=>{let d=`${u??""}${t??""}`.split(/\r?\n/).find(m=>m.trim())??"";if(a){i({ok:false,line:d||(a instanceof Error?a.message:String(a))});return}i({ok:true,line:d});});}),ue=async(e$1={})=>{let n=h.resolve(e$1.cwd??process.cwd()),r=[];o(r,"runtime","info","Runtime","Node and OS detected",{node:process.version,platform:`${process.platform}-${process.arch}`,home:te.homedir()});let i$1=null;try{i$1=c({searchCwd:n}),o(r,"config","pass","Config",i$1.configPath?`loaded ${i$1.configPath}`:"no config found; using defaults",{configPath:i$1.configPath,tests:i$1.config.tests,browser:i$1.config.browser.engine});}catch(s){o(r,"config","fail","Config",s instanceof Error?s.message:String(s));}let a$5=i$1?.config,u=a(),t=Z(u,!!e$1.fix);o(r,"home-dir",t.ok?"pass":"warn","Home Directory",`${u}: ${t.detail}${e$1.fix?" (fix enabled)":""}`),e$1.fix&&t.ok&&m();let d$2=h.resolve(n,a$5?.output.dir??d),m$1=Z(d$2,!!e$1.fix);o(r,"output-dir",m$1.ok?"pass":"warn","Output Directory",`${d$2}: ${m$1.detail}`),o(r,"axe-core","pass","axe-core","bundled into skeptic-cli; accessibility audits can run without a project-level @axe-core/playwright install");let N=Y("accessibility-checker-engine","accessibility-checker-engine/ace.js"),B=a$5?.observability.accessibilityDualEngine===true;o(r,"ibm-equal-access",N?"pass":B?"warn":"info","IBM Equal Access",N?"installed":B?"optional dependency missing; dual-engine accessibility will fall back to axe-core":"not installed; only required when observability.accessibilityDualEngine is enabled");let I=Y("better-sqlite3"),q=a$5?.auth.cookies===true;o(r,"better-sqlite3",I?"pass":q?"warn":"info","Cookie SQLite Reader",I?"installed":q?"optional dependency missing; Chromium/Firefox cookie extraction may be limited":"not installed; only required when auth.cookies is enabled");try{let s=await a$1();for(let c of ["chromium","firefox","webkit"])try{let l=s[c].executablePath();o(r,`playwright-${c}`,f.existsSync(l)?"pass":"warn",`Playwright ${c}`,f.existsSync(l)?`browser executable found at ${l}`:`browser executable not found at ${l}; run skeptic browsers install ${c}`,{executablePath:l});}catch(l){o(r,`playwright-${c}`,"warn",`Playwright ${c}`,l instanceof Error?l.message:String(l));}if(!e$1.quick&&a$5)try{await(await s[a$5.browser.engine].launch({headless:a$5.browser.headless})).close(),o(r,"playwright-launch","pass","Browser Launch",`${a$5.browser.engine} launched and closed successfully`);}catch(c){o(r,"playwright-launch","fail","Browser Launch",c instanceof Error?c.message:String(c));}}catch(s){o(r,"playwright","fail","Playwright",s instanceof Error?s.message:String(s));}let P=d$1(),w=p(P),b=w?Number(w):null,T=b!==null&&Number.isFinite(b)&&a$2(b);o(r,"daemon",T?"pass":w?"warn":"info","Daemon",T?`running at PID ${b}`:w?`stale or inaccessible PID sidecar at ${P}`:"not running",{socketPath:c$1(),pidPath:P,versionPath:e(),enginePath:f$1(),logPath:g(),version:p(e()),engine:p(f$1())});let $=i(),y=p($),k$1=y?Number(y):null,F=k$1!==null&&Number.isFinite(k$1)&&a$2(k$1);o(r,"session-daemon",F?"pass":y?"warn":"info","Session Daemon",F?`running at PID ${k$1}`:y?`stale or inaccessible PID sidecar at ${$}`:"not running",{socketPath:h$1(),pidPath:$,versionPath:j(),enginePath:k(),version:p(j()),engine:p(k())});let S=a$3();o(r,"cookies",S.length>0?"pass":"warn","Cookie Profiles",S.length>0?`detected ${S.length} supported browser profile(s)`:"no supported browser profiles detected",{browsers:S.map(s=>({browser:s.browser,profilePath:s.profilePath}))});let D=fe(),x=await ee(D,["version"]);if(o(r,"adb",x.ok?"pass":"info","Android adb",x.ok?`${x.line||"adb available"} (${D})`:`adb not found (${D}); install Android platform-tools or set ANDROID_HOME to enable Android (mobile) QA`,{adbPath:D}),process.platform==="darwin"){let{resolveDeveloperDir:s}=await import('./ios-tools-WK66CQ7Q.mjs'),c=s();o(r,"simctl",c?"pass":"info","iOS simctl",c?`full Xcode found (${c})`:"no full Xcode found; --platform ios-sim needs Xcode (Command Line Tools lack simctl)");let l=await ee("axe",["--version"]);o(r,"axe",l.ok?"pass":"info","iOS axe",l.ok?`axe ${l.line||"available"} (--platform ios-sim)`:"axe not installed; --platform ios-sim needs it \u2014 `brew install cameroncooke/axe/axe`");}let j$1={pass:0,warn:0,fail:0,info:0};for(let s of r)j$1[s.status]+=1;return {product:a$4,version:"1.0.1",cwd:n,platform:{os:process.platform,arch:process.arch,node:process.version},summary:j$1,checks:r}},de=e=>e==="pass"?"PASS":e==="warn"?"WARN":e==="fail"?"FAIL":"INFO",me=e=>{d$2.raw(`${a$4} doctor`),d$2.raw(`cwd: ${e.cwd}`),d$2.raw(`runtime: ${e.platform.os}-${e.platform.arch}, ${e.platform.node}`),d$2.raw(`summary: ${e.summary.pass} pass, ${e.summary.warn} warn, ${e.summary.fail} fail, ${e.summary.info} info`),d$2.raw("");for(let n of e.checks)d$2.raw(`${de(n.status).padEnd(4)} ${n.title}: ${n.detail}`);},_e=async(e={})=>{let n=await ue(e);e.json?process.stdout.write(`${z(n)}
4
+ `):me(n),n.summary.fail>0&&(process.exitCode=1);};export{ue as collectDoctorReport,_e as runDoctor};
@@ -0,0 +1,2 @@
1
+ import {createRequire}from'node:module';export{d as cookiesFirstUseNotice,a as detectBrowsers,e as extractAndInjectCookies,b as extractCookies,c as mergeCookies}from'./chunk-QICYK6XT.mjs';import'./chunk-ZN6MI2TU.mjs';import'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
2
+ createRequire(import.meta.url);
@@ -0,0 +1,2 @@
1
+ import {createRequire}from'node:module';export{a as HtmlReporter}from'./chunk-YB25SMQ2.mjs';import'./chunk-EYVJTUBL.mjs';import'./chunk-ZN6MI2TU.mjs';import'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
2
+ createRequire(import.meta.url);
package/dist/index.d.ts CHANGED
@@ -58,23 +58,6 @@ interface PrewarmOptions {
58
58
  */
59
59
  declare const prewarmDaemonIfNeeded: (argv: readonly string[], opts: PrewarmOptions) => Promise<boolean>;
60
60
 
61
- type AIProvider = "gemini" | "openai" | "anthropic";
62
- /**
63
- * Result of an AI call. `retryCount` is the number of transient retries that
64
- * `withRetry` performed before success; 0 means the first attempt worked.
65
- * Surfacing this lets step handlers add a `StepResult.warnings` entry like
66
- * "AI retried 2× before success" so users can see when CI was rescued.
67
- */
68
- interface AIResult {
69
- text: string;
70
- retryCount: number;
71
- }
72
- interface AIClient {
73
- readonly provider: AIProvider;
74
- analyzeImage(imageBuffer: Buffer, prompt: string, temperature?: number): Promise<AIResult>;
75
- generateText(prompt: string, system?: string, temperature?: number): Promise<AIResult>;
76
- }
77
-
78
61
  /**
79
62
  * ARIA snapshot-ref entry — one record per minted ref.
80
63
  *
@@ -156,8 +139,6 @@ declare class ExecutionContext {
156
139
  lastElement: Locator | null;
157
140
  readonly testDir: string;
158
141
  readonly sourceDir: string;
159
- readonly aiClient?: AIClient;
160
- readonly aiProvider?: AIProvider;
161
142
  readonly defaultTimeout: number;
162
143
  activeTimeout: number;
163
144
  readonly collectors: Map<CollectorName, Collector>;
@@ -186,7 +167,7 @@ declare class ExecutionContext {
186
167
  * aborted test body.
187
168
  */
188
169
  inTeardown: boolean;
189
- constructor(page: Page, baseUrl: string, testDir?: string, sourceDir?: string, aiClient?: AIClient, aiProvider?: AIProvider, defaultTimeout?: number, collectors?: Collector[], artifactConfig?: ArtifactRuntimeConfig);
170
+ constructor(page: Page, baseUrl: string, testDir?: string, sourceDir?: string, defaultTimeout?: number, collectors?: Collector[], artifactConfig?: ArtifactRuntimeConfig);
190
171
  resolveUrl(path: string): string;
191
172
  addScreenshot(path: string): void;
192
173
  }
@@ -266,6 +247,19 @@ interface ConsoleMessage {
266
247
  columnNumber?: number;
267
248
  };
268
249
  timestamp: number;
250
+ /**
251
+ * Marks synthesized evidence entries that did NOT arrive via the page's
252
+ * `console` event: a JS dialog skeptic captured then auto-dismissed
253
+ * (`"dialog"`, recorded at warning level), or a renderer process crash
254
+ * (`"crash"`, recorded at error level). Absent for ordinary console/pageerror
255
+ * messages so existing consumers stay unaffected.
256
+ */
257
+ kind?: "dialog" | "crash";
258
+ /** Present only when `kind === "dialog"` — the dialog's type and default value. */
259
+ dialog?: {
260
+ type: string;
261
+ defaultValue?: string;
262
+ };
269
263
  }
270
264
  interface ConsoleSnapshot {
271
265
  messages: ConsoleMessage[];
@@ -419,7 +413,8 @@ interface SnapshotTree {
419
413
  rawYaml: string;
420
414
  refs: Map<string, AriaRefEntry>;
421
415
  stats: SnapshotStats;
422
- byRef(ref: string): Locator | Promise<Locator>;
416
+ /** Always async — `await tree.byRef("eN")` for every ref kind. */
417
+ byRef(ref: string): Promise<Locator>;
423
418
  byRole(role: string, opts?: ByRoleOptions): Locator;
424
419
  byText(text: string | RegExp): Locator;
425
420
  byTestId(id: string): Locator;
@@ -445,25 +440,6 @@ interface SnapshotStats {
445
440
  cursorInteractiveRefs: number;
446
441
  }
447
442
 
448
- interface AiAssertOpts {
449
- target?: Locator;
450
- }
451
- interface AiDefectsOpts extends AiAssertOpts {
452
- /** Future hook for severity filtering — wired in B5 along with the AI rewrite. */
453
- minSeverity?: "low" | "medium" | "high" | "critical";
454
- }
455
- interface AiExtractOpts<T> extends AiAssertOpts {
456
- /** Optional Zod-or-similar schema. We accept any object exposing `.parse(value)`. */
457
- schema?: {
458
- parse: (value: unknown) => T;
459
- };
460
- }
461
- interface AiFixture {
462
- assert(claim: string, opts?: AiAssertOpts): Promise<void>;
463
- assertNoDefects(opts?: AiDefectsOpts): Promise<void>;
464
- extract<T = string>(query: string, opts?: AiExtractOpts<T>): Promise<T>;
465
- }
466
-
467
443
  interface PerfThresholds {
468
444
  /** Largest Contentful Paint, e.g. "<2500ms". */
469
445
  lcp?: string;
@@ -502,8 +478,55 @@ interface ObservabilityFixture {
502
478
  }>;
503
479
  }
504
480
 
481
+ interface DeviceRef {
482
+ ref: string;
483
+ role: string;
484
+ name: string;
485
+ selectorHint: string;
486
+ }
487
+ interface DeviceSnapshot {
488
+ /** ARIA-style YAML tree of the current screen. */
489
+ yaml: string;
490
+ /** Interactive refs minted this snapshot, each with a stable selectorHint. */
491
+ refs: DeviceRef[];
492
+ /** True when any ref matches `query` (exact selectorHint, or a substring of the
493
+ * selectorHint / accessible name / `role:name`). */
494
+ has(query: string): boolean;
495
+ /** The `@eN` ref of the first match, or throws with the available refs. */
496
+ ref(query: string): string;
497
+ }
498
+ interface DeviceApi {
499
+ /** Launch an app by package name or open a deep link (`scheme://…`). */
500
+ open(target: string): Promise<void>;
501
+ /** Dump the current screen into refs + selectorHints. Re-call after every screen change. */
502
+ snapshot(): Promise<DeviceSnapshot>;
503
+ click(target: string): Promise<void>;
504
+ /** Alias for click (mobile vocabulary). */
505
+ tap(target: string): Promise<void>;
506
+ fill(target: string, text: string): Promise<void>;
507
+ type(target: string, text: string): Promise<void>;
508
+ press(target: string, key: string): Promise<void>;
509
+ hover(target: string): Promise<void>;
510
+ check(target: string): Promise<void>;
511
+ uncheck(target: string): Promise<void>;
512
+ select(target: string, value: string): Promise<void>;
513
+ /** Scroll an element into view (`target`) or pan the viewport (`{dx,dy}`). */
514
+ scroll(targetOrPan?: string | {
515
+ dx?: number;
516
+ dy?: number;
517
+ }): Promise<void>;
518
+ /** Capture a device screencap; returns the file path. */
519
+ screenshot(name: string): Promise<string>;
520
+ is(state: "visible" | "enabled" | "checked", target: string): Promise<boolean>;
521
+ get(query: "text" | "value", target: string): Promise<string | null>;
522
+ wait(ms: number): Promise<void>;
523
+ }
524
+
505
525
  interface SkepticFixture {
506
526
  page: Page;
527
+ /** The Android device API under `--platform android`. On web it throws if touched
528
+ * (web specs use `page`); on android `page`/`snapshot`/`observability` throw instead. */
529
+ device: DeviceApi;
507
530
  ctx: ExecutionContext;
508
531
  /** Wraps a fixture-method body in the abort-aware boundary. Re-checks ctx.abortReason
509
532
  * before each await, surfaces a clean error after a hard-timeout, and emits a
@@ -513,11 +536,15 @@ interface SkepticFixture {
513
536
  screenshot: (name: string, opts?: ScreenshotOptions) => Promise<ScreenshotResult>;
514
537
  settle: () => Promise<void>;
515
538
  observability: ObservabilityFixture;
516
- ai: AiFixture;
517
539
  }
518
540
 
519
541
  interface TestUseOptions {
520
- /** Base URL — used by the runner to set the page's default base. Per-test override via `await page.goto(absoluteUrl)`. */
542
+ /**
543
+ * Base URL for the test page. Relative `page.goto('/path')` calls resolve
544
+ * against it — the runner passes it through as Playwright's browser-context
545
+ * `baseURL` (see `worker.ts`). Pass an absolute URL to `page.goto(...)` to
546
+ * override it for a single navigation. CLI `--base-url` takes precedence.
547
+ */
521
548
  url?: string;
522
549
  viewport?: {
523
550
  width: number;
@@ -649,14 +676,14 @@ declare const OutputConfigSchema: z.ZodObject<{
649
676
  open: z.ZodDefault<z.ZodBoolean>;
650
677
  verbose: z.ZodDefault<z.ZodBoolean>;
651
678
  }, "strip", z.ZodTypeAny, {
679
+ open: boolean;
652
680
  dir: string;
653
681
  reporters: ("console" | "html" | "json" | "junit")[];
654
- open: boolean;
655
682
  verbose: boolean;
656
683
  }, {
684
+ open?: boolean | undefined;
657
685
  dir?: string | undefined;
658
686
  reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
659
- open?: boolean | undefined;
660
687
  verbose?: boolean | undefined;
661
688
  }>;
662
689
  /** Safety controls for agent-driven browser work. */
@@ -693,29 +720,6 @@ declare const SafetyConfigSchema: z.ZodObject<{
693
720
  maxOutputChars?: number | undefined;
694
721
  contentBoundaries?: boolean | undefined;
695
722
  }>;
696
- /** AI configuration. */
697
- declare const AIConfigSchema: z.ZodObject<{
698
- provider: z.ZodDefault<z.ZodEnum<["gemini", "openai", "anthropic"]>>;
699
- apiKey: z.ZodOptional<z.ZodString>;
700
- model: z.ZodOptional<z.ZodString>;
701
- maxRequestsPerMinute: z.ZodDefault<z.ZodNumber>;
702
- baseBranch: z.ZodDefault<z.ZodString>;
703
- excludePaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
704
- }, "strip", z.ZodTypeAny, {
705
- provider: "gemini" | "openai" | "anthropic";
706
- maxRequestsPerMinute: number;
707
- baseBranch: string;
708
- excludePaths: string[];
709
- apiKey?: string | undefined;
710
- model?: string | undefined;
711
- }, {
712
- provider?: "gemini" | "openai" | "anthropic" | undefined;
713
- apiKey?: string | undefined;
714
- model?: string | undefined;
715
- maxRequestsPerMinute?: number | undefined;
716
- baseBranch?: string | undefined;
717
- excludePaths?: string[] | undefined;
718
- }>;
719
723
  /** Top-level skeptic.config.yaml schema. */
720
724
  declare const skepticConfigSchema: z.ZodObject<{
721
725
  url: z.ZodOptional<z.ZodString>;
@@ -795,38 +799,16 @@ declare const skepticConfigSchema: z.ZodObject<{
795
799
  open: z.ZodDefault<z.ZodBoolean>;
796
800
  verbose: z.ZodDefault<z.ZodBoolean>;
797
801
  }, "strip", z.ZodTypeAny, {
802
+ open: boolean;
798
803
  dir: string;
799
804
  reporters: ("console" | "html" | "json" | "junit")[];
800
- open: boolean;
801
805
  verbose: boolean;
802
806
  }, {
807
+ open?: boolean | undefined;
803
808
  dir?: string | undefined;
804
809
  reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
805
- open?: boolean | undefined;
806
810
  verbose?: boolean | undefined;
807
811
  }>>;
808
- ai: z.ZodDefault<z.ZodObject<{
809
- provider: z.ZodDefault<z.ZodEnum<["gemini", "openai", "anthropic"]>>;
810
- apiKey: z.ZodOptional<z.ZodString>;
811
- model: z.ZodOptional<z.ZodString>;
812
- maxRequestsPerMinute: z.ZodDefault<z.ZodNumber>;
813
- baseBranch: z.ZodDefault<z.ZodString>;
814
- excludePaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
815
- }, "strip", z.ZodTypeAny, {
816
- provider: "gemini" | "openai" | "anthropic";
817
- maxRequestsPerMinute: number;
818
- baseBranch: string;
819
- excludePaths: string[];
820
- apiKey?: string | undefined;
821
- model?: string | undefined;
822
- }, {
823
- provider?: "gemini" | "openai" | "anthropic" | undefined;
824
- apiKey?: string | undefined;
825
- model?: string | undefined;
826
- maxRequestsPerMinute?: number | undefined;
827
- baseBranch?: string | undefined;
828
- excludePaths?: string[] | undefined;
829
- }>>;
830
812
  observability: z.ZodDefault<z.ZodObject<{
831
813
  collectors: z.ZodDefault<z.ZodArray<z.ZodEnum<["performance", "network", "accessibility", "console"]>, "many">>;
832
814
  networkCaptureLimit: z.ZodDefault<z.ZodNumber>;
@@ -861,7 +843,7 @@ declare const skepticConfigSchema: z.ZodObject<{
861
843
  /** Default blank-frame mode for screenshot steps. Per-step overrides win. */
862
844
  blankFrameDetection: z.ZodDefault<z.ZodEnum<["off", "warn", "fail"]>>;
863
845
  }, "strip", z.ZodTypeAny, {
864
- collectors: ("console" | "performance" | "network" | "accessibility")[];
846
+ collectors: ("console" | "performance" | "accessibility" | "network")[];
865
847
  networkCaptureLimit: number;
866
848
  duplicateWindowMs: number;
867
849
  accessibilityDualEngine: boolean;
@@ -873,10 +855,10 @@ declare const skepticConfigSchema: z.ZodObject<{
873
855
  accessibilityStandard: "WCAG2A" | "WCAG2AA" | "WCAG21A" | "WCAG21AA" | "WCAG22AA";
874
856
  accessibilityMaxRulesPerImpact: number;
875
857
  fullPageScreenshots: boolean;
876
- blankFrameDetection: "warn" | "off" | "fail";
858
+ blankFrameDetection: "off" | "warn" | "fail";
877
859
  accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
878
860
  }, {
879
- collectors?: ("console" | "performance" | "network" | "accessibility")[] | undefined;
861
+ collectors?: ("console" | "performance" | "accessibility" | "network")[] | undefined;
880
862
  networkCaptureLimit?: number | undefined;
881
863
  duplicateWindowMs?: number | undefined;
882
864
  accessibilityDualEngine?: boolean | undefined;
@@ -889,7 +871,7 @@ declare const skepticConfigSchema: z.ZodObject<{
889
871
  accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
890
872
  accessibilityMaxRulesPerImpact?: number | undefined;
891
873
  fullPageScreenshots?: boolean | undefined;
892
- blankFrameDetection?: "warn" | "off" | "fail" | undefined;
874
+ blankFrameDetection?: "off" | "warn" | "fail" | undefined;
893
875
  }>>;
894
876
  safety: z.ZodDefault<z.ZodObject<{
895
877
  /**
@@ -1011,21 +993,13 @@ declare const skepticConfigSchema: z.ZodObject<{
1011
993
  grep?: string | undefined;
1012
994
  };
1013
995
  output: {
996
+ open: boolean;
1014
997
  dir: string;
1015
998
  reporters: ("console" | "html" | "json" | "junit")[];
1016
- open: boolean;
1017
999
  verbose: boolean;
1018
1000
  };
1019
- ai: {
1020
- provider: "gemini" | "openai" | "anthropic";
1021
- maxRequestsPerMinute: number;
1022
- baseBranch: string;
1023
- excludePaths: string[];
1024
- apiKey?: string | undefined;
1025
- model?: string | undefined;
1026
- };
1027
1001
  observability: {
1028
- collectors: ("console" | "performance" | "network" | "accessibility")[];
1002
+ collectors: ("console" | "performance" | "accessibility" | "network")[];
1029
1003
  networkCaptureLimit: number;
1030
1004
  duplicateWindowMs: number;
1031
1005
  accessibilityDualEngine: boolean;
@@ -1037,7 +1011,7 @@ declare const skepticConfigSchema: z.ZodObject<{
1037
1011
  accessibilityStandard: "WCAG2A" | "WCAG2AA" | "WCAG21A" | "WCAG21AA" | "WCAG22AA";
1038
1012
  accessibilityMaxRulesPerImpact: number;
1039
1013
  fullPageScreenshots: boolean;
1040
- blankFrameDetection: "warn" | "off" | "fail";
1014
+ blankFrameDetection: "off" | "warn" | "fail";
1041
1015
  accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
1042
1016
  };
1043
1017
  safety: {
@@ -1064,8 +1038,8 @@ declare const skepticConfigSchema: z.ZodObject<{
1064
1038
  } | undefined;
1065
1039
  } | undefined;
1066
1040
  }, {
1067
- url?: string | undefined;
1068
1041
  tests?: string | string[] | undefined;
1042
+ url?: string | undefined;
1069
1043
  browser?: {
1070
1044
  engine?: "chromium" | "firefox" | "webkit" | undefined;
1071
1045
  headless?: boolean | undefined;
@@ -1090,21 +1064,13 @@ declare const skepticConfigSchema: z.ZodObject<{
1090
1064
  tags?: string[] | undefined;
1091
1065
  } | undefined;
1092
1066
  output?: {
1067
+ open?: boolean | undefined;
1093
1068
  dir?: string | undefined;
1094
1069
  reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
1095
- open?: boolean | undefined;
1096
1070
  verbose?: boolean | undefined;
1097
1071
  } | undefined;
1098
- ai?: {
1099
- provider?: "gemini" | "openai" | "anthropic" | undefined;
1100
- apiKey?: string | undefined;
1101
- model?: string | undefined;
1102
- maxRequestsPerMinute?: number | undefined;
1103
- baseBranch?: string | undefined;
1104
- excludePaths?: string[] | undefined;
1105
- } | undefined;
1106
1072
  observability?: {
1107
- collectors?: ("console" | "performance" | "network" | "accessibility")[] | undefined;
1073
+ collectors?: ("console" | "performance" | "accessibility" | "network")[] | undefined;
1108
1074
  networkCaptureLimit?: number | undefined;
1109
1075
  duplicateWindowMs?: number | undefined;
1110
1076
  accessibilityDualEngine?: boolean | undefined;
@@ -1117,7 +1083,7 @@ declare const skepticConfigSchema: z.ZodObject<{
1117
1083
  accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
1118
1084
  accessibilityMaxRulesPerImpact?: number | undefined;
1119
1085
  fullPageScreenshots?: boolean | undefined;
1120
- blankFrameDetection?: "warn" | "off" | "fail" | undefined;
1086
+ blankFrameDetection?: "off" | "warn" | "fail" | undefined;
1121
1087
  } | undefined;
1122
1088
  safety?: {
1123
1089
  allowedDomains?: string[] | undefined;
@@ -1147,7 +1113,6 @@ type BrowserConfig = z.infer<typeof BrowserConfigSchema>;
1147
1113
  type AuthConfig = z.infer<typeof AuthConfigSchema>;
1148
1114
  type ExecutionConfig = z.infer<typeof ExecutionConfigSchema>;
1149
1115
  type OutputConfig = z.infer<typeof OutputConfigSchema>;
1150
- type AIConfig = z.infer<typeof AIConfigSchema>;
1151
1116
  type SafetyConfig = z.infer<typeof SafetyConfigSchema>;
1152
1117
 
1153
1118
  /**
@@ -1247,6 +1212,8 @@ declare function interpolateEnv(value: string): string;
1247
1212
  /** Recursively interpolate all string values in an object. */
1248
1213
  declare function interpolateEnvDeep(obj: unknown): unknown;
1249
1214
 
1215
+ declare function parsePositiveInt(value: string): number;
1216
+ declare function parseNonNegativeInt(value: string): number;
1250
1217
  declare const program: Command;
1251
1218
 
1252
- export { type AIConfig, type AiAssertOpts, type AiDefectsOpts, type AiExtractOpts, type AiFixture, type AuthConfig, type AxeAuditOpts, type BrowserConfig, type ConsoleAssertOpts, DEVICE_PROFILES, type DeviceCategory, type DeviceProfile, type EnvironmentInfo, type ExecutionConfig, type HookFn, type NetworkAssertOpts, type ObservabilityFixture, type OutputConfig, type PerfThresholds, type SafetyConfig, type ScreenshotOptions, type ScreenshotResult, type SkepticFixture, type SnapshotOptions, type SnapshotTree, type TestFn, type TestUseOptions, Timer, commandUsesBrowser, detectCI, expect, getDeviceProfile, getLogLevel, getProfilesByCategory, interpolateEnv, interpolateEnvDeep, loadConfig, logger, prewarmDaemonIfNeeded, program, setLogLevel, type skepticConfig, test };
1219
+ export { type AuthConfig, type AxeAuditOpts, type BrowserConfig, type ConsoleAssertOpts, DEVICE_PROFILES, type DeviceCategory, type DeviceProfile, type EnvironmentInfo, type ExecutionConfig, type HookFn, type NetworkAssertOpts, type ObservabilityFixture, type OutputConfig, type PerfThresholds, type SafetyConfig, type ScreenshotOptions, type ScreenshotResult, type SkepticFixture, type SnapshotOptions, type SnapshotTree, type TestFn, type TestUseOptions, Timer, commandUsesBrowser, detectCI, expect, getDeviceProfile, getLogLevel, getProfilesByCategory, interpolateEnv, interpolateEnvDeep, loadConfig, logger, parseNonNegativeInt, parsePositiveInt, prewarmDaemonIfNeeded, program, setLogLevel, type skepticConfig, test };