vibelet 1.0.4 → 1.0.5
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/bin/vibelet.mjs +3 -3
- package/dist/index.cjs +48 -48
- package/package.json +1 -19
package/dist/index.cjs
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
"use strict";var td=Object.create;var Ui=Object.defineProperty;var nd=Object.getOwnPropertyDescriptor;var rd=Object.getOwnPropertyNames;var sd=Object.getPrototypeOf,id=Object.prototype.hasOwnProperty;var v=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var od=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of rd(e))!id.call(t,s)&&s!==n&&Ui(t,s,{get:()=>e[s],enumerable:!(r=nd(e,s))||r.enumerable});return t};var tt=(t,e,n)=>(n=t!=null?td(sd(t)):{},od(e||!t||!t.__esModule?Ui(n,"default",{value:t,enumerable:!0}):n,t));var ge=v((av,ji)=>{"use strict";var qi=["nodebuffer","arraybuffer","fragments"],Wi=typeof Blob<"u";Wi&&qi.push("blob");ji.exports={BINARY_TYPES:qi,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Wi,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Bt=v((lv,Tn)=>{"use strict";var{EMPTY_BUFFER:ad}=ge(),Br=Buffer[Symbol.species];function ld(t,e){if(t.length===0)return ad;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new Br(n.buffer,n.byteOffset,r):n}function Gi(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function Vi(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function cd(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function Dr(t){if(Dr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Br(t):ArrayBuffer.isView(t)?e=new Br(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),Dr.readOnly=!1),e}Tn.exports={concat:ld,mask:Gi,toArrayBuffer:cd,toBuffer:Dr,unmask:Vi};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Tn.exports.mask=function(e,n,r,s,i){i<48?Gi(e,n,r,s,i):t.mask(e,n,r,s,i)},Tn.exports.unmask=function(e,n){e.length<32?Vi(e,n):t.unmask(e,n)}}catch{}});var Yi=v((cv,zi)=>{"use strict";var $i=Symbol("kDone"),Hr=Symbol("kRun"),Fr=class{constructor(e){this[$i]=()=>{this.pending--,this[Hr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Hr]()}[Hr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[$i])}}};zi.exports=Fr});var Ht=v((uv,Xi)=>{"use strict";var Dt=require("zlib"),Ji=Bt(),ud=Yi(),{kStatusCode:Ki}=ge(),dd=Buffer[Symbol.species],fd=Buffer.from([0,0,255,255]),Cn=Symbol("permessage-deflate"),me=Symbol("total-length"),nt=Symbol("callback"),we=Symbol("buffers"),rt=Symbol("error"),kn,Ur=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!kn){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;kn=new ud(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),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=!0),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[nt];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){kn.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){kn.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Dt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Dt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Cn]=this,this._inflate[me]=0,this._inflate[we]=[],this._inflate.on("error",hd),this._inflate.on("data",Qi)}this._inflate[nt]=r,this._inflate.write(e),n&&this._inflate.write(fd),this._inflate.flush(()=>{let i=this._inflate[rt];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=Ji.concat(this._inflate[we],this._inflate[me]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[me]=0,this._inflate[we]=[],n&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Dt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Dt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[me]=0,this._deflate[we]=[],this._deflate.on("data",pd)}this._deflate[nt]=r,this._deflate.write(e),this._deflate.flush(Dt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Ji.concat(this._deflate[we],this._deflate[me]);n&&(i=new dd(i.buffer,i.byteOffset,i.length-4)),this._deflate[nt]=null,this._deflate[me]=0,this._deflate[we]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};Xi.exports=Ur;function pd(t){this[we].push(t),this[me]+=t.length}function Qi(t){if(this[me]+=t.length,this[Cn]._maxPayload<1||this[me]<=this[Cn]._maxPayload){this[we].push(t);return}this[rt]=new RangeError("Max payload size exceeded"),this[rt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[rt][Ki]=1009,this.removeListener("data",Qi),this.reset()}function hd(t){if(this[Cn]._inflate=null,this[rt]){this[nt](this[rt]);return}t[Ki]=1007,this[nt](t)}});var st=v((dv,En)=>{"use strict";var{isUtf8:Zi}=require("buffer"),{hasBlob:gd}=ge(),md=[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 yd(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function qr(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function vd(t){return gd&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}En.exports={isBlob:vd,isValidStatusCode:yd,isValidUTF8:qr,tokenChars:md};if(Zi)En.exports.isValidUTF8=function(t){return t.length<24?qr(t):Zi(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");En.exports.isValidUTF8=function(e){return e.length<32?qr(e):t(e)}}catch{}});var $r=v((fv,oo)=>{"use strict";var{Writable:Sd}=require("stream"),eo=Ht(),{BINARY_TYPES:_d,EMPTY_BUFFER:to,kStatusCode:bd,kWebSocket:wd}=ge(),{concat:Wr,toArrayBuffer:Id,unmask:Ad}=Bt(),{isValidStatusCode:xd,isValidUTF8:no}=st(),Rn=Buffer[Symbol.species],Q=0,ro=1,so=2,io=3,jr=4,Gr=5,Pn=6,Vr=class extends Sd{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||_d[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[wd]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=Q}_write(e,n,r){if(this._opcode===8&&this._state==Q)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Rn(r.buffer,r.byteOffset+e,r.length-e),new Rn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Rn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case Q:this.getInfo(e);break;case ro:this.getPayloadLength16(e);break;case so:this.getPayloadLength64(e);break;case io:this.getMask();break;case jr:this.getData(e);break;case Gr:case Pn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let r=(n[0]&64)===64;if(r&&!this._extensions[eo.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=ro:this._payloadLength===127?this._state=so:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=r*Math.pow(2,32)+n.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 n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=io:this._state=jr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=jr}getData(e){let n=to;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Ad(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=Gr,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[eo.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===Q&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=Q;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Wr(r,n):this._binaryType==="arraybuffer"?s=Id(Wr(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Q):(this._state=Pn,setImmediate(()=>{this.emit("message",s,!0),this._state=Q,this.startLoop(e)}))}else{let s=Wr(r,n);if(!this._skipUTF8Validation&&!no(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Gr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Q):(this._state=Pn,setImmediate(()=>{this.emit("message",s,!1),this._state=Q,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,to),this.end();else{let r=e.readUInt16BE(0);if(!xd(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Rn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!no(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=Q;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Q):(this._state=Pn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Q,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[bd]=s,o}};oo.exports=Vr});var Jr=v((hv,co)=>{"use strict";var{Duplex:pv}=require("stream"),{randomFillSync:Td}=require("crypto"),ao=Ht(),{EMPTY_BUFFER:kd,kWebSocket:Cd,NOOP:Ed}=ge(),{isBlob:it,isValidStatusCode:Rd}=st(),{mask:lo,toBuffer:De}=Bt(),X=Symbol("kByteLength"),Pd=Buffer.alloc(4),Mn=8*1024,He,ot=Mn,re=0,Md=1,Ld=2,zr=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=re,this.onerror=Ed,this[Cd]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Pd,n.generateMask?n.generateMask(r):(ot===Mn&&(He===void 0&&(He=Buffer.alloc(Mn)),Td(He,0,Mn),ot=0),r[0]=He[ot++],r[1]=He[ot++],r[2]=He[ot++],r[3]=He[ot++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[X]!==void 0?a=n[X]:(e=Buffer.from(e),a=e.length):(a=e.length,s=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),n.mask?(c[1]|=128,c[i-4]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:s?(lo(e,r,c,i,a),[c]):(lo(e,r,e,0,a),[c,e])):[c,e]}close(e,n,r,s){let i;if(e===void 0)i=kd;else{if(typeof e!="number"||!Rd(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(n);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof n=="string"?i.write(n,2):i.set(n,2)}}let o={[X]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==re?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):it(e)?(s=e.size,i=!1):(e=De(e),s=e.length,i=De.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[X]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};it(e)?this._state!==re?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==re?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):it(e)?(s=e.size,i=!1):(e=De(e),s=e.length,i=De.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[X]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};it(e)?this._state!==re?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==re?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[ao.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):it(e)?(a=e.size,l=!1):(e=De(e),a=e.length,l=De.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let c={[X]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};it(e)?this._state!==re?this.enqueue([this.getBlobData,e,this._compress,c,r]):this.getBlobData(e,this._compress,c,r):this._state!==re?this.enqueue([this.dispatch,e,this._compress,c,r]):this.dispatch(e,this._compress,c,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[X],this._state=Ld,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Yr,this,a,s);return}this._bufferedBytes-=r[X];let o=De(i);n?this.dispatch(o,n,r,s):(this._state=re,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(Nd,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[ao.extensionName];this._bufferedBytes+=r[X],this._state=Md,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Yr(this,l,s);return}this._bufferedBytes-=r[X],this._state=re,r.readOnly=!1,this.sendFrame(t.frame(a,r),s),this.dequeue()})}dequeue(){for(;this._state===re&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][X],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][X],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};co.exports=zr;function Yr(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function Nd(t,e,n){Yr(t,e,n),t.onerror(e)}});var So=v((gv,vo)=>{"use strict";var{kForOnEventAttribute:Ft,kListener:Kr}=ge(),uo=Symbol("kCode"),fo=Symbol("kData"),po=Symbol("kError"),ho=Symbol("kMessage"),go=Symbol("kReason"),at=Symbol("kTarget"),mo=Symbol("kType"),yo=Symbol("kWasClean"),ye=class{constructor(e){this[at]=null,this[mo]=e}get target(){return this[at]}get type(){return this[mo]}};Object.defineProperty(ye.prototype,"target",{enumerable:!0});Object.defineProperty(ye.prototype,"type",{enumerable:!0});var Fe=class extends ye{constructor(e,n={}){super(e),this[uo]=n.code===void 0?0:n.code,this[go]=n.reason===void 0?"":n.reason,this[yo]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[uo]}get reason(){return this[go]}get wasClean(){return this[yo]}};Object.defineProperty(Fe.prototype,"code",{enumerable:!0});Object.defineProperty(Fe.prototype,"reason",{enumerable:!0});Object.defineProperty(Fe.prototype,"wasClean",{enumerable:!0});var lt=class extends ye{constructor(e,n={}){super(e),this[po]=n.error===void 0?null:n.error,this[ho]=n.message===void 0?"":n.message}get error(){return this[po]}get message(){return this[ho]}};Object.defineProperty(lt.prototype,"error",{enumerable:!0});Object.defineProperty(lt.prototype,"message",{enumerable:!0});var Ut=class extends ye{constructor(e,n={}){super(e),this[fo]=n.data===void 0?null:n.data}get data(){return this[fo]}};Object.defineProperty(Ut.prototype,"data",{enumerable:!0});var Od={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Ft]&&s[Kr]===e&&!s[Ft])return;let r;if(t==="message")r=function(i,o){let a=new Ut("message",{data:o?i:i.toString()});a[at]=this,Ln(e,this,a)};else if(t==="close")r=function(i,o){let a=new Fe("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[at]=this,Ln(e,this,a)};else if(t==="error")r=function(i){let o=new lt("error",{error:i,message:i.message});o[at]=this,Ln(e,this,o)};else if(t==="open")r=function(){let i=new ye("open");i[at]=this,Ln(e,this,i)};else return;r[Ft]=!!n[Ft],r[Kr]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Kr]===e&&!n[Ft]){this.removeListener(t,n);break}}};vo.exports={CloseEvent:Fe,ErrorEvent:lt,Event:ye,EventTarget:Od,MessageEvent:Ut};function Ln(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var Qr=v((mv,_o)=>{"use strict";var{tokenChars:qt}=st();function de(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Bd(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!1,i=!1,o,a,l=-1,c=-1,u=-1,d=0;for(;d<t.length;d++)if(c=t.charCodeAt(d),o===void 0)if(u===-1&&qt[c]===1)l===-1&&(l=d);else if(d!==0&&(c===32||c===9))u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let p=t.slice(l,u);c===44?(de(e,p,n),n=Object.create(null)):o=p,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(u===-1&&qt[c]===1)l===-1&&(l=d);else if(c===32||c===9)u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d),de(n,t.slice(l,u),!0),c===44&&(de(e,o,n),n=Object.create(null),o=void 0),l=u=-1}else if(c===61&&l!==-1&&u===-1)a=t.slice(l,d),l=u=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(s){if(qt[c]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),s=!1}else if(i)if(qt[c]===1)l===-1&&(l=d);else if(c===34&&l!==-1)i=!1,u=d;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(c===34&&t.charCodeAt(d-1)===61)i=!0;else if(u===-1&&qt[c]===1)l===-1&&(l=d);else if(l!==-1&&(c===32||c===9))u===-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let p=t.slice(l,u);r&&(p=p.replace(/\\/g,""),r=!1),de(n,a,p),c===44&&(de(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");u===-1&&(u=d);let f=t.slice(l,u);return o===void 0?de(e,f,n):(a===void 0?de(n,f,!0):r?de(n,a,f.replace(/\\/g,"")):de(n,a,f),de(e,o,n)),e}function Dd(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}_o.exports={format:Dd,parse:Bd}});var Dn=v((Sv,Mo)=>{"use strict";var Hd=require("events"),Fd=require("https"),Ud=require("http"),Io=require("net"),qd=require("tls"),{randomBytes:Wd,createHash:jd}=require("crypto"),{Duplex:yv,Readable:vv}=require("stream"),{URL:Xr}=require("url"),Ie=Ht(),Gd=$r(),Vd=Jr(),{isBlob:$d}=st(),{BINARY_TYPES:bo,CLOSE_TIMEOUT:zd,EMPTY_BUFFER:Nn,GUID:Yd,kForOnEventAttribute:Zr,kListener:Jd,kStatusCode:Kd,kWebSocket:F,NOOP:Ao}=ge(),{EventTarget:{addEventListener:Qd,removeEventListener:Xd}}=So(),{format:Zd,parse:ef}=Qr(),{toBuffer:tf}=Bt(),xo=Symbol("kAborted"),es=[8,13],ve=["CONNECTING","OPEN","CLOSING","CLOSED"],nf=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,T=class t extends Hd{constructor(e,n,r){super(),this._binaryType=bo[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Nn,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),To(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){bo.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,n,r){let s=new Gd({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new Vd(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[F]=this,i[F]=this,e[F]=this,s.on("conclude",of),s.on("drain",af),s.on("error",lf),s.on("message",cf),s.on("ping",uf),s.on("pong",df),i.onerror=ff,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Eo),e.on("data",Bn),e.on("end",Ro),e.on("error",Po),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[Ie.extensionName]&&this._extensions[Ie.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Y(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,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Co(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||Nn,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||Nn,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ts(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[Ie.extensionName]||(s.compress=!1),this._sender.send(e||Nn,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Y(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(T,"CONNECTING",{enumerable:!0,value:ve.indexOf("CONNECTING")});Object.defineProperty(T.prototype,"CONNECTING",{enumerable:!0,value:ve.indexOf("CONNECTING")});Object.defineProperty(T,"OPEN",{enumerable:!0,value:ve.indexOf("OPEN")});Object.defineProperty(T.prototype,"OPEN",{enumerable:!0,value:ve.indexOf("OPEN")});Object.defineProperty(T,"CLOSING",{enumerable:!0,value:ve.indexOf("CLOSING")});Object.defineProperty(T.prototype,"CLOSING",{enumerable:!0,value:ve.indexOf("CLOSING")});Object.defineProperty(T,"CLOSED",{enumerable:!0,value:ve.indexOf("CLOSED")});Object.defineProperty(T.prototype,"CLOSED",{enumerable:!0,value:ve.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(T.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(T.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Zr])return e[Jd];return null},set(e){for(let n of this.listeners(t))if(n[Zr]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[Zr]:!0})}})});T.prototype.addEventListener=Qd;T.prototype.removeEventListener=Xd;Mo.exports=T;function To(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:zd,protocolVersion:es[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,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=s.autoPong,t._closeTimeout=s.closeTimeout,!es.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${es.join(", ")})`);let i;if(e instanceof Xr)i=e;else try{i=new Xr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let h=new SyntaxError(l);if(t._redirects===0)throw h;On(t,h);return}let c=o?443:80,u=Wd(16).toString("base64"),d=o?Fd.request:Ud.request,f=new Set,p;if(s.createConnection=s.createConnection||(o?sf:rf),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(p=new Ie(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=Zd({[Ie.extensionName]:p.offer()})),n.length){for(let h of n){if(typeof h!="string"||!nf.test(h)||f.has(h))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(h)}s.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let h=s.path.split(":");s.socketPath=h[0],s.path=h[1]}let g;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let h=r&&r.headers;if(r={...r,headers:{}},h)for(let[y,m]of Object.entries(h))r.headers[y.toLowerCase()]=m}else if(t.listenerCount("redirect")===0){let h=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!h||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,h||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=t._req=d(s),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(s);s.timeout&&g.on("timeout",()=>{Y(t,g,"Opening handshake has timed out")}),g.on("error",h=>{g===null||g[xo]||(g=t._req=null,On(t,h))}),g.on("response",h=>{let y=h.headers.location,m=h.statusCode;if(y&&s.followRedirects&&m>=300&&m<400){if(++t._redirects>s.maxRedirects){Y(t,g,"Maximum redirects exceeded");return}g.abort();let C;try{C=new Xr(y,e)}catch{let R=new SyntaxError(`Invalid URL: ${y}`);On(t,R);return}To(t,C,n,r)}else t.emit("unexpected-response",g,h)||Y(t,g,`Unexpected server response: ${h.statusCode}`)}),g.on("upgrade",(h,y,m)=>{if(t.emit("upgrade",h),t.readyState!==T.CONNECTING)return;g=t._req=null;let C=h.headers.upgrade;if(C===void 0||C.toLowerCase()!=="websocket"){Y(t,y,"Invalid Upgrade header");return}let ce=jd("sha1").update(u+Yd).digest("base64");if(h.headers["sec-websocket-accept"]!==ce){Y(t,y,"Invalid Sec-WebSocket-Accept header");return}let R=h.headers["sec-websocket-protocol"],H;if(R!==void 0?f.size?f.has(R)||(H="Server sent an invalid subprotocol"):H="Server sent a subprotocol but none was requested":f.size&&(H="Server sent no subprotocol"),H){Y(t,y,H);return}R&&(t._protocol=R);let K=h.headers["sec-websocket-extensions"];if(K!==void 0){if(!p){Y(t,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ue;try{ue=ef(K)}catch{Y(t,y,"Invalid Sec-WebSocket-Extensions header");return}let et=Object.keys(ue);if(et.length!==1||et[0]!==Ie.extensionName){Y(t,y,"Server indicated an extension that was not requested");return}try{p.accept(ue[Ie.extensionName])}catch{Y(t,y,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[Ie.extensionName]=p}t.setSocket(y,m,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,t):g.end()}function On(t,e){t._readyState=T.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function rf(t){return t.path=t.socketPath,Io.connect(t)}function sf(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=Io.isIP(t.host)?"":t.host),qd.connect(t)}function Y(t,e,n){t._readyState=T.CLOSING;let r=new Error(n);Error.captureStackTrace(r,Y),e.setHeader?(e[xo]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(On,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function ts(t,e,n){if(e){let r=$d(e)?e.size:tf(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${ve[t.readyState]})`);process.nextTick(n,r)}}function of(t,e){let n=this[F];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[F]!==void 0&&(n._socket.removeListener("data",Bn),process.nextTick(ko,n._socket),t===1005?n.close():n.close(t,e))}function af(){let t=this[F];t.isPaused||t._socket.resume()}function lf(t){let e=this[F];e._socket[F]!==void 0&&(e._socket.removeListener("data",Bn),process.nextTick(ko,e._socket),e.close(t[Kd])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function wo(){this[F].emitClose()}function cf(t,e){this[F].emit("message",t,e)}function uf(t){let e=this[F];e._autoPong&&e.pong(t,!this._isServer,Ao),e.emit("ping",t)}function df(t){this[F].emit("pong",t)}function ko(t){t.resume()}function ff(t){let e=this[F];e.readyState!==T.CLOSED&&(e.readyState===T.OPEN&&(e._readyState=T.CLOSING,Co(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Co(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Eo(){let t=this[F];if(this.removeListener("close",Eo),this.removeListener("data",Bn),this.removeListener("end",Ro),t._readyState=T.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[F]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",wo),t._receiver.on("finish",wo))}function Bn(t){this[F]._receiver.write(t)||this.pause()}function Ro(){let t=this[F];t._readyState=T.CLOSING,t._receiver.end(),this.end()}function Po(){let t=this[F];this.removeListener("error",Po),this.on("error",Ao),t&&(t._readyState=T.CLOSING,this.destroy())}});var Bo=v((bv,Oo)=>{"use strict";var _v=Dn(),{Duplex:pf}=require("stream");function Lo(t){t.emit("close")}function hf(){!this.destroyed&&this._writableState.finished&&this.destroy()}function No(t){this.removeListener("error",No),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function gf(t,e){let n=!0,r=new pf({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Lo,r);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(s),process.nextTick(Lo,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",hf),r.on("error",No),r}Oo.exports=gf});var Ho=v((wv,Do)=>{"use strict";var{tokenChars:mf}=st();function yf(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&mf[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Do.exports={parse:yf}});var Vo=v((Av,Go)=>{"use strict";var vf=require("events"),Hn=require("http"),{Duplex:Iv}=require("stream"),{createHash:Sf}=require("crypto"),Fo=Qr(),Ue=Ht(),_f=Ho(),bf=Dn(),{CLOSE_TIMEOUT:wf,GUID:If,kWebSocket:Af}=ge(),xf=/^[+/0-9A-Za-z]{22}==$/,Uo=0,qo=1,jo=2,ns=class extends vf{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:wf,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:bf,...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=Hn.createServer((r,s)=>{let i=Hn.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Tf(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Uo}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===jo){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Wt,this);return}if(e&&this.once("close",e),this._state!==qo)if(this._state=qo,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Wt,this):process.nextTick(Wt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Wt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",Wo);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){qe(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){qe(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!xf.test(i)){qe(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){qe(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){jt(n,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=_f.parse(l)}catch{qe(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let u=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&u!==void 0){let f=new Ue(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let p=Fo.parse(u);p[Ue.extensionName]&&(f.accept(p[Ue.extensionName]),d[Ue.extensionName]=f)}catch{qe(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(p,g,h,y)=>{if(!p)return jt(n,g||401,h,y);this.completeUpgrade(d,i,c,e,n,r,s)});return}if(!this.options.verifyClient(f))return jt(n,401)}this.completeUpgrade(d,i,c,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Af])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Uo)return jt(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Sf("sha1").update(n+If).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;d&&(c.push(`Sec-WebSocket-Protocol: ${d}`),u._protocol=d)}if(e[Ue.extensionName]){let d=e[Ue.extensionName].params,f=Fo.format({[Ue.extensionName]:[d]});c.push(`Sec-WebSocket-Extensions: ${f}`),u._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
|
|
1
|
+
"use strict";var ud=Object.create;var Wi=Object.defineProperty;var dd=Object.getOwnPropertyDescriptor;var fd=Object.getOwnPropertyNames;var pd=Object.getPrototypeOf,hd=Object.prototype.hasOwnProperty;var y=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var gd=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fd(e))!hd.call(t,s)&&s!==n&&Wi(t,s,{get:()=>e[s],enumerable:!(r=dd(e,s))||r.enumerable});return t};var rt=(t,e,n)=>(n=t!=null?ud(pd(t)):{},gd(e||!t||!t.__esModule?Wi(n,"default",{value:t,enumerable:!0}):n,t));var ge=y((gv,Vi)=>{"use strict";var ji=["nodebuffer","arraybuffer","fragments"],Gi=typeof Blob<"u";Gi&&ji.push("blob");Vi.exports={BINARY_TYPES:ji,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Gi,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ht=y((mv,Cn)=>{"use strict";var{EMPTY_BUFFER:md}=ge(),Dr=Buffer[Symbol.species];function yd(t,e){if(t.length===0)return md;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new Dr(n.buffer,n.byteOffset,r):n}function $i(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function zi(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function vd(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function Hr(t){if(Hr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Dr(t):ArrayBuffer.isView(t)?e=new Dr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),Hr.readOnly=!1),e}Cn.exports={concat:yd,mask:$i,toArrayBuffer:vd,toBuffer:Hr,unmask:zi};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Cn.exports.mask=function(e,n,r,s,i){i<48?$i(e,n,r,s,i):t.mask(e,n,r,s,i)},Cn.exports.unmask=function(e,n){e.length<32?zi(e,n):t.unmask(e,n)}}catch{}});var Ki=y((yv,Ji)=>{"use strict";var Yi=Symbol("kDone"),Fr=Symbol("kRun"),Ur=class{constructor(e){this[Yi]=()=>{this.pending--,this[Fr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Fr]()}[Fr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Yi])}}};Ji.exports=Ur});var Ut=y((vv,eo)=>{"use strict";var Ft=require("zlib"),Qi=Ht(),Sd=Ki(),{kStatusCode:Xi}=ge(),_d=Buffer[Symbol.species],bd=Buffer.from([0,0,255,255]),En=Symbol("permessage-deflate"),me=Symbol("total-length"),st=Symbol("callback"),we=Symbol("buffers"),it=Symbol("error"),kn,qr=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!kn){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;kn=new Sd(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),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=!0),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[st];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){kn.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){kn.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ft.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ft.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[En]=this,this._inflate[me]=0,this._inflate[we]=[],this._inflate.on("error",wd),this._inflate.on("data",Zi)}this._inflate[st]=r,this._inflate.write(e),n&&this._inflate.write(bd),this._inflate.flush(()=>{let i=this._inflate[it];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=Qi.concat(this._inflate[we],this._inflate[me]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[me]=0,this._inflate[we]=[],n&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ft.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ft.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[me]=0,this._deflate[we]=[],this._deflate.on("data",Id)}this._deflate[st]=r,this._deflate.write(e),this._deflate.flush(Ft.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Qi.concat(this._deflate[we],this._deflate[me]);n&&(i=new _d(i.buffer,i.byteOffset,i.length-4)),this._deflate[st]=null,this._deflate[me]=0,this._deflate[we]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};eo.exports=qr;function Id(t){this[we].push(t),this[me]+=t.length}function Zi(t){if(this[me]+=t.length,this[En]._maxPayload<1||this[me]<=this[En]._maxPayload){this[we].push(t);return}this[it]=new RangeError("Max payload size exceeded"),this[it].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[it][Xi]=1009,this.removeListener("data",Zi),this.reset()}function wd(t){if(this[En]._inflate=null,this[it]){this[st](this[it]);return}t[Xi]=1007,this[st](t)}});var ot=y((Sv,Rn)=>{"use strict";var{isUtf8:to}=require("buffer"),{hasBlob:Ad}=ge(),xd=[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 Td(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function Wr(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function Cd(t){return Ad&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Rn.exports={isBlob:Cd,isValidStatusCode:Td,isValidUTF8:Wr,tokenChars:xd};if(to)Rn.exports.isValidUTF8=function(t){return t.length<24?Wr(t):to(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Rn.exports.isValidUTF8=function(e){return e.length<32?Wr(e):t(e)}}catch{}});var zr=y((_v,lo)=>{"use strict";var{Writable:kd}=require("stream"),no=Ut(),{BINARY_TYPES:Ed,EMPTY_BUFFER:ro,kStatusCode:Rd,kWebSocket:Pd}=ge(),{concat:jr,toArrayBuffer:Md,unmask:Ld}=Ht(),{isValidStatusCode:Nd,isValidUTF8:so}=ot(),Pn=Buffer[Symbol.species],X=0,io=1,oo=2,ao=3,Gr=4,Vr=5,Mn=6,$r=class extends kd{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ed[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Pd]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=X}_write(e,n,r){if(this._opcode===8&&this._state==X)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Pn(r.buffer,r.byteOffset+e,r.length-e),new Pn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Pn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case X:this.getInfo(e);break;case io:this.getPayloadLength16(e);break;case oo:this.getPayloadLength64(e);break;case ao:this.getMask();break;case Gr:this.getData(e);break;case Vr:case Mn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let r=(n[0]&64)===64;if(r&&!this._extensions[no.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=io:this._payloadLength===127?this._state=oo:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=r*Math.pow(2,32)+n.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 n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=ao:this._state=Gr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Gr}getData(e){let n=ro;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Ld(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=Vr,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[no.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===X&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=X;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=jr(r,n):this._binaryType==="arraybuffer"?s=Md(jr(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=X):(this._state=Mn,setImmediate(()=>{this.emit("message",s,!0),this._state=X,this.startLoop(e)}))}else{let s=jr(r,n);if(!this._skipUTF8Validation&&!so(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Vr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=X):(this._state=Mn,setImmediate(()=>{this.emit("message",s,!1),this._state=X,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,ro),this.end();else{let r=e.readUInt16BE(0);if(!Nd(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Pn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!so(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=X;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=X):(this._state=Mn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=X,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[Rd]=s,o}};lo.exports=$r});var Kr=y((Iv,fo)=>{"use strict";var{Duplex:bv}=require("stream"),{randomFillSync:Od}=require("crypto"),co=Ut(),{EMPTY_BUFFER:Bd,kWebSocket:Dd,NOOP:Hd}=ge(),{isBlob:at,isValidStatusCode:Fd}=ot(),{mask:uo,toBuffer:He}=Ht(),Z=Symbol("kByteLength"),Ud=Buffer.alloc(4),Ln=8*1024,Fe,lt=Ln,se=0,qd=1,Wd=2,Yr=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=se,this.onerror=Hd,this[Dd]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Ud,n.generateMask?n.generateMask(r):(lt===Ln&&(Fe===void 0&&(Fe=Buffer.alloc(Ln)),Od(Fe,0,Ln),lt=0),r[0]=Fe[lt++],r[1]=Fe[lt++],r[2]=Fe[lt++],r[3]=Fe[lt++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[Z]!==void 0?a=n[Z]:(e=Buffer.from(e),a=e.length):(a=e.length,s=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),n.mask?(c[1]|=128,c[i-4]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:s?(uo(e,r,c,i,a),[c]):(uo(e,r,e,0,a),[c,e])):[c,e]}close(e,n,r,s){let i;if(e===void 0)i=Bd;else{if(typeof e!="number"||!Fd(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(n);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof n=="string"?i.write(n,2):i.set(n,2)}}let o={[Z]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==se?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):at(e)?(s=e.size,i=!1):(e=He(e),s=e.length,i=He.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Z]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};at(e)?this._state!==se?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==se?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):at(e)?(s=e.size,i=!1):(e=He(e),s=e.length,i=He.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Z]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};at(e)?this._state!==se?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==se?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[co.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):at(e)?(a=e.size,l=!1):(e=He(e),a=e.length,l=He.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let c={[Z]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};at(e)?this._state!==se?this.enqueue([this.getBlobData,e,this._compress,c,r]):this.getBlobData(e,this._compress,c,r):this._state!==se?this.enqueue([this.dispatch,e,this._compress,c,r]):this.dispatch(e,this._compress,c,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[Z],this._state=Wd,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Jr,this,a,s);return}this._bufferedBytes-=r[Z];let o=He(i);n?this.dispatch(o,n,r,s):(this._state=se,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(jd,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[co.extensionName];this._bufferedBytes+=r[Z],this._state=qd,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Jr(this,l,s);return}this._bufferedBytes-=r[Z],this._state=se,r.readOnly=!1,this.sendFrame(t.frame(a,r),s),this.dequeue()})}dequeue(){for(;this._state===se&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Z],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Z],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};fo.exports=Yr;function Jr(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function jd(t,e,n){Jr(t,e,n),t.onerror(e)}});var bo=y((wv,_o)=>{"use strict";var{kForOnEventAttribute:qt,kListener:Qr}=ge(),po=Symbol("kCode"),ho=Symbol("kData"),go=Symbol("kError"),mo=Symbol("kMessage"),yo=Symbol("kReason"),ct=Symbol("kTarget"),vo=Symbol("kType"),So=Symbol("kWasClean"),ye=class{constructor(e){this[ct]=null,this[vo]=e}get target(){return this[ct]}get type(){return this[vo]}};Object.defineProperty(ye.prototype,"target",{enumerable:!0});Object.defineProperty(ye.prototype,"type",{enumerable:!0});var Ue=class extends ye{constructor(e,n={}){super(e),this[po]=n.code===void 0?0:n.code,this[yo]=n.reason===void 0?"":n.reason,this[So]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[po]}get reason(){return this[yo]}get wasClean(){return this[So]}};Object.defineProperty(Ue.prototype,"code",{enumerable:!0});Object.defineProperty(Ue.prototype,"reason",{enumerable:!0});Object.defineProperty(Ue.prototype,"wasClean",{enumerable:!0});var ut=class extends ye{constructor(e,n={}){super(e),this[go]=n.error===void 0?null:n.error,this[mo]=n.message===void 0?"":n.message}get error(){return this[go]}get message(){return this[mo]}};Object.defineProperty(ut.prototype,"error",{enumerable:!0});Object.defineProperty(ut.prototype,"message",{enumerable:!0});var Wt=class extends ye{constructor(e,n={}){super(e),this[ho]=n.data===void 0?null:n.data}get data(){return this[ho]}};Object.defineProperty(Wt.prototype,"data",{enumerable:!0});var Gd={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[qt]&&s[Qr]===e&&!s[qt])return;let r;if(t==="message")r=function(i,o){let a=new Wt("message",{data:o?i:i.toString()});a[ct]=this,Nn(e,this,a)};else if(t==="close")r=function(i,o){let a=new Ue("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[ct]=this,Nn(e,this,a)};else if(t==="error")r=function(i){let o=new ut("error",{error:i,message:i.message});o[ct]=this,Nn(e,this,o)};else if(t==="open")r=function(){let i=new ye("open");i[ct]=this,Nn(e,this,i)};else return;r[qt]=!!n[qt],r[Qr]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Qr]===e&&!n[qt]){this.removeListener(t,n);break}}};_o.exports={CloseEvent:Ue,ErrorEvent:ut,Event:ye,EventTarget:Gd,MessageEvent:Wt};function Nn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var Xr=y((Av,Io)=>{"use strict";var{tokenChars:jt}=ot();function de(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Vd(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!1,i=!1,o,a,l=-1,c=-1,u=-1,d=0;for(;d<t.length;d++)if(c=t.charCodeAt(d),o===void 0)if(u===-1&&jt[c]===1)l===-1&&(l=d);else if(d!==0&&(c===32||c===9))u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);c===44?(de(e,h,n),n=Object.create(null)):o=h,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(u===-1&&jt[c]===1)l===-1&&(l=d);else if(c===32||c===9)u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d),de(n,t.slice(l,u),!0),c===44&&(de(e,o,n),n=Object.create(null),o=void 0),l=u=-1}else if(c===61&&l!==-1&&u===-1)a=t.slice(l,d),l=u=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(s){if(jt[c]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),s=!1}else if(i)if(jt[c]===1)l===-1&&(l=d);else if(c===34&&l!==-1)i=!1,u=d;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(c===34&&t.charCodeAt(d-1)===61)i=!0;else if(u===-1&&jt[c]===1)l===-1&&(l=d);else if(l!==-1&&(c===32||c===9))u===-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);r&&(h=h.replace(/\\/g,""),r=!1),de(n,a,h),c===44&&(de(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");u===-1&&(u=d);let f=t.slice(l,u);return o===void 0?de(e,f,n):(a===void 0?de(n,f,!0):r?de(n,a,f.replace(/\\/g,"")):de(n,a,f),de(e,o,n)),e}function $d(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Io.exports={format:$d,parse:Vd}});var Hn=y((Cv,No)=>{"use strict";var zd=require("events"),Yd=require("https"),Jd=require("http"),xo=require("net"),Kd=require("tls"),{randomBytes:Qd,createHash:Xd}=require("crypto"),{Duplex:xv,Readable:Tv}=require("stream"),{URL:Zr}=require("url"),Ae=Ut(),Zd=zr(),ef=Kr(),{isBlob:tf}=ot(),{BINARY_TYPES:wo,CLOSE_TIMEOUT:nf,EMPTY_BUFFER:On,GUID:rf,kForOnEventAttribute:es,kListener:sf,kStatusCode:of,kWebSocket:F,NOOP:To}=ge(),{EventTarget:{addEventListener:af,removeEventListener:lf}}=bo(),{format:cf,parse:uf}=Xr(),{toBuffer:df}=Ht(),Co=Symbol("kAborted"),ts=[8,13],ve=["CONNECTING","OPEN","CLOSING","CLOSED"],ff=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,k=class t extends zd{constructor(e,n,r){super(),this._binaryType=wo[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=On,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),ko(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){wo.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,n,r){let s=new Zd({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new ef(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[F]=this,i[F]=this,e[F]=this,s.on("conclude",gf),s.on("drain",mf),s.on("error",yf),s.on("message",vf),s.on("ping",Sf),s.on("pong",_f),i.onerror=bf,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Po),e.on("data",Dn),e.on("end",Mo),e.on("error",Lo),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[Ae.extensionName]&&this._extensions[Ae.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Y(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,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Ro(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ns(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||On,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ns(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||On,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){ns(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[Ae.extensionName]||(s.compress=!1),this._sender.send(e||On,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Y(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(k,"CONNECTING",{enumerable:!0,value:ve.indexOf("CONNECTING")});Object.defineProperty(k.prototype,"CONNECTING",{enumerable:!0,value:ve.indexOf("CONNECTING")});Object.defineProperty(k,"OPEN",{enumerable:!0,value:ve.indexOf("OPEN")});Object.defineProperty(k.prototype,"OPEN",{enumerable:!0,value:ve.indexOf("OPEN")});Object.defineProperty(k,"CLOSING",{enumerable:!0,value:ve.indexOf("CLOSING")});Object.defineProperty(k.prototype,"CLOSING",{enumerable:!0,value:ve.indexOf("CLOSING")});Object.defineProperty(k,"CLOSED",{enumerable:!0,value:ve.indexOf("CLOSED")});Object.defineProperty(k.prototype,"CLOSED",{enumerable:!0,value:ve.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(k.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(k.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[es])return e[sf];return null},set(e){for(let n of this.listeners(t))if(n[es]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[es]:!0})}})});k.prototype.addEventListener=af;k.prototype.removeEventListener=lf;No.exports=k;function ko(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:nf,protocolVersion:ts[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,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=s.autoPong,t._closeTimeout=s.closeTimeout,!ts.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${ts.join(", ")})`);let i;if(e instanceof Zr)i=e;else try{i=new Zr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let p=new SyntaxError(l);if(t._redirects===0)throw p;Bn(t,p);return}let c=o?443:80,u=Qd(16).toString("base64"),d=o?Yd.request:Jd.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?hf:pf),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new Ae(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=cf({[Ae.extensionName]:h.offer()})),n.length){for(let p of n){if(typeof p!="string"||!ff.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}s.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let p=r&&r.headers;if(r={...r,headers:{}},p)for(let[m,v]of Object.entries(p))r.headers[m.toLowerCase()]=v}else if(t.listenerCount("redirect")===0){let p=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!p||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=t._req=d(s),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(s);s.timeout&&g.on("timeout",()=>{Y(t,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[Co]||(g=t._req=null,Bn(t,p))}),g.on("response",p=>{let m=p.headers.location,v=p.statusCode;if(m&&s.followRedirects&&v>=300&&v<400){if(++t._redirects>s.maxRedirects){Y(t,g,"Maximum redirects exceeded");return}g.abort();let b;try{b=new Zr(m,e)}catch{let C=new SyntaxError(`Invalid URL: ${m}`);Bn(t,C);return}ko(t,b,n,r)}else t.emit("unexpected-response",g,p)||Y(t,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,v)=>{if(t.emit("upgrade",p),t.readyState!==k.CONNECTING)return;g=t._req=null;let b=p.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){Y(t,m,"Invalid Upgrade header");return}let K=Xd("sha1").update(u+rf).digest("base64");if(p.headers["sec-websocket-accept"]!==K){Y(t,m,"Invalid Sec-WebSocket-Accept header");return}let C=p.headers["sec-websocket-protocol"],H;if(C!==void 0?f.size?f.has(C)||(H="Server sent an invalid subprotocol"):H="Server sent a subprotocol but none was requested":f.size&&(H="Server sent no subprotocol"),H){Y(t,m,H);return}C&&(t._protocol=C);let Q=p.headers["sec-websocket-extensions"];if(Q!==void 0){if(!h){Y(t,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ue;try{ue=uf(Q)}catch{Y(t,m,"Invalid Sec-WebSocket-Extensions header");return}let nt=Object.keys(ue);if(nt.length!==1||nt[0]!==Ae.extensionName){Y(t,m,"Server indicated an extension that was not requested");return}try{h.accept(ue[Ae.extensionName])}catch{Y(t,m,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[Ae.extensionName]=h}t.setSocket(m,v,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,t):g.end()}function Bn(t,e){t._readyState=k.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function pf(t){return t.path=t.socketPath,xo.connect(t)}function hf(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=xo.isIP(t.host)?"":t.host),Kd.connect(t)}function Y(t,e,n){t._readyState=k.CLOSING;let r=new Error(n);Error.captureStackTrace(r,Y),e.setHeader?(e[Co]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(Bn,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function ns(t,e,n){if(e){let r=tf(e)?e.size:df(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${ve[t.readyState]})`);process.nextTick(n,r)}}function gf(t,e){let n=this[F];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[F]!==void 0&&(n._socket.removeListener("data",Dn),process.nextTick(Eo,n._socket),t===1005?n.close():n.close(t,e))}function mf(){let t=this[F];t.isPaused||t._socket.resume()}function yf(t){let e=this[F];e._socket[F]!==void 0&&(e._socket.removeListener("data",Dn),process.nextTick(Eo,e._socket),e.close(t[of])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function Ao(){this[F].emitClose()}function vf(t,e){this[F].emit("message",t,e)}function Sf(t){let e=this[F];e._autoPong&&e.pong(t,!this._isServer,To),e.emit("ping",t)}function _f(t){this[F].emit("pong",t)}function Eo(t){t.resume()}function bf(t){let e=this[F];e.readyState!==k.CLOSED&&(e.readyState===k.OPEN&&(e._readyState=k.CLOSING,Ro(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Ro(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Po(){let t=this[F];if(this.removeListener("close",Po),this.removeListener("data",Dn),this.removeListener("end",Mo),t._readyState=k.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[F]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Ao),t._receiver.on("finish",Ao))}function Dn(t){this[F]._receiver.write(t)||this.pause()}function Mo(){let t=this[F];t._readyState=k.CLOSING,t._receiver.end(),this.end()}function Lo(){let t=this[F];this.removeListener("error",Lo),this.on("error",To),t&&(t._readyState=k.CLOSING,this.destroy())}});var Ho=y((Ev,Do)=>{"use strict";var kv=Hn(),{Duplex:If}=require("stream");function Oo(t){t.emit("close")}function wf(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Bo(t){this.removeListener("error",Bo),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Af(t,e){let n=!0,r=new If({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Oo,r);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(s),process.nextTick(Oo,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",wf),r.on("error",Bo),r}Do.exports=Af});var Uo=y((Rv,Fo)=>{"use strict";var{tokenChars:xf}=ot();function Tf(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&xf[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Fo.exports={parse:Tf}});var zo=y((Mv,$o)=>{"use strict";var Cf=require("events"),Fn=require("http"),{Duplex:Pv}=require("stream"),{createHash:kf}=require("crypto"),qo=Xr(),qe=Ut(),Ef=Uo(),Rf=Hn(),{CLOSE_TIMEOUT:Pf,GUID:Mf,kWebSocket:Lf}=ge(),Nf=/^[+/0-9A-Za-z]{22}==$/,Wo=0,jo=1,Vo=2,rs=class extends Cf{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Pf,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Rf,...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=Fn.createServer((r,s)=>{let i=Fn.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Of(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Wo}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===Vo){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Gt,this);return}if(e&&this.once("close",e),this._state!==jo)if(this._state=jo,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Gt,this):process.nextTick(Gt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Gt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",Go);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){We(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){We(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!Nf.test(i)){We(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){We(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Vt(n,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Ef.parse(l)}catch{We(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let u=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&u!==void 0){let f=new qe(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=qo.parse(u);h[qe.extensionName]&&(f.accept(h[qe.extensionName]),d[qe.extensionName]=f)}catch{We(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(h,g,p,m)=>{if(!h)return Vt(n,g||401,p,m);this.completeUpgrade(d,i,c,e,n,r,s)});return}if(!this.options.verifyClient(f))return Vt(n,401)}this.completeUpgrade(d,i,c,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Lf])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Wo)return Vt(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${kf("sha1").update(n+Mf).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;d&&(c.push(`Sec-WebSocket-Protocol: ${d}`),u._protocol=d)}if(e[qe.extensionName]){let d=e[qe.extensionName].params,f=qo.format({[qe.extensionName]:[d]});c.push(`Sec-WebSocket-Extensions: ${f}`),u._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
|
|
2
2
|
`).join(`\r
|
|
3
|
-
`)),i.removeListener("error",
|
|
3
|
+
`)),i.removeListener("error",Go),u.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(u),u.on("close",()=>{this.clients.delete(u),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Gt,this)})),a(u,s)}};$o.exports=rs;function Of(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let r of Object.keys(e))t.removeListener(r,e[r])}}function Gt(t){t._state=Vo,t.emit("close")}function Go(){this.destroy()}function Vt(t,e,n,r){n=n||Fn.STATUS_CODES[e],r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...r},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${Fn.STATUS_CODES[e]}\r
|
|
4
4
|
`+Object.keys(r).map(s=>`${s}: ${r[s]}`).join(`\r
|
|
5
5
|
`)+`\r
|
|
6
6
|
\r
|
|
7
|
-
`+n)}function
|
|
8
|
-
]))+`;Se.KANJI=new RegExp(
|
|
9
|
-
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),t.put(n,13)}};
|
|
10
|
-
Suggested mode is: `+
|
|
7
|
+
`+n)}function We(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,We),t.emit("wsClientError",o,n,e)}else Vt(n,r,s,i)}});var is=y((Nv,Yo)=>{Yo.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var xe=y(je=>{var os,Uf=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];je.getSymbolSize=function(e){if(!e)throw new Error('"version" cannot be null or undefined');if(e<1||e>40)throw new Error('"version" should be in range from 1 to 40');return e*4+17};je.getSymbolTotalCodewords=function(e){return Uf[e]};je.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};je.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');os=e};je.isKanjiModeEnabled=function(){return typeof os<"u"};je.toSJIS=function(e){return os(e)}});var Un=y(ee=>{ee.L={bit:1};ee.M={bit:0};ee.Q={bit:3};ee.H={bit:2};function qf(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return ee.L;case"m":case"medium":return ee.M;case"q":case"quartile":return ee.Q;case"h":case"high":return ee.H;default:throw new Error("Unknown EC Level: "+t)}}ee.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};ee.from=function(e,n){if(ee.isValid(e))return e;try{return qf(e)}catch{return n}}});var Qo=y((Dv,Ko)=>{function Jo(){this.buffer=[],this.length=0}Jo.prototype={get:function(t){let e=Math.floor(t/8);return(this.buffer[e]>>>7-t%8&1)===1},put:function(t,e){for(let n=0;n<e;n++)this.putBit((t>>>e-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){let e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}};Ko.exports=Jo});var Zo=y((Hv,Xo)=>{function $t(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}$t.prototype.set=function(t,e,n,r){let s=t*this.size+e;this.data[s]=n,r&&(this.reservedBit[s]=!0)};$t.prototype.get=function(t,e){return this.data[t*this.size+e]};$t.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};$t.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};Xo.exports=$t});var ea=y(qn=>{var Wf=xe().getSymbolSize;qn.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=Wf(e),s=r===145?26:Math.ceil((r-13)/(2*n-2))*2,i=[r-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-s;return i.push(6),i.reverse()};qn.getPositions=function(e){let n=[],r=qn.getRowColCoords(e),s=r.length;for(let i=0;i<s;i++)for(let o=0;o<s;o++)i===0&&o===0||i===0&&o===s-1||i===s-1&&o===0||n.push([r[i],r[o]]);return n}});var ra=y(na=>{var jf=xe().getSymbolSize,ta=7;na.getPositions=function(e){let n=jf(e);return[[0,0],[n-ta,0],[0,n-ta]]}});var sa=y(x=>{x.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var Ge={N1:3,N2:3,N3:40,N4:10};x.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7};x.from=function(e){return x.isValid(e)?parseInt(e,10):void 0};x.getPenaltyN1=function(e){let n=e.size,r=0,s=0,i=0,o=null,a=null;for(let l=0;l<n;l++){s=i=0,o=a=null;for(let c=0;c<n;c++){let u=e.get(l,c);u===o?s++:(s>=5&&(r+=Ge.N1+(s-5)),o=u,s=1),u=e.get(c,l),u===a?i++:(i>=5&&(r+=Ge.N1+(i-5)),a=u,i=1)}s>=5&&(r+=Ge.N1+(s-5)),i>=5&&(r+=Ge.N1+(i-5))}return r};x.getPenaltyN2=function(e){let n=e.size,r=0;for(let s=0;s<n-1;s++)for(let i=0;i<n-1;i++){let o=e.get(s,i)+e.get(s,i+1)+e.get(s+1,i)+e.get(s+1,i+1);(o===4||o===0)&&r++}return r*Ge.N2};x.getPenaltyN3=function(e){let n=e.size,r=0,s=0,i=0;for(let o=0;o<n;o++){s=i=0;for(let a=0;a<n;a++)s=s<<1&2047|e.get(o,a),a>=10&&(s===1488||s===93)&&r++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&r++}return r*Ge.N3};x.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let i=0;i<r;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/r/5)-10)*Ge.N4};function Gf(t,e,n){switch(t){case x.Patterns.PATTERN000:return(e+n)%2===0;case x.Patterns.PATTERN001:return e%2===0;case x.Patterns.PATTERN010:return n%3===0;case x.Patterns.PATTERN011:return(e+n)%3===0;case x.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2===0;case x.Patterns.PATTERN101:return e*n%2+e*n%3===0;case x.Patterns.PATTERN110:return(e*n%2+e*n%3)%2===0;case x.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}x.applyMask=function(e,n){let r=n.size;for(let s=0;s<r;s++)for(let i=0;i<r;i++)n.isReserved(i,s)||n.xor(i,s,Gf(e,i,s))};x.getBestMask=function(e,n){let r=Object.keys(x.Patterns).length,s=0,i=1/0;for(let o=0;o<r;o++){n(o),x.applyMask(o,e);let a=x.getPenaltyN1(e)+x.getPenaltyN2(e)+x.getPenaltyN3(e)+x.getPenaltyN4(e);x.applyMask(o,e),a<i&&(i=a,s=o)}return s}});var ls=y(as=>{var Te=Un(),Wn=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],jn=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];as.getBlocksCount=function(e,n){switch(n){case Te.L:return Wn[(e-1)*4+0];case Te.M:return Wn[(e-1)*4+1];case Te.Q:return Wn[(e-1)*4+2];case Te.H:return Wn[(e-1)*4+3];default:return}};as.getTotalCodewordsCount=function(e,n){switch(n){case Te.L:return jn[(e-1)*4+0];case Te.M:return jn[(e-1)*4+1];case Te.Q:return jn[(e-1)*4+2];case Te.H:return jn[(e-1)*4+3];default:return}}});var ia=y(Vn=>{var zt=new Uint8Array(512),Gn=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)zt[n]=e,Gn[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)zt[n]=zt[n-255]})();Vn.log=function(e){if(e<1)throw new Error("log("+e+")");return Gn[e]};Vn.exp=function(e){return zt[e]};Vn.mul=function(e,n){return e===0||n===0?0:zt[Gn[e]+Gn[n]]}});var oa=y(Yt=>{var cs=ia();Yt.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let s=0;s<e.length;s++)for(let i=0;i<n.length;i++)r[s+i]^=cs.mul(e[s],n[i]);return r};Yt.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let s=r[0];for(let o=0;o<n.length;o++)r[o]^=cs.mul(n[o],s);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r};Yt.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let r=0;r<e;r++)n=Yt.mul(n,new Uint8Array([1,cs.exp(r)]));return n}});var ca=y((Vv,la)=>{var aa=oa();function us(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}us.prototype.initialize=function(e){this.degree=e,this.genPoly=aa.generateECPolynomial(this.degree)};us.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");let n=new Uint8Array(e.length+this.degree);n.set(e);let r=aa.mod(n,this.genPoly),s=this.degree-r.length;if(s>0){let i=new Uint8Array(this.degree);return i.set(r,s),i}return r};la.exports=us});var ds=y(ua=>{ua.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var fs=y(Se=>{var da="[0-9]+",Vf="[A-Z $%*+\\-./:]+",Jt="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";Jt=Jt.replace(/u/g,"\\u");var $f="(?:(?![A-Z0-9 $%*+\\-./:]|"+Jt+`)(?:.|[\r
|
|
8
|
+
]))+`;Se.KANJI=new RegExp(Jt,"g");Se.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");Se.BYTE=new RegExp($f,"g");Se.NUMERIC=new RegExp(da,"g");Se.ALPHANUMERIC=new RegExp(Vf,"g");var zf=new RegExp("^"+Jt+"$"),Yf=new RegExp("^"+da+"$"),Jf=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");Se.testKanji=function(e){return zf.test(e)};Se.testNumeric=function(e){return Yf.test(e)};Se.testAlphanumeric=function(e){return Jf.test(e)}});var Ce=y(O=>{var Kf=ds(),ps=fs();O.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]};O.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]};O.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]};O.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]};O.MIXED={bit:-1};O.getCharCountIndicator=function(e,n){if(!e.ccBits)throw new Error("Invalid mode: "+e);if(!Kf.isValid(n))throw new Error("Invalid version: "+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]};O.getBestModeForData=function(e){return ps.testNumeric(e)?O.NUMERIC:ps.testAlphanumeric(e)?O.ALPHANUMERIC:ps.testKanji(e)?O.KANJI:O.BYTE};O.toString=function(e){if(e&&e.id)return e.id;throw new Error("Invalid mode")};O.isValid=function(e){return e&&e.bit&&e.ccBits};function Qf(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return O.NUMERIC;case"alphanumeric":return O.ALPHANUMERIC;case"kanji":return O.KANJI;case"byte":return O.BYTE;default:throw new Error("Unknown mode: "+t)}}O.from=function(e,n){if(O.isValid(e))return e;try{return Qf(e)}catch{return n}}});var ma=y(Ve=>{var $n=xe(),Xf=ls(),fa=Un(),ke=Ce(),hs=ds(),ha=7973,pa=$n.getBCHDigit(ha);function Zf(t,e,n){for(let r=1;r<=40;r++)if(e<=Ve.getCapacity(r,n,t))return r}function ga(t,e){return ke.getCharCountIndicator(t,e)+4}function ep(t,e){let n=0;return t.forEach(function(r){let s=ga(r.mode,e);n+=s+r.getBitsLength()}),n}function tp(t,e){for(let n=1;n<=40;n++)if(ep(t,n)<=Ve.getCapacity(n,e,ke.MIXED))return n}Ve.from=function(e,n){return hs.isValid(e)?parseInt(e,10):n};Ve.getCapacity=function(e,n,r){if(!hs.isValid(e))throw new Error("Invalid QR Code version");typeof r>"u"&&(r=ke.BYTE);let s=$n.getSymbolTotalCodewords(e),i=Xf.getTotalCodewordsCount(e,n),o=(s-i)*8;if(r===ke.MIXED)return o;let a=o-ga(r,e);switch(r){case ke.NUMERIC:return Math.floor(a/10*3);case ke.ALPHANUMERIC:return Math.floor(a/11*2);case ke.KANJI:return Math.floor(a/13);case ke.BYTE:default:return Math.floor(a/8)}};Ve.getBestVersionForData=function(e,n){let r,s=fa.from(n,fa.M);if(Array.isArray(e)){if(e.length>1)return tp(e,s);if(e.length===0)return 1;r=e[0]}else r=e;return Zf(r.mode,r.getLength(),s)};Ve.getEncodedBits=function(e){if(!hs.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;$n.getBCHDigit(n)-pa>=0;)n^=ha<<$n.getBCHDigit(n)-pa;return e<<12|n}});var _a=y(Sa=>{var gs=xe(),va=1335,np=21522,ya=gs.getBCHDigit(va);Sa.getEncodedBits=function(e,n){let r=e.bit<<3|n,s=r<<10;for(;gs.getBCHDigit(s)-ya>=0;)s^=va<<gs.getBCHDigit(s)-ya;return(r<<10|s)^np}});var Ia=y((Qv,ba)=>{var rp=Ce();function dt(t){this.mode=rp.NUMERIC,this.data=t.toString()}dt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};dt.prototype.getLength=function(){return this.data.length};dt.prototype.getBitsLength=function(){return dt.getBitsLength(this.data.length)};dt.prototype.write=function(e){let n,r,s;for(n=0;n+3<=this.data.length;n+=3)r=this.data.substr(n,3),s=parseInt(r,10),e.put(s,10);let i=this.data.length-n;i>0&&(r=this.data.substr(n),s=parseInt(r,10),e.put(s,i*3+1))};ba.exports=dt});var Aa=y((Xv,wa)=>{var sp=Ce(),ms=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function ft(t){this.mode=sp.ALPHANUMERIC,this.data=t}ft.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};ft.prototype.getLength=function(){return this.data.length};ft.prototype.getBitsLength=function(){return ft.getBitsLength(this.data.length)};ft.prototype.write=function(e){let n;for(n=0;n+2<=this.data.length;n+=2){let r=ms.indexOf(this.data[n])*45;r+=ms.indexOf(this.data[n+1]),e.put(r,11)}this.data.length%2&&e.put(ms.indexOf(this.data[n]),6)};wa.exports=ft});var Ta=y((Zv,xa)=>{var ip=Ce();function pt(t){this.mode=ip.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}pt.getBitsLength=function(e){return e*8};pt.prototype.getLength=function(){return this.data.length};pt.prototype.getBitsLength=function(){return pt.getBitsLength(this.data.length)};pt.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};xa.exports=pt});var ka=y((eS,Ca)=>{var op=Ce(),ap=xe();function ht(t){this.mode=op.KANJI,this.data=t}ht.getBitsLength=function(e){return e*13};ht.prototype.getLength=function(){return this.data.length};ht.prototype.getBitsLength=function(){return ht.getBitsLength(this.data.length)};ht.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=ap.toSJIS(this.data[e]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw new Error("Invalid SJIS character: "+this.data[e]+`
|
|
9
|
+
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),t.put(n,13)}};Ca.exports=ht});var Ea=y((tS,ys)=>{"use strict";var Kt={single_source_shortest_paths:function(t,e,n){var r={},s={};s[e]=0;var i=Kt.PriorityQueue.make();i.push(e,0);for(var o,a,l,c,u,d,f,h,g;!i.empty();){o=i.pop(),a=o.value,c=o.cost,u=t[a]||{};for(l in u)u.hasOwnProperty(l)&&(d=u[l],f=c+d,h=s[l],g=typeof s[l]>"u",(g||h>f)&&(s[l]=f,i.push(l,f),r[l]=a))}if(typeof n<"u"&&typeof s[n]>"u"){var p=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(p)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],r=e,s;r;)n.push(r),s=t[r],r=t[r];return n.reverse(),n},find_path:function(t,e,n){var r=Kt.single_source_shortest_paths(t,e,n);return Kt.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var e=Kt.PriorityQueue,n={},r;t=t||{};for(r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);return n.queue=[],n.sorter=t.sorter||e.default_sorter,n},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var n={value:t,cost:e};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof ys<"u"&&(ys.exports=Kt)});var Da=y(gt=>{var A=Ce(),Ma=Ia(),La=Aa(),Na=Ta(),Oa=ka(),Qt=fs(),zn=xe(),lp=Ea();function Ra(t){return unescape(encodeURIComponent(t)).length}function Xt(t,e,n){let r=[],s;for(;(s=t.exec(n))!==null;)r.push({data:s[0],index:s.index,mode:e,length:s[0].length});return r}function Ba(t){let e=Xt(Qt.NUMERIC,A.NUMERIC,t),n=Xt(Qt.ALPHANUMERIC,A.ALPHANUMERIC,t),r,s;return zn.isKanjiModeEnabled()?(r=Xt(Qt.BYTE,A.BYTE,t),s=Xt(Qt.KANJI,A.KANJI,t)):(r=Xt(Qt.BYTE_KANJI,A.BYTE,t),s=[]),e.concat(n,r,s).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function vs(t,e){switch(e){case A.NUMERIC:return Ma.getBitsLength(t);case A.ALPHANUMERIC:return La.getBitsLength(t);case A.KANJI:return Oa.getBitsLength(t);case A.BYTE:return Na.getBitsLength(t)}}function cp(t){return t.reduce(function(e,n){let r=e.length-1>=0?e[e.length-1]:null;return r&&r.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function up(t){let e=[];for(let n=0;n<t.length;n++){let r=t[n];switch(r.mode){case A.NUMERIC:e.push([r,{data:r.data,mode:A.ALPHANUMERIC,length:r.length},{data:r.data,mode:A.BYTE,length:r.length}]);break;case A.ALPHANUMERIC:e.push([r,{data:r.data,mode:A.BYTE,length:r.length}]);break;case A.KANJI:e.push([r,{data:r.data,mode:A.BYTE,length:Ra(r.data)}]);break;case A.BYTE:e.push([{data:r.data,mode:A.BYTE,length:Ra(r.data)}])}}return e}function dp(t,e){let n={},r={start:{}},s=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let c=o[l],u=""+i+l;a.push(u),n[u]={node:c,lastCount:0},r[u]={};for(let d=0;d<s.length;d++){let f=s[d];n[f]&&n[f].node.mode===c.mode?(r[f][u]=vs(n[f].lastCount+c.length,c.mode)-vs(n[f].lastCount,c.mode),n[f].lastCount+=c.length):(n[f]&&(n[f].lastCount=c.length),r[f][u]=vs(c.length,c.mode)+4+A.getCharCountIndicator(c.mode,e))}}s=a}for(let i=0;i<s.length;i++)r[s[i]].end=0;return{map:r,table:n}}function Pa(t,e){let n,r=A.getBestModeForData(t);if(n=A.from(e,r),n!==A.BYTE&&n.bit<r.bit)throw new Error('"'+t+'" cannot be encoded with mode '+A.toString(n)+`.
|
|
10
|
+
Suggested mode is: `+A.toString(r));switch(n===A.KANJI&&!zn.isKanjiModeEnabled()&&(n=A.BYTE),n){case A.NUMERIC:return new Ma(t);case A.ALPHANUMERIC:return new La(t);case A.KANJI:return new Oa(t);case A.BYTE:return new Na(t)}}gt.fromArray=function(e){return e.reduce(function(n,r){return typeof r=="string"?n.push(Pa(r,null)):r.data&&n.push(Pa(r.data,r.mode)),n},[])};gt.fromString=function(e,n){let r=Ba(e,zn.isKanjiModeEnabled()),s=up(r),i=dp(s,n),o=lp.find_path(i.map,"start","end"),a=[];for(let l=1;l<o.length-1;l++)a.push(i.table[o[l]].node);return gt.fromArray(cp(a))};gt.rawSplit=function(e){return gt.fromArray(Ba(e,zn.isKanjiModeEnabled()))}});var As=y(Ha=>{var Jn=xe(),Ss=Un(),fp=Qo(),pp=Zo(),hp=ea(),gp=ra(),Is=sa(),ws=ls(),mp=ca(),Yn=ma(),yp=_a(),vp=Ce(),_s=Da();function Sp(t,e){let n=t.size,r=gp.getPositions(e);for(let s=0;s<r.length;s++){let i=r[s][0],o=r[s][1];for(let a=-1;a<=7;a++)if(!(i+a<=-1||n<=i+a))for(let l=-1;l<=7;l++)o+l<=-1||n<=o+l||(a>=0&&a<=6&&(l===0||l===6)||l>=0&&l<=6&&(a===0||a===6)||a>=2&&a<=4&&l>=2&&l<=4?t.set(i+a,o+l,!0,!0):t.set(i+a,o+l,!1,!0))}}function _p(t){let e=t.size;for(let n=8;n<e-8;n++){let r=n%2===0;t.set(n,6,r,!0),t.set(6,n,r,!0)}}function bp(t,e){let n=hp.getPositions(e);for(let r=0;r<n.length;r++){let s=n[r][0],i=n[r][1];for(let o=-2;o<=2;o++)for(let a=-2;a<=2;a++)o===-2||o===2||a===-2||a===2||o===0&&a===0?t.set(s+o,i+a,!0,!0):t.set(s+o,i+a,!1,!0)}}function Ip(t,e){let n=t.size,r=Yn.getEncodedBits(e),s,i,o;for(let a=0;a<18;a++)s=Math.floor(a/3),i=a%3+n-8-3,o=(r>>a&1)===1,t.set(s,i,o,!0),t.set(i,s,o,!0)}function bs(t,e,n){let r=t.size,s=yp.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(s>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(r-15+i,8,o,!0),i<8?t.set(8,r-i-1,o,!0):i<9?t.set(8,15-i-1+1,o,!0):t.set(8,15-i-1,o,!0);t.set(r-8,8,1,!0)}function wp(t,e){let n=t.size,r=-1,s=n-1,i=7,o=0;for(let a=n-1;a>0;a-=2)for(a===6&&a--;;){for(let l=0;l<2;l++)if(!t.isReserved(s,a-l)){let c=!1;o<e.length&&(c=(e[o]>>>i&1)===1),t.set(s,a-l,c),i--,i===-1&&(o++,i=7)}if(s+=r,s<0||n<=s){s-=r,r=-r;break}}}function Ap(t,e,n){let r=new fp;n.forEach(function(l){r.put(l.mode.bit,4),r.put(l.getLength(),vp.getCharCountIndicator(l.mode,t)),l.write(r)});let s=Jn.getSymbolTotalCodewords(t),i=ws.getTotalCodewordsCount(t,e),o=(s-i)*8;for(r.getLengthInBits()+4<=o&&r.put(0,4);r.getLengthInBits()%8!==0;)r.putBit(0);let a=(o-r.getLengthInBits())/8;for(let l=0;l<a;l++)r.put(l%2?17:236,8);return xp(r,t,e)}function xp(t,e,n){let r=Jn.getSymbolTotalCodewords(e),s=ws.getTotalCodewordsCount(e,n),i=r-s,o=ws.getBlocksCount(e,n),a=r%o,l=o-a,c=Math.floor(r/o),u=Math.floor(i/o),d=u+1,f=c-u,h=new mp(f),g=0,p=new Array(o),m=new Array(o),v=0,b=new Uint8Array(t.buffer);for(let ue=0;ue<o;ue++){let nt=ue<l?u:d;p[ue]=b.slice(g,g+nt),m[ue]=h.encode(p[ue]),g+=nt,v=Math.max(v,nt)}let K=new Uint8Array(r),C=0,H,Q;for(H=0;H<v;H++)for(Q=0;Q<o;Q++)H<p[Q].length&&(K[C++]=p[Q][H]);for(H=0;H<f;H++)for(Q=0;Q<o;Q++)K[C++]=m[Q][H];return K}function Tp(t,e,n,r){let s;if(Array.isArray(t))s=_s.fromArray(t);else if(typeof t=="string"){let c=e;if(!c){let u=_s.rawSplit(t);c=Yn.getBestVersionForData(u,n)}s=_s.fromString(t,c||40)}else throw new Error("Invalid data");let i=Yn.getBestVersionForData(s,n);if(!i)throw new Error("The amount of data is too big to be stored in a QR Code");if(!e)e=i;else if(e<i)throw new Error(`
|
|
11
11
|
The chosen QR Code version cannot contain this amount of data.
|
|
12
12
|
Minimum version required to store current data is: `+i+`.
|
|
13
|
-
`);let o=gp(e,n,s),a=Yn.getSymbolSize(e),l=new sp(a);return up(l,e),dp(l),fp(l,e),_s(l,n,0),e>=7&&pp(l,e),hp(l,o),isNaN(r)&&(r=bs.getBestMask(l,_s.bind(null,l,n))),bs.applyMask(r,l),_s(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:s}}Ba.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=vs.M,s,i;return typeof n<"u"&&(r=vs.from(n.errorCorrectionLevel,vs.M),s=zn.from(n.version),i=bs.from(n.maskPattern),n.toSJISFunc&&Yn.setToSJISFunction(n.toSJISFunc)),yp(e,s,r,i)}});var As=v((Kv,Ha)=>{"use strict";var vp=require("util"),Da=require("stream"),se=Ha.exports=function(){Da.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};vp.inherits(se,Da);se.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};se.prototype.write=function(t,e){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let n;return Buffer.isBuffer(t)?n=t:n=Buffer.from(t,e||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};se.prototype.end=function(t,e){t&&this.write(t,e),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};se.prototype.destroySoon=se.prototype.end;se.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};se.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};se.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];e.length>t.length?(this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length))):(this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e))};se.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let s=this._buffers[n++],i=Math.min(s.length,t.length-e);s.copy(r,e,0,i),e+=i,i!==s.length&&(this._buffers[--n]=s.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};se.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}this._buffers&&!this.writable&&this._end()}catch(t){this.emit("error",t)}}});var Ts=v(xs=>{"use strict";var Ce=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];xs.getImagePasses=function(t,e){let n=[],r=t%8,s=e%8,i=(t-r)/8,o=(e-s)/8;for(let a=0;a<Ce.length;a++){let l=Ce[a],c=i*l.x.length,u=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<r;d++)c++;for(let d=0;d<l.y.length&&l.y[d]<s;d++)u++;c>0&&u>0&&n.push({width:c,height:u,index:a})}return n};xs.getInterlaceIterator=function(t){return function(e,n,r){let s=e%Ce[r].x.length,i=(e-s)/Ce[r].x.length*8+Ce[r].x[s],o=n%Ce[r].y.length,a=(n-o)/Ce[r].y.length*8+Ce[r].y[o];return i*4+a*t*4}}});var ks=v((Xv,Fa)=>{"use strict";Fa.exports=function(e,n,r){let s=e+n-r,i=Math.abs(s-e),o=Math.abs(s-n),a=Math.abs(s-r);return i<=o&&i<=a?e:o<=a?n:r}});var Cs=v((Zv,qa)=>{"use strict";var Sp=Ts(),_p=ks();function Ua(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var ht=qa.exports=function(t,e){let n=t.width,r=t.height,s=t.interlace,i=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],s){let a=Sp.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Ua(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Ua(n,i,o),height:r,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};ht.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};ht.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,s=r-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>s?e[i-r]:0;e[i]=o+a}};ht.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let s=0;s<n;s++){let i=t[1+s],o=r?r[s]:0;e[s]=i+o}};ht.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=Math.floor((c+l)/2);e[o]=a+u}};ht.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=o>s&&i?i[o-r]:0,d=_p(c,l,u);e[o]=a+d}};ht.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],s=r.byteWidth;if(e===0)n=t.slice(1,s+1);else switch(n=Buffer.alloc(s),e){case 1:this._unFilterType1(t,n,s);break;case 2:this._unFilterType2(t,n,s);break;case 3:this._unFilterType3(t,n,s);break;case 4:this._unFilterType4(t,n,s);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Ga=v((eS,ja)=>{"use strict";var bp=require("util"),Wa=As(),wp=Cs(),Ip=ja.exports=function(t){Wa.call(this);let e=[],n=this;this._filter=new wp(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};bp.inherits(Ip,Wa)});var gt=v((tS,Va)=>{"use strict";Va.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Ps=v((nS,$a)=>{"use strict";var Es=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)e&1?e=3988292384^e>>>1:e=e>>>1;Es[t]=e}})();var Rs=$a.exports=function(){this._crc=-1};Rs.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Es[(this._crc^t[e])&255]^this._crc>>>8;return!0};Rs.prototype.crc32=function(){return this._crc^-1};Rs.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Es[(e^t[n])&255]^e>>>8;return e^-1}});var Ms=v((rS,za)=>{"use strict";var B=gt(),Ap=Ps(),U=za.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[B.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[B.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[B.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[B.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[B.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[B.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};U.prototype.start=function(){this.read(B.PNG_SIGNATURE.length,this._parseSignature.bind(this))};U.prototype._parseSignature=function(t){let e=B.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};U.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let i=4;i<8;i++)r+=String.fromCharCode(t[i]);let s=!!(t[4]&32);if(!this._hasIHDR&&n!==B.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Ap,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!s){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};U.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};U.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};U.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(new Error("Crc error - "+e+" - "+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};U.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};U.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],s=t[9],i=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(s in B.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(i!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=s;let l=B.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(s&B.COLORTYPE_PALETTE),color:!!(s&B.COLORTYPE_COLOR),alpha:!!(s&B.COLORTYPE_ALPHA),bpp:l,colorType:s}),this._handleChunkEnd()};U.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};U.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};U.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};U.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===B.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}this._colorType===B.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===B.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};U.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};U.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/B.GAMMA_DIVISION),this._handleChunkEnd()};U.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};U.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===B.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(e);let n=t-e.length;n>0?this._handleIDAT(n):this._handleChunkEnd()};U.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};U.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var Ls=v(Ja=>{"use strict";var Ya=Ts(),xp=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Tp=[function(){},function(t,e,n,r){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function kp(t,e){let n=[],r=0;function s(){if(r===t.length)throw new Error("Ran out of data");let i=t[r];r++;let o,a,l,c,u,d,f,p;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[r],r++,n.push((i<<8)+f);break;case 4:f=i&15,p=i>>4,n.push(p,f);break;case 2:u=i&3,d=i>>2&3,f=i>>4&3,p=i>>6&3,n.push(p,f,d,u);break;case 1:o=i&1,a=i>>1&1,l=i>>2&1,c=i>>3&1,u=i>>4&1,d=i>>5&1,f=i>>6&1,p=i>>7&1,n.push(p,f,d,u,c,l,a,o);break}}return{get:function(i){for(;n.length<i;)s();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function Cp(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++)for(let u=0;u<o;u++){let d=n(u,c,l);xp[r](e,s,d,i),i+=r}return i}function Ep(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++){for(let u=0;u<o;u++){let d=s.get(r),f=n(u,c,l);Tp[r](e,d,f,i)}s.resetAfterLine()}}Ja.dataToBitMap=function(t,e){let n=e.width,r=e.height,s=e.depth,i=e.bpp,o=e.interlace,a;s!==8&&(a=kp(t,s));let l;s<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let c=Math.pow(2,s)-1,u=0,d,f;if(o)d=Ya.getImagePasses(n,r),f=Ya.getInterlaceIterator(n,r);else{let p=0;f=function(){let g=p;return p+=4,g},d=[{width:n,height:r}]}for(let p=0;p<d.length;p++)s===8?u=Cp(d[p],l,f,i,t,u):Ep(d[p],l,f,i,a,c);if(s===8){if(u!==t.length)throw new Error("extra data found")}else a.end();return l}});var Ns=v((iS,Ka)=>{"use strict";function Rp(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=s[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let c=0;c<4;c++)e[i+c]=l[c];i+=4}}function Pp(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(s.length===1?s[0]===t[i]&&(l=!0):s[0]===t[i]&&s[1]===t[i+1]&&s[2]===t[i+2]&&(l=!0),l)for(let c=0;c<4;c++)e[i+c]=0;i+=4}}function Mp(t,e,n,r,s){let i=255,o=Math.pow(2,s)-1,a=0;for(let l=0;l<r;l++)for(let c=0;c<n;c++){for(let u=0;u<4;u++)e[a+u]=Math.floor(t[a+u]*i/o+.5);a+=4}}Ka.exports=function(t,e){let n=e.depth,r=e.width,s=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?Rp(t,l,r,s,a):(o&&Pp(t,l,r,s,o),n!==8&&(n===16&&(l=Buffer.alloc(r*s*4)),Mp(t,l,r,s,n))),l}});var Za=v((oS,Xa)=>{"use strict";var Lp=require("util"),Os=require("zlib"),Qa=As(),Np=Ga(),Op=Ms(),Bp=Ls(),Dp=Ns(),fe=Xa.exports=function(t){Qa.call(this),this._parser=new Op(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};Lp.inherits(fe,Qa);fe.prototype._handleError=function(t){this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};fe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Os.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,Os.Z_MIN_CHUNK);this._inflate=Os.createInflate({chunkSize:r});let s=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){s&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){s&&(a.length>s&&(a=a.slice(0,s)),s-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};fe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Np(this._bitmapInfo)};fe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};fe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};fe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};fe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};fe.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};fe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=Bp.dataToBitMap(t,this._bitmapInfo);e=Dp(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var tl=v((aS,el)=>{"use strict";var ee=gt();el.exports=function(t,e,n,r){let s=[ee.COLORTYPE_COLOR_ALPHA,ee.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let h=new ArrayBuffer(2);return new DataView(h).setInt16(0,256,!0),new Int16Array(h)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let i=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=ee.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=ee.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let c=Buffer.alloc(e*n*l),u=0,d=0,f=r.bgColor||{};f.red===void 0&&(f.red=o),f.green===void 0&&(f.green=o),f.blue===void 0&&(f.blue=o);function p(){let g,h,y,m=o;switch(r.inputColorType){case ee.COLORTYPE_COLOR_ALPHA:m=i[u+3],g=i[u],h=i[u+1],y=i[u+2];break;case ee.COLORTYPE_COLOR:g=i[u],h=i[u+1],y=i[u+2];break;case ee.COLORTYPE_ALPHA:m=i[u+1],g=i[u],h=g,y=g;break;case ee.COLORTYPE_GRAYSCALE:g=i[u],h=g,y=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(s||(m/=o,g=Math.min(Math.max(Math.round((1-m)*f.red+m*g),0),o),h=Math.min(Math.max(Math.round((1-m)*f.green+m*h),0),o),y=Math.min(Math.max(Math.round((1-m)*f.blue+m*y),0),o))),{red:g,green:h,blue:y,alpha:m}}for(let g=0;g<n;g++)for(let h=0;h<e;h++){let y=p(i,u);switch(r.colorType){case ee.COLORTYPE_COLOR_ALPHA:case ee.COLORTYPE_COLOR:r.bitDepth===8?(c[d]=y.red,c[d+1]=y.green,c[d+2]=y.blue,s&&(c[d+3]=y.alpha)):(c.writeUInt16BE(y.red,d),c.writeUInt16BE(y.green,d+2),c.writeUInt16BE(y.blue,d+4),s&&c.writeUInt16BE(y.alpha,d+6));break;case ee.COLORTYPE_ALPHA:case ee.COLORTYPE_GRAYSCALE:{let m=(y.red+y.green+y.blue)/3;r.bitDepth===8?(c[d]=m,s&&(c[d+1]=y.alpha)):(c.writeUInt16BE(m,d),s&&c.writeUInt16BE(y.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}u+=a,d+=l}return c}});var sl=v((lS,rl)=>{"use strict";var nl=ks();function Hp(t,e,n,r,s){for(let i=0;i<n;i++)r[s+i]=t[e+i]}function Fp(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++)r+=Math.abs(t[i]);return r}function Up(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;r[s+o]=l}}function qp(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=t[e+i]-o;s+=Math.abs(a)}return s}function Wp(t,e,n,r,s){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;r[s+i]=a}}function jp(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++){let o=e>0?t[i-n]:0,a=t[i]-o;r+=Math.abs(a)}return r}function Gp(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=t[e+o]-(a+l>>1);r[s+o]=c}}function Vp(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);s+=Math.abs(l)}return s}function $p(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=e>0&&o>=i?t[e+o-(n+i)]:0,u=t[e+o]-nl(a,l,c);r[s+o]=u}}function zp(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=r?t[e+i-(n+r)]:0,c=t[e+i]-nl(o,a,l);s+=Math.abs(c)}return s}var Yp={0:Hp,1:Up,2:Wp,3:Gp,4:$p},Jp={0:Fp,1:qp,2:jp,3:Vp,4:zp};rl.exports=function(t,e,n,r,s){let i;if(!("filterType"in r)||r.filterType===-1)i=[0,1,2,3,4];else if(typeof r.filterType=="number")i=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(s*=2);let o=e*s,a=0,l=0,c=Buffer.alloc((o+1)*n),u=i[0];for(let d=0;d<n;d++){if(i.length>1){let f=1/0;for(let p=0;p<i.length;p++){let g=Jp[i[p]](t,l,o,s);g<f&&(u=i[p],f=g)}}c[a]=u,a++,Yp[u](t,l,o,c,a,s),a+=o,l+=o}return c}});var Bs=v((cS,il)=>{"use strict";var q=gt(),Kp=Ps(),Qp=tl(),Xp=sl(),Zp=require("zlib"),Ee=il.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32*1024,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||Zp.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:q.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:q.COLORTYPE_COLOR_ALPHA,[q.COLORTYPE_GRAYSCALE,q.COLORTYPE_COLOR,q.COLORTYPE_COLOR_ALPHA,q.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([q.COLORTYPE_GRAYSCALE,q.COLORTYPE_COLOR,q.COLORTYPE_COLOR_ALPHA,q.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw new Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw new Error("option bit depth:"+t.bitDepth+" is not supported at present")};Ee.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Ee.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Ee.prototype.filterData=function(t,e,n){let r=Qp(t,e,n,this._options),s=q.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Xp(r,e,n,this._options,s)};Ee.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(Kp.crc32(r.slice(4,r.length-4)),r.length-4),r};Ee.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*q.GAMMA_DIVISION),0),this._packChunk(q.TYPE_gAMA,e)};Ee.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(q.TYPE_IHDR,n)};Ee.prototype.packIDAT=function(t){return this._packChunk(q.TYPE_IDAT,t)};Ee.prototype.packIEND=function(){return this._packChunk(q.TYPE_IEND,null)}});var cl=v((uS,ll)=>{"use strict";var eh=require("util"),ol=require("stream"),th=gt(),nh=Bs(),al=ll.exports=function(t){ol.call(this);let e=t||{};this._packer=new nh(e),this._deflate=this._packer.createDeflate(),this.readable=!0};eh.inherits(al,ol);al.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(th.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let s=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(i){this.emit("data",this._packer.packIDAT(i))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(s)}});var gl=v((Qt,hl)=>{"use strict";var ul=require("assert").ok,mt=require("zlib"),rh=require("util"),dl=require("buffer").kMaxLength;function Ve(t){if(!(this instanceof Ve))return new Ve(t);t&&t.chunkSize<mt.Z_MIN_CHUNK&&(t.chunkSize=mt.Z_MIN_CHUNK),mt.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null&&(this._maxLength=t.maxLength)}function sh(t){return new Ve(t)}function fl(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}Ve.prototype._processChunk=function(t,e,n){if(typeof n=="function")return mt.Inflate._processChunk.call(this,t,e,n);let r=this,s=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],c=0,u;this.on("error",function(g){u=g});function d(g,h){if(r._hadError)return;let y=i-h;if(ul(y>=0,"have should not go down"),y>0){let m=r._buffer.slice(r._offset,r._offset+y);if(r._offset+=y,m.length>o&&(m=m.slice(0,o)),l.push(m),c+=m.length,o-=m.length,o===0)return!1}return(h===0||r._offset>=r._chunkSize)&&(i=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),h===0?(a+=s-g,s=g,!0):!1}ul(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,s,this._buffer,this._offset,i),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw u;if(c>=dl)throw fl(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+dl.toString(16)+" bytes");let p=Buffer.concat(l,c);return fl(this),p};rh.inherits(Ve,mt.Inflate);function ih(t,e){if(typeof e=="string"&&(e=Buffer.from(e)),!(e instanceof Buffer))throw new TypeError("Not a string or buffer");let n=t._finishFlushFlag;return n==null&&(n=mt.Z_FINISH),t._processChunk(e,n)}function pl(t,e){return ih(new Ve(e),t)}hl.exports=Qt=pl;Qt.Inflate=Ve;Qt.createInflate=sh;Qt.inflateSync=pl});var Ds=v((dS,yl)=>{"use strict";var ml=yl.exports=function(t){this._buffer=t,this._reads=[]};ml.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};ml.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)return new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)return new Error("unrecognised content at end of stream")}});var Sl=v(vl=>{"use strict";var oh=Ds(),ah=Cs();vl.process=function(t,e){let n=[],r=new oh(t);return new ah(e,{read:r.read.bind(r),write:function(i){n.push(i)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Il=v((pS,wl)=>{"use strict";var _l=!0,bl=require("zlib"),lh=gl();bl.deflateSync||(_l=!1);var ch=Ds(),uh=Sl(),dh=Ms(),fh=Ls(),ph=Ns();wl.exports=function(t,e){if(!_l)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(R){n=R}let s;function i(R){s=R}function o(R){s.transColor=R}function a(R){s.palette=R}function l(){s.alpha=!0}let c;function u(R){c=R}let d=[];function f(R){d.push(R)}let p=new ch(t);if(new dh(e,{read:p.read.bind(p),error:r,metadata:i,gamma:u,palette:a,transColor:o,inflateData:f,simpleTransparency:l}).start(),p.process(),n)throw n;let h=Buffer.concat(d);d.length=0;let y;if(s.interlace)y=bl.inflateSync(h);else{let H=((s.width*s.bpp*s.depth+7>>3)+1)*s.height;y=lh(h,{chunkSize:H,maxLength:H})}if(h=null,!y||!y.length)throw new Error("bad png - invalid inflate data response");let m=uh.process(y,s);h=null;let C=fh.dataToBitMap(m,s);m=null;let ce=ph(C,s);return s.data=ce,s.gamma=c||0,s}});var kl=v((hS,Tl)=>{"use strict";var Al=!0,xl=require("zlib");xl.deflateSync||(Al=!1);var hh=gt(),gh=Bs();Tl.exports=function(t,e){if(!Al)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n=e||{},r=new gh(n),s=[];s.push(Buffer.from(hh.PNG_SIGNATURE)),s.push(r.packIHDR(t.width,t.height)),t.gamma&&s.push(r.packGAMA(t.gamma));let i=r.filterData(t.data,t.width,t.height),o=xl.deflateSync(i,r.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return s.push(r.packIDAT(o)),s.push(r.packIEND()),Buffer.concat(s)}});var Cl=v(Hs=>{"use strict";var mh=Il(),yh=kl();Hs.read=function(t,e){return mh(t,e||{})};Hs.write=function(t,e){return yh(t,e)}});var Pl=v(Rl=>{"use strict";var vh=require("util"),El=require("stream"),Sh=Za(),_h=cl(),bh=Cl(),G=Rl.PNG=function(t){El.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new Sh(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new _h(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};vh.inherits(G,El);G.sync=bh;G.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};G.prototype.parse=function(t,e){if(e){let n,r;n=function(s){this.removeListener("error",r),this.data=s,e(null,this)}.bind(this),r=function(s){this.removeListener("parsed",n),e(s,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};G.prototype.write=function(t){return this._parser.write(t),!0};G.prototype.end=function(t){this._parser.end(t)};G.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};G.prototype._gamma=function(t){this.gamma=t};G.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};G.bitblt=function(t,e,n,r,s,i,o,a){if(n|=0,r|=0,s|=0,i|=0,o|=0,a|=0,n>t.width||r>t.height||n+s>t.width||r+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+s>e.width||a+i>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<i;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+s<<2)};G.prototype.bitblt=function(t,e,n,r,s,i,o){return G.bitblt(this,t,e,n,r,s,i,o),this};G.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let s=0;s<3;s++){let i=t.data[r+s]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[r+s]=Math.round(i*255)}}t.gamma=0}};G.prototype.adjustGamma=function(){G.adjustGamma(this)}});var Xt=v($e=>{function Ml(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}$e.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:r,scale:r?4:s,margin:n,color:{dark:Ml(e.color.dark||"#000000ff"),light:Ml(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};$e.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};$e.getImageWidth=function(e,n){let r=$e.getScale(e,n);return Math.floor((e+n.margin*2)*r)};$e.qrToImageData=function(e,n,r){let s=n.modules.size,i=n.modules.data,o=$e.getScale(s,r),a=Math.floor((s+r.margin*2)*o),l=r.margin*o,c=[r.color.light,r.color.dark];for(let u=0;u<a;u++)for(let d=0;d<a;d++){let f=(u*a+d)*4,p=r.color.light;if(u>=l&&d>=l&&u<a-l&&d<a-l){let g=Math.floor((u-l)/o),h=Math.floor((d-l)/o);p=c[i[g*s+h]?1:0]}e[f++]=p.r,e[f++]=p.g,e[f++]=p.b,e[f]=p.a}}});var Ll=v(pe=>{var wh=require("fs"),Ih=Pl().PNG,Fs=Xt();pe.render=function(e,n){let r=Fs.getOptions(n),s=r.rendererOpts,i=Fs.getImageWidth(e.modules.size,r);s.width=i,s.height=i;let o=new Ih(s);return Fs.qrToImageData(o.data,e,r),o};pe.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),pe.renderToBuffer(e,n,function(s,i){s&&r(s);let o="data:image/png;base64,";o+=i.toString("base64"),r(null,o)})};pe.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let s=pe.render(e,n),i=[];s.on("error",r),s.on("data",function(o){i.push(o)}),s.on("end",function(){r(null,Buffer.concat(i))}),s.pack()};pe.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=!1,o=(...l)=>{i||(i=!0,s.apply(null,l))},a=wh.createWriteStream(e);a.on("error",o),a.on("close",o),pe.renderToFileStream(a,n,r)};pe.renderToFileStream=function(e,n,r){pe.render(n,r).pack().pipe(e)}});var Nl=v(Jn=>{var Ah=Xt(),xh={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},Th={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function kh(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}Jn.render=function(t,e,n){let r=Ah.getOptions(e),s=xh;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(s=Th);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+r.margin*2+1).join(s.WW);l=Array(r.margin/2+1).join(l+`
|
|
14
|
-
`);let c=Array(r.margin+1).join(s.WW);a+=l;for(let u=0;u<i;u+=2){a+=c;for(let d=0;d<i;d++){let f=o[u*i+d],
|
|
15
|
-
`}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};
|
|
13
|
+
`);let o=Ap(e,n,s),a=Jn.getSymbolSize(e),l=new pp(a);return Sp(l,e),_p(l),bp(l,e),bs(l,n,0),e>=7&&Ip(l,e),wp(l,o),isNaN(r)&&(r=Is.getBestMask(l,bs.bind(null,l,n))),Is.applyMask(r,l),bs(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:s}}Ha.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=Ss.M,s,i;return typeof n<"u"&&(r=Ss.from(n.errorCorrectionLevel,Ss.M),s=Yn.from(n.version),i=Is.from(n.maskPattern),n.toSJISFunc&&Jn.setToSJISFunction(n.toSJISFunc)),Tp(e,s,r,i)}});var xs=y((sS,Ua)=>{"use strict";var Cp=require("util"),Fa=require("stream"),ie=Ua.exports=function(){Fa.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Cp.inherits(ie,Fa);ie.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};ie.prototype.write=function(t,e){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let n;return Buffer.isBuffer(t)?n=t:n=Buffer.from(t,e||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};ie.prototype.end=function(t,e){t&&this.write(t,e),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};ie.prototype.destroySoon=ie.prototype.end;ie.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};ie.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};ie.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];e.length>t.length?(this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length))):(this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e))};ie.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let s=this._buffers[n++],i=Math.min(s.length,t.length-e);s.copy(r,e,0,i),e+=i,i!==s.length&&(this._buffers[--n]=s.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};ie.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}this._buffers&&!this.writable&&this._end()}catch(t){this.emit("error",t)}}});var Cs=y(Ts=>{"use strict";var Ee=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];Ts.getImagePasses=function(t,e){let n=[],r=t%8,s=e%8,i=(t-r)/8,o=(e-s)/8;for(let a=0;a<Ee.length;a++){let l=Ee[a],c=i*l.x.length,u=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<r;d++)c++;for(let d=0;d<l.y.length&&l.y[d]<s;d++)u++;c>0&&u>0&&n.push({width:c,height:u,index:a})}return n};Ts.getInterlaceIterator=function(t){return function(e,n,r){let s=e%Ee[r].x.length,i=(e-s)/Ee[r].x.length*8+Ee[r].x[s],o=n%Ee[r].y.length,a=(n-o)/Ee[r].y.length*8+Ee[r].y[o];return i*4+a*t*4}}});var ks=y((oS,qa)=>{"use strict";qa.exports=function(e,n,r){let s=e+n-r,i=Math.abs(s-e),o=Math.abs(s-n),a=Math.abs(s-r);return i<=o&&i<=a?e:o<=a?n:r}});var Es=y((aS,ja)=>{"use strict";var kp=Cs(),Ep=ks();function Wa(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var mt=ja.exports=function(t,e){let n=t.width,r=t.height,s=t.interlace,i=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],s){let a=kp.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Wa(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Wa(n,i,o),height:r,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};mt.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};mt.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,s=r-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>s?e[i-r]:0;e[i]=o+a}};mt.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let s=0;s<n;s++){let i=t[1+s],o=r?r[s]:0;e[s]=i+o}};mt.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=Math.floor((c+l)/2);e[o]=a+u}};mt.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=o>s&&i?i[o-r]:0,d=Ep(c,l,u);e[o]=a+d}};mt.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],s=r.byteWidth;if(e===0)n=t.slice(1,s+1);else switch(n=Buffer.alloc(s),e){case 1:this._unFilterType1(t,n,s);break;case 2:this._unFilterType2(t,n,s);break;case 3:this._unFilterType3(t,n,s);break;case 4:this._unFilterType4(t,n,s);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var $a=y((lS,Va)=>{"use strict";var Rp=require("util"),Ga=xs(),Pp=Es(),Mp=Va.exports=function(t){Ga.call(this);let e=[],n=this;this._filter=new Pp(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Rp.inherits(Mp,Ga)});var yt=y((cS,za)=>{"use strict";za.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Ms=y((uS,Ya)=>{"use strict";var Rs=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)e&1?e=3988292384^e>>>1:e=e>>>1;Rs[t]=e}})();var Ps=Ya.exports=function(){this._crc=-1};Ps.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Rs[(this._crc^t[e])&255]^this._crc>>>8;return!0};Ps.prototype.crc32=function(){return this._crc^-1};Ps.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Rs[(e^t[n])&255]^e>>>8;return e^-1}});var Ls=y((dS,Ja)=>{"use strict";var B=yt(),Lp=Ms(),U=Ja.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[B.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[B.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[B.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[B.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[B.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[B.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};U.prototype.start=function(){this.read(B.PNG_SIGNATURE.length,this._parseSignature.bind(this))};U.prototype._parseSignature=function(t){let e=B.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};U.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let i=4;i<8;i++)r+=String.fromCharCode(t[i]);let s=!!(t[4]&32);if(!this._hasIHDR&&n!==B.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Lp,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!s){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};U.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};U.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};U.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(new Error("Crc error - "+e+" - "+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};U.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};U.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],s=t[9],i=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(s in B.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(i!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=s;let l=B.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(s&B.COLORTYPE_PALETTE),color:!!(s&B.COLORTYPE_COLOR),alpha:!!(s&B.COLORTYPE_ALPHA),bpp:l,colorType:s}),this._handleChunkEnd()};U.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};U.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};U.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};U.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===B.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}this._colorType===B.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===B.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};U.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};U.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/B.GAMMA_DIVISION),this._handleChunkEnd()};U.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};U.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===B.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(e);let n=t-e.length;n>0?this._handleIDAT(n):this._handleChunkEnd()};U.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};U.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var Ns=y(Qa=>{"use strict";var Ka=Cs(),Np=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Op=[function(){},function(t,e,n,r){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Bp(t,e){let n=[],r=0;function s(){if(r===t.length)throw new Error("Ran out of data");let i=t[r];r++;let o,a,l,c,u,d,f,h;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[r],r++,n.push((i<<8)+f);break;case 4:f=i&15,h=i>>4,n.push(h,f);break;case 2:u=i&3,d=i>>2&3,f=i>>4&3,h=i>>6&3,n.push(h,f,d,u);break;case 1:o=i&1,a=i>>1&1,l=i>>2&1,c=i>>3&1,u=i>>4&1,d=i>>5&1,f=i>>6&1,h=i>>7&1,n.push(h,f,d,u,c,l,a,o);break}}return{get:function(i){for(;n.length<i;)s();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function Dp(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++)for(let u=0;u<o;u++){let d=n(u,c,l);Np[r](e,s,d,i),i+=r}return i}function Hp(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++){for(let u=0;u<o;u++){let d=s.get(r),f=n(u,c,l);Op[r](e,d,f,i)}s.resetAfterLine()}}Qa.dataToBitMap=function(t,e){let n=e.width,r=e.height,s=e.depth,i=e.bpp,o=e.interlace,a;s!==8&&(a=Bp(t,s));let l;s<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let c=Math.pow(2,s)-1,u=0,d,f;if(o)d=Ka.getImagePasses(n,r),f=Ka.getInterlaceIterator(n,r);else{let h=0;f=function(){let g=h;return h+=4,g},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)s===8?u=Dp(d[h],l,f,i,t,u):Hp(d[h],l,f,i,a,c);if(s===8){if(u!==t.length)throw new Error("extra data found")}else a.end();return l}});var Os=y((pS,Xa)=>{"use strict";function Fp(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=s[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let c=0;c<4;c++)e[i+c]=l[c];i+=4}}function Up(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(s.length===1?s[0]===t[i]&&(l=!0):s[0]===t[i]&&s[1]===t[i+1]&&s[2]===t[i+2]&&(l=!0),l)for(let c=0;c<4;c++)e[i+c]=0;i+=4}}function qp(t,e,n,r,s){let i=255,o=Math.pow(2,s)-1,a=0;for(let l=0;l<r;l++)for(let c=0;c<n;c++){for(let u=0;u<4;u++)e[a+u]=Math.floor(t[a+u]*i/o+.5);a+=4}}Xa.exports=function(t,e){let n=e.depth,r=e.width,s=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?Fp(t,l,r,s,a):(o&&Up(t,l,r,s,o),n!==8&&(n===16&&(l=Buffer.alloc(r*s*4)),qp(t,l,r,s,n))),l}});var tl=y((hS,el)=>{"use strict";var Wp=require("util"),Bs=require("zlib"),Za=xs(),jp=$a(),Gp=Ls(),Vp=Ns(),$p=Os(),fe=el.exports=function(t){Za.call(this),this._parser=new Gp(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};Wp.inherits(fe,Za);fe.prototype._handleError=function(t){this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};fe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Bs.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,Bs.Z_MIN_CHUNK);this._inflate=Bs.createInflate({chunkSize:r});let s=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){s&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){s&&(a.length>s&&(a=a.slice(0,s)),s-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};fe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new jp(this._bitmapInfo)};fe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};fe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};fe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};fe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};fe.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};fe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=Vp.dataToBitMap(t,this._bitmapInfo);e=$p(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var rl=y((gS,nl)=>{"use strict";var te=yt();nl.exports=function(t,e,n,r){let s=[te.COLORTYPE_COLOR_ALPHA,te.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let p=new ArrayBuffer(2);return new DataView(p).setInt16(0,256,!0),new Int16Array(p)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let i=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=te.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=te.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let c=Buffer.alloc(e*n*l),u=0,d=0,f=r.bgColor||{};f.red===void 0&&(f.red=o),f.green===void 0&&(f.green=o),f.blue===void 0&&(f.blue=o);function h(){let g,p,m,v=o;switch(r.inputColorType){case te.COLORTYPE_COLOR_ALPHA:v=i[u+3],g=i[u],p=i[u+1],m=i[u+2];break;case te.COLORTYPE_COLOR:g=i[u],p=i[u+1],m=i[u+2];break;case te.COLORTYPE_ALPHA:v=i[u+1],g=i[u],p=g,m=g;break;case te.COLORTYPE_GRAYSCALE:g=i[u],p=g,m=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(s||(v/=o,g=Math.min(Math.max(Math.round((1-v)*f.red+v*g),0),o),p=Math.min(Math.max(Math.round((1-v)*f.green+v*p),0),o),m=Math.min(Math.max(Math.round((1-v)*f.blue+v*m),0),o))),{red:g,green:p,blue:m,alpha:v}}for(let g=0;g<n;g++)for(let p=0;p<e;p++){let m=h(i,u);switch(r.colorType){case te.COLORTYPE_COLOR_ALPHA:case te.COLORTYPE_COLOR:r.bitDepth===8?(c[d]=m.red,c[d+1]=m.green,c[d+2]=m.blue,s&&(c[d+3]=m.alpha)):(c.writeUInt16BE(m.red,d),c.writeUInt16BE(m.green,d+2),c.writeUInt16BE(m.blue,d+4),s&&c.writeUInt16BE(m.alpha,d+6));break;case te.COLORTYPE_ALPHA:case te.COLORTYPE_GRAYSCALE:{let v=(m.red+m.green+m.blue)/3;r.bitDepth===8?(c[d]=v,s&&(c[d+1]=m.alpha)):(c.writeUInt16BE(v,d),s&&c.writeUInt16BE(m.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}u+=a,d+=l}return c}});var ol=y((mS,il)=>{"use strict";var sl=ks();function zp(t,e,n,r,s){for(let i=0;i<n;i++)r[s+i]=t[e+i]}function Yp(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++)r+=Math.abs(t[i]);return r}function Jp(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;r[s+o]=l}}function Kp(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=t[e+i]-o;s+=Math.abs(a)}return s}function Qp(t,e,n,r,s){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;r[s+i]=a}}function Xp(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++){let o=e>0?t[i-n]:0,a=t[i]-o;r+=Math.abs(a)}return r}function Zp(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=t[e+o]-(a+l>>1);r[s+o]=c}}function eh(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);s+=Math.abs(l)}return s}function th(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=e>0&&o>=i?t[e+o-(n+i)]:0,u=t[e+o]-sl(a,l,c);r[s+o]=u}}function nh(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=r?t[e+i-(n+r)]:0,c=t[e+i]-sl(o,a,l);s+=Math.abs(c)}return s}var rh={0:zp,1:Jp,2:Qp,3:Zp,4:th},sh={0:Yp,1:Kp,2:Xp,3:eh,4:nh};il.exports=function(t,e,n,r,s){let i;if(!("filterType"in r)||r.filterType===-1)i=[0,1,2,3,4];else if(typeof r.filterType=="number")i=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(s*=2);let o=e*s,a=0,l=0,c=Buffer.alloc((o+1)*n),u=i[0];for(let d=0;d<n;d++){if(i.length>1){let f=1/0;for(let h=0;h<i.length;h++){let g=sh[i[h]](t,l,o,s);g<f&&(u=i[h],f=g)}}c[a]=u,a++,rh[u](t,l,o,c,a,s),a+=o,l+=o}return c}});var Ds=y((yS,al)=>{"use strict";var q=yt(),ih=Ms(),oh=rl(),ah=ol(),lh=require("zlib"),Re=al.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32*1024,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||lh.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:q.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:q.COLORTYPE_COLOR_ALPHA,[q.COLORTYPE_GRAYSCALE,q.COLORTYPE_COLOR,q.COLORTYPE_COLOR_ALPHA,q.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([q.COLORTYPE_GRAYSCALE,q.COLORTYPE_COLOR,q.COLORTYPE_COLOR_ALPHA,q.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw new Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw new Error("option bit depth:"+t.bitDepth+" is not supported at present")};Re.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Re.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Re.prototype.filterData=function(t,e,n){let r=oh(t,e,n,this._options),s=q.COLORTYPE_TO_BPP_MAP[this._options.colorType];return ah(r,e,n,this._options,s)};Re.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(ih.crc32(r.slice(4,r.length-4)),r.length-4),r};Re.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*q.GAMMA_DIVISION),0),this._packChunk(q.TYPE_gAMA,e)};Re.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(q.TYPE_IHDR,n)};Re.prototype.packIDAT=function(t){return this._packChunk(q.TYPE_IDAT,t)};Re.prototype.packIEND=function(){return this._packChunk(q.TYPE_IEND,null)}});var dl=y((vS,ul)=>{"use strict";var ch=require("util"),ll=require("stream"),uh=yt(),dh=Ds(),cl=ul.exports=function(t){ll.call(this);let e=t||{};this._packer=new dh(e),this._deflate=this._packer.createDeflate(),this.readable=!0};ch.inherits(cl,ll);cl.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(uh.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let s=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(i){this.emit("data",this._packer.packIDAT(i))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(s)}});var yl=y((Zt,ml)=>{"use strict";var fl=require("assert").ok,vt=require("zlib"),fh=require("util"),pl=require("buffer").kMaxLength;function $e(t){if(!(this instanceof $e))return new $e(t);t&&t.chunkSize<vt.Z_MIN_CHUNK&&(t.chunkSize=vt.Z_MIN_CHUNK),vt.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null&&(this._maxLength=t.maxLength)}function ph(t){return new $e(t)}function hl(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}$e.prototype._processChunk=function(t,e,n){if(typeof n=="function")return vt.Inflate._processChunk.call(this,t,e,n);let r=this,s=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],c=0,u;this.on("error",function(g){u=g});function d(g,p){if(r._hadError)return;let m=i-p;if(fl(m>=0,"have should not go down"),m>0){let v=r._buffer.slice(r._offset,r._offset+m);if(r._offset+=m,v.length>o&&(v=v.slice(0,o)),l.push(v),c+=v.length,o-=v.length,o===0)return!1}return(p===0||r._offset>=r._chunkSize)&&(i=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),p===0?(a+=s-g,s=g,!0):!1}fl(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,s,this._buffer,this._offset,i),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw u;if(c>=pl)throw hl(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+pl.toString(16)+" bytes");let h=Buffer.concat(l,c);return hl(this),h};fh.inherits($e,vt.Inflate);function hh(t,e){if(typeof e=="string"&&(e=Buffer.from(e)),!(e instanceof Buffer))throw new TypeError("Not a string or buffer");let n=t._finishFlushFlag;return n==null&&(n=vt.Z_FINISH),t._processChunk(e,n)}function gl(t,e){return hh(new $e(e),t)}ml.exports=Zt=gl;Zt.Inflate=$e;Zt.createInflate=ph;Zt.inflateSync=gl});var Hs=y((SS,Sl)=>{"use strict";var vl=Sl.exports=function(t){this._buffer=t,this._reads=[]};vl.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};vl.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)return new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)return new Error("unrecognised content at end of stream")}});var bl=y(_l=>{"use strict";var gh=Hs(),mh=Es();_l.process=function(t,e){let n=[],r=new gh(t);return new mh(e,{read:r.read.bind(r),write:function(i){n.push(i)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var xl=y((bS,Al)=>{"use strict";var Il=!0,wl=require("zlib"),yh=yl();wl.deflateSync||(Il=!1);var vh=Hs(),Sh=bl(),_h=Ls(),bh=Ns(),Ih=Os();Al.exports=function(t,e){if(!Il)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(C){n=C}let s;function i(C){s=C}function o(C){s.transColor=C}function a(C){s.palette=C}function l(){s.alpha=!0}let c;function u(C){c=C}let d=[];function f(C){d.push(C)}let h=new vh(t);if(new _h(e,{read:h.read.bind(h),error:r,metadata:i,gamma:u,palette:a,transColor:o,inflateData:f,simpleTransparency:l}).start(),h.process(),n)throw n;let p=Buffer.concat(d);d.length=0;let m;if(s.interlace)m=wl.inflateSync(p);else{let H=((s.width*s.bpp*s.depth+7>>3)+1)*s.height;m=yh(p,{chunkSize:H,maxLength:H})}if(p=null,!m||!m.length)throw new Error("bad png - invalid inflate data response");let v=Sh.process(m,s);p=null;let b=bh.dataToBitMap(v,s);v=null;let K=Ih(b,s);return s.data=K,s.gamma=c||0,s}});var El=y((IS,kl)=>{"use strict";var Tl=!0,Cl=require("zlib");Cl.deflateSync||(Tl=!1);var wh=yt(),Ah=Ds();kl.exports=function(t,e){if(!Tl)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n=e||{},r=new Ah(n),s=[];s.push(Buffer.from(wh.PNG_SIGNATURE)),s.push(r.packIHDR(t.width,t.height)),t.gamma&&s.push(r.packGAMA(t.gamma));let i=r.filterData(t.data,t.width,t.height),o=Cl.deflateSync(i,r.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return s.push(r.packIDAT(o)),s.push(r.packIEND()),Buffer.concat(s)}});var Rl=y(Fs=>{"use strict";var xh=xl(),Th=El();Fs.read=function(t,e){return xh(t,e||{})};Fs.write=function(t,e){return Th(t,e)}});var Ll=y(Ml=>{"use strict";var Ch=require("util"),Pl=require("stream"),kh=tl(),Eh=dl(),Rh=Rl(),G=Ml.PNG=function(t){Pl.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new kh(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new Eh(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};Ch.inherits(G,Pl);G.sync=Rh;G.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};G.prototype.parse=function(t,e){if(e){let n,r;n=function(s){this.removeListener("error",r),this.data=s,e(null,this)}.bind(this),r=function(s){this.removeListener("parsed",n),e(s,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};G.prototype.write=function(t){return this._parser.write(t),!0};G.prototype.end=function(t){this._parser.end(t)};G.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};G.prototype._gamma=function(t){this.gamma=t};G.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};G.bitblt=function(t,e,n,r,s,i,o,a){if(n|=0,r|=0,s|=0,i|=0,o|=0,a|=0,n>t.width||r>t.height||n+s>t.width||r+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+s>e.width||a+i>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<i;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+s<<2)};G.prototype.bitblt=function(t,e,n,r,s,i,o){return G.bitblt(this,t,e,n,r,s,i,o),this};G.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let s=0;s<3;s++){let i=t.data[r+s]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[r+s]=Math.round(i*255)}}t.gamma=0}};G.prototype.adjustGamma=function(){G.adjustGamma(this)}});var en=y(ze=>{function Nl(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}ze.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:r,scale:r?4:s,margin:n,color:{dark:Nl(e.color.dark||"#000000ff"),light:Nl(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};ze.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};ze.getImageWidth=function(e,n){let r=ze.getScale(e,n);return Math.floor((e+n.margin*2)*r)};ze.qrToImageData=function(e,n,r){let s=n.modules.size,i=n.modules.data,o=ze.getScale(s,r),a=Math.floor((s+r.margin*2)*o),l=r.margin*o,c=[r.color.light,r.color.dark];for(let u=0;u<a;u++)for(let d=0;d<a;d++){let f=(u*a+d)*4,h=r.color.light;if(u>=l&&d>=l&&u<a-l&&d<a-l){let g=Math.floor((u-l)/o),p=Math.floor((d-l)/o);h=c[i[g*s+p]?1:0]}e[f++]=h.r,e[f++]=h.g,e[f++]=h.b,e[f]=h.a}}});var Ol=y(pe=>{var Ph=require("fs"),Mh=Ll().PNG,Us=en();pe.render=function(e,n){let r=Us.getOptions(n),s=r.rendererOpts,i=Us.getImageWidth(e.modules.size,r);s.width=i,s.height=i;let o=new Mh(s);return Us.qrToImageData(o.data,e,r),o};pe.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),pe.renderToBuffer(e,n,function(s,i){s&&r(s);let o="data:image/png;base64,";o+=i.toString("base64"),r(null,o)})};pe.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let s=pe.render(e,n),i=[];s.on("error",r),s.on("data",function(o){i.push(o)}),s.on("end",function(){r(null,Buffer.concat(i))}),s.pack()};pe.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=!1,o=(...l)=>{i||(i=!0,s.apply(null,l))},a=Ph.createWriteStream(e);a.on("error",o),a.on("close",o),pe.renderToFileStream(a,n,r)};pe.renderToFileStream=function(e,n,r){pe.render(n,r).pack().pipe(e)}});var Bl=y(Kn=>{var Lh=en(),Nh={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},Oh={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function Bh(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}Kn.render=function(t,e,n){let r=Lh.getOptions(e),s=Nh;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(s=Oh);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+r.margin*2+1).join(s.WW);l=Array(r.margin/2+1).join(l+`
|
|
14
|
+
`);let c=Array(r.margin+1).join(s.WW);a+=l;for(let u=0;u<i;u+=2){a+=c;for(let d=0;d<i;d++){let f=o[u*i+d],h=o[(u+1)*i+d];a+=Bh(f,h,s)}a+=c+`
|
|
15
|
+
`}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};Kn.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),o=Kn.render(n,r);i.writeFile(e,o,s)}});var Hl=y(Dl=>{Dl.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(r+3).join(o),c=Array(2).join(o);a+=l+`
|
|
16
16
|
`;for(let u=0;u<r;++u){a+=o;for(let d=0;d<r;d++)a+=s[u*r+d]?i:o;a+=c+`
|
|
17
17
|
`}return a+=l+`
|
|
18
|
-
`,typeof n=="function"&&n(null,a),a}});var
|
|
19
|
-
`+o,d=o;for(let f=-1;f<r+1;f+=2){for(let
|
|
20
|
-
`;return typeof r=="function"&&r(null,f),f}});var
|
|
21
|
-
`):
|
|
22
|
-
`),
|
|
23
|
-
`)}catch{}}}function
|
|
24
|
-
`)){let s=r.indexOf("=");s>0&&(n[r.slice(0,s)]=r.slice(s+1))}return
|
|
25
|
-
`;
|
|
18
|
+
`,typeof n=="function"&&n(null,a),a}});var Wl=y(ql=>{var Dh="\x1B[47m",Hh="\x1B[40m",qs="\x1B[37m",Ws="\x1B[30m",Ye="\x1B[0m",Fh=Dh+Ws,Uh=Hh+qs,qh=function(t,e,n){return{"00":Ye+" "+t,"01":Ye+e+"\u2584"+t,"02":Ye+n+"\u2584"+t,10:Ye+e+"\u2580"+t,11:" ",12:"\u2584",20:Ye+n+"\u2580"+t,21:"\u2580",22:"\u2588"}},Fl=function(t,e,n,r){let s=e+1;if(n>=s||r>=s||r<-1||n<-1)return"0";if(n>=e||r>=e||r<0||n<0)return"1";let i=r*e+n;return t[i]?"2":"1"},Ul=function(t,e,n,r){return Fl(t,e,n,r)+Fl(t,e,n,r+1)};ql.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?Uh:Fh,c=qh(o,i?Ws:qs,i?qs:Ws),u=Ye+`
|
|
19
|
+
`+o,d=o;for(let f=-1;f<r+1;f+=2){for(let h=-1;h<r;h++)d+=c[Ul(s,r,h,f)];d+=c[Ul(s,r,r,f)]+u}return d+=Ye,typeof n=="function"&&n(null,d),d}});var Gl=y(jl=>{var Wh=Hl(),jh=Wl();jl.render=function(t,e,n){return e&&e.small?jh.render(t,e,n):Wh.render(t,e,n)}});var Gs=y($l=>{var Gh=en();function Vl(t,e){let n=t.a/255,r=e+'="'+t.hex+'"';return n<1?r+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':r}function js(t,e,n){let r=t+e;return typeof n<"u"&&(r+=" "+n),r}function Vh(t,e,n){let r="",s=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),c=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(r+=i?js("M",l+n,.5+c+n):js("m",s,0),s=0,i=!1),l+1<e&&t[a+1]||(r+=js("h",o),o=0)):s++}return r}$l.render=function(e,n,r){let s=Gh.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+s.margin*2,l=s.color.light.a?"<path "+Vl(s.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",c="<path "+Vl(s.color.dark,"stroke")+' d="'+Vh(o,i,s.margin)+'"/>',u='viewBox="0 0 '+a+" "+a+'"',f='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+u+' shape-rendering="crispEdges">'+l+c+`</svg>
|
|
20
|
+
`;return typeof r=="function"&&r(null,f),f}});var zl=y(Qn=>{var $h=Gs();Qn.render=$h.render;Qn.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),a='<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+Qn.render(n,r);i.writeFile(e,a,s)}});var Yl=y(Xn=>{var Vs=en();function zh(t,e,n){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=n,e.width=n,e.style.height=n+"px",e.style.width=n+"px"}function Yh(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}Xn.render=function(e,n,r){let s=r,i=n;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),n||(i=Yh()),s=Vs.getOptions(s);let o=Vs.getImageWidth(e.modules.size,s),a=i.getContext("2d"),l=a.createImageData(o,o);return Vs.qrToImageData(l.data,e,s),zh(a,i,o),a.putImageData(l,0,0),i};Xn.renderToDataURL=function(e,n,r){let s=r;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),s||(s={});let i=Xn.render(e,n,s),o=s.type||"image/png",a=s.rendererOpts||{};return i.toDataURL(o,a.quality)}});var Kl=y(tn=>{var Jh=is(),$s=As(),Jl=Yl(),Kh=Gs();function zs(t,e,n,r,s){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!Jh())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(s=n,n=e,e=r=void 0):o===3&&(e.getContext&&typeof s>"u"?(s=r,r=void 0):(s=r,r=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=r=void 0):o===2&&!e.getContext&&(r=n,n=e,e=void 0),new Promise(function(l,c){try{let u=$s.create(n,r);l(t(u,e,r))}catch(u){c(u)}})}try{let l=$s.create(n,r);s(null,t(l,e,r))}catch(l){s(l)}}tn.create=$s.create;tn.toCanvas=zs.bind(null,Jl.render);tn.toDataURL=zs.bind(null,Jl.renderToDataURL);tn.toString=zs.bind(null,function(t,e,n){return Kh.render(t,n)})});var ec=y(Pe=>{var Ql=is(),Ys=As(),Qh=Ol(),Xl=Bl(),Xh=Gl(),Zl=zl();function nn(t,e,n){if(typeof t>"u")throw new Error("String required as first argument");if(typeof n>"u"&&(n=e,e={}),typeof n!="function")if(Ql())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function Zh(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function Zn(t){switch(t){case"svg":return Zl;case"txt":case"utf8":return Xl;case"png":case"image/png":default:return Qh}}function eg(t){switch(t){case"svg":return Zl;case"terminal":return Xh;case"utf8":default:return Xl}}function rn(t,e,n){if(!n.cb)return new Promise(function(r,s){try{let i=Ys.create(e,n.opts);return t(i,n.opts,function(o,a){return o?s(o):r(a)})}catch(i){s(i)}});try{let r=Ys.create(e,n.opts);return t(r,n.opts,n.cb)}catch(r){n.cb(r)}}Pe.create=Ys.create;Pe.toCanvas=Kl().toCanvas;Pe.toString=function(e,n,r){let s=nn(e,n,r),i=s.opts?s.opts.type:void 0,o=eg(i);return rn(o.render,e,s)};Pe.toDataURL=function(e,n,r){let s=nn(e,n,r),i=Zn(s.opts.type);return rn(i.renderToDataURL,e,s)};Pe.toBuffer=function(e,n,r){let s=nn(e,n,r),i=Zn(s.opts.type);return rn(i.renderToBuffer,e,s)};Pe.toFile=function(e,n,r,s){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!Ql())throw new Error("Too few arguments provided");let i=nn(n,r,s),o=i.opts.type||Zh(e),l=Zn(o).renderToFile.bind(null,e);return rn(l,n,i)};Pe.toFileStream=function(e,n,r){if(arguments.length<2)throw new Error("Too few arguments provided");let s=nn(n,r,e.emit.bind(e,"error")),o=Zn("png").renderToFileStream.bind(null,e);rn(o,n,s)}});var nc=y((BS,tc)=>{tc.exports=ec()});var rd=require("http");var Bf=rt(Ho(),1),Df=rt(zr(),1),Hf=rt(Kr(),1),Ff=rt(Hn(),1),ss=rt(zo(),1);var re=require("fs/promises"),sd=require("crypto"),xn=require("path"),id=require("os"),qi=rt(nc(),1);var Ke=require("child_process"),gc=require("fs"),L=require("path"),sn=require("os");var ar=require("fs");var rc=require("os"),W=require("path"),_e=(0,W.join)((0,rc.homedir)(),".vibelet"),er=(0,W.join)(_e,"logs"),tr=(0,W.join)(_e,"data"),tg=(0,W.join)(_e,"runtime"),DS=(0,W.join)(tg,"current"),sc=(0,W.join)(_e,"identity.json"),ic=(0,W.join)(_e,"pairings.json"),oc=(0,W.join)(tr,"push-subscriptions.json"),nr=(0,W.join)(tr,"sessions.json"),St=(0,W.join)(tr,"audit.jsonl"),Js=(0,W.join)(tr,"uploads"),rr=(0,W.join)(er,"daemon.stdout.log"),sr=(0,W.join)(er,"daemon.stderr.log"),ac=(0,W.join)(_e,"update-check.json"),Ks=(0,W.join)(_e,"pairing-qr.png");var ir={stdout:!1,stderr:!1};function lc(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function ng(t){return!t.destroyed&&t.writable!==!1}function cc(t,e){if(ir[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!ng(n))return ir[t]=!0,!1;try{return n.write(e,r=>{lc(r)&&(ir[t]=!0)}),!0}catch(r){return lc(r)&&(ir[t]=!0),!1}}function _t(t){return cc("stdout",t)}function or(t){return cc("stderr",t)}var uc={debug:10,info:20,warn:30,error:40},rg=process.env.VIBE_LOG_LEVEL||"info";function sg(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function ig(){try{let{fstatSync:t}=require("fs");return t(1).isFile()}catch{return!1}}var fc=!sg()&&!ig();if(fc)try{(0,ar.mkdirSync)(er,{recursive:!0})}catch{}function dc(t,e,n){if(uc[t]<uc[rg])return;let r={level:t,ts:new Date().toISOString(),msg:n,...e},s=JSON.stringify(r);if(t==="error"||t==="warn"?or(s+`
|
|
21
|
+
`):_t(s+`
|
|
22
|
+
`),fc){let i=t==="error"||t==="warn"?sr:rr;try{(0,ar.appendFileSync)(i,s+`
|
|
23
|
+
`)}catch{}}}function pc(t={}){function e(n,r,s){typeof r=="string"?dc(n,t,r):dc(n,{...t,...r},s)}return{debug:(n,r)=>e("debug",n,r),info:(n,r)=>e("info",n,r),warn:(n,r)=>e("warn",n,r),error:(n,r)=>e("error",n,r),child:n=>pc({...t,...n})}}var M=pc({module:"daemon"});var og=["fnm_multishells"],ag=6e4,Le=process.platform==="win32",lg=M.child({module:"config"});function Me(t){return og.some(e=>t.includes(e))}function Zs(){return Le?[]:[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var bt=null;function mc(){if(bt&&!Me(bt.PATH??""))return bt;for(let t of Zs())try{let e=(0,Ke.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let r of e.split(`
|
|
24
|
+
`)){let s=r.indexOf("=");s>0&&(n[r.slice(0,s)]=r.slice(s+1))}return Me(n.PATH??"")?bt=null:bt=n,n}catch{}return bt={},{}}function cg(t=mc()){let e=(0,sn.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(Le?(0,L.join)(e,"pnpm"):(0,L.join)(e,"Library","pnpm")),r=t.PATH||process.env.PATH||"",s=Le?[(0,L.join)(e,".npm-global","bin"),(0,L.join)(e,".local","bin"),(0,L.join)(e,".claude","bin"),n,(0,L.join)(e,"AppData","Roaming","npm"),(0,L.join)(e,"AppData","Local","Programs","node")]:["/usr/local/bin","/opt/homebrew/bin","/usr/bin","/bin",(0,L.join)(e,".npm-global","bin"),(0,L.join)(e,".local","bin"),(0,L.join)(e,".claude","bin"),n],i=r.split(L.delimiter).filter(Boolean),o=new Set(i);for(let a of s)o.has(a)||(i.push(a),o.add(a));return i.join(L.delimiter)}function Qs(t,e){let n=process.env[t];if(!n)return e;let r=Number(n);return Number.isFinite(r)&&r>0?Math.floor(r):e}function Xs(t,e){let n=process.env[t];if(n==null||n==="")return e;let r=Number(n);return Number.isFinite(r)&&r>=0?Math.floor(r):e}function Qe(){let t=mc(),e={};for(let[n,r]of Object.entries(process.env))typeof r=="string"&&(e[n]=r);for(let[n,r]of Object.entries(t))typeof r=="string"&&(e[n]=r);return e.PATH=cg(t),e.HOME||(e.HOME=(0,sn.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function ei(t){if(Le)try{let n=(0,Ke.execFileSync)("where.exe",[t],{timeout:3e3,stdio:"pipe",encoding:"utf-8"}).trim().split(/\r?\n/).filter(Boolean);return n.find(s=>s.endsWith(".exe"))??n[0]}catch{return}}function Je(t,e=3e3){try{return(0,Ke.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Qe(),...Le?{shell:!0}:{}}).trim()||null}catch{return null}}function ug(t){for(let e of Zs())try{let n=(0,Ke.execFileSync)(e,["-ilc",`command -v ${t}`],{timeout:5e3,stdio:["pipe","pipe","pipe"],encoding:"utf-8"}).trim();if(n)return n}catch{}}function dg(){let t=(0,sn.homedir)();return[(0,L.join)(t,".local","bin","claude"),(0,L.join)(t,".claude","bin","claude"),"/usr/local/bin/claude","/opt/homebrew/bin/claude",(0,L.join)(t,".npm-global","bin","claude")]}function fg(){if(Le){let t=ei("claude");return t&&Je(t)?t:void 0}for(let t of dg())if(Je(t))return t;try{let t=(0,Ke.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim();if(t&&!t.includes("cmux")&&Je(t))return t}catch{}}function pg(){let t=(0,sn.homedir)(),e=[process.env.PNPM_HOME,(0,L.join)(t,"Library","pnpm")].filter(n=>!!n);return["/usr/local/bin/codex","/opt/homebrew/bin/codex",(0,L.join)(t,".npm-global","bin","codex"),(0,L.join)(t,".local","bin","codex"),...e.map(n=>(0,L.join)(n,"codex"))]}function hg(){if(Le){let n=ei("codex");return n&&Je(n)?n:void 0}let t;for(let n of pg())if(Je(n)){if(!Me(n))return n;t=n}try{let n=(0,Ke.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim();if(n&&Je(n)){if(!Me(n))return n;t=t??n}}catch{}let e=ug("codex");if(e&&Je(e)){if(!Me(e))return e;t=t??e}return t}function yc(t,e){let n=null,r=0;return()=>{let s=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[s])return process.env[s];let i=Date.now();if(!n||i-r>ag||!(0,gc.existsSync)(n)||Me(n)){let o=t();n=o??e,r=i,lg.info({name:e,path:n,transient:Me(n),isBare:o==null},"binary resolved")}return n}}var gg=yc(fg,"claude"),mg=yc(hg,"codex");function yg(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith("--")&&n+1<e.length){let s=r.slice(2);t[s]=e[++n]}}return t}var hc=yg();function vg(t,e){return Le?{command:ei(t)??t,args:e}:{command:Zs()[0]??"/bin/zsh",args:["-lc",`command -v ${t} >/dev/null 2>&1 && exec ${t} "$@"`,"--",...e]}}var S={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:hc.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:hc["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:Xs("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:Xs("VIBE_TURN_STALL_TIMEOUT_MS",300*1e3),auditMaxBytes:Qs("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:Qs("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:Qs("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),pairWindowMs:Xs("VIBE_PAIR_WINDOW_MS",300*1e3),pairReusable:process.env.VIBE_PAIR_REUSABLE==="1",get claudePath(){return gg()},get codexPath(){return mg()},isTransientPath:Me,execViaLoginShell:vg,buildSanitizedEnv:Qe};var Ri=require("crypto"),Du=require("fs/promises");var Tc=require("child_process"),Cc=require("fs");var lr=require("fs"),_c=require("path");var V=require("fs");function Sg(t,e,n,r){let s=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,s,r??i))}function on(t,e){if(!(0,V.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let r=(0,V.statSync)(t).size,s=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||r+s<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:r,afterBytes:r,reclaimedBytes:0};let i=Sg(r,e.maxBytes,s,e.retainBytes),o=(0,V.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,V.readSync)(o,l,0,i,r-i);let c=0;if(r>i){let u=l.indexOf(10);u>=0&&u+1<l.length&&(c=u+1)}a=l.subarray(c)}return(0,V.ftruncateSync)(o,0),a.length>0&&(0,V.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:r,afterBytes:a.length,reclaimedBytes:r-a.length}}finally{(0,V.closeSync)(o)}}function vc(t){let e=[on(t.auditPath,{maxBytes:t.auditMaxBytes}),on(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),on(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,r)=>n+r.reclaimedBytes,0)}}var Sc=!1,_g=new Set(["ts","event","source","appEvent","level"]);function bg(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Ig(t={}){let e={};for(let[n,r]of Object.entries(t))_g.has(n)||(e[n]=r);return e}function wg(t,e,n={},r){return{ts:r??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...Ig(n)}}function Ag(){Sc||((0,lr.mkdirSync)((0,_c.dirname)(St),{recursive:!0}),Sc=!0)}var ti=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,r={},s){this.write(wg(e,n,r,s))}write(e){if(!bg()){Ag();try{let n=JSON.stringify(e)+`
|
|
25
|
+
`;on(St,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,lr.appendFileSync)(St,n)}catch{}}}},I=new ti;var Ne=require("fs"),bc=require("os"),an=require("path"),Ic=require("crypto"),ni="claude-hook:",ln="x-vibelet-claude-hook-secret",cn={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function xg(t,e){return`#!/usr/bin/env node
|
|
26
26
|
const http = require('http');
|
|
27
27
|
const chunks = [];
|
|
28
28
|
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
@@ -36,16 +36,16 @@ process.stdin.on('end', () => {
|
|
|
36
36
|
headers: {
|
|
37
37
|
'Content-Type': 'application/json',
|
|
38
38
|
'Content-Length': body.length,
|
|
39
|
-
'${
|
|
39
|
+
'${ln}': ${JSON.stringify(e)}
|
|
40
40
|
}
|
|
41
41
|
}, (res) => { res.resume(); });
|
|
42
42
|
req.on('error', () => {});
|
|
43
43
|
req.end(body);
|
|
44
44
|
});
|
|
45
45
|
process.stdin.resume();
|
|
46
|
-
`}function
|
|
46
|
+
`}function Tg(t,e){return`#!/usr/bin/env node
|
|
47
47
|
const http = require('http');
|
|
48
|
-
const fallback = ${JSON.stringify(JSON.stringify(
|
|
48
|
+
const fallback = ${JSON.stringify(JSON.stringify(cn))};
|
|
49
49
|
const chunks = [];
|
|
50
50
|
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
51
51
|
process.stdin.on('end', () => {
|
|
@@ -58,7 +58,7 @@ process.stdin.on('end', () => {
|
|
|
58
58
|
headers: {
|
|
59
59
|
'Content-Type': 'application/json',
|
|
60
60
|
'Content-Length': body.length,
|
|
61
|
-
'${
|
|
61
|
+
'${ln}': ${JSON.stringify(e)}
|
|
62
62
|
}
|
|
63
63
|
}, (res) => {
|
|
64
64
|
const responseChunks = [];
|
|
@@ -79,40 +79,40 @@ process.stdin.on('end', () => {
|
|
|
79
79
|
req.end(body);
|
|
80
80
|
});
|
|
81
81
|
process.stdin.resume();
|
|
82
|
-
`}function
|
|
83
|
-
`)}function
|
|
84
|
-
`):""}function
|
|
85
|
-
`);this.buffer=
|
|
86
|
-
`),!0}setApprovalMode(e){this.approvalMode=e,
|
|
87
|
-
`);this.buffer=
|
|
88
|
-
`),!0}restorePendingApproval(e){let n=
|
|
89
|
-
`),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),
|
|
82
|
+
`}function wc(t,e){let n=(0,an.join)((0,bc.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,Ic.randomUUID)()}`);(0,Ne.mkdirSync)(n,{recursive:!0});let r=(0,an.join)(n,"settings.json"),s=(0,an.join)(n,"session_hook_forwarder.cjs"),i=(0,an.join)(n,"permission_hook_forwarder.cjs");return(0,Ne.writeFileSync)(s,xg(t,e),"utf8"),(0,Ne.writeFileSync)(i,Tg(t,e),"utf8"),(0,Ne.writeFileSync)(r,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(s)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:r,sessionScriptPath:s,permissionScriptPath:i}}function cr(t){if(t)try{(0,Ne.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var ne=M.child({module:"claude"}),kc="claude-permission-denial:",Cg=/\u001B\[[0-?]*[ -/]*[@-~]/g;function kg(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function ri(t){kg()&&or(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
|
|
83
|
+
`)}function Eg(t){return Array.isArray(t)?t.map(e=>!e||typeof e!="object"?"":typeof e.text=="string"?e.text:typeof e.content=="string"?e.content:"").filter(Boolean).join(`
|
|
84
|
+
`):""}function Rg(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function Pg(t){if(typeof t=="string")return t;let e=Eg(t);return e||(Rg(t)?"":JSON.stringify(t))}function Mg(t){return/requested permissions|haven't granted/i.test(t)}function Ac(t){return t.replace(Cg,"").replace(/\s+/g," ").trim()}function Lg(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function Ng(t){return/\brate limit\b/i.test(t)||/\busage limit\b/i.test(t)||/\bquota\b/i.test(t)||/\btoo many requests\b/i.test(t)||/\bcredit balance\b/i.test(t)||/\bcredits? remaining\b/i.test(t)||/\bmax(?:imum)? usage\b/i.test(t)}function Og(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function xc(t){let e=Ac(t.resultText??""),n=(t.stderrLines??[]).map(Ac).filter(Boolean).slice(-3),r=[e,...n].find(i=>!!i&&Ng(i));if(r)return Og(r);let s=[e,...n].find(i=>!!i&&!Lg(i));return s?t.exitCode!=null&&s!==e?`Claude exited with code ${t.exitCode}: ${s}`:s:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function ur(t){return t.startsWith(kc)}var un=class{proc=null;handler=null;sessionId="";buffer="";cwd="";approvalMode;sawFinalResult=!1;interrupted=!1;exitHandler=null;lastStderr=[];pendingPermissionDescriptions=new Map;emittedToolCallIds=new Set;replayPhase=!1;hookPort=null;hookSecret=null;hookFiles=null;buildClaudeEnv(){let e=S.buildSanitizedEnv();for(let n of Object.keys(e))n.startsWith("CMUX_")&&delete e[n];return e}async start(e,n,r){return this.cwd=e,this.approvalMode=r,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),ne.info({sessionId:this.sessionId,cwd:e},"session initialized"),I.emit("driver.spawn",{agent:"claude",sessionId:this.sessionId,cwd:e}),this.sessionId}configureHookBridge(e,n){this.hookPort=e,this.hookSecret=n}sendPrompt(e,n){let r=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];n&&r.push("--model",n),this.sessionId&&!this.sessionId.startsWith("pending_")&&r.push("--resume",this.sessionId),cr(this.hookFiles),this.hookFiles=null,this.approvalMode!=="plan"&&this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=wc(this.hookPort,this.hookSecret),r.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="plan"&&r.push("--permission-mode","plan"),this.approvalMode==="acceptEdits"&&r.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&r.push("--dangerously-skip-permissions");let s=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;ne.info({sessionId:this.sessionId,label:s,promptPreview:e.slice(0,50)},"running claude"),ri(`New message: ${e.slice(0,60)}`),this.sawFinalResult=!1,this.interrupted=!1,this.lastStderr=[],this.pendingPermissionDescriptions.clear(),this.emittedToolCallIds.clear(),this.replayPhase=!0;let i=S.claudePath,o,a=r;if(S.isTransientPath(i)||i==="claude"){let c=S.execViaLoginShell("claude",r);o=c.command,a=c.args}else o=i;this.proc=(0,Tc.spawn)(o,a,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",c=>{let u=c.message;c.code==="ENOENT"&&this.cwd&&!(0,Cc.existsSync)(this.cwd)&&(u=`Working directory does not exist: ${this.cwd}`),ne.error({sessionId:this.sessionId,error:u,cwd:this.cwd},"spawn error"),I.emit("driver.error",{agent:"claude",sessionId:this.sessionId,error:u}),this.handler?.({type:"error",sessionId:this.sessionId,message:u})}),this.buffer="",this.proc.stdout.on("data",c=>{this.buffer+=c.toString();let u=this.buffer.split(`
|
|
85
|
+
`);this.buffer=u.pop();for(let d of u)if(d.trim())try{this.handleRaw(JSON.parse(d))}catch{ne.warn({sessionId:this.sessionId,linePreview:d.slice(0,100)},"failed to parse stdout line")}}),this.proc.stderr.on("data",c=>{let u=c.toString().trim();u&&(ne.debug({sessionId:this.sessionId,stderr:u},"stderr"),this.lastStderr.push(u),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(c,u)=>{ne.info({sessionId:this.sessionId,exitCode:c,signal:u},"process exited");let d=this.interrupted;this.proc=null,cr(this.hookFiles),this.hookFiles=null,this.interrupted=!1,d&&!this.sawFinalResult?this.handler?.({type:"session.interrupted",sessionId:this.sessionId}):c&&c!==0&&!this.sawFinalResult&&(ne.error({sessionId:this.sessionId,exitCode:c,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:xc({stderrLines:this.lastStderr,exitCode:c})})),this.exitHandler?.(c)})}respondApproval(e,n){if(ne.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return ne.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let r=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(r+`
|
|
86
|
+
`),!0}setApprovalMode(e){this.approvalMode=e,ne.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),ne.info({sessionId:this.sessionId},"interrupted"))}stop(){if(!this.proc)return;this.proc.kill("SIGTERM");let e=this.proc;setTimeout(()=>{e.killed||e.kill("SIGKILL")},5e3).unref(),this.proc=null,cr(this.hookFiles),this.hookFiles=null}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}handleRaw(e){let n=e.type;if(n==="system"&&e.subtype==="init"){let r=e.session_id??"";r&&r!==this.sessionId&&(ne.info({oldSessionId:this.sessionId,newSessionId:r},"session ID resolved"),I.emit("driver.init",{agent:"claude",sessionId:r}),this.sessionId=r);return}if(this.handler)switch(n){case"assistant":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)s.type==="tool_use"&&!this.emittedToolCallIds.has(s.id)&&(this.emittedToolCallIds.add(s.id),this.handler({type:"tool.call",sessionId:this.sessionId,toolName:s.name,input:s.input??{},toolCallId:s.id}));break}case"user":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_result"){let i=Pg(s.content);if(!i)continue;if(s.is_error===!0&&typeof s.tool_use_id=="string"&&Mg(i)){this.pendingPermissionDescriptions.set(s.tool_use_id,i);continue}this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:s.tool_use_id,output:i})}break}case"control_request":{this.replayPhase=!1;let r=e.request;r?.subtype==="can_use_tool"&&(I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:r.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:r.tool_name??"unknown",input:r.input??{},description:r.description??r.title??""}));break}case"stream_event":{this.replayPhase=!1;let r=e.event;r?.type==="content_block_delta"&&r?.delta?.type==="text_delta"&&r?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:r.delta.text});break}case"result":{this.replayPhase=!1,this.sawFinalResult=!0;let r=typeof e.result=="string"?e.result:"";if(e.is_error){ri("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:xc({resultText:r,stderrLines:this.lastStderr})});break}let s=Array.isArray(e.permission_denials)?e.permission_denials:[];if(s.length>0){let a=s[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,c=typeof a.tool_name=="string"?a.tool_name:"unknown",u=a.tool_input&&typeof a.tool_input=="object"?a.tool_input:{},d=this.pendingPermissionDescriptions.get(l)??`Claude requested permissions to use ${c}.`;I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:c}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${kc}${l}`,toolName:c,input:u,description:d})}this.pendingPermissionDescriptions.clear();let i=e.total_cost_usd,o=e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens}:void 0;ri("Claude finished. Run `claude --continue` to continue on desktop."),I.emit("session.done",{agent:"claude",sessionId:this.sessionId,cost:i,usage:o}),this.handler({type:"session.done",sessionId:this.sessionId,cost:i,usage:o});break}}}};var Mc=require("child_process"),Lc=require("fs");var si=class{counters=new Map;timers=new Map;gauges=new Map;startTime=Date.now();logInterval=null;increment(e,n={}){this.counters.has(e)||this.counters.set(e,[]);let r=this.counters.get(e),s=JSON.stringify(n),i=r.find(o=>JSON.stringify(o.labels)===s);i?i.value++:r.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let r=Math.round(performance.now()-n),s=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return s.count++,s.totalMs+=r,s.minMs=Math.min(s.minMs,r),s.maxMs=Math.max(s.maxMs,r),s.lastMs=r,this.timers.set(e,s),r}}snapshot(){let e={};for(let[s,i]of this.counters)e[s]=i.map(o=>({...o}));let n={};for(let[s,i]of this.timers)n[s]={...i,minMs:i.minMs===1/0?0:i.minMs};let r={};for(let[s,i]of this.gauges)r[s]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:r}}startPeriodicLog(e=6e4){this.logInterval||(this.logInterval=setInterval(()=>{let n=this.snapshot();M.info({metrics:n},"periodic metrics snapshot")},e),this.logInterval.unref())}stopPeriodicLog(){this.logInterval&&(clearInterval(this.logInterval),this.logInterval=null)}},w=new si;var Ec=require("node:fs"),ii=require("node:path"),Bg="@vibelet/cli";function Dg(t){try{let e=JSON.parse((0,Ec.readFileSync)(t,"utf8"));if(e.name===Bg&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function Hg(){return"1.0.5"}var It=Hg();var T=M.child({module:"codex"});function Fg(t){switch(t.kind){case"request-user-input-approval":return{provider:"codex",kind:t.kind,rpcId:t.rpcId,questionId:t.questionId,approveLabel:t.approveLabel,denyLabel:t.denyLabel};default:return{provider:"codex",kind:t.kind,rpcId:t.rpcId}}}function Ug(t){let e=t.approvalContext;if(!e||e.provider!=="codex")return null;switch(e.kind){case"command-execution":return{kind:e.kind,responseKind:"v2",rpcId:e.rpcId,toolName:t.toolName,input:t.input};case"file-change":return{kind:e.kind,responseKind:"v2",rpcId:e.rpcId,toolName:t.toolName,input:t.input};case"request-user-input-approval":return!e.questionId||!e.approveLabel||!e.denyLabel?null:{kind:e.kind,rpcId:e.rpcId,questionId:e.questionId,approveLabel:e.approveLabel,denyLabel:e.denyLabel,toolName:t.toolName,input:t.input};case"exec-command-legacy":return{kind:e.kind,rpcId:e.rpcId,toolName:t.toolName,input:t.input};case"apply-patch-legacy":return{kind:e.kind,rpcId:e.rpcId,toolName:t.toolName,input:t.input};default:return null}}function $(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function E(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}var qg=new Set(["aborted","interrupted","cancelled","canceled"]);function Wg(t){let e=E(t);return e?e.toLowerCase():null}function jg(t){let e=E(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function oi(t){return t?E(t.itemId)??E(t.id)??E(t.callId)??E(t.call_id):null}function ai(t,e){let n={};for(let[r,s]of Object.entries(t))e.includes(r)||(n[r]=s);return n}function Nc(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function Oc(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function Gg(t){if(!Array.isArray(t))return null;for(let e of t){let n=$(e);if(!n)continue;let r=E(n.id),s=Array.isArray(n.options)?n.options.map(l=>$(l)).filter(l=>!!l):[];if(!r||s.length===0)continue;let i=s.map(l=>E(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>Nc(l))??i[0],a=i.find(l=>Oc(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:r,approveLabel:o,denyLabel:a}}return null}function Vg(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(s=>$(s)).filter(s=>!!s).flatMap(s=>(Array.isArray(s.options)?s.options:[]).map(o=>$(o)).filter(o=>!!o).map(o=>E(o.label)).filter(o=>!!o)),n=e.some(s=>Nc(s)),r=e.some(s=>Oc(s));return n&&r}function Rc(t){let e=jg(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:ai(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:ai(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=E(t.server),r=E(t.tool)??E(t.name);return r?{toolName:n?`mcp__${n}__${r}`:r,input:$(t.arguments)??$(t.input)??{}}:null}return null}function $g(t){if(!Array.isArray(t))return"";for(let e of t){let n=$(e);if(!n)continue;let r=E(n.question)??E(n.header);if(r)return r}return""}function Pc(t,e){return t==="autoApprove"?{approvalPolicy:"never",sandbox:"danger-full-access",sandboxPolicy:{type:"dangerFullAccess"}}:t==="plan"?{approvalPolicy:"on-request",sandbox:"workspace-write",sandboxPolicy:{type:"workspaceWrite",writableRoots:[],readOnlyAccess:{type:"fullAccess"},networkAccess:!0,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}}:{approvalPolicy:"on-request",sandbox:"workspace-write",sandboxPolicy:{type:"workspaceWrite",writableRoots:[e],readOnlyAccess:{type:"fullAccess"},networkAccess:!0,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}}}var dn=class{proc=null;handler=null;exitHandler=null;buffer="";rpcId=0;pending=new Map;threadId="";lastStderr=[];approvalRequests=new Map;toolContextByCallId=new Map;turnStartInFlight=!1;interruptRequestedDuringTurnStart=!1;approvalMode;cwd="";model;async start(e,n,r){this.approvalMode=r,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let s=S.codexPath,i,o=this.buildSpawnArgs();if(S.isTransientPath(s)||s==="codex"){let u=S.execViaLoginShell("codex",o);i=u.command,o=u.args,T.info({spawnCmd:i,argsPreview:o.slice(0,2)},"spawning via login shell")}else i=s,T.info({spawnCmd:i,args:o},"spawning");I.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,Mc.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:S.buildSanitizedEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",u=>{let d=u.message;u.code==="ENOENT"&&e&&!(0,Lc.existsSync)(e)&&(d=`Working directory does not exist: ${e}`),T.error({error:d,cwd:e},"spawn error"),I.emit("driver.error",{agent:"codex",error:d})}),this.proc.stdout.on("data",u=>{this.buffer+=u.toString();let d=this.buffer.split(`
|
|
87
|
+
`);this.buffer=d.pop();for(let f of d)if(f.trim())try{this.handleRaw(JSON.parse(f))}catch{T.warn({linePreview:f.slice(0,200)},"failed to parse stdout line")}}),this.proc.stderr.on("data",u=>{let d=u.toString().trim();d&&(T.debug({stderr:d},"stderr"),this.lastStderr.push(d),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",u=>{T.info({threadId:this.threadId,exitCode:u},"process exited"),u&&u!==0&&T.error({threadId:this.threadId,exitCode:u,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.proc=null,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;for(let[,{reject:d}]of this.pending)d(new Error(`Codex process exited with code ${u}`));this.pending.clear(),this.exitHandler?.(u),u&&this.handler&&this.threadId&&this.handler({type:"error",sessionId:this.threadId,message:`Codex process exited with code ${u}`})});let l=w.startTimer("rpc.duration");await this.rpc("initialize",{clientInfo:{name:"@vibelet/cli",version:It},capabilities:{experimentalApi:!0}}),l(),this.rpcNotify("initialized",{});let c=Pc(this.approvalMode,e);if(n){let u=await this.rpc("thread/resume",{threadId:n,approvalPolicy:c.approvalPolicy,sandbox:c.sandbox,persistExtendedHistory:!0});this.threadId=u?.thread?.id??n,T.info({threadId:this.threadId},"thread resumed"),I.emit("driver.init",{agent:"codex",sessionId:this.threadId})}else{let u=await this.rpc("thread/start",{cwd:e,approvalPolicy:c.approvalPolicy,sandbox:c.sandbox,experimentalRawEvents:!0,persistExtendedHistory:!0});this.threadId=u?.thread?.id??u?.threadId??"",T.info({threadId:this.threadId},"thread created"),I.emit("driver.init",{agent:"codex",sessionId:this.threadId})}return this.threadId}setModel(e){this.model=e}buildSpawnArgs(){let e=["app-server","--listen","stdio://"];return this.model&&e.push("-m",this.model),e}sendPrompt(e,n){let r=Pc(this.approvalMode,this.cwd||process.cwd());this.turnStartInFlight=!0,this.interruptRequestedDuringTurnStart=!1,T.info({threadId:this.threadId,promptPreview:e.slice(0,50)},"turn/start"),this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}],approvalPolicy:r.approvalPolicy,sandboxPolicy:r.sandboxPolicy}).then(s=>{T.debug({resultPreview:JSON.stringify(s).slice(0,200)},"turn/start result"),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart&&(this.interruptRequestedDuringTurnStart=!1,this.requestTurnInterrupt())}).catch(s=>{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,T.error({threadId:this.threadId,error:s.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:s.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let r=this.approvalRequests.get(e),s=r?.rpcId??Number(e);if(!Number.isFinite(s))return!1;let i;if(!r)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(r.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[r.questionId]:{answers:[n?r.approveLabel:r.denyLabel]}}};break;case"exec-command-legacy":case"apply-patch-legacy":i={decision:n?"approved":"denied"};break;default:i={decision:n?"accept":"decline"};break}this.approvalRequests.delete(e)}return T.info({threadId:this.threadId,rpcId:s,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:s,result:i})+`
|
|
88
|
+
`),!0}restorePendingApproval(e){let n=Ug(e);n&&this.approvalRequests.set(e.requestId,n)}interrupt(){this.turnStartInFlight&&(this.interruptRequestedDuringTurnStart=!0),this.requestTurnInterrupt()}setApprovalMode(e){this.approvalMode=e,T.info({approvalMode:e},"approval mode updated (takes effect on subsequent turns)")}stop(){if(!this.proc)return;this.proc.kill("SIGTERM");let e=this.proc;setTimeout(()=>{e.killed||e.kill("SIGKILL")},5e3).unref(),this.proc=null,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;for(let[,{reject:n}]of this.pending)n(new Error("Process stopped"));this.pending.clear()}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}rpc(e,n){let r=++this.rpcId,s=w.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(r,{resolve:a=>{s(),i(a)},reject:a=>{s(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(r),s(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:r,params:n})+`
|
|
89
|
+
`),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),T.error({method:e,rpcId:r,threadId:this.threadId},"RPC timeout"),s(),o(new Error(`RPC timeout: ${e}`)))},3e4).unref()})}requestTurnInterrupt(){this.rpc("turn/interrupt",{threadId:this.threadId}).catch(()=>{})}rpcNotify(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,params:n})+`
|
|
90
90
|
`)}writeServerRequestError(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:e,error:{code:-32601,message:n}})+`
|
|
91
|
-
`)}resolveToolContext(e){let n=$(e?.item)??e??null,r=
|
|
92
|
-
`)){let n=
|
|
93
|
-
`).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function
|
|
94
|
-
`).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}async function
|
|
95
|
-
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),s=n[2];if(!
|
|
96
|
-
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let r=Number(n[n.length-1]),s=n.slice(1,n.length-1).join(",");if(!Number.isFinite(r)||r===0||!Gc(s))return null;let i=At(s);return i?{pid:r,command:s,agent:i.agent}:null}).filter(e=>!!e)}async function bm(){return process.platform==="win32"?_m():Sm()}async function wm(){let e=(await bm()).filter(n=>mm(n.pid));return Promise.all(e.map(async n=>({pid:n.pid,agent:n.agent,command:n.command,cwd:await ym(n.pid),sessionFiles:await vm(n.pid)})))}function Im(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Am(t,e){if(!e)return null;try{if(t==="claude"){let o=(0,Ne.join)((0,ui.homedir)(),".claude","projects",Im(e)),l=(await(0,It.readdir)(o).catch(()=>[])).filter(f=>f.endsWith(".jsonl"));if(l.length===0)return null;let c=null;if(await Promise.all(l.map(async f=>{let p=await(0,It.stat)((0,Ne.join)(o,f)).catch(()=>null);p&&(!c||p.mtimeMs>c.mtimeMs)&&(c={name:f,mtimeMs:p.mtimeMs})})),!c)return null;let u=(0,Ne.join)(o,c.name),d=xt(t,u);return d?{sessionId:d,filePath:u}:null}let n=(0,Ne.join)((0,ui.homedir)(),".codex","sessions"),r=null;async function s(o){let a=await(0,It.readdir)(o,{withFileTypes:!0}).catch(()=>[]);for(let l of a){let c=(0,Ne.join)(o,l.name);if(l.isDirectory())await s(c);else if(l.name.endsWith(".jsonl")){let u=await(0,It.stat)(c).catch(()=>null);if(!u||r&&u.mtimeMs<=r.mtimeMs)continue;let d=await fn(c,t);if(!d||d.cwd!==e)continue;r={path:c,mtimeMs:u.mtimeMs,sessionId:d.sessionId}}}}await s(n);let i=r;return i?{sessionId:i.sessionId,filePath:i.path}:null}catch{return null}}async function xm(){let t=await wm(),e=await Promise.all(t.map(async r=>{let s=pm(r);if(s)return qc(s);if(fm(r.agent,r.command))return null;let i=await Am(r.agent,r.cwd);return i?qc({agent:r.agent,pid:r.pid,cwd:r.cwd,command:r.command,sessionId:i.sessionId,confidence:"low",sessionFilePath:i.filePath}):null})),n=gm(e.filter(r=>r!==null));return dn={value:n,expiresAt:Date.now()+rm},n}async function Vc(){return dn&&Date.now()<dn.expiresAt?dn.value:un||(un=xm().finally(()=>{un=null}),un)}var Qe=M.child({module:"inventory"}),Tm=6e3,km=1e4,Cm={listScannedSessions:mn,scanRunningSessions:Vc,searchSessionContent:Zc},ie=Em(),hn=null,hr=0,mr=0,gr=0,fi=0,pi=new Set;function Em(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function Rm(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,branch:t.branch,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[...t.sources].sort(),runtime:{state:t.runtime.state,confidence:t.runtime.confidence,resumeMode:t.runtime.resumeMode,pid:t.runtime.pid,command:t.runtime.command,isResponding:t.runtime.isResponding,needsAttention:t.runtime.needsAttention},managed:t.managed,approvalMode:t.approvalMode,observedApprovalMode:t.observedApprovalMode})}function Pm(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,pid:t.pid,command:t.command,confidence:t.confidence,isResponding:t.isResponding,approvalMode:t.approvalMode})}function $c(t){return JSON.stringify({scannedSessions:t.scannedSessions.map(Rm).sort(),runningSessions:t.runningSessions.map(Pm).sort()})}function Mm(){for(let t of pi)try{t()}catch(e){Qe.warn({error:String(e)},"session inventory backfill listener failed")}}function pn(){w.gauge("session.inventory.external_cached_sessions",ie.scannedSessions.length),w.gauge("session.inventory.external_running_sessions",ie.runningSessions.length),w.gauge("session.inventory.backfill_inflight",hn?1:0)}function Kc(t){return pi.add(t),()=>{pi.delete(t)}}function Qc(){return{cachedSessions:ie.scannedSessions.length,runningSessions:ie.runningSessions.length,cacheAgeMs:ie.refreshedAt?Math.max(0,Date.now()-ie.refreshedAt):void 0,backfillInFlight:!!hn,lastBackfillDurationMs:gr||void 0,lastBackfillCompletedAt:mr?new Date(mr).toISOString():void 0,lastBackfillAppliedAt:fi?new Date(fi).toISOString():void 0}}pn();var Tt={daemonActive:3,externalRunning:2,idle:1},zc={high:3,medium:2,low:1};function Xc(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function Lm(t,e){let n=t.runtime.needsAttention?1:0,r=e.runtime.needsAttention?1:0,s=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return r-n||i-s||Tt[e.runtime.state]-Tt[t.runtime.state]||Xc(t,e)}function Nm(t,e){return Tt[e.state]>Tt[t.state]?e:Tt[e.state]<Tt[t.state]?t:zc[e.confidence]>zc[t.confidence]?e:t}function Om(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function Bm(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function Dm(t,e){return e?t?!(wt(e)&&!wt(t)):!0:!1}function hi(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function Hm(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["record"],runtime:{...hi()},managed:t.managed,approvalMode:t.approvalMode}}function Fm(t,e){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:e,lastActivityAt:e,sources:["process"],runtime:{state:"externalRunning",confidence:t.confidence,resumeMode:"resumeSession",pid:t.pid,command:t.command,isResponding:t.isResponding},observedApprovalMode:t.approvalMode}}function Um(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["daemon"],runtime:{state:"daemonActive",confidence:"high",resumeMode:"reuseDriver",needsAttention:t.needsAttention||void 0,isResponding:t.isResponding||void 0},managed:t.managed,approvalMode:t.approvalMode}}function qm(t,e){for(let n of e){let r=`${n.agent}:${n.sessionId}`,s=t.get(r);if(!s){t.set(r,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=Dm(s.title,n.title)?n.title:s.title,o=n.cwd||s.cwd,a=n.branch??s.branch,l=Nm(s.runtime,n.runtime),c=s.sources.slice();for(let p of n.sources)c.includes(p)||c.push(p);let u=n.sources.includes("process"),d=s.sources.includes("process")&&!s.sources.includes("daemon"),f=u?s.lastActivityAt:d?n.lastActivityAt:Bm(s.lastActivityAt,n.lastActivityAt);t.set(r,{...s,cwd:o,branch:a,title:i,createdAt:Om(s.createdAt,n.createdAt),lastActivityAt:f,sources:c,runtime:l,managed:s.managed||n.managed,approvalMode:n.approvalMode??s.approvalMode,observedApprovalMode:n.observedApprovalMode??s.observedApprovalMode})}}function Wm(...t){let e=new Map;for(let n of t)qm(e,n);return[...e.values()]}function jm(t,e,n,r,s){let i=r?.toLowerCase(),o=t.filter(a=>{if(e&&a.agent!==e||n&&a.cwd!==n)return!1;if(i){let l=(a.title??"").toLowerCase(),c=(a.cwd??"").toLowerCase(),u=l.includes(i)||c.includes(i),d=s?.has(a.sessionId)??!1;if(!u&&!d)return!1}return!0});return r&&Qe.info({total:t.length,filtered:o.length,search:r,contentMatchIds:s?.size??0},"filter applied"),o}function Gm(t,e){if(!e)return 0;let n=0,r=t.length;for(;n<r;){let s=n+r>>1,i=t[s];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?r=s:n=s+1}if(n>0){let s=t[n-1];if(s.lastActivityAt===e.lastActivityAt&&s.sessionId===e.sessionId)return n}return 0}function Yc(t,e,n,r,s,i,o){let a=i?1/0:Math.max(1,e||50),l=Wm(t.sessionRecords.map(Hm),t.scannedSessions,t.runningSessions.map(m=>Fm(m,t.scannedAt)),t.activeSessions.map(Um)),c=t.deletedSessionIds?.size?l.filter(m=>!t.deletedSessionIds?.has(m.sessionId)):l,u=jm(c,r,s,i,o),d=u.filter(m=>m.runtime.state!=="idle"||m.managed).sort(Lm),f=u.filter(m=>m.runtime.state==="idle"&&!m.managed).sort(Xc),p=Gm(f,n),g=f.slice(p,p+a),y=p+g.length<f.length&&g.length>0?{lastActivityAt:g[g.length-1].lastActivityAt,sessionId:g[g.length-1].sessionId}:void 0;return{sessions:n?g:[...d,...g],nextCursor:y}}async function Jc(t){if(t.sessions.length===0)return t;let e=await Hc(t.sessions.map(s=>s.cwd)),n=!1,r=t.sessions.map(s=>{let i=e.get(s.cwd);return s.branch===i?s:(n=!0,{...s,branch:i})});return n?{...t,sessions:r}:t}function gn(t,e,n,r,s){return new Promise(i=>{let o=Date.now(),a=!1,l=null,c=u=>{a||(a=!0,l&&(clearTimeout(l),l=null),i(u))};l=setTimeout(()=>{if(a)return;let u=Array.isArray(s)&&s.length>0;Qe.warn({source:t,timeoutMs:r,durationMs:Date.now()-o,partial:u?s.length:0},u?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),c(u?s:n)},r),typeof l=="object"&&"unref"in l&&l.unref(),e().then(u=>{c(u)}).catch(u=>{a||Qe.warn({source:t,error:String(u)},"session inventory source failed, using fallback"),c(n)})})}function Vm(t=Date.now()){return ie.refreshedAt===0||t-ie.refreshedAt>=km}async function $m(t,e){let n=new Date().toISOString(),r=[],[s,i]=await Promise.all([gn("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,r),[],e,r),gn("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return{scannedSessions:s,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function zm(t,e){if(hn)return;let n=hr,r=w.startTimer("session.inventory.backfill_latency_ms");hn=$m(t,e).then(s=>{if(n!==hr)return;let i=$c(ie);ie=s;let o=$c(s),a=r();gr=a,mr=Date.now(),pn(),i!==o&&(fi=Date.now(),w.increment("session.inventory.backfill_applied"),Qe.info({durationMs:a,scanned:s.scannedSessions.length,running:s.runningSessions.length},"session inventory external backfill applied"),Mm())}).catch(s=>{n===hr&&(gr=r(),mr=Date.now(),pn(),Qe.warn({error:String(s),durationMs:gr},"session inventory external backfill failed"))}).finally(()=>{n===hr&&(hn=null,pn())}),pn()}async function yr(t){let e={...Cm,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??Tm);if(!t.search){let u=w.startTimer("session.inventory.fast_path_latency_ms");Vm()&&zm(e,n);let d=ie,f=Yc({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:d.scannedSessions,runningSessions:d.runningSessions,scannedAt:d.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd),p=await Jc(f);return u(),p}let r=[],s=new Date().toISOString(),i=t.search,[o,a,l]=await Promise.all([gn("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),gn("process.running_sessions",()=>e.scanRunningSessions(),[],n),gn("scanner.search_content",()=>e.searchSessionContent(i,t.agent),void 0,n)]);Qe.info({search:t.search,contentMatches:l?.size??0,scanned:o.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let c=Yc({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:o,runningSessions:a,scannedAt:s,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,i,l);return Jc(c)}var Oe=M.child({module:"scanner"});function iu(t){let e=new Map;return{get(n){let r=e.get(n);if(r){if(Date.now()>r.expiresAt){e.delete(n);return}return r.value}},set(n,r){e.set(n,{value:r,expiresAt:Date.now()+t})},clear(){e.clear()}}}var ou=3e4,vi=iu(ou),Si=iu(ou),gi=new Map,mi=new Map,kt=24;function Sr(){vi.clear(),Si.clear()}function au(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Ct(t,e,n){if(t.length===0)return[];let r=Math.max(1,Math.min(e,t.length)),s=new Array(t.length),i=0;return await Promise.all(Array.from({length:r},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;s[o]=await n(t[o],o)}})),s}function*lu(t,e){let n=0,r=0;for(;n<t.length&&r<e;){let s=t.indexOf(`
|
|
97
|
-
`,n);s===-1&&(s=t.length);let i=t.substring(n,s);n=s+1,!(i.length===0||i.trim().length===0)&&(yield i,r+=1)}}var
|
|
98
|
-
`)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=e==="claude"?
|
|
91
|
+
`)}resolveToolContext(e){let n=$(e?.item)??e??null,r=oi(n);if(!r)return null;let s=n?Rc(n):null;if(s)return this.toolContextByCallId.set(r,s),{callId:r,toolContext:s};let i=this.toolContextByCallId.get(r);return i?{callId:r,toolContext:i}:null}createFallbackInput(e,n){return e?ai(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,r){if(this.approvalRequests.set(e,n),I.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){T.warn({threadId:this.threadId,requestId:e,toolName:n.toolName},"approval request received without handler"),this.respondApproval(e,!1)||this.writeServerRequestError(n.rpcId,"Approval handler unavailable");return}this.handler({type:"approval.request",sessionId:this.threadId,requestId:e,toolName:n.toolName,input:n.input,description:r,approvalContext:Fg(n)})}handleServerRequest(e,n,r){let s=String(n),i=this.resolveToolContext(r);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(s,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},E(r?.reason)??E(r?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(s,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},E(r?.reason)??E(r?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=r?.questions;if(!Vg(o)){T.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=Gg(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(s,{kind:"request-user-input-approval",rpcId:n,questionId:a.questionId,approveLabel:a.approveLabel,denyLabel:a.denyLabel,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","questions"])},$g(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(s,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,[])},E(r?.reason)??E(r?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(s,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,[])},E(r?.reason)??E(r?.description)??"");return}if(e==="item/permissions/requestApproval"){T.warn({threadId:this.threadId,rpcId:n},"unsupported permissions approval request"),this.writeServerRequestError(n,"Unsupported permissions approval request");return}T.warn({threadId:this.threadId,rpcId:n,method:e},"unsupported server request"),this.writeServerRequestError(n,`Unsupported server request: ${e}`)}handleRaw(e){if(T.debug({method:e.method??"(response)",rpcId:e.id??"-"},"handleRaw"),e.id!=null&&!e.method&&this.pending.has(e.id)){let s=this.pending.get(e.id);this.pending.delete(e.id),e.error?s.reject(new Error(e.error.message??"RPC error")):s.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,r=$(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,r??void 0);return}switch(n&&T.debug({method:n,paramsPreview:JSON.stringify(r??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let s=r?.text??r?.delta??r?.content??"";s&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:s}):s||T.debug({paramsKeys:Object.keys(r??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":r?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:r.itemId??"",output:String(r.output)});break;case"item/started":{let s=$(r?.item),i=oi(s),o=s?Rc(s):null;i&&o&&(this.toolContextByCallId.set(i,o),this.handler&&this.handler({type:"tool.call",sessionId:this.threadId,toolName:o.toolName,input:o.input,toolCallId:i}));break}case"item/completed":{let s=$(r?.item)??r,i=oi(s);i&&this.toolContextByCallId.delete(i);break}case"turn/aborted":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let s=E(r?.reason)??E($(r?.turn)?.reason);T.info({threadId:this.threadId,reason:s},"turn interrupted"),I.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,...s?{reason:s}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}case"turn/completed":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let s=$(r?.turn),i=Wg(s?.status),o=$(r?.usage),a=o?{inputTokens:Number(o.input_tokens??o.inputTokens??0),outputTokens:Number(o.output_tokens??o.outputTokens??0)}:void 0;if(i&&qg.has(i)){T.info({threadId:this.threadId,status:i},"turn interrupted"),I.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,status:i,...a?{usage:a}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}T.info({threadId:this.threadId,status:i??"completed"},"turn completed"),I.emit("session.done",{agent:"codex",sessionId:this.threadId,usage:a}),this.handler&&this.handler({type:"session.done",sessionId:this.threadId,usage:a});break}default:n&&T.debug({method:n},"unhandled notification");break}}};var R=require("fs/promises"),wi=require("fs"),Ai=require("readline"),P=require("path"),be=require("os");var zg=new Set(["New session","Resumed session","Untitled session"]),Yg=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function Jg(t){return t.replace(/\s+/g," ").trim()}function dr(t){return typeof t!="string"?void 0:Jg(t)||void 0}function Bc(t){let e=dr(t);return e?/^[0-9a-f]{8,}$/i.test(e)||/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)||/^agent-[a-z0-9_-]{6,}$/i.test(e):!1}function wt(t){let e=dr(t);return!e||zg.has(e)||Bc(e)}function Kg(t){for(let e of t.replace(/\r/g,"").split(`
|
|
92
|
+
`)){let n=dr(e);if(n&&!Qg(n)&&!Xg(n))return n}}function Qg(t){return Yg.some(e=>t.startsWith(e))}function Xg(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function Zg(t){for(let e=0;e<t.length;e+=1){let n=t[e];if(n==="\u3002"||n==="\uFF01"||n==="\uFF1F"||n==="\uFF1B")return e+1;if(n==="."||n==="!"||n==="?"||n===";"){let r=t[e+1];if(!r||/\s/.test(r))return e+1}}return-1}function li(t,e=80){if(typeof t!="string")return;let n=Kg(t);if(!n)return;let r=Zg(n),i=(r>0?n.slice(0,r):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||Bc(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function Xe(t,e){for(let n of t){let r=dr(n);if(!(!r||wt(r)))return r}return li(e)}var Fc=require("child_process"),Uc=require("util");var qc=(0,Uc.promisify)(Fc.execFile),Wc=5e3,em=2500,tm=3e3,jc=8,fr=new Map,ci=new Map,Dc=null;function nm(t){let e=fr.get(t);return e?Date.now()>e.expiresAt?(fr.delete(t),null):e.value??void 0:null}function rm(t,e){if(e===void 0){fr.delete(t);return}fr.set(t,{value:e,expiresAt:Date.now()+Wc})}async function sm(t){if(!t)return;if(Dc)return Dc(t);let e=[["branch","--show-current"],["rev-parse","--abbrev-ref","HEAD"]];for(let n of e)try{let{stdout:r}=await qc("git",["-C",t,...n],{env:Qe(),timeout:em,maxBuffer:65536}),s=r.trim();if(s&&s!=="HEAD")return s}catch{}}async function im(t){let e=nm(t);if(e!==null)return e;let n=ci.get(t);if(n)return n;let r=sm(t).then(s=>(rm(t,s),s)).finally(()=>{ci.delete(t)});return ci.set(t,r),r}async function Gc(t,e,n){if(t.length===0)return;let r=Math.max(1,Math.min(e,t.length)),s=0;await Promise.all(Array.from({length:r},async()=>{for(;;){let i=s;if(s+=1,i>=t.length)return;await n(t[i])}}))}async function Vc(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Gc(e,jc,async r=>{n.set(r,await im(r))}),n}var di=new Map,ui=new Map,Hc=null;function om(t,e){if(e===void 0){di.delete(t);return}di.set(t,{value:e,expiresAt:Date.now()+Wc})}async function am(t){if(t){if(Hc)return Hc(t);for(let e=0;e<2;e+=1)try{let{stdout:n}=await qc("git",["-C",t,"diff","HEAD","--shortstat"],{env:Qe(),timeout:tm,maxBuffer:65536}),r=n.trim();if(!r)return;let s=r.match(/(\d+) insertion/),i=r.match(/(\d+) deletion/),o=s?Number(s[1]):0,a=i?Number(i[1]):0;return o===0&&a===0?void 0:{additions:o,deletions:a}}catch{if(e===1)return}}}async function lm(t){let e=di.get(t);if(e&&Date.now()<=e.expiresAt)return e.value;let n=ui.get(t);if(n)return n;let r=am(t).then(s=>(om(t,s),s)).finally(()=>{ui.delete(t)});return ui.set(t,r),r}async function $c(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Gc(e,jc,async r=>{n.set(r,await lm(r))}),n}var Kc=require("child_process"),At=require("fs/promises"),Oe=require("path"),fi=require("os"),Qc=require("util");var cm=(0,Qc.promisify)(Kc.execFile),zc=M.child({module:"process-scanner"}),Yc=1500,um="(^|[^[:alnum:]_.-])(claude|codex)([^[:alnum:]_.-]|$)",dm=/(^|[^A-Za-z0-9_.-])(claude|codex)([^A-Za-z0-9_.-]|$)/,fm=15e3,pn=null,fn=null;function hr(){pn=null}function pm(t){return t.replace(/^['"]|['"]$/g,"")}function hm(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(pm)}function gm(t){for(let e=0;e<t.length;e+=1){let n=t[e],r=(0,Oe.basename)(n);if(r==="claude"||r==="codex")return{agent:r,args:t.slice(e+1)};if(/\s/.test(n)){let s=xt(n);if(s)return s}}return null}function xt(t){return gm(hm(t))}function Xc(t){return dm.test(t)}function mm(t,e){let n=xt(e);if(!n||n.agent!==t)return null;let{args:r}=n;if(t==="claude"){for(let s=0;s<r.length;s+=1){let i=r[s];if((i==="--resume"||i==="--session-id")&&r[s+1]&&!r[s+1].startsWith("-"))return r[s+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(r[0]!=="resume")return null;for(let s=1;s<r.length;s+=1){let i=r[s];if(!i.startsWith("-"))return i}return null}function ym(t){if(t.includes("--dangerously-skip-permissions"))return"autoApprove";for(let e=0;e<t.length;e+=1){let n=t[e],r=t[e+1],s=n==="--permission-mode"?r:n.startsWith("--permission-mode=")?n.slice(18):void 0;if(s==="plan")return"plan";if(s==="acceptEdits")return"acceptEdits";if(s==="default")return"normal"}}function vm(t){if(t.includes("--dangerously-bypass-approvals-and-sandbox"))return"autoApprove"}function Sm(t,e){let n=xt(e);if(!(!n||n.agent!==t))return t==="claude"?ym(n.args):vm(n.args)}function pr(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function _m(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function bm(t,e){let n=xt(e);return!n||n.agent!==t?!1:n.args.includes("--continue")||n.args.includes("-c")}function Im(t){let e=[...new Set(t.sessionFiles)].filter(i=>_m(t.agent,i)),n=mm(t.agent,t.command),r=Sm(t.agent,t.command);if(n)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:n,confidence:"high",...r?{approvalMode:r}:{},...e.length===1?{sessionFilePath:e[0]}:{}};if(e.length!==1)return null;let s=Tt(t.agent,e[0]);return s?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:s,confidence:"medium",...r?{approvalMode:r}:{},sessionFilePath:e[0]}:null}function wm(t,e){let n=t,r=e;(pr(e.confidence)>pr(t.confidence)||pr(e.confidence)===pr(t.confidence)&&e.pid<t.pid)&&(n=e,r=t);let s=n.approvalMode??r.approvalMode;return{...n,cwd:n.cwd||r.cwd,...s?{approvalMode:s}:{},title:n.title??r.title,sessionFilePath:n.sessionFilePath??r.sessionFilePath,isResponding:n.isResponding??r.isResponding}}function Am(t){let e=new Map;for(let n of t){let r=`${n.agent}:${n.sessionId}`,s=e.get(r);e.set(r,s?wm(s,n):n)}return[...e.values()]}function xm(t){try{return process.kill(t,0),!0}catch{return!1}}async function gr(t,e){try{let{stdout:n}=await cm(t,e,{maxBuffer:8388608,timeout:Yc});return n}catch(n){let r=String(n);return r.includes("ESRCH")||r.includes("No such process")?zc.debug({file:t,args:e,error:r},"process scan command skipped \u2014 process exited"):zc.warn({file:t,args:e,timeoutMs:Yc,error:r},"process scan command failed"),""}}async function Jc(t){if(!t.sessionFilePath)return t;let e=await hn(t.sessionFilePath,t.agent);if(!e)return null;let n=await pi(t.sessionFilePath,t.agent),r=e.approvalMode??t.approvalMode;return{...t,cwd:t.cwd||e.cwd,...r?{approvalMode:r}:{},title:t.title??e.title,isResponding:n.isResponding}}async function Tm(t){return process.platform==="win32"?"":(await gr("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
|
|
93
|
+
`).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function Cm(t){if(process.platform==="win32")return[];let n=(await gr("lsof",["-p",String(t),"-Fn"])).split(`
|
|
94
|
+
`).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}async function km(){return(await gr("pgrep",["-fal",um])).split(`
|
|
95
|
+
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),s=n[2];if(!Xc(s))return null;let i=xt(s);return!Number.isFinite(r)||!i?null:{pid:r,command:s,agent:i.agent}}).filter(e=>!!e)}async function Em(){return(await gr("wmic",["process","get","ProcessId,CommandLine","/FORMAT:CSV"])).split(`
|
|
96
|
+
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let r=Number(n[n.length-1]),s=n.slice(1,n.length-1).join(",");if(!Number.isFinite(r)||r===0||!Xc(s))return null;let i=xt(s);return i?{pid:r,command:s,agent:i.agent}:null}).filter(e=>!!e)}async function Rm(){return process.platform==="win32"?Em():km()}async function Pm(){let e=(await Rm()).filter(n=>xm(n.pid));return Promise.all(e.map(async n=>({pid:n.pid,agent:n.agent,command:n.command,cwd:await Tm(n.pid),sessionFiles:await Cm(n.pid)})))}function Mm(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Lm(t,e){if(!e)return null;try{if(t==="claude"){let o=(0,Oe.join)((0,fi.homedir)(),".claude","projects",Mm(e)),l=(await(0,At.readdir)(o).catch(()=>[])).filter(f=>f.endsWith(".jsonl"));if(l.length===0)return null;let c=null;if(await Promise.all(l.map(async f=>{let h=await(0,At.stat)((0,Oe.join)(o,f)).catch(()=>null);h&&(!c||h.mtimeMs>c.mtimeMs)&&(c={name:f,mtimeMs:h.mtimeMs})})),!c)return null;let u=(0,Oe.join)(o,c.name),d=Tt(t,u);return d?{sessionId:d,filePath:u}:null}let n=(0,Oe.join)((0,fi.homedir)(),".codex","sessions"),r=null;async function s(o){let a=await(0,At.readdir)(o,{withFileTypes:!0}).catch(()=>[]);for(let l of a){let c=(0,Oe.join)(o,l.name);if(l.isDirectory())await s(c);else if(l.name.endsWith(".jsonl")){let u=await(0,At.stat)(c).catch(()=>null);if(!u||r&&u.mtimeMs<=r.mtimeMs)continue;let d=await hn(c,t);if(!d||d.cwd!==e)continue;r={path:c,mtimeMs:u.mtimeMs,sessionId:d.sessionId}}}}await s(n);let i=r;return i?{sessionId:i.sessionId,filePath:i.path}:null}catch{return null}}async function Nm(){let t=await Pm(),e=await Promise.all(t.map(async r=>{let s=Im(r);if(s)return Jc(s);if(bm(r.agent,r.command))return null;let i=await Lm(r.agent,r.cwd);return i?Jc({agent:r.agent,pid:r.pid,cwd:r.cwd,command:r.command,sessionId:i.sessionId,confidence:"low",sessionFilePath:i.filePath}):null})),n=Am(e.filter(r=>r!==null));return pn={value:n,expiresAt:Date.now()+fm},n}async function Zc(){return pn&&Date.now()<pn.expiresAt?pn.value:fn||(fn=Nm().finally(()=>{fn=null}),fn)}var Ze=M.child({module:"inventory"}),Om=6e3,Bm=1e4,Dm={listScannedSessions:vn,scanRunningSessions:Zc,searchSessionContent:au},oe=Hm(),mn=null,mr=0,vr=0,yr=0,hi=0,gi=new Set;function Hm(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function Fm(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,branch:t.branch,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[...t.sources].sort(),runtime:{state:t.runtime.state,confidence:t.runtime.confidence,resumeMode:t.runtime.resumeMode,pid:t.runtime.pid,command:t.runtime.command,isResponding:t.runtime.isResponding,needsAttention:t.runtime.needsAttention},managed:t.managed,approvalMode:t.approvalMode,observedApprovalMode:t.observedApprovalMode})}function Um(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,pid:t.pid,command:t.command,confidence:t.confidence,isResponding:t.isResponding,approvalMode:t.approvalMode})}function eu(t){return JSON.stringify({scannedSessions:t.scannedSessions.map(Fm).sort(),runningSessions:t.runningSessions.map(Um).sort()})}function qm(){for(let t of gi)try{t()}catch(e){Ze.warn({error:String(e)},"session inventory backfill listener failed")}}function gn(){w.gauge("session.inventory.external_cached_sessions",oe.scannedSessions.length),w.gauge("session.inventory.external_running_sessions",oe.runningSessions.length),w.gauge("session.inventory.backfill_inflight",mn?1:0)}function su(t){return gi.add(t),()=>{gi.delete(t)}}function iu(){return{cachedSessions:oe.scannedSessions.length,runningSessions:oe.runningSessions.length,cacheAgeMs:oe.refreshedAt?Math.max(0,Date.now()-oe.refreshedAt):void 0,backfillInFlight:!!mn,lastBackfillDurationMs:yr||void 0,lastBackfillCompletedAt:vr?new Date(vr).toISOString():void 0,lastBackfillAppliedAt:hi?new Date(hi).toISOString():void 0}}gn();var Ct={daemonActive:3,externalRunning:2,idle:1},tu={high:3,medium:2,low:1};function ou(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function Wm(t,e){let n=t.runtime.needsAttention?1:0,r=e.runtime.needsAttention?1:0,s=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return r-n||i-s||Ct[e.runtime.state]-Ct[t.runtime.state]||ou(t,e)}function jm(t,e){return Ct[e.state]>Ct[t.state]?e:Ct[e.state]<Ct[t.state]?t:tu[e.confidence]>tu[t.confidence]?e:t}function Gm(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function Vm(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function $m(t,e){return e?t?!(wt(e)&&!wt(t)):!0:!1}function mi(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function zm(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["record"],runtime:{...mi()},managed:t.managed,approvalMode:t.approvalMode}}function Ym(t,e){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:e,lastActivityAt:e,sources:["process"],runtime:{state:"externalRunning",confidence:t.confidence,resumeMode:"resumeSession",pid:t.pid,command:t.command,isResponding:t.isResponding},observedApprovalMode:t.approvalMode}}function Jm(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["daemon"],runtime:{state:"daemonActive",confidence:"high",resumeMode:"reuseDriver",needsAttention:t.needsAttention||void 0,isResponding:t.isResponding||void 0},managed:t.managed,approvalMode:t.approvalMode}}function Km(t,e){for(let n of e){let r=`${n.agent}:${n.sessionId}`,s=t.get(r);if(!s){t.set(r,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=$m(s.title,n.title)?n.title:s.title,o=n.cwd||s.cwd,a=n.branch??s.branch,l=jm(s.runtime,n.runtime),c=s.sources.slice();for(let h of n.sources)c.includes(h)||c.push(h);let u=n.sources.includes("process"),d=s.sources.includes("process")&&!s.sources.includes("daemon"),f=u?s.lastActivityAt:d?n.lastActivityAt:Vm(s.lastActivityAt,n.lastActivityAt);t.set(r,{...s,cwd:o,branch:a,title:i,createdAt:Gm(s.createdAt,n.createdAt),lastActivityAt:f,sources:c,runtime:l,managed:s.managed||n.managed,approvalMode:n.approvalMode??s.approvalMode,observedApprovalMode:n.observedApprovalMode??s.observedApprovalMode})}}function Qm(...t){let e=new Map;for(let n of t)Km(e,n);return[...e.values()]}function Xm(t,e,n,r,s,i){let o=r?.toLowerCase(),a=t.filter(l=>{if(e&&l.agent!==e||n&&l.cwd!==n)return!1;if(o){let c=(l.title??"").toLowerCase(),u=(l.cwd??"").toLowerCase(),d=i?.[l.sessionId]?.toLowerCase()??"",f=c.includes(o)||u.includes(o)||(d?d.includes(o):!1),h=s?.has(l.sessionId)??!1;if(!f&&!h)return!1}return!0});return r&&Ze.info({total:t.length,filtered:a.length,search:r,contentMatchIds:s?.size??0},"filter applied"),a}function Zm(t,e){if(!e)return 0;let n=0,r=t.length;for(;n<r;){let s=n+r>>1,i=t[s];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?r=s:n=s+1}if(n>0){let s=t[n-1];if(s.lastActivityAt===e.lastActivityAt&&s.sessionId===e.sessionId)return n}return 0}function nu(t,e,n,r,s,i,o,a){let l=i?1/0:Math.max(1,e||50),c=Qm(t.sessionRecords.map(zm),t.scannedSessions,t.runningSessions.map(b=>Ym(b,t.scannedAt)),t.activeSessions.map(Jm)),u=t.deletedSessionIds?.size?c.filter(b=>!t.deletedSessionIds?.has(b.sessionId)):c,d=Xm(u,r,s,i,o,a),f=d.filter(b=>b.runtime.state!=="idle"||b.managed).sort(Wm),h=d.filter(b=>b.runtime.state==="idle"&&!b.managed).sort(ou),g=Zm(h,n),p=h.slice(g,g+l),v=g+p.length<h.length&&p.length>0?{lastActivityAt:p[p.length-1].lastActivityAt,sessionId:p[p.length-1].sessionId}:void 0;return{sessions:n?p:[...f,...p],nextCursor:v}}async function ru(t){if(t.sessions.length===0)return t;let e=t.sessions.map(o=>o.cwd),[n,r]=await Promise.all([Vc(e),$c(e)]),s=!1,i=t.sessions.map(o=>{let a=n.get(o.cwd),l=r.get(o.cwd);return o.branch===a&&o.diffStat===l?o:(s=!0,{...o,branch:a,diffStat:l})});return s?{...t,sessions:i}:t}function yn(t,e,n,r,s){return new Promise(i=>{let o=Date.now(),a=!1,l=null,c=u=>{a||(a=!0,l&&(clearTimeout(l),l=null),i(u))};l=setTimeout(()=>{if(a)return;let u=Array.isArray(s)&&s.length>0;Ze.warn({source:t,timeoutMs:r,durationMs:Date.now()-o,partial:u?s.length:0},u?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),c(u?s:n)},r),typeof l=="object"&&"unref"in l&&l.unref(),e().then(u=>{c(u)}).catch(u=>{a||Ze.warn({source:t,error:String(u)},"session inventory source failed, using fallback"),c(n)})})}function ey(t=Date.now()){return oe.refreshedAt===0||t-oe.refreshedAt>=Bm}async function ty(t,e){let n=new Date().toISOString(),r=[],[s,i]=await Promise.all([yn("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,r),[],e,r),yn("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return{scannedSessions:s,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function ny(t,e){if(mn)return;let n=mr,r=w.startTimer("session.inventory.backfill_latency_ms");mn=ty(t,e).then(s=>{if(n!==mr)return;let i=eu(oe);oe=s;let o=eu(s),a=r();yr=a,vr=Date.now(),gn(),i!==o&&(hi=Date.now(),w.increment("session.inventory.backfill_applied"),Ze.info({durationMs:a,scanned:s.scannedSessions.length,running:s.runningSessions.length},"session inventory external backfill applied"),qm())}).catch(s=>{n===mr&&(yr=r(),vr=Date.now(),gn(),Ze.warn({error:String(s),durationMs:yr},"session inventory external backfill failed"))}).finally(()=>{n===mr&&(mn=null,gn())}),gn()}async function Sr(t){let e={...Dm,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??Om);if(!t.search){let u=w.startTimer("session.inventory.fast_path_latency_ms");ey()&&ny(e,n);let d=oe,f=nu({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:d.scannedSessions,runningSessions:d.runningSessions,scannedAt:d.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,void 0,void 0,t.customTitles);if(t.skipGitMetadata)return u(),f;let h=await ru(f);return u(),h}let r=[],s=new Date().toISOString(),i=t.search,[o,a,l]=await Promise.all([yn("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),yn("process.running_sessions",()=>e.scanRunningSessions(),[],n),yn("scanner.search_content",()=>e.searchSessionContent(i,t.agent),void 0,n)]);Ze.info({search:t.search,contentMatches:l?.size??0,scanned:o.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let c=nu({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:o,runningSessions:a,scannedAt:s,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,i,l,t.customTitles);return t.skipGitMetadata?c:ru(c)}var Be=M.child({module:"scanner"});function pu(t){let e=new Map;return{get(n){let r=e.get(n);if(r){if(Date.now()>r.expiresAt){e.delete(n);return}return r.value}},set(n,r){e.set(n,{value:r,expiresAt:Date.now()+t})},clear(){e.clear()}}}var hu=3e4,_i=pu(hu),bi=pu(hu),yi=new Map,vi=new Map,kt=24;function br(){_i.clear(),bi.clear()}function gu(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Et(t,e,n){if(t.length===0)return[];let r=Math.max(1,Math.min(e,t.length)),s=new Array(t.length),i=0;return await Promise.all(Array.from({length:r},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;s[o]=await n(t[o],o)}})),s}function*mu(t,e){let n=0,r=0;for(;n<t.length&&r<e;){let s=t.indexOf(`
|
|
97
|
+
`,n);s===-1&&(s=t.length);let i=t.substring(n,s);n=s+1,!(i.length===0||i.trim().length===0)&&(yield i,r+=1)}}var Si=512*1024,lu=256*1024;async function yu(t,e){if(e<=Si)return(0,R.readFile)(t,"utf-8");let n=await(0,R.open)(t,"r");try{let r=Buffer.alloc(Si),{bytesRead:s}=await n.read(r,0,Si,0);return r.toString("utf-8",0,s)}finally{await n.close()}}async function ry(t,e){if(e<=lu)return(0,R.readFile)(t,"utf-8");let n=await(0,R.open)(t,"r");try{let r=Math.max(0,e-lu),s=Buffer.alloc(e-r),{bytesRead:i}=await n.read(s,0,s.length,r);return s.toString("utf-8",0,i)}finally{await n.close()}}function cu(t){switch(t){case"plan":return"plan";case"acceptEdits":return"acceptEdits";case"bypassPermissions":return"autoApprove";case"default":return"normal";default:return}}function sy(t){let e=typeof t?.approval_policy=="string"?t.approval_policy:"",n=t?.sandbox_policy,r=typeof n?.type=="string"?n.type:"",s=Array.isArray(n?.writable_roots)?n.writable_roots:null;if(e==="never"&&r==="danger-full-access")return"autoApprove";if(e==="on-request"&&r==="workspace-write")return s?.length?"normal":"plan"}function iy(t){return t?.type==="permission-mode"?cu(t.permissionMode):cu(t?.permissionMode)}function oy(t){if(t?.type==="turn_context")return sy(t.payload)}async function vu(t,e,n){let r,s=await ry(t,n);for(let i of s.split(`
|
|
98
|
+
`)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=e==="claude"?iy(o):oy(o);a&&(r=a)}return r}function xi(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"?"":typeof e.text=="string"?e.text:typeof e.content=="string"?e.content:"").join(""):""}function Su(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?xi(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function Ir(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"||e.type!=="text"?"":typeof e.text=="string"?e.text:"").join(""):""}var ay=["<task-notification>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","<system-reminder>","<environment_context>","# AGENTS.md instructions for "];function ly(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?ay.some(r=>n.startsWith(r)):!1}function wr(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=Ir(t.message.content);return ly(t,e)?"":e}function cy(t){return Array.isArray(t)&&t.some(e=>e&&typeof e=="object"&&e.type==="tool_result")}function uy(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object"||e.type!=="tool_result")return"";let n=e.content;return typeof n=="string"?n:Array.isArray(n)?n.map(r=>!r||typeof r!="object"?"":typeof r.text=="string"?r.text:typeof r.content=="string"?r.content:"").filter(Boolean).join(`
|
|
99
99
|
`):""}).filter(Boolean).join(`
|
|
100
|
-
`):""}function ny(t){let e=ty(t?.message?.content);if(/\[Request interrupted by user(?: for tool use)?\]/i.test(e))return!0;let n=t?.toolUseResult;return!!(n&&typeof n=="object"&&n.interrupted===!0||typeof n=="string"&&/\[Request interrupted by user(?: for tool use)?\]/i.test(n))}function fu(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function vr(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,observedApprovalMode:t.approvalMode,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:hi()}}function xt(t,e){let n=(0,P.basename)(e,".jsonl");return t==="claude"?n||null:n.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i)?.[1]??null}async function ry(t,e){let n=await cu(t,e),r=lu(n,64),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(!s&&typeof u.cwd=="string"&&(s=u.cwd),!i&&typeof u.sessionId=="string"&&(i=u.sessionId),o||(o=Ke([u.customTitle,u.summary])),!l){let d=br(u),f=Ke([],d);f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||xt("claude",t)||(0,P.basename)(t,".jsonl"),cwd:s,title:o??l??Ke([],a),approvalMode:await uu(t,"claude",e)}:null}async function sy(t,e){let n=await cu(t,e),r=lu(n,96),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(s||(s=u.payload?.cwd??u.cwd??""),i||(i=u.payload?.id??u.id??""),o||(o=Ke([u.payload?.title,u.title])),!l){let d=du(u),f=d&&!fu(d)?Ke([],d):void 0;f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||xt("codex",t)||(0,P.basename)(t,".jsonl"),cwd:s,title:o??l??Ke([],a),approvalMode:await uu(t,"codex",e)}:null}async function fn(t,e){let n=await(0,E.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let i=await ry(t,r);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,approvalMode:i.approvalMode,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let s=await sy(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,approvalMode:s.approvalMode,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function nu(t,e){let n=(0,P.join)((0,be.homedir)(),".claude","projects");try{let r;t?r=[au(t)]:r=(await(0,E.readdir)(n,{withFileTypes:!0})).filter(c=>c.isDirectory()).map(c=>c.name);let s=[];for(let l of r){let c=(0,P.join)(n,l),u=await(0,E.readdir)(c).catch(()=>[]);for(let d of u)d.endsWith(".jsonl")&&s.push((0,P.join)(c,d))}let i=await Ct(s,kt,async l=>{let c=await(0,E.stat)(l).catch(()=>null);return{path:l,mtimeMs:c?.mtimeMs??0}});return i.sort((l,c)=>c.mtimeMs-l.mtimeMs),(await Ct(i,kt,async l=>{let c=await fn(l.path,"claude");return c&&e&&e.push(vr(c)),c})).filter(l=>l!==null).map(l=>vr(l)).sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Oe.warn({error:String(r)},"failed to list claude sessions"),[]}}async function ru(t,e){let n=(0,P.join)((0,be.homedir)(),".codex","sessions");try{let r=await(0,E.readdir)(n).catch(()=>[]),s=[];for(let l of r){let c=(0,P.join)(n,l),u=await(0,E.readdir)(c).catch(()=>[]);for(let d of u){let f=(0,P.join)(c,d),p=await(0,E.readdir)(f).catch(()=>[]);for(let g of p){let h=(0,P.join)(f,g),y=await(0,E.readdir)(h).catch(()=>[]);for(let m of y)m.endsWith(".jsonl")&&s.push((0,P.join)(h,m))}}}let i=await Ct(s,kt,async l=>{let c=await(0,E.stat)(l).catch(()=>null);return{path:l,mtimeMs:c?.mtimeMs??0}});return i.sort((l,c)=>c.mtimeMs-l.mtimeMs),(await Ct(i,kt,async l=>{let c=await fn(l.path,"codex");return c&&e&&(!t||c.cwd===t)&&e.push(vr(c)),c})).filter(l=>l!==null).filter(l=>!t||l.cwd===t).map(l=>vr(l)).sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Oe.warn({error:String(r)},"failed to list codex sessions"),[]}}async function mn(t,e,n){let s=`list:${(0,be.homedir)()}:${t??"all"}:${e??""}`,i=vi.get(s);if(i)return i;let o=gi.get(s);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await nu(e,n);else if(t==="codex")l=await ru(e,n);else{let[c,u]=await Promise.all([nu(e,n),ru(e,n)]);l=[...c,...u].sort((d,f)=>f.lastActivityAt.localeCompare(d.lastActivityAt))}return vi.set(s,l),l})();return gi.set(s,a),a.finally(()=>gi.delete(s)),a}async function Zc(t,e){let r=`search:${(0,be.homedir)()}:${t}:${e??"all"}`,s=Si.get(r);if(s)return s;let i=mi.get(r);if(i)return i;let o=(async()=>{let a=new Set,l=t.toLowerCase();async function c(){let d=(0,P.join)((0,be.homedir)(),".claude","projects");try{let f=await(0,E.readdir)(d,{withFileTypes:!0}),p=[];for(let h of f){if(!h.isDirectory())continue;let y=(0,P.join)(d,h.name),m=await(0,E.readdir)(y).catch(()=>[]);for(let C of m)C.endsWith(".jsonl")&&p.push((0,P.join)(y,C))}let g=await Ct(p,kt,h=>su(h,l,"claude"));for(let h of g)h&&a.add(h)}catch(f){Oe.warn({error:String(f)},"failed to search claude files")}}async function u(){let d=(0,P.join)((0,be.homedir)(),".codex","sessions");try{let f=[];async function p(h){let y=await(0,E.readdir)(h,{withFileTypes:!0}).catch(()=>[]);for(let m of y){let C=(0,P.join)(h,m.name);m.isDirectory()?await p(C):m.name.endsWith(".jsonl")&&f.push(C)}}await p(d);let g=await Ct(f,kt,h=>su(h,l,"codex"));for(let h of g)h&&a.add(h)}catch(f){Oe.warn({error:String(f)},"failed to search codex files")}}return e==="claude"?await c():e==="codex"?await u():await Promise.all([c(),u()]),Si.set(r,a),a})();return mi.set(r,o),o.finally(()=>mi.delete(r)),o}async function su(t,e,n){let r=(0,bi.createReadStream)(t,{encoding:"utf-8"}),s=(0,wi.createInterface)({input:r,crlfDelay:1/0}),i=n==="claude"?iy:oy,o="",a=!1;try{for await(let l of s){if(!l.trim())continue;let c;try{c=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof c.sessionId=="string"&&(o=c.sessionId):o=c.payload?.id??c.id??""),!a){let u=i(c);u&&u.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{s.close(),r.destroy()}return a?o||xt(n,t):null}function iy(t){return t?.type==="user"&&t.message?.role==="user"?br(t):t?.type==="assistant"&&t.message?.role==="assistant"?_r(t.message.content):""}function oy(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return Ii(t.payload.content)}let e=du(t);return e||""}async function _i(t,e){let n=(0,bi.createReadStream)(t,{encoding:"utf-8"}),r=(0,wi.createInterface)({input:n,crlfDelay:1/0});try{for await(let s of r){if(!s.trim())continue;let i;try{i=JSON.parse(s)}catch{continue}if(e(i))break}}finally{r.close(),n.destroy()}}async function pu(t,e){let n=(0,P.join)((0,be.homedir)(),".claude","projects"),r=e?au(e):null,s=await(0,E.readdir)(n).catch(()=>[]),i=r?[r,...s.filter(o=>o!==r)]:s;for(let o of i){let a=(0,P.join)(n,o,`${t}.jsonl`);if((await(0,E.stat)(a).catch(()=>null))?.isFile())return a}return null}async function hu(t,e,n){if(e==="claude")return pu(t,n);let r=(0,P.join)((0,be.homedir)(),".codex","sessions");return gu(r,t)}function ay(t){if(t?.type==="user"&&t.message?.role==="user")return ey(t.message.content)?{kind:"toolResult",...ny(t)?{interrupted:!0}:{}}:br(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=_r(t.message.content),n=t.message?.stop_reason;return{kind:"assistant",stopReason:typeof n=="string"?n:n??null,...e?{text:e}:{}}}return t?.type==="system"&&t.subtype==="stop_hook_summary"?{kind:"stopHook"}:null}function ly(t){if(!t)return{};if(t.kind==="stopHook")return{};if(t.kind==="assistant"){let e=t.stopReason==null||t.stopReason==="tool_use";return{...e?{isResponding:!0}:{},...e&&t.text?{partialReplyText:t.text}:{}}}return t.kind==="toolResult"&&t.interrupted?{}:{isResponding:!0}}async function di(t,e){if(e!=="claude")return{};let n=null;try{await _i(t,r=>{let s=ay(r);s&&(n=s)})}catch(r){return r.code!=="ENOENT"&&Oe.warn({filePath:t,error:String(r)},"failed to read session runtime hints"),{}}return ly(n)}async function Ai(t,e,n){let r=await hu(t,e,n);return r?di(r,e):{}}async function yn(t,e,n){let r=[],s=(i,o)=>{if(o?.coalesceConsecutiveAssistant&&i.role==="assistant"&&r[r.length-1]?.role==="assistant"){r[r.length-1]=i;return}r.push(i)};if(e==="claude")try{let i=await pu(t,n);i&&await _i(i,o=>{if(o.type==="user"&&o.message?.role==="user"){let a=br(o);a&&s({role:"user",content:a})}else if(o.type==="assistant"&&o.message?.role==="assistant"){let a=_r(o.message.content);a&&s({role:"assistant",content:a})}})}catch(i){Oe.warn({error:String(i)},"failed to read claude session history")}else if(e==="codex")try{let i=await hu(t,e,n);i&&await _i(i,o=>{if(o.type!=="response_item"||o.payload?.type!=="message")return;let a=o.payload.role;if(a!=="user"&&a!=="assistant")return;let l=Ii(o.payload.content);l&&(a==="user"&&fu(l)||s({role:a,content:l},{coalesceConsecutiveAssistant:!0}))})}catch(i){Oe.warn({error:String(i)},"failed to read codex session history")}return r}async function gu(t,e){try{let n=await(0,E.readdir)(t,{withFileTypes:!0});for(let r of n){let s=(0,P.join)(t,r.name);if(r.isDirectory()){let i=await gu(s,e);if(i)return i}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return s}}catch(n){Oe.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Et=require("fs"),vu=require("path");var cy=500,mu=200;function uy(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=mu?e:e.slice(-mu)}function dy(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)typeof n!="string"||n.length===0||e.includes(n)||e.push(n);return e}function fy(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",r=typeof e.toolName=="string"?e.toolName:"",s=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!r||!s)return;let o=e.approvalContext;return o&&typeof o=="object"&&!Array.isArray(o)&&o.provider==="codex"&&typeof o.kind=="string"&&typeof o.rpcId=="number"?{requestId:n,toolName:r,input:i,description:s,approvalContext:{provider:"codex",kind:o.kind,rpcId:o.rpcId,...typeof o.questionId=="string"?{questionId:o.questionId}:{},...typeof o.approveLabel=="string"?{approveLabel:o.approveLabel}:{},...typeof o.denyLabel=="string"?{denyLabel:o.denyLabel}:{}}}:{requestId:n,toolName:r,input:i,description:s}}function yu(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:uy(t.acceptedClientMessageIds),pendingApproval:fy(t.pendingApproval)}}function py(t){if(Array.isArray(t))return{records:t.map(yu),deletedSessionIds:[]};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(yu):[],deletedSessionIds:dy(e.deletedSessionIds)}}return{records:[],deletedSessionIds:[]}}var wr=class{records;deletedSessionIds;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds)}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}find(e){return this.records.find(n=>n.sessionId===e)}isDeleted(e){return this.deletedSessionIds.has(e)}upsert(e){this.deletedSessionIds.delete(e.sessionId);let n=this.records.findIndex(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}remove(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.add(e),this.scheduleSave()}flushSync(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.saveToDisk()}scheduleSave(){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.saveToDisk()},cy)}loadFromDisk(){try{let e=(0,Et.readFileSync)(tr,"utf-8");return py(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[]}}saveToDisk(){(0,Et.mkdirSync)((0,vu.dirname)(tr),{recursive:!0}),(0,Et.writeFileSync)(tr,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds]},null,2))}};var Rt=require("path"),Su=require("os");function Ir(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Rt.join)((0,Su.homedir)(),t.slice(2)):t}function hy(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r&&(e=r[1]??e),e}function xi(t,e){let n=Ir(hy(t));if(!n||(0,Rt.isAbsolute)(n))return n;let r=Ir(e??"");return r?(0,Rt.resolve)(r,n):n}var _u={approvalRequestV1:"vibelet.approvalRequest.v1"};var Pt=require("fs"),bu=require("path");function gy(t){return!!(t&&typeof t=="object"&&typeof t.deviceId=="string"&&typeof t.pushToken=="string"&&t.platform==="expo"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"&&(typeof t.lastSentAt=="string"||typeof t.lastSentAt>"u"))}function my(t){try{let e=(0,Pt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(gy):[]}catch{return[]}}function vn(t,e){(0,Pt.mkdirSync)((0,bu.dirname)(t),{recursive:!0}),(0,Pt.writeFileSync)(t,JSON.stringify(e,null,2)+`
|
|
101
|
-
`,"utf8")}var Ar=class{constructor(e=sc){this.pushSubscriptionsPath=e;this.records=my(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}count(){return this.records.length}register(e,n){let r=new Date().toISOString(),s=this.records.find(o=>o.deviceId===e),i={deviceId:e,pushToken:n,platform:"expo",createdAt:s?.createdAt??r,updatedAt:r,...s?.lastSentAt?{lastSentAt:s.lastSentAt}:{}};this.records=[i,...this.records.filter(o=>o.deviceId!==e&&o.pushToken!==n)],vn(this.pushSubscriptionsPath,this.records)}unregister(e,n){let r=this.records.filter(s=>!(s.deviceId===e&&s.pushToken===n));return r.length===this.records.length?!1:(this.records=r,vn(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(r=>r.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,vn(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),r=new Date().toISOString(),s=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=r,s=!0);s&&vn(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],vn(this.pushSubscriptionsPath,this.records)}};var z=M.child({module:"push"}),yy="https://exp.host/--/api/v2/push/send",vy="https://exp.host/--/api/v2/push/getReceipts",Sy=[0,1e3,3e3],Sn=new Ar;function _y(t){return!!(t&&typeof t=="object"&&typeof t.daemonId=="string"&&typeof t.canonicalHost=="string"&&typeof t.sessionId=="string"&&(t.agent==="claude"||t.agent==="codex")&&(t.eventType==="reply_ready"||t.eventType==="approval_request")&&(typeof t.requestId>"u"||typeof t.requestId=="string"))}function by(t){return new Promise(e=>{setTimeout(e,t)})}function wu(t){return t==="DeviceNotRegistered"}function wy(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],r=[];for(let[s,i]of t.data.entries()){let o=e[s];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}r.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:r}}function Iy(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[r,s]of t.data.entries()){let i=e[r];!i||!s||s.status!=="ok"||typeof s.id!="string"||s.id.length===0||n.set(s.id,i)}return n}function Ay(t,e){let n=[],r=[],s=t.data;for(let[i,o]of e.entries()){let a=s?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&r.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:r}}async function xy(t,e,n,r){let s=new Map(t);for(let i of Sy){if(s.size===0)return;i>0&&await n(i);let o;try{o=await e(vy,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...s.keys()]})})}catch(u){z.error({error:String(u),count:s.size},"push receipt request failed");return}if(!o.ok){z.error({status:o.status,statusText:o.statusText,count:s.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){z.error({count:s.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:c}=Ay(a,s);for(let{token:u,receipt:d}of c){let f=d.details?.error;if(z.error({token:u,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),wu(f)){let p=r.unregisterToken(u);z.info({token:u,errorCode:f,removed:p},"push token removed after receipt rejection")}}s=new Map(l.map(u=>[u,s.get(u)]))}s.size>0&&z.warn({pendingReceipts:s.size},"push receipts still pending after polling")}function Ty(t){let e=t?.pushStore??Sn,n=t?.fetchImpl??globalThis.fetch,r=t?.sleepImpl??by;return async function(i,o,a){let l=e.listTokens();if(l.length===0)return;let c=l.map(u=>({to:u,sound:"default",title:i,body:o,data:a,badge:1,..._y(a)&&a.eventType==="approval_request"?{categoryId:_u.approvalRequestV1}:{}}));try{let u=await n(yy,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!u.ok){z.error({status:u.status,statusText:u.statusText},"push send failed");return}let d=await u.json().catch(()=>null);if(!d){z.error({count:c.length},"push send returned unreadable response");return}let{successfulTokens:f,ticketErrors:p}=wy(d,l),g=Iy(d,l);for(let{token:h,ticket:y}of p){let m=y.details?.error;if(z.error({token:h,message:y.message,details:y.details,ticketStatus:y.status},"push ticket rejected"),wu(m)){let C=e.unregisterToken(h);z.info({token:h,errorCode:m,removed:C},"push token removed after ticket rejection")}}f.length>0&&(z.debug({count:f.length},"push sent"),e.markSent(f)),g.size>0&&await xy(g,n,r,e)}catch(u){z.error({error:String(u)},"push send error")}}}function Ti(t,e){Sn.register(t,e),z.info({deviceId:t,token:e,total:Sn.count()},"push token registered")}function ki(t,e){let n=Sn.unregister(t,e);z.info({deviceId:t,token:e,total:Sn.count(),removed:n},"push token unregistered")}var xr=Ty();var _=M.child({module:"manager"}),ky="Done.",Cy="Approval required",Iu=180,kr=200;function _n(...t){let e=[];for(let n of t)if(n?.length)for(let r of n)!r||e.includes(r)||(e.push(r),e.length>kr&&e.splice(0,e.length-kr));return e}function Tr(t){return t?.length?{acceptedClientMessageIds:_n(t)}:{}}function he(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,acceptedClientMessageIds:_n(t.acceptedClientMessageIds),pendingApproval:t.agent==="codex"?t.pendingApproval:void 0,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,managed:t.managed,isResponding:t.isResponding||void 0}}function Au(t){t.managed||(t.managed=!0)}function xu(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&cr(e)}function Tu(t,e,n){return{sessionId:t,agent:e,...n}}function Ey(t){return t.startsWith(ti)}function ku(t){return t?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}:{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Denied from Vibelet"}}}var Cr=class{constructor(e=xr){this.pushSender=e;this.removeInventoryBackfillListener=Kc(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new wr;idleSweepInterval=null;globalClients=new Set;inventoryVersion=0;removeInventoryBackfillListener;startIdleSweep(){S.idleTimeoutMs<=0&&S.turnStallTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),6e4),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=Date.now(),n=S.idleTimeoutMs,r=S.turnStallTimeoutMs;if(n<=0&&r<=0)return;let s=3600*1e3;for(let[i,o]of this.sessions){if(!o.active&&!o.driver){if(o.clients.size===0){let l=e-o.lastActivityTs;l>=s&&(_.info({sessionId:o.sessionId,inactiveMs:l},"removing inactive session from memory"),w.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(o),this.sessions.delete(i))}continue}if(!o.active||!o.driver)continue;let a=e-o.lastActivityTs;if(o.isResponding){if(r<=0||o.pendingApproval||a<r)continue;_.warn({sessionId:o.sessionId,agent:o.agent,inactiveMs:a,turnStallTimeoutMs:r},"stopping stalled driver"),w.increment("driver.stall_timeout",{agent:o.agent}),b.emit("driver.stall_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),this.resolvePendingClaudeHookApprovals(o),o.driver.stop(),o.active=!1,o.driver=null,o.isResponding=!1,o.currentReplyText="",this.updateGauges(),this.broadcast(o.sessionId,{type:"error",sessionId:o.sessionId,message:`Agent stopped responding for over ${Math.ceil(r/1e3)}s. Send a new message to continue.`}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated");continue}o.pendingApproval||n<=0||a<n||(_.info({sessionId:o.sessionId,agent:o.agent,idleMs:a,timeoutMs:n},"stopping idle driver"),w.increment("driver.idle_timeout",{agent:o.agent}),b.emit("driver.idle_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),o.driver.stop(),o.active=!1,o.driver=null,this.updateGauges(),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"))}}bindDriverLifecycle(e,n,r,s){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){_.info({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(_.debug({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"driver message received"),o.type!=="response"&&"sessionId"in o&&o.sessionId&&o.sessionId!==e.sessionId&&!this.sessions.has(o.sessionId)&&this.remapSessionId(e,o.sessionId,s),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,(o.type==="session.interrupted"||!xu(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){b.emit("approval.response",{sessionId:e.sessionId,requestId:o.requestId,approved:!0}),e.pendingApproval=void 0,e.isResponding=!0,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated");return}_.warn({sessionId:e.sessionId,requestId:o.requestId},"failed to auto-approve codex request; falling back to pending approval flow")}e.isResponding=!1,e.pendingApproval={requestId:o.requestId,toolName:o.toolName,input:o.input,description:o.description,...o.approvalContext?{approvalContext:o.approvalContext}:{}},this.pushSender(Cy,this.buildPushBody(`${e.title||e.sessionId}: ${o.description||o.toolName}`),{sessionId:e.sessionId,agent:e.agent,requestId:o.requestId,eventType:"approval_request"})}n==="claude"&&o.type==="approval.request"&&cr(o.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[o.requestId]={message:e.lastUserMessage,toolName:o.toolName}:_.warn({sessionId:e.sessionId,requestId:o.requestId},"missing lastUserMessage for synthetic approval retry")),this.touchSession(e.sessionId,o.type!=="text.delta"),(o.type==="approval.request"||o.type==="session.done"||o.type==="session.interrupted")&&this.noteInventoryChanged("session_updated"),this.broadcast(e.sessionId,o),(o.type==="session.done"||o.type==="session.interrupted")&&e.bufferedPrompts.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){_.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}_.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"driver exited"),b.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:o}),w.increment("driver.exit",{agent:n,abnormal:o&&o!==0?"true":"false"});let a=!!(e.pendingApproval&&(e.agent==="codex"||o===0&&xu(e)));this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",a||(e.pendingApproval=void 0),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated")})}remapSessionId(e,n,r){if(!n||n===e.sessionId)return;let s=this.sessions.get(n);if(s&&s!==e){_.warn({oldSessionId:e.sessionId,newSessionId:n},"skipping session ID remap because target already exists");return}let i=e.sessionId;_.info({oldSessionId:i,newSessionId:n},"session ID updated"),this.store.remove(i),this.sessions.delete(i),e.sessionId=n,this.sessions.set(n,e),this.store.upsert(he(e)),this.noteInventoryChanged("session_remapped"),r&&this.reply(r,`id_update_${Date.now()}`,!0,{sessionId:n,oldSessionId:i})}flushBufferedPrompt(e,n=!1){if(!e.driver||!e.active||e.startupInProgress||e.pendingApproval||!n&&e.isResponding)return!1;let r=e.bufferedPrompts.shift();return r?(e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=r,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),e.driver.sendPrompt(r,e.model),!0):!1}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let r=e.driver,s=e.sessionId,i=e.startupToken,o=w.startTimer("driver.spawn");(async()=>{try{let a=await r.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(s)!==e||e.startupToken!==i||e.driver!==r){_.info({pendingSessionId:s,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,_.info({pendingSessionId:s,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==s&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(s)!==e||e.startupToken!==i){_.info({pendingSessionId:s,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1,e.bufferedPrompts=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.error({sessionId:s,cwd:e.cwd,error:String(a)},"async codex createSession error"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to start Codex session: ${String(a)}`})}})()}configureDriverBeforeStart(e,n,r,s){if(e==="codex"&&n instanceof cn&&s&&n.setModel(s),e!=="claude"||!(n instanceof ln))return;let i=r??(0,Ci.randomUUID)().replace(/-/g,"");return n.configureHookBridge(S.port,i),i}registerClaudeHookSession(e){e.agent!=="claude"||!e.claudeHookSecret||this.claudeHookSessions.set(e.claudeHookSecret,e)}unregisterClaudeHookSession(e){if(e.agent!=="claude"||!e.claudeHookSecret)return;this.claudeHookSessions.get(e.claudeHookSecret)===e&&this.claudeHookSessions.delete(e.claudeHookSecret)}resolvePendingClaudeHookApprovals(e,n=an){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&Ey(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(_.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return _.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),an;if(r.approvalMode==="autoApprove")return ku(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return an;let o=n.tool_input??n.toolInput,a=o&&typeof o=="object"&&!Array.isArray(o)?o:{},l=typeof n.tool_use_id=="string"?n.tool_use_id:typeof n.toolUseId=="string"?n.toolUseId:"",c=`${ti}${l.trim()||(0,Ci.randomUUID)()}`,u=r.pendingClaudeHookApprovals.get(c);if(u)return u.promise;let d=`Claude requested permissions to use ${i}.`,f,p=new Promise(g=>{f=g});return r.pendingClaudeHookApprovals.set(c,{requestId:c,promise:p,resolve:g=>{r.pendingClaudeHookApprovals.delete(c),f(g)}}),r.pendingApproval={requestId:c,toolName:i,input:a,description:d},b.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:i}),this.touchSession(r.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:c,toolName:i,input:a,description:d}),p}async resolveReconnectSession(e,n,r){if(this.isDeletedSession(e))return;let s=new Date().toISOString(),i=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.pendingApproval,c=r?.title??"",u=r?.createdAt??s,d=r?.lastActivityAt??s,f=_n(r?.acceptedClientMessageIds),p=r?.isResponding,g=r?"memory":"client",h=this.store.find(e);if(h)i=h.agent,o=h.cwd||o,a=h.approvalMode??a,l=h.pendingApproval??l,c=h.title||c,u=h.createdAt||u,d=h.lastActivityAt||d,f=_n(h.acceptedClientMessageIds,f),g="record";else if(!r){let m=(await mn(n??i)).find(C=>C.sessionId===e);m&&(i=m.agent,o=m.cwd||o,c=m.title??c,u=m.createdAt,d=m.lastActivityAt,p=m.runtime.isResponding??p,g="scanner")}if(!i&&n&&(i=n,g=r?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,pendingApproval:l,title:c,createdAt:u,lastActivityAt:d,acceptedClientMessageIds:f,source:g,managed:r?.managed??h?.managed,isResponding:p||void 0}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let r of this.sessions.values()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Tu(r.sessionId,r.agent,r.pendingApproval)))}for(let r of this.store.getAll()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Tu(r.sessionId,r.agent,r.pendingApproval)))}return e}restoreDriverPendingApproval(e,n){n&&e.restorePendingApproval?.(n)}async reviveSessionForApproval(e){if(e.driver)return!0;if(!e.pendingApproval||e.agent!=="codex")return!1;let n=this.createDriver(e.agent),r=this.configureDriverBeforeStart(e.agent,n,e.claudeHookSecret);return await n.start(e.cwd,e.sessionId,e.approvalMode),this.restoreDriverPendingApproval(n,e.pendingApproval),e.driver=n,e.active=!0,e.isResponding=!1,e.currentReplyText="",e.startupInProgress=!1,e.bufferedPrompts=e.bufferedPrompts??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=r??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(he(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),!0}buildPushBody(e){let n=e.replace(/\s+/g," ").trim();return n?n.length<=Iu?n:`${n.slice(0,Math.max(1,Iu-3)).trimEnd()}...`:ky}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}touchSession(e,n=!0){let r=new Date().toISOString(),s=this.sessions.get(e);if(s){s.lastActivityAt=r,s.lastActivityTs=Date.now(),n&&this.store.upsert(he(s));return}let i=this.store.find(e);i&&this.store.upsert({...i,lastActivityAt:r})}updateGauges(){let e=0;for(let n of this.sessions.values())n.active&&e++;w.gauge("session.active",e)}activeSessionSnapshots(){let e=[];for(let n of this.sessions.values())n.sessionId.startsWith("pending_")||n.active&&e.push({sessionId:n.sessionId,agent:n.agent,cwd:n.cwd,approvalMode:n.approvalMode,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,...n.pendingApproval?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return mn(e,n)}async handle(e,n){switch(_.debug({action:n.action},"handling client message"),n.action){case"session.create":await this.createSession(e,n.id,n.agent,n.cwd,n.approvalMode,n.continueSession,n.model);break;case"session.resume":await this.resumeSession(e,n.id,n.sessionId,n.agent);break;case"session.send":await this.sendMessage(e,n.id,n.sessionId,n.message,n.agent,n.clientMessageId,n.images,n.model);break;case"session.approve":await this.approve(e,n.id,n.sessionId,n.requestId,n.approved);break;case"session.setApprovalMode":await this.setApprovalMode(e,n.id,n.sessionId,n.approvalMode);break;case"session.interrupt":this.interrupt(e,n.id,n.sessionId);break;case"session.stop":this.stopSession(e,n.id,n.sessionId);break;case"session.delete":this.deleteSession(e,n.id,n.sessionId);break;case"session.history":await this.sendHistory(e,n.id,n.sessionId,n.agent);break;case"reconnect.snapshot":await this.sendReconnectSnapshot(e,n.id,n.agent,n.cwd,n.search,n.activeSessionId,n.activeAgent);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor);break}}addGlobalClient(e){this.globalClients.add(e)}removeClient(e){this.globalClients.delete(e);for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep(),this.removeInventoryBackfillListener(),this.globalClients.clear();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){_.error({sessionId:e.sessionId,agent:e.agent,error:String(n)},"failed to stop session on shutdown")}e.active=!1,e.driver=null,e.clients.clear(),this.unregisterClaudeHookSession(e)}this.claudeHookSessions.clear(),this.store.flushSync()}getActiveSessionCount(){let e=0;for(let n of this.sessions.values())n.active&&e++;return e}prewarmCaches(){yr({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}noteInventoryChanged(e){if(this.inventoryVersion+=1,this.globalClients.size===0)return;let n={type:"sessions.changed",version:this.inventoryVersion,reason:e},r=JSON.stringify(n);for(let s of this.globalClients)s.readyState===1&&s.send(r)}async createSession(e,n,r,s,i,o,a){s=Ir(s),_.info({agent:r,cwd:s,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,Cu.stat)(s)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${s}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${s}`);return}if(o)try{let c=(await this.listRecentSessionsForContinue(r,s)).find(u=>!this.isDeletedSession(u.sessionId));if(c)return _.info({sessionId:c.sessionId,cwd:s},"continue mode: resuming last session"),this.resumeSession(e,n,c.sessionId,r,s,i);_.info("continue mode: no previous sessions found, creating new")}catch(l){_.warn({error:String(l)},"continue mode: error finding sessions, creating new")}try{let l=this.createDriver(r),c=this.configureDriverBeforeStart(r,l,void 0,a);if(r==="codex"){let g=`pending_${Date.now()}`;_.info({sessionId:g,agent:r,cwd:s},"session created (pending codex startup)"),w.increment("session.create",{agent:r}),b.emit("session.create",{sessionId:g,agent:r,cwd:s,approvalMode:i});let h={sessionId:g,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,bufferedPrompts:[],startupToken:1,managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(g,h),this.registerClaudeHookSession(h),this.store.upsert(he(h)),this.updateGauges(),Sr(),fr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,r,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(h,e);return}let u=w.startTimer("driver.spawn"),d=await l.start(s,void 0,i),f=u();_.info({sessionId:d,agent:r,spawnMs:f},"session created"),w.increment("session.create",{agent:r}),b.emit("session.create",{sessionId:d,agent:r,cwd:s,approvalMode:i});let p={sessionId:d,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(d,p),this.registerClaudeHookSession(p),this.store.upsert(he(p)),this.updateGauges(),Sr(),fr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(p,r,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){_.error({agent:r,cwd:s,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,r,s,i,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(a&&a.active){a.clients.add(e),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated");let f=await yn(r,s,a.cwd),p=this.currentPartialReplyText(a);if(f.length>0||p||a.approvalMode||a.pendingApproval){let g={type:"session.history",sessionId:r,messages:f,...Tr(a.acceptedClientMessageIds),isResponding:a.isResponding||void 0,partialReplyText:p,approvalMode:a.approvalMode,pendingApproval:a.pendingApproval};e.readyState===1&&e.send(JSON.stringify(g))}this.reply(e,n,!0,{sessionId:r});return}let l=this.store.find(r),c=i||l?.cwd||"",u=o??l?.approvalMode,d=l?.title??"Resumed session";try{let f=w.startTimer("driver.spawn"),p=this.createDriver(s),g=this.configureDriverBeforeStart(s,p),h=await p.start(c,r,u),y=f();_.info({sessionId:h,agent:s,spawnMs:y},"session resumed"),w.increment("session.resume",{agent:s}),b.emit("session.resume",{sessionId:h,agent:s,cwd:c});let m={sessionId:h,agent:s,cwd:c,approvalMode:u,driver:p,clients:new Set([e]),title:d,createdAt:l?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l?.acceptedClientMessageIds??[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:l?.managed,pendingApproval:l?.pendingApproval,claudeHookSecret:g,pendingClaudeHookApprovals:new Map};this.sessions.set(h,m),this.registerClaudeHookSession(m),this.store.upsert(he(m)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(m,s," (resumed)",e),this.restoreDriverPendingApproval(p,m.pendingApproval);let C=await yn(r,s,c);if(C.length>0||m.pendingApproval){_.info({sessionId:r,historyCount:C.length},"sending history messages");let ce={type:"session.history",sessionId:h,messages:C,...Tr(m.acceptedClientMessageIds),approvalMode:u,pendingApproval:m.pendingApproval};e.readyState===1&&e.send(JSON.stringify(ce))}this.reply(e,n,!0,{sessionId:h})}catch(f){this.reply(e,n,!1,void 0,String(f))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>kr&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-kr))}async sendMessage(e,n,r,s,i,o,a,l){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(r);if(!c||!c.driver){let f=await this.resolveReconnectSession(r,i,c);if(!f){_.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}_.info({sessionId:r,agent:f.agent,source:f.source},"auto-reconnecting session"),w.increment("session.reconnect",{agent:f.agent,source:f.source}),b.emit("session.reconnect",{sessionId:r,agent:f.agent,source:f.source});try{let p=this.createDriver(f.agent),g=this.configureDriverBeforeStart(f.agent,p,c?.claudeHookSecret);await p.start(f.cwd,r,f.approvalMode),this.restoreDriverPendingApproval(p,f.pendingApproval),c?(c.approvalMode=f.approvalMode,c.pendingApproval=f.pendingApproval,c.driver=p,c.active=!0,c.clients.add(e),c.lastActivityAt=f.lastActivityAt,c.lastActivityTs=Date.now(),c.isResponding=!1,c.currentReplyText="",c.acceptedClientMessageIds=_n(c.acceptedClientMessageIds,f.acceptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,c.bufferedPrompts=c.bufferedPrompts??[],c.startupToken=c.startupToken??0,c.claudeHookSecret=g??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map):(c={sessionId:r,agent:f.agent,cwd:f.cwd,approvalMode:f.approvalMode,driver:p,clients:new Set([e]),title:f.title,createdAt:f.createdAt,lastActivityAt:f.lastActivityAt,active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:f.acceptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:f.managed,pendingApproval:f.pendingApproval,claudeHookSecret:g,pendingClaudeHookApprovals:new Map},this.sessions.set(r,c)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,f.agent," (reconnected)"),this.store.upsert(he(c)),this.updateGauges(),this.noteInventoryChanged("session_updated")}catch(p){this.reply(e,n,!1,void 0,`Failed to reconnect: ${p}`);return}}if(c.clients.add(e),c.pendingApproval){this.reply(e,n,!1,void 0,"Resolve the pending approval before sending another message.");return}if(o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,{sessionId:r,clientMessageId:o,duplicate:!0});return}if(_.info({sessionId:r,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),b.emit("session.send",{sessionId:r,agent:c.agent,messagePreview:s.slice(0,100),imageCount:a?.length??0}),Au(c),wt(c.title)){let f=ai(s,50);f&&f!==c.title&&(c.title=f),this.store.upsert(he(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId);let u=a?.length?a.map(f=>`[Attached image: ${f}]`).join(`
|
|
100
|
+
`):""}function dy(t){let e=uy(t?.message?.content);if(/\[Request interrupted by user(?: for tool use)?\]/i.test(e))return!0;let n=t?.toolUseResult;return!!(n&&typeof n=="object"&&n.interrupted===!0||typeof n=="string"&&/\[Request interrupted by user(?: for tool use)?\]/i.test(n))}function _u(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function _r(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,observedApprovalMode:t.approvalMode,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:mi()}}function Tt(t,e){let n=(0,P.basename)(e,".jsonl");return t==="claude"?n||null:n.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i)?.[1]??null}async function fy(t,e){let n=await yu(t,e),r=mu(n,64),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(!s&&typeof u.cwd=="string"&&(s=u.cwd),!i&&typeof u.sessionId=="string"&&(i=u.sessionId),o||(o=Xe([u.customTitle,u.summary])),!l){let d=wr(u),f=Xe([],d);f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||Tt("claude",t)||(0,P.basename)(t,".jsonl"),cwd:s,title:o??l??Xe([],a),approvalMode:await vu(t,"claude",e)}:null}async function py(t,e){let n=await yu(t,e),r=mu(n,96),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(s||(s=u.payload?.cwd??u.cwd??""),i||(i=u.payload?.id??u.id??""),o||(o=Xe([u.payload?.title,u.title])),!l){let d=Su(u),f=d&&!_u(d)?Xe([],d):void 0;f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||Tt("codex",t)||(0,P.basename)(t,".jsonl"),cwd:s,title:o??l??Xe([],a),approvalMode:await vu(t,"codex",e)}:null}async function hn(t,e){let n=await(0,R.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let i=await fy(t,r);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,approvalMode:i.approvalMode,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let s=await py(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,approvalMode:s.approvalMode,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function uu(t,e){let n=(0,P.join)((0,be.homedir)(),".claude","projects");try{let r;t?r=[gu(t)]:r=(await(0,R.readdir)(n,{withFileTypes:!0})).filter(c=>c.isDirectory()).map(c=>c.name);let s=[];for(let l of r){let c=(0,P.join)(n,l),u=await(0,R.readdir)(c).catch(()=>[]);for(let d of u)d.endsWith(".jsonl")&&s.push((0,P.join)(c,d))}let i=await Et(s,kt,async l=>{let c=await(0,R.stat)(l).catch(()=>null);return{path:l,mtimeMs:c?.mtimeMs??0}});return i.sort((l,c)=>c.mtimeMs-l.mtimeMs),(await Et(i,kt,async l=>{let c=await hn(l.path,"claude");return c&&e&&e.push(_r(c)),c})).filter(l=>l!==null).map(l=>_r(l)).sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Be.warn({error:String(r)},"failed to list claude sessions"),[]}}async function du(t,e){let n=(0,P.join)((0,be.homedir)(),".codex","sessions");try{let r=await(0,R.readdir)(n).catch(()=>[]),s=[];for(let l of r){let c=(0,P.join)(n,l),u=await(0,R.readdir)(c).catch(()=>[]);for(let d of u){let f=(0,P.join)(c,d),h=await(0,R.readdir)(f).catch(()=>[]);for(let g of h){let p=(0,P.join)(f,g),m=await(0,R.readdir)(p).catch(()=>[]);for(let v of m)v.endsWith(".jsonl")&&s.push((0,P.join)(p,v))}}}let i=await Et(s,kt,async l=>{let c=await(0,R.stat)(l).catch(()=>null);return{path:l,mtimeMs:c?.mtimeMs??0}});return i.sort((l,c)=>c.mtimeMs-l.mtimeMs),(await Et(i,kt,async l=>{let c=await hn(l.path,"codex");return c&&e&&(!t||c.cwd===t)&&e.push(_r(c)),c})).filter(l=>l!==null).filter(l=>!t||l.cwd===t).map(l=>_r(l)).sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Be.warn({error:String(r)},"failed to list codex sessions"),[]}}async function vn(t,e,n){let s=`list:${(0,be.homedir)()}:${t??"all"}:${e??""}`,i=_i.get(s);if(i)return i;let o=yi.get(s);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await uu(e,n);else if(t==="codex")l=await du(e,n);else{let[c,u]=await Promise.all([uu(e,n),du(e,n)]);l=[...c,...u].sort((d,f)=>f.lastActivityAt.localeCompare(d.lastActivityAt))}return _i.set(s,l),l})();return yi.set(s,a),a.finally(()=>yi.delete(s)),a}async function au(t,e){let r=`search:${(0,be.homedir)()}:${t}:${e??"all"}`,s=bi.get(r);if(s)return s;let i=vi.get(r);if(i)return i;let o=(async()=>{let a=new Set,l=t.toLowerCase();async function c(){let d=(0,P.join)((0,be.homedir)(),".claude","projects");try{let f=await(0,R.readdir)(d,{withFileTypes:!0}),h=[];for(let p of f){if(!p.isDirectory())continue;let m=(0,P.join)(d,p.name),v=await(0,R.readdir)(m).catch(()=>[]);for(let b of v)b.endsWith(".jsonl")&&h.push((0,P.join)(m,b))}let g=await Et(h,kt,p=>fu(p,l,"claude"));for(let p of g)p&&a.add(p)}catch(f){Be.warn({error:String(f)},"failed to search claude files")}}async function u(){let d=(0,P.join)((0,be.homedir)(),".codex","sessions");try{let f=[];async function h(p){let m=await(0,R.readdir)(p,{withFileTypes:!0}).catch(()=>[]);for(let v of m){let b=(0,P.join)(p,v.name);v.isDirectory()?await h(b):v.name.endsWith(".jsonl")&&f.push(b)}}await h(d);let g=await Et(f,kt,p=>fu(p,l,"codex"));for(let p of g)p&&a.add(p)}catch(f){Be.warn({error:String(f)},"failed to search codex files")}}return e==="claude"?await c():e==="codex"?await u():await Promise.all([c(),u()]),bi.set(r,a),a})();return vi.set(r,o),o.finally(()=>vi.delete(r)),o}async function fu(t,e,n){let r=(0,wi.createReadStream)(t,{encoding:"utf-8"}),s=(0,Ai.createInterface)({input:r,crlfDelay:1/0}),i=n==="claude"?hy:gy,o="",a=!1;try{for await(let l of s){if(!l.trim())continue;let c;try{c=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof c.sessionId=="string"&&(o=c.sessionId):o=c.payload?.id??c.id??""),!a){let u=i(c);u&&u.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{s.close(),r.destroy()}return a?o||Tt(n,t):null}function hy(t){return t?.type==="user"&&t.message?.role==="user"?wr(t):t?.type==="assistant"&&t.message?.role==="assistant"?Ir(t.message.content):""}function gy(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return xi(t.payload.content)}let e=Su(t);return e||""}async function Ii(t,e){let n=(0,wi.createReadStream)(t,{encoding:"utf-8"}),r=(0,Ai.createInterface)({input:n,crlfDelay:1/0});try{for await(let s of r){if(!s.trim())continue;let i;try{i=JSON.parse(s)}catch{continue}if(e(i))break}}finally{r.close(),n.destroy()}}async function bu(t,e){let n=(0,P.join)((0,be.homedir)(),".claude","projects"),r=e?gu(e):null,s=await(0,R.readdir)(n).catch(()=>[]),i=r?[r,...s.filter(o=>o!==r)]:s;for(let o of i){let a=(0,P.join)(n,o,`${t}.jsonl`);if((await(0,R.stat)(a).catch(()=>null))?.isFile())return a}return null}async function Iu(t,e,n){if(e==="claude")return bu(t,n);let r=(0,P.join)((0,be.homedir)(),".codex","sessions");return wu(r,t)}function my(t){if(t?.type==="user"&&t.message?.role==="user")return cy(t.message.content)?{kind:"toolResult",...dy(t)?{interrupted:!0}:{}}:wr(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=Ir(t.message.content),n=t.message?.stop_reason;return{kind:"assistant",stopReason:typeof n=="string"?n:n??null,...e?{text:e}:{}}}return t?.type==="system"&&t.subtype==="stop_hook_summary"?{kind:"stopHook"}:null}function yy(t){if(!t)return{};if(t.kind==="stopHook")return{};if(t.kind==="assistant"){let e=t.stopReason==null||t.stopReason==="tool_use";return{...e?{isResponding:!0}:{},...e&&t.text?{partialReplyText:t.text}:{}}}return t.kind==="toolResult"&&t.interrupted?{}:{isResponding:!0}}async function pi(t,e){if(e!=="claude")return{};let n=null;try{await Ii(t,r=>{let s=my(r);s&&(n=s)})}catch(r){return r.code!=="ENOENT"&&Be.warn({filePath:t,error:String(r)},"failed to read session runtime hints"),{}}return yy(n)}async function Ti(t,e,n){let r=await Iu(t,e,n);return r?pi(r,e):{}}async function Sn(t,e,n){let r=[],s=(i,o)=>{if(o?.coalesceConsecutiveAssistant&&i.role==="assistant"&&r[r.length-1]?.role==="assistant"){r[r.length-1]=i;return}r.push(i)};if(e==="claude")try{let i=await bu(t,n);i&&await Ii(i,o=>{if(o.type==="user"&&o.message?.role==="user"){let a=wr(o);a&&s({role:"user",content:a})}else if(o.type==="assistant"&&o.message?.role==="assistant"){let a=Ir(o.message.content);a&&s({role:"assistant",content:a})}})}catch(i){Be.warn({error:String(i)},"failed to read claude session history")}else if(e==="codex")try{let i=await Iu(t,e,n);i&&await Ii(i,o=>{if(o.type!=="response_item"||o.payload?.type!=="message")return;let a=o.payload.role;if(a!=="user"&&a!=="assistant")return;let l=xi(o.payload.content);l&&(a==="user"&&_u(l)||s({role:a,content:l},{coalesceConsecutiveAssistant:!0}))})}catch(i){Be.warn({error:String(i)},"failed to read codex session history")}return r}async function wu(t,e){try{let n=await(0,R.readdir)(t,{withFileTypes:!0});for(let r of n){let s=(0,P.join)(t,r.name);if(r.isDirectory()){let i=await wu(s,e);if(i)return i}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return s}}catch(n){Be.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Rt=require("fs"),Cu=require("path");var vy=500,Au=200;function xu(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=Au?e:e.slice(-Au)}function Sy(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)typeof n!="string"||n.length===0||e.includes(n)||e.push(n);return e}function _y(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",r=typeof e.toolName=="string"?e.toolName:"",s=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!r||!s)return;let o=e.approvalContext;return o&&typeof o=="object"&&!Array.isArray(o)&&o.provider==="codex"&&typeof o.kind=="string"&&typeof o.rpcId=="number"?{requestId:n,toolName:r,input:i,description:s,approvalContext:{provider:"codex",kind:o.kind,rpcId:o.rpcId,...typeof o.questionId=="string"?{questionId:o.questionId}:{},...typeof o.approveLabel=="string"?{approveLabel:o.approveLabel}:{},...typeof o.denyLabel=="string"?{denyLabel:o.denyLabel}:{}}}:{requestId:n,toolName:r,input:i,description:s}}function Tu(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:xu(t.acceptedClientMessageIds),interruptedClientMessageIds:xu(t.interruptedClientMessageIds),pendingApproval:_y(t.pendingApproval)}}function by(t){if(Array.isArray(t))return{records:t.map(Tu),deletedSessionIds:[]};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(Tu):[],deletedSessionIds:Sy(e.deletedSessionIds)}}return{records:[],deletedSessionIds:[]}}var Ar=class{records;deletedSessionIds;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds)}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}find(e){return this.records.find(n=>n.sessionId===e)}isDeleted(e){return this.deletedSessionIds.has(e)}upsert(e){this.deletedSessionIds.delete(e.sessionId);let n=this.records.findIndex(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}remove(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.add(e),this.scheduleSave()}flushSync(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.saveToDisk()}scheduleSave(){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.saveToDisk()},vy)}loadFromDisk(){try{let e=(0,Rt.readFileSync)(nr,"utf-8");return by(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[]}}saveToDisk(){(0,Rt.mkdirSync)((0,Cu.dirname)(nr),{recursive:!0}),(0,Rt.writeFileSync)(nr,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds]},null,2))}};var Pt=require("path"),ku=require("os");function xr(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Pt.join)((0,ku.homedir)(),t.slice(2)):t}function Iy(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r&&(e=r[1]??e),e}function Ci(t,e){let n=xr(Iy(t));if(!n||(0,Pt.isAbsolute)(n))return n;let r=xr(e??"");return r?(0,Pt.resolve)(r,n):n}var Eu={approvalRequestV1:"vibelet.approvalRequest.v1"};var Mt=require("fs"),Ru=require("path");function wy(t){return!!(t&&typeof t=="object"&&typeof t.deviceId=="string"&&typeof t.pushToken=="string"&&t.platform==="expo"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"&&(typeof t.lastSentAt=="string"||typeof t.lastSentAt>"u"))}function Ay(t){try{let e=(0,Mt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(wy):[]}catch{return[]}}function _n(t,e){(0,Mt.mkdirSync)((0,Ru.dirname)(t),{recursive:!0}),(0,Mt.writeFileSync)(t,JSON.stringify(e,null,2)+`
|
|
101
|
+
`,"utf8")}var Tr=class{constructor(e=oc){this.pushSubscriptionsPath=e;this.records=Ay(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}count(){return this.records.length}register(e,n){let r=new Date().toISOString(),s=this.records.find(o=>o.deviceId===e),i={deviceId:e,pushToken:n,platform:"expo",createdAt:s?.createdAt??r,updatedAt:r,...s?.lastSentAt?{lastSentAt:s.lastSentAt}:{}};this.records=[i,...this.records.filter(o=>o.deviceId!==e&&o.pushToken!==n)],_n(this.pushSubscriptionsPath,this.records)}unregister(e,n){let r=this.records.filter(s=>!(s.deviceId===e&&s.pushToken===n));return r.length===this.records.length?!1:(this.records=r,_n(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(r=>r.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,_n(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),r=new Date().toISOString(),s=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=r,s=!0);s&&_n(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],_n(this.pushSubscriptionsPath,this.records)}};var z=M.child({module:"push"}),xy="https://exp.host/--/api/v2/push/send",Ty="https://exp.host/--/api/v2/push/getReceipts",Cy=[0,1e3,3e3],bn=new Tr;function ky(t){return!!(t&&typeof t=="object"&&typeof t.daemonId=="string"&&typeof t.canonicalHost=="string"&&typeof t.sessionId=="string"&&(t.agent==="claude"||t.agent==="codex")&&(t.eventType==="reply_ready"||t.eventType==="approval_request")&&(typeof t.requestId>"u"||typeof t.requestId=="string"))}function Ey(t){return new Promise(e=>{setTimeout(e,t)})}function Pu(t){return t==="DeviceNotRegistered"}function Ry(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],r=[];for(let[s,i]of t.data.entries()){let o=e[s];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}r.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:r}}function Py(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[r,s]of t.data.entries()){let i=e[r];!i||!s||s.status!=="ok"||typeof s.id!="string"||s.id.length===0||n.set(s.id,i)}return n}function My(t,e){let n=[],r=[],s=t.data;for(let[i,o]of e.entries()){let a=s?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&r.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:r}}async function Ly(t,e,n,r){let s=new Map(t);for(let i of Cy){if(s.size===0)return;i>0&&await n(i);let o;try{o=await e(Ty,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...s.keys()]})})}catch(u){z.error({error:String(u),count:s.size},"push receipt request failed");return}if(!o.ok){z.error({status:o.status,statusText:o.statusText,count:s.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){z.error({count:s.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:c}=My(a,s);for(let{token:u,receipt:d}of c){let f=d.details?.error;if(z.error({token:u,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),Pu(f)){let h=r.unregisterToken(u);z.info({token:u,errorCode:f,removed:h},"push token removed after receipt rejection")}}s=new Map(l.map(u=>[u,s.get(u)]))}s.size>0&&z.warn({pendingReceipts:s.size},"push receipts still pending after polling")}function Ny(t){let e=t?.pushStore??bn,n=t?.fetchImpl??globalThis.fetch,r=t?.sleepImpl??Ey;return async function(i,o,a){let l=e.listTokens();if(l.length===0)return;let c=l.map(u=>({to:u,sound:"default",title:i,body:o,data:a,badge:1,...ky(a)&&a.eventType==="approval_request"?{categoryId:Eu.approvalRequestV1}:{}}));try{let u=await n(xy,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!u.ok){z.error({status:u.status,statusText:u.statusText},"push send failed");return}let d=await u.json().catch(()=>null);if(!d){z.error({count:c.length},"push send returned unreadable response");return}let{successfulTokens:f,ticketErrors:h}=Ry(d,l),g=Py(d,l);for(let{token:p,ticket:m}of h){let v=m.details?.error;if(z.error({token:p,message:m.message,details:m.details,ticketStatus:m.status},"push ticket rejected"),Pu(v)){let b=e.unregisterToken(p);z.info({token:p,errorCode:v,removed:b},"push token removed after ticket rejection")}}f.length>0&&(z.debug({count:f.length},"push sent"),e.markSent(f)),g.size>0&&await Ly(g,n,r,e)}catch(u){z.error({error:String(u)},"push send error")}}}function ki(t,e){bn.register(t,e),z.info({deviceId:t,token:e,total:bn.count()},"push token registered")}function Ei(t,e){let n=bn.unregister(t,e);z.info({deviceId:t,token:e,total:bn.count(),removed:n},"push token unregistered")}var Cr=Ny();var _=M.child({module:"manager"}),Oy="Done.",By="Approval required",Mu=180,Lt=200;function Ie(...t){let e=[];for(let n of t)if(n?.length)for(let r of n)!r||e.includes(r)||(e.push(r),e.length>Lt&&e.splice(0,e.length-Lt));return e}function kr(t){return t?.length?{acceptedClientMessageIds:Ie(t)}:{}}function he(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,acceptedClientMessageIds:Ie(t.acceptedClientMessageIds),interruptedClientMessageIds:Ie(t.interruptedClientMessageIds),pendingApproval:t.agent==="codex"?t.pendingApproval:void 0,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,managed:t.managed,isResponding:t.isResponding||void 0}}function Lu(t){t.managed||(t.managed=!0)}function Nu(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&ur(e)}function Ou(t,e,n){return{sessionId:t,agent:e,...n}}function Dy(t){return t.startsWith(ni)}function Bu(t){return t?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}:{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Denied from Vibelet"}}}var Er=class{constructor(e=Cr){this.pushSender=e;this.removeInventoryBackfillListener=su(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new Ar;idleSweepInterval=null;globalClients=new Set;inventoryVersion=0;removeInventoryBackfillListener;startIdleSweep(){S.idleTimeoutMs<=0&&S.turnStallTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),6e4),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=Date.now(),n=S.idleTimeoutMs,r=S.turnStallTimeoutMs;if(n<=0&&r<=0)return;let s=3600*1e3;for(let[i,o]of this.sessions){if(!o.active&&!o.driver){if(o.clients.size===0){let l=e-o.lastActivityTs;l>=s&&(_.info({sessionId:o.sessionId,inactiveMs:l},"removing inactive session from memory"),w.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(o),this.sessions.delete(i))}continue}if(!o.active||!o.driver)continue;let a=e-o.lastActivityTs;if(o.isResponding){if(r<=0||o.pendingApproval||a<r)continue;_.warn({sessionId:o.sessionId,agent:o.agent,inactiveMs:a,turnStallTimeoutMs:r},"stopping stalled driver"),w.increment("driver.stall_timeout",{agent:o.agent}),I.emit("driver.stall_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),this.resolvePendingClaudeHookApprovals(o),o.driver.stop(),o.active=!1,o.driver=null,o.isResponding=!1,o.currentReplyText="",this.updateGauges(),this.broadcast(o.sessionId,{type:"error",sessionId:o.sessionId,message:`Agent stopped responding for over ${Math.ceil(r/1e3)}s. Send a new message to continue.`}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated");continue}o.pendingApproval||n<=0||a<n||(_.info({sessionId:o.sessionId,agent:o.agent,idleMs:a,timeoutMs:n},"stopping idle driver"),w.increment("driver.idle_timeout",{agent:o.agent}),I.emit("driver.idle_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),o.driver.stop(),o.active=!1,o.driver=null,this.updateGauges(),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"))}}bindDriverLifecycle(e,n,r,s){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){_.info({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(_.debug({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"driver message received"),o.type!=="response"&&"sessionId"in o&&o.sessionId&&o.sessionId!==e.sessionId&&!this.sessions.has(o.sessionId)&&this.remapSessionId(e,o.sessionId,s),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,o.type==="session.interrupted"&&this.markLatestAcceptedClientMessageInterrupted(e),(o.type==="session.interrupted"||!Nu(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){I.emit("approval.response",{sessionId:e.sessionId,requestId:o.requestId,approved:!0}),e.pendingApproval=void 0,e.isResponding=!0,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated");return}_.warn({sessionId:e.sessionId,requestId:o.requestId},"failed to auto-approve codex request; falling back to pending approval flow")}e.isResponding=!1,e.pendingApproval={requestId:o.requestId,toolName:o.toolName,input:o.input,description:o.description,...o.approvalContext?{approvalContext:o.approvalContext}:{}},this.pushSender(By,this.buildPushBody(`${e.title||e.sessionId}: ${o.description||o.toolName}`),{sessionId:e.sessionId,agent:e.agent,requestId:o.requestId,eventType:"approval_request"})}n==="claude"&&o.type==="approval.request"&&ur(o.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[o.requestId]={message:e.lastUserMessage,toolName:o.toolName}:_.warn({sessionId:e.sessionId,requestId:o.requestId},"missing lastUserMessage for synthetic approval retry")),this.touchSession(e.sessionId,o.type!=="text.delta"),(o.type==="approval.request"||o.type==="session.done"||o.type==="session.interrupted")&&this.noteInventoryChanged("session_updated"),this.broadcast(e.sessionId,o),(o.type==="session.done"||o.type==="session.interrupted")&&e.bufferedPrompts.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){_.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}_.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"driver exited"),I.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:o}),w.increment("driver.exit",{agent:n,abnormal:o&&o!==0?"true":"false"});let a=!!(e.pendingApproval&&(e.agent==="codex"||o===0&&Nu(e)));this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",a||(e.pendingApproval=void 0),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated")})}remapSessionId(e,n,r){if(!n||n===e.sessionId)return;let s=this.sessions.get(n);if(s&&s!==e){_.warn({oldSessionId:e.sessionId,newSessionId:n},"skipping session ID remap because target already exists");return}let i=e.sessionId;_.info({oldSessionId:i,newSessionId:n},"session ID updated"),this.store.remove(i),this.sessions.delete(i),e.sessionId=n,this.sessions.set(n,e),this.store.upsert(he(e)),this.noteInventoryChanged("session_remapped"),r&&this.reply(r,`id_update_${Date.now()}`,!0,{sessionId:n,oldSessionId:i})}flushBufferedPrompt(e,n=!1){if(!e.driver||!e.active||e.startupInProgress||e.pendingApproval||!n&&e.isResponding)return!1;let r=e.bufferedPrompts.shift();return r?(e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=r,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),e.driver.sendPrompt(r,e.model),!0):!1}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let r=e.driver,s=e.sessionId,i=e.startupToken,o=w.startTimer("driver.spawn");(async()=>{try{let a=await r.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(s)!==e||e.startupToken!==i||e.driver!==r){_.info({pendingSessionId:s,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,_.info({pendingSessionId:s,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==s&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(s)!==e||e.startupToken!==i){_.info({pendingSessionId:s,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1,e.bufferedPrompts=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.error({sessionId:s,cwd:e.cwd,error:String(a)},"async codex createSession error"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to start Codex session: ${String(a)}`})}})()}configureDriverBeforeStart(e,n,r,s){if(e==="codex"&&n instanceof dn&&s&&n.setModel(s),e!=="claude"||!(n instanceof un))return;let i=r??(0,Ri.randomUUID)().replace(/-/g,"");return n.configureHookBridge(S.port,i),i}registerClaudeHookSession(e){e.agent!=="claude"||!e.claudeHookSecret||this.claudeHookSessions.set(e.claudeHookSecret,e)}unregisterClaudeHookSession(e){if(e.agent!=="claude"||!e.claudeHookSecret)return;this.claudeHookSessions.get(e.claudeHookSecret)===e&&this.claudeHookSessions.delete(e.claudeHookSecret)}resolvePendingClaudeHookApprovals(e,n=cn){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&Dy(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(_.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return _.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),cn;if(r.approvalMode==="autoApprove")return Bu(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return cn;let o=n.tool_input??n.toolInput,a=o&&typeof o=="object"&&!Array.isArray(o)?o:{},l=typeof n.tool_use_id=="string"?n.tool_use_id:typeof n.toolUseId=="string"?n.toolUseId:"",c=`${ni}${l.trim()||(0,Ri.randomUUID)()}`,u=r.pendingClaudeHookApprovals.get(c);if(u)return u.promise;let d=`Claude requested permissions to use ${i}.`,f,h=new Promise(g=>{f=g});return r.pendingClaudeHookApprovals.set(c,{requestId:c,promise:h,resolve:g=>{r.pendingClaudeHookApprovals.delete(c),f(g)}}),r.pendingApproval={requestId:c,toolName:i,input:a,description:d},I.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:i}),this.touchSession(r.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:c,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,r){if(this.isDeletedSession(e))return;let s=new Date().toISOString(),i=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.pendingApproval,c=r?.title??"",u=r?.createdAt??s,d=r?.lastActivityAt??s,f=Ie(r?.acceptedClientMessageIds),h=Ie(r?.interruptedClientMessageIds),g=r?.isResponding,p=r?"memory":"client",m=this.store.find(e);if(m)i=m.agent,o=m.cwd||o,a=m.approvalMode??a,l=m.pendingApproval??l,c=m.title||c,u=m.createdAt||u,d=m.lastActivityAt||d,f=Ie(m.acceptedClientMessageIds,f),h=Ie(m.interruptedClientMessageIds,h),p="record";else if(!r){let b=(await vn(n??i)).find(K=>K.sessionId===e);b&&(i=b.agent,o=b.cwd||o,c=b.title??c,u=b.createdAt,d=b.lastActivityAt,g=b.runtime.isResponding??g,p="scanner")}if(!i&&n&&(i=n,p=r?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,pendingApproval:l,title:c,createdAt:u,lastActivityAt:d,acceptedClientMessageIds:f,interruptedClientMessageIds:h,source:p,managed:r?.managed??m?.managed,isResponding:g||void 0}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let r of this.sessions.values()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Ou(r.sessionId,r.agent,r.pendingApproval)))}for(let r of this.store.getAll()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Ou(r.sessionId,r.agent,r.pendingApproval)))}return e}restoreDriverPendingApproval(e,n){n&&e.restorePendingApproval?.(n)}async reviveSessionForApproval(e){if(e.driver)return!0;if(!e.pendingApproval||e.agent!=="codex")return!1;let n=this.createDriver(e.agent),r=this.configureDriverBeforeStart(e.agent,n,e.claudeHookSecret);return await n.start(e.cwd,e.sessionId,e.approvalMode),this.restoreDriverPendingApproval(n,e.pendingApproval),e.driver=n,e.active=!0,e.isResponding=!1,e.currentReplyText="",e.startupInProgress=!1,e.bufferedPrompts=e.bufferedPrompts??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=r??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(he(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),!0}buildPushBody(e){let n=e.replace(/\s+/g," ").trim();return n?n.length<=Mu?n:`${n.slice(0,Math.max(1,Mu-3)).trimEnd()}...`:Oy}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}touchSession(e,n=!0){let r=new Date().toISOString(),s=this.sessions.get(e);if(s){s.lastActivityAt=r,s.lastActivityTs=Date.now(),n&&this.store.upsert(he(s));return}let i=this.store.find(e);i&&this.store.upsert({...i,lastActivityAt:r})}updateGauges(){let e=0;for(let n of this.sessions.values())n.active&&e++;w.gauge("session.active",e)}activeSessionSnapshots(){let e=[];for(let n of this.sessions.values())n.sessionId.startsWith("pending_")||n.active&&e.push({sessionId:n.sessionId,agent:n.agent,cwd:n.cwd,approvalMode:n.approvalMode,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,...n.pendingApproval?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return vn(e,n)}async handle(e,n){switch(_.debug({action:n.action},"handling client message"),n.action){case"session.create":await this.createSession(e,n.id,n.agent,n.cwd,n.approvalMode,n.continueSession,n.model);break;case"session.resume":await this.resumeSession(e,n.id,n.sessionId,n.agent);break;case"session.send":await this.sendMessage(e,n.id,n.sessionId,n.message,n.agent,n.clientMessageId,n.images,n.model);break;case"session.approve":await this.approve(e,n.id,n.sessionId,n.requestId,n.approved);break;case"session.setApprovalMode":await this.setApprovalMode(e,n.id,n.sessionId,n.approvalMode);break;case"session.interrupt":this.interrupt(e,n.id,n.sessionId);break;case"session.stop":this.stopSession(e,n.id,n.sessionId);break;case"session.delete":this.deleteSession(e,n.id,n.sessionId);break;case"session.history":await this.sendHistory(e,n.id,n.sessionId,n.agent);break;case"reconnect.snapshot":await this.sendReconnectSnapshot(e,n.id,n.agent,n.cwd,n.search,n.activeSessionId,n.activeAgent,n.customTitles);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor,n.customTitles);break}}addGlobalClient(e){this.globalClients.add(e)}removeClient(e){this.globalClients.delete(e);for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep(),this.removeInventoryBackfillListener(),this.globalClients.clear();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){_.error({sessionId:e.sessionId,agent:e.agent,error:String(n)},"failed to stop session on shutdown")}e.active=!1,e.driver=null,e.clients.clear(),this.unregisterClaudeHookSession(e)}this.claudeHookSessions.clear(),this.store.flushSync()}getActiveSessionCount(){let e=0;for(let n of this.sessions.values())n.active&&e++;return e}prewarmCaches(){Sr({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds(),skipGitMetadata:!0}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}noteInventoryChanged(e){if(this.inventoryVersion+=1,this.globalClients.size===0)return;let n={type:"sessions.changed",version:this.inventoryVersion,reason:e},r=JSON.stringify(n);for(let s of this.globalClients)s.readyState===1&&s.send(r)}async createSession(e,n,r,s,i,o,a){s=xr(s),_.info({agent:r,cwd:s,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,Du.stat)(s)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${s}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${s}`);return}if(o)try{let c=(await this.listRecentSessionsForContinue(r,s)).find(u=>!this.isDeletedSession(u.sessionId));if(c)return _.info({sessionId:c.sessionId,cwd:s},"continue mode: resuming last session"),this.resumeSession(e,n,c.sessionId,r,s,i);_.info("continue mode: no previous sessions found, creating new")}catch(l){_.warn({error:String(l)},"continue mode: error finding sessions, creating new")}try{let l=this.createDriver(r),c=this.configureDriverBeforeStart(r,l,void 0,a);if(r==="codex"){let g=`pending_${Date.now()}`;_.info({sessionId:g,agent:r,cwd:s},"session created (pending codex startup)"),w.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:g,agent:r,cwd:s,approvalMode:i});let p={sessionId:g,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,bufferedPrompts:[],startupToken:1,managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(g,p),this.registerClaudeHookSession(p),this.store.upsert(he(p)),this.updateGauges(),br(),hr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(p,r,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(p,e);return}let u=w.startTimer("driver.spawn"),d=await l.start(s,void 0,i),f=u();_.info({sessionId:d,agent:r,spawnMs:f},"session created"),w.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:d,agent:r,cwd:s,approvalMode:i});let h={sessionId:d,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(d,h),this.registerClaudeHookSession(h),this.store.upsert(he(h)),this.updateGauges(),br(),hr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,r,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){_.error({agent:r,cwd:s,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,r,s,i,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(a&&a.active){a.clients.add(e),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated");let f=await Sn(r,s,a.cwd),h=this.annotateHistoryMessages(f,a.acceptedClientMessageIds,a.interruptedClientMessageIds),g=this.currentPartialReplyText(a);if(f.length>0||g||a.approvalMode||a.pendingApproval){let p={type:"session.history",sessionId:r,messages:h,...kr(a.acceptedClientMessageIds),isResponding:a.isResponding||void 0,partialReplyText:g,approvalMode:a.approvalMode,pendingApproval:a.pendingApproval};e.readyState===1&&e.send(JSON.stringify(p))}this.reply(e,n,!0,{sessionId:r});return}let l=this.store.find(r),c=i||l?.cwd||"",u=o??l?.approvalMode,d=l?.title??"Resumed session";try{let f=w.startTimer("driver.spawn"),h=this.createDriver(s),g=this.configureDriverBeforeStart(s,h),p=await h.start(c,r,u),m=f();_.info({sessionId:p,agent:s,spawnMs:m},"session resumed"),w.increment("session.resume",{agent:s}),I.emit("session.resume",{sessionId:p,agent:s,cwd:c});let v={sessionId:p,agent:s,cwd:c,approvalMode:u,driver:h,clients:new Set([e]),title:d,createdAt:l?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l?.acceptedClientMessageIds??[],interruptedClientMessageIds:l?.interruptedClientMessageIds??[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:l?.managed,pendingApproval:l?.pendingApproval,claudeHookSecret:g,pendingClaudeHookApprovals:new Map};this.sessions.set(p,v),this.registerClaudeHookSession(v),this.store.upsert(he(v)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(v,s," (resumed)",e),this.restoreDriverPendingApproval(h,v.pendingApproval);let b=await Sn(r,s,c),K=this.annotateHistoryMessages(b,v.acceptedClientMessageIds,v.interruptedClientMessageIds);if(b.length>0||v.pendingApproval){_.info({sessionId:r,historyCount:b.length},"sending history messages");let C={type:"session.history",sessionId:p,messages:K,...kr(v.acceptedClientMessageIds),approvalMode:u,pendingApproval:v.pendingApproval};e.readyState===1&&e.send(JSON.stringify(C))}this.reply(e,n,!0,{sessionId:p})}catch(f){this.reply(e,n,!1,void 0,String(f))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>Lt&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Lt))}rememberInterruptedClientMessage(e,n){e.interruptedClientMessageIds.includes(n)||(e.interruptedClientMessageIds.push(n),e.interruptedClientMessageIds.length>Lt&&e.interruptedClientMessageIds.splice(0,e.interruptedClientMessageIds.length-Lt))}markLatestAcceptedClientMessageInterrupted(e){let n=e.acceptedClientMessageIds[e.acceptedClientMessageIds.length-1];n&&this.rememberInterruptedClientMessage(e,n)}annotateHistoryMessages(e,n,r){if(!e.length||!n?.length||!r?.length)return e;let s=new Set(r),i=[];for(let u=0;u<e.length;u+=1)e[u]?.role==="user"&&i.push(u);if(i.length===0)return e;let o=Math.min(i.length,n.length);if(o===0)return e;let a=new Map,l=n.length-o,c=i.length-o;for(let u=0;u<o;u+=1){let d=n[l+u];s.has(d)&&a.set(i[c+u],"interrupted")}return a.size===0?e:e.map((u,d)=>u.role==="user"&&a.has(d)?{...u,delivery:"interrupted"}:u)}async sendMessage(e,n,r,s,i,o,a,l){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(r);if(!c||!c.driver){let f=await this.resolveReconnectSession(r,i,c);if(!f){_.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}_.info({sessionId:r,agent:f.agent,source:f.source},"auto-reconnecting session"),w.increment("session.reconnect",{agent:f.agent,source:f.source}),I.emit("session.reconnect",{sessionId:r,agent:f.agent,source:f.source});try{let h=this.createDriver(f.agent),g=this.configureDriverBeforeStart(f.agent,h,c?.claudeHookSecret);await h.start(f.cwd,r,f.approvalMode),this.restoreDriverPendingApproval(h,f.pendingApproval),c?(c.approvalMode=f.approvalMode,c.pendingApproval=f.pendingApproval,c.driver=h,c.active=!0,c.clients.add(e),c.lastActivityAt=f.lastActivityAt,c.lastActivityTs=Date.now(),c.isResponding=!1,c.currentReplyText="",c.acceptedClientMessageIds=Ie(c.acceptedClientMessageIds,f.acceptedClientMessageIds),c.interruptedClientMessageIds=Ie(c.interruptedClientMessageIds,f.interruptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,c.bufferedPrompts=c.bufferedPrompts??[],c.startupToken=c.startupToken??0,c.claudeHookSecret=g??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map):(c={sessionId:r,agent:f.agent,cwd:f.cwd,approvalMode:f.approvalMode,driver:h,clients:new Set([e]),title:f.title,createdAt:f.createdAt,lastActivityAt:f.lastActivityAt,active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:f.acceptedClientMessageIds,interruptedClientMessageIds:f.interruptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:f.managed,pendingApproval:f.pendingApproval,claudeHookSecret:g,pendingClaudeHookApprovals:new Map},this.sessions.set(r,c)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,f.agent," (reconnected)"),this.store.upsert(he(c)),this.updateGauges(),this.noteInventoryChanged("session_updated")}catch(h){this.reply(e,n,!1,void 0,`Failed to reconnect: ${h}`);return}}if(c.clients.add(e),c.pendingApproval){this.reply(e,n,!1,void 0,"Resolve the pending approval before sending another message.");return}if(o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,{sessionId:r,clientMessageId:o,duplicate:!0});return}if(_.info({sessionId:r,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),I.emit("session.send",{sessionId:r,agent:c.agent,messagePreview:s.slice(0,100),imageCount:a?.length??0}),Lu(c),wt(c.title)){let f=li(s,50);f&&f!==c.title&&(c.title=f),this.store.upsert(he(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId);let u=a?.length?a.map(f=>`[Attached image: ${f}]`).join(`
|
|
102
102
|
`):"",d=u?s?`${s}
|
|
103
103
|
|
|
104
|
-
${u}`:u:s;if(l!==void 0&&(c.model=l||void 0),c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.bufferedPrompts.push(d),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0);return}if(c.isResponding){c.bufferedPrompts.push(d),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0);return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(d,c.model),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0)}async sendReconnectSnapshot(e,n,r,s,i,o,a){try{let l=this.getDeletedSessionIds(),c;try{c=await yr({agent:r,cwd:s,search:i,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:l})}catch(f){_.warn({error:String(f)},"failed to build reconnect snapshot session list"),c={sessions:[],nextCursor:void 0}}c={...c,inventoryVersion:this.inventoryVersion};let u;if(o&&!l.has(o)){let f=a??c.sessions.find(h=>h.sessionId===o)?.agent,p=this.sessions.get(o);p&&p.clients.add(e);let g=await this.resolveReconnectSession(o,f,p);if(g){let h=await yn(o,g.agent,p?.cwd??g.cwd),y=p?{}:await Ai(o,g.agent,g.cwd);u={sessionId:o,agent:g.agent,messages:h,...Tr(p?.acceptedClientMessageIds??g.acceptedClientMessageIds),isResponding:p?.isResponding??y.isResponding??g.isResponding,partialReplyText:p?this.currentPartialReplyText(p):y.partialReplyText,approvalMode:p?.approvalMode??g.approvalMode,...p?.pendingApproval?{pendingApproval:p.pendingApproval}:{}}}}let d=this.collectReconnectPendingApprovals();w.increment("reconnect.snapshot",{activeSession:u?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:c.sessions,nextCursor:c.nextCursor,inventoryVersion:c.inventoryVersion,...u?{activeSession:u}:{},...d.length>0?{pendingApprovals:d}:{}}})}catch(l){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(l)}`)}}async approve(e,n,r,s,i){let o=this.sessions.get(r),a=o?.pendingApproval,l=o?.pendingClaudeHookApprovals.get(s);if(o&&l){o.pendingApproval=void 0,b.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),l.resolve(ku(i)),o.isResponding=!0,this.reply(e,n,!0);return}let c=o?.syntheticApprovalRetries[s];if(o&&c&&cr(s)){delete o.syntheticApprovalRetries[s],o.pendingApproval=void 0,b.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0),i&&await this.retrySyntheticClaudeApproval(o,c);return}if(o&&!o.driver&&a)try{await this.reviveSessionForApproval(o)}catch(d){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(d)}`);return}if(!o?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(b.emit("approval.response",{sessionId:r,requestId:s,approved:i}),!o.driver.respondApproval(s,i)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}o.pendingApproval=void 0,this.touchSession(o.sessionId),o.isResponding=!0,this.noteInventoryChanged("session_updated"),this.reply(e,n,!0)}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",s=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,s,e.claudeHookSecret);await s.start(e.cwd,e.sessionId,r),e.driver=s,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken=0,e.claudeHookSecret=i??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(he(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),s.sendPrompt(n.message,e.model)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken+=1,this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,s){let i=this.sessions.get(r);if(!i){let a=this.store.find(r);a?(s===null?delete a.approvalMode:a.approvalMode=s,this.store.upsert(a),this.noteInventoryChanged("session_updated"),_.info({sessionId:r,agent:a.agent,newMode:s},"approval mode changed (inactive session)")):_.info({sessionId:r,newMode:s},"approval mode changed (untracked session)"),this.reply(e,n,!0,{approvalMode:s});return}if(s===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let o=i.approvalMode;i.approvalMode=s,this.store.upsert(he(i)),this.noteInventoryChanged("session_updated"),_.info({sessionId:r,agent:i.agent,oldMode:o,newMode:s},"approval mode changed"),i.driver&&i.driver.setApprovalMode(s),this.reply(e,n,!0,{approvalMode:s})}interrupt(e,n,r){let s=this.sessions.get(r);if(!s?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(b.emit("session.interrupt",{sessionId:r,agent:s.agent}),s.startupInProgress){let i=s.isResponding||s.bufferedPrompts.length>0;_.info({sessionId:r,agent:s.agent,hadBufferedTurn:i},"interrupting pending startup session"),s.bufferedPrompts=[],s.isResponding=!1,s.currentReplyText="",s.lastUserMessage=void 0,s.pendingApproval=void 0,this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0),i&&this.broadcast(s.sessionId,{type:"session.interrupted",sessionId:s.sessionId});return}s.driver.interrupt(),this.reply(e,n,!0)}stopSession(e,n,r){let s=this.sessions.get(r);if(!s){this.reply(e,n,!1,void 0,"Session not found");return}_.info({sessionId:r,agent:s.agent},"stopping session"),b.emit("session.stop",{sessionId:r,agent:s.agent}),Au(s),this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),s.active=!1,s.driver=null,s.isResponding=!1,s.currentReplyText="",s.pendingApproval=void 0,s.startupInProgress=!1,s.bufferedPrompts=[],s.startupToken+=1,this.updateGauges(),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0)}deleteSession(e,n,r){let s=this.sessions.get(r);s&&(_.info({sessionId:r,agent:s.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),s.startupInProgress=!1,s.bufferedPrompts=[],s.startupToken+=1,this.unregisterClaudeHookSession(s),this.sessions.delete(r)),b.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),Sr(),fr(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0)}async sendHistory(e,n,r,s){let i=this.sessions.get(r),o=i?.active?i:void 0;if(!i&&this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}i&&i.clients.add(e);let a=o?.cwd??i?.cwd??this.store.find(r)?.cwd??"",l=this.store.find(r),c=await yn(r,s,a),u=o?{}:await Ai(r,s,a),d=o?.isResponding??u.isResponding,f=o?this.currentPartialReplyText(o):u.partialReplyText;_.info({sessionId:r,historyCount:c.length,isResponding:d,approvalMode:i?.approvalMode??l?.approvalMode},"sending history");let p={type:"session.history",sessionId:r,messages:c,...Tr(i?.acceptedClientMessageIds??l?.acceptedClientMessageIds),isResponding:d,partialReplyText:f,approvalMode:i?.approvalMode??l?.approvalMode,pendingApproval:i?.pendingApproval??l?.pendingApproval};e.readyState===1&&e.send(JSON.stringify(p)),this.reply(e,n,!0)}async listSessions(e,n,r,s,i,o=50,a){try{let l=await yr({agent:r,cwd:s,search:i,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,{...l,inventoryVersion:this.inventoryVersion})}catch(l){this.reply(e,n,!1,void 0,String(l))}}createDriver(e){switch(e){case"claude":return new ln;case"codex":return new cn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){_.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let s=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:r.clients,o=i.size,a=0,l=0;for(let c of i)c.readyState===1?(c.send(s),a++):l++;if(l>0&&w.increment("broadcast.fail"),n.type!=="text.delta"&&_.debug({sessionId:e,msgType:n.type,sent:a,total:o},"broadcast"),n.type==="text.delta"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let c=r.title||e,u=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(c,u,{sessionId:e,agent:r.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,s,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:s,error:i};e.send(JSON.stringify(o))}};function Ei(t,e){if(!e.deviceId){e.respond({type:"response",id:t.id,ok:!1,error:"device_auth_required"});return}t.action==="push.register"?e.registerToken(e.deviceId,t.pushToken):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Eu=require("child_process");function Ry(t,e){return(0,Eu.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function Py(t){let e=t.split(`
|
|
105
|
-
`).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function
|
|
106
|
-
`,"utf8")}function
|
|
107
|
-
`,"utf8")}var
|
|
104
|
+
${u}`:u:s;if(l!==void 0&&(c.model=l||void 0),c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.bufferedPrompts.push(d),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0);return}if(c.isResponding){c.bufferedPrompts.push(d),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0);return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(d,c.model),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0)}async sendReconnectSnapshot(e,n,r,s,i,o,a,l){try{let c=this.getDeletedSessionIds(),u;try{u=await Sr({agent:r,cwd:s,search:i,customTitles:l,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:c})}catch(h){_.warn({error:String(h)},"failed to build reconnect snapshot session list"),u={sessions:[],nextCursor:void 0}}u={...u,inventoryVersion:this.inventoryVersion};let d;if(o&&!c.has(o)){let h=a??u.sessions.find(m=>m.sessionId===o)?.agent,g=this.sessions.get(o);g&&g.clients.add(e);let p=await this.resolveReconnectSession(o,h,g);if(p){let m=await Sn(o,p.agent,g?.cwd??p.cwd),v=this.annotateHistoryMessages(m,g?.acceptedClientMessageIds??p.acceptedClientMessageIds,g?.interruptedClientMessageIds??p.interruptedClientMessageIds),b=g?{}:await Ti(o,p.agent,p.cwd);d={sessionId:o,agent:p.agent,messages:v,...kr(g?.acceptedClientMessageIds??p.acceptedClientMessageIds),isResponding:g?.isResponding??b.isResponding??p.isResponding,partialReplyText:g?this.currentPartialReplyText(g):b.partialReplyText,approvalMode:g?.approvalMode??p.approvalMode,...g?.pendingApproval?{pendingApproval:g.pendingApproval}:{}}}}let f=this.collectReconnectPendingApprovals();w.increment("reconnect.snapshot",{activeSession:d?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:u.sessions,nextCursor:u.nextCursor,inventoryVersion:u.inventoryVersion,...d?{activeSession:d}:{},...f.length>0?{pendingApprovals:f}:{}}})}catch(c){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(c)}`)}}async approve(e,n,r,s,i){let o=this.sessions.get(r),a=o?.pendingApproval,l=o?.pendingClaudeHookApprovals.get(s);if(o&&l){o.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),l.resolve(Bu(i)),o.isResponding=!0,this.reply(e,n,!0);return}let c=o?.syntheticApprovalRetries[s];if(o&&c&&ur(s)){delete o.syntheticApprovalRetries[s],o.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0),i&&await this.retrySyntheticClaudeApproval(o,c);return}if(o&&!o.driver&&a)try{await this.reviveSessionForApproval(o)}catch(d){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(d)}`);return}if(!o?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),!o.driver.respondApproval(s,i)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}o.pendingApproval=void 0,this.touchSession(o.sessionId),o.isResponding=!0,this.noteInventoryChanged("session_updated"),this.reply(e,n,!0)}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",s=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,s,e.claudeHookSecret);await s.start(e.cwd,e.sessionId,r),e.driver=s,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken=0,e.claudeHookSecret=i??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(he(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),s.sendPrompt(n.message,e.model)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken+=1,this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),_.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,s){let i=this.sessions.get(r);if(!i){let a=this.store.find(r);a?(s===null?delete a.approvalMode:a.approvalMode=s,this.store.upsert(a),this.noteInventoryChanged("session_updated"),_.info({sessionId:r,agent:a.agent,newMode:s},"approval mode changed (inactive session)")):_.info({sessionId:r,newMode:s},"approval mode changed (untracked session)"),this.reply(e,n,!0,{approvalMode:s});return}if(s===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let o=i.approvalMode;i.approvalMode=s,this.store.upsert(he(i)),this.noteInventoryChanged("session_updated"),_.info({sessionId:r,agent:i.agent,oldMode:o,newMode:s},"approval mode changed"),i.driver&&i.driver.setApprovalMode(s),this.reply(e,n,!0,{approvalMode:s})}interrupt(e,n,r){let s=this.sessions.get(r);if(!s){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("session.interrupt",{sessionId:r,agent:s.agent}),!s.driver){(s.isResponding||s.bufferedPrompts.length>0)&&(_.info({sessionId:r,agent:s.agent},"interrupting driverless session with stale responding state"),s.bufferedPrompts=[],s.isResponding=!1,s.currentReplyText="",s.lastUserMessage=void 0,s.pendingApproval=void 0,this.markLatestAcceptedClientMessageInterrupted(s),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(s.sessionId,{type:"session.interrupted",sessionId:s.sessionId})),this.reply(e,n,!0);return}if(s.startupInProgress){let i=s.isResponding||s.bufferedPrompts.length>0;_.info({sessionId:r,agent:s.agent,hadBufferedTurn:i},"interrupting pending startup session"),s.bufferedPrompts=[],s.isResponding=!1,s.currentReplyText="",s.lastUserMessage=void 0,s.pendingApproval=void 0,i&&this.markLatestAcceptedClientMessageInterrupted(s),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0),i&&this.broadcast(s.sessionId,{type:"session.interrupted",sessionId:s.sessionId});return}s.driver.interrupt(),this.reply(e,n,!0)}stopSession(e,n,r){let s=this.sessions.get(r);if(!s){this.reply(e,n,!1,void 0,"Session not found");return}_.info({sessionId:r,agent:s.agent},"stopping session"),I.emit("session.stop",{sessionId:r,agent:s.agent}),Lu(s);let i=s.isResponding||s.bufferedPrompts.length>0||s.startupInProgress;this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),s.active=!1,s.driver=null,s.isResponding=!1,s.currentReplyText="",s.pendingApproval=void 0,s.startupInProgress=!1,s.bufferedPrompts=[],s.startupToken+=1,i&&this.markLatestAcceptedClientMessageInterrupted(s),this.updateGauges(),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0)}deleteSession(e,n,r){let s=this.sessions.get(r);s&&(_.info({sessionId:r,agent:s.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),s.startupInProgress=!1,s.bufferedPrompts=[],s.startupToken+=1,this.unregisterClaudeHookSession(s),this.sessions.delete(r)),I.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),br(),hr(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0)}async sendHistory(e,n,r,s){let i=this.sessions.get(r),o=i?.active?i:void 0;if(!i&&this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}i&&i.clients.add(e);let a=o?.cwd??i?.cwd??this.store.find(r)?.cwd??"",l=this.store.find(r),c=await Sn(r,s,a),u=this.annotateHistoryMessages(c,i?.acceptedClientMessageIds??l?.acceptedClientMessageIds,i?.interruptedClientMessageIds??l?.interruptedClientMessageIds),d=o||i?{}:await Ti(r,s,a),f=o?.isResponding??d.isResponding,h=o?this.currentPartialReplyText(o):d.partialReplyText;_.info({sessionId:r,historyCount:c.length,isResponding:f,approvalMode:i?.approvalMode??l?.approvalMode},"sending history");let g={type:"session.history",sessionId:r,messages:u,...kr(i?.acceptedClientMessageIds??l?.acceptedClientMessageIds),isResponding:f,partialReplyText:h,approvalMode:i?.approvalMode??l?.approvalMode,pendingApproval:i?.pendingApproval??l?.pendingApproval};e.readyState===1&&e.send(JSON.stringify(g)),this.reply(e,n,!0)}async listSessions(e,n,r,s,i,o=50,a,l){try{let c=await Sr({agent:r,cwd:s,search:i,customTitles:l,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,{...c,inventoryVersion:this.inventoryVersion})}catch(c){this.reply(e,n,!1,void 0,String(c))}}createDriver(e){switch(e){case"claude":return new un;case"codex":return new dn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){_.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let s=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:r.clients,o=i.size,a=0,l=0;for(let c of i)c.readyState===1?(c.send(s),a++):l++;if(l>0&&w.increment("broadcast.fail"),n.type!=="text.delta"&&_.debug({sessionId:e,msgType:n.type,sent:a,total:o},"broadcast"),n.type==="text.delta"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let c=r.title||e,u=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(c,u,{sessionId:e,agent:r.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,s,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:s,error:i};e.send(JSON.stringify(o))}};function Pi(t,e){if(!e.deviceId){e.respond({type:"response",id:t.id,ok:!1,error:"device_auth_required"});return}t.action==="push.register"?e.registerToken(e.deviceId,t.pushToken):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Hu=require("child_process");function Hy(t,e){return(0,Hu.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function Fy(t){let e=t.split(`
|
|
105
|
+
`).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Fu(t,e=Hy){let n;try{n=Fy(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(r=>{try{let s=e("ps",["-p",String(r),"-o","command="]);return s?{pid:r,command:s}:{pid:r}}catch{return{pid:r}}})}var Nt=require("fs"),Mi=require("os"),qu=require("crypto"),Wu=require("path");function ju(t){return(0,qu.randomBytes)(t).toString("base64url")}function Uy(){return`d_${ju(12)}`}function qy(){return(0,Mi.hostname)()}function Wy(){let t=(0,Mi.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function jy(t){return{daemonId:Uy(),daemonSecret:ju(32),displayName:qy(),canonicalHost:Wy(),port:t,createdAt:new Date().toISOString()}}function Uu(t,e){(0,Nt.mkdirSync)((0,Wu.dirname)(e),{recursive:!0}),(0,Nt.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
106
|
+
`,"utf8")}function Gu(t,e=sc){try{let r=(0,Nt.readFileSync)(e,"utf8"),s=JSON.parse(r);if(typeof s.daemonId=="string"&&typeof s.daemonSecret=="string"&&typeof s.displayName=="string"&&typeof s.canonicalHost=="string"&&typeof s.createdAt=="string"){let i={daemonId:s.daemonId,daemonSecret:s.daemonSecret,displayName:s.displayName,canonicalHost:s.canonicalHost,port:typeof s.port=="number"&&Number.isFinite(s.port)?s.port:t,createdAt:s.createdAt};return i.port!==t&&(i.port=t,Uu(i,e)),i}}catch{}let n=jy(t);return Uu(n,e),n}var Ot=require("crypto"),Bt=require("fs"),$u=require("path");function Li(t){return(0,Ot.randomBytes)(t).toString("base64url")}function Ni(t){return(0,Ot.createHash)("sha256").update(t).digest("hex")}function Vu(t,e){let n=Buffer.from(t),r=Buffer.from(e);return n.length!==r.length?!1:(0,Ot.timingSafeEqual)(n,r)}function Gy(t){try{let e=(0,Bt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(r=>r&&typeof r.deviceId=="string"&&typeof r.deviceName=="string"&&typeof r.tokenHash=="string"&&typeof r.createdAt=="string"&&typeof r.lastSeenAt=="string"&&(typeof r.revokedAt=="string"||r.revokedAt===null)):[]}catch{return[]}}function In(t,e){(0,Bt.mkdirSync)((0,$u.dirname)(t),{recursive:!0}),(0,Bt.writeFileSync)(t,JSON.stringify(e,null,2)+`
|
|
107
|
+
`,"utf8")}var Rr=class{constructor(e=ic){this.pairingsPath=e;this.records=Gy(e)}records;windows=new Map;list(){return this.records.slice()}pairedCount(){return this.records.filter(e=>!e.revokedAt).length}openWindow(e=5*6e4,n=!1){let r=`pair_${Li(8)}`,s=Li(24),i=new Date(Date.now()+e).toISOString(),o={pairingId:r,pairNonce:s,expiresAt:i,reusable:n};return this.windows.set(s,o),o}consumeWindow(e){let n=this.windows.get(e);return!n||(n.reusable||this.windows.delete(e),new Date(n.expiresAt).getTime()<Date.now())?null:n}issuePairToken(e,n){let r=new Date().toISOString(),s=Li(32),i={deviceId:e,deviceName:n,tokenHash:Ni(s),createdAt:r,lastSeenAt:r,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),In(this.pairingsPath,this.records),s}validatePairToken(e,n,r=!0){let s=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!s)return!1;let i=Ni(n);return Vu(s.tokenHash,i)?(r&&(s.lastSeenAt=new Date().toISOString(),In(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let r=Ni(e),s=this.records.find(i=>!i.revokedAt&&Vu(i.tokenHash,r));return s?(n&&(s.lastSeenAt=new Date().toISOString(),In(this.pairingsPath,this.records)),s):null}revoke(e){let n=this.records.find(r=>r.deviceId===e&&!r.revokedAt);return n?(n.revokedAt=new Date().toISOString(),In(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),In(this.pairingsPath,this.records)}};function et(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function Vy(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function Oi(t,e){return Vy(t)??e}function Pr(t,e){return!!(t&&e&&t===e)}function Bi(t,e,n,r=!0){return t?Pr(t,e)?!0:!!n(t,r):!1}var Ju=require("child_process");function Mr(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function Di(t){if(!Mr(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function $y(t){if(!Mr(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function zy(t){if(!Mr(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function Yy(t){if(!Mr(t))return!1;let[e,n]=t.split(".").map(Number);return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}function Lr(t){return!!t&&!$y(t)&&!zy(t)}function ae(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function Hi(t){return ae(t.replace(/^https?:\/\//,""))??t}function Jy(t,e){return(t??[]).map(n=>ae(n)).filter(n=>!!n).filter(n=>Lr(n)).filter((n,r,s)=>n!==e&&s.indexOf(n)===r)}function Ky(t){let e=Hi(t);return Di(e)||e.endsWith(".ts.net")}function Qy(t){let e=Hi(t);return Yy(e)||e.endsWith(".local")}function Xy(t){return Hi(t).endsWith(".trycloudflare.com")}function zu(t,e){return Ky(t)?"tailscale":Qy(t)?"local_network":e?"configured_host":"fallback"}function Ku(t){let e=new Set,n=[];for(let r of t){let s=`${r.host}:${r.port}`;e.has(s)||(e.add(s),n.push(r))}return n}function Zy(t){let e=t[0];return e?t.slice(1).filter(n=>n.port===e.port).map(n=>n.host).filter((n,r,s)=>n!==e.host&&s.indexOf(n)===r):[]}function ev(t){try{let e=new URL(t),n=ae(e.hostname);if(!n)throw new Error("invalid relay hostname");let r=e.port?Number(e.port):e.protocol==="https:"?443:80,s=Number.isFinite(r)&&r>0?Math.floor(r):443,i=Xy(n);return{kind:"relay",host:n,port:s,source:i?"quick_tunnel":"configured_relay",stability:i?"ephemeral":"stable"}}catch{return null}}function tv(t,e,n){let r=ae(t)||"localhost",s=Jy(e,r);return Ku([{kind:"direct",host:r,port:n,source:zu(r,!0),stability:"stable"},...s.map(i=>({kind:"direct",host:i,port:n,source:zu(i,!1),stability:"stable"}))])}function Qu(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function nv(t){let e=[],n=[];for(let r of Object.values(t))if(r)for(let s of r)s.internal||s.family!=="IPv4"||Lr(s.address)&&(Di(s.address)?e.push(s.address):n.push(s.address));return[...e,...n]}function Yu(t){let e=JSON.parse(t),n=ae(e.Self?.DNSName),r=(e.Self?.TailscaleIPs??[]).map(o=>ae(o)).filter(o=>!!o).filter(o=>Di(o)&&Lr(o)),s=r[0]??n,i=[...n&&n!==s?[n]:[],...r.filter(o=>o!==s)];return{canonicalHost:s,fallbackHosts:i}}function Xu(t=Ju.execFileSync){let e=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(Boolean);for(let n of e)try{let r=t("tailscale",["--socket",n,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Yu(r)}catch{}try{let n=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Yu(n)}catch{return{fallbackHosts:[]}}}function Zu(t){let e=tv(t.canonicalHost,t.fallbackHosts,t.port),n=t.relayUrl?ev(t.relayUrl):null,r=Ku([...n?[n]:[],...e]),s=r[0]??{kind:"direct",host:ae(t.canonicalHost)||"localhost",port:t.port,source:"configured_host",stability:"stable"};return{canonicalHost:s.host,fallbackHosts:Zy(r),port:s.port,connections:r}}function ed(t){let e=ae(t.canonicalHost),n=ae(t.configuredCanonicalHost)||ae(t.tailscaleCanonicalHost)||e||"localhost",r=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...nv(t.interfaces)].map(s=>ae(s)).filter(s=>!!s).filter(s=>Lr(s)).filter((s,i,o)=>s!==n&&o.indexOf(s)===i);return{canonicalHost:n,fallbackHosts:r}}function td(t){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("utf8");if(Array.isArray(t))return Buffer.concat(t).toString("utf8");if(t instanceof ArrayBuffer)return Buffer.from(t).toString("utf8");if(ArrayBuffer.isView(t)){let e=t;return Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8")}return String(t)}var j=M.child({module:"daemon"}),wn=M.child({module:"ws"});function rv(){try{let t=JSON.parse(require("fs").readFileSync(ac,"utf8"));return typeof t.latestVersion=="string"?t.latestVersion:void 0}catch{return}}var D=Gu(S.port),J=new Er((t,e,n)=>Cr(t,e,{daemonId:D.daemonId,canonicalHost:An().canonicalHost,...n??{}})),ce=new Rr,Or=new Set,De=new WeakMap,nd=!1,od=Date.now(),Dt=null,Nr=null,sv=1e3;function iv(){let t=Xu();return ed({canonicalHost:D.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:Qu(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,id.networkInterfaces)()})}function An(){let t=Date.now();if(Nr&&Nr.expiresAt>t)return Nr.value;let e=iv(),n=Zu({canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts,port:D.port,relayUrl:S.relayUrl});return Nr={value:n,expiresAt:t+sv},n}function ov(t){let e={t:"vp",d:t.daemonId,n:t.displayName,h:t.canonicalHost,p:t.port,c:t.pairNonce,e:t.expiresAt};return t.fallbackHosts&&(e.f=t.fallbackHosts),t.connections?.length&&(e.o=t.connections.map(n=>[n.kind,n.host,n.port,n.source,n.stability])),e}async function av(t){let e=JSON.stringify(ov(t));await(0,re.mkdir)(_e,{recursive:!0}),await qi.default.toFile(Ks,e,{type:"png",errorCorrectionLevel:"M",margin:1,scale:8});let n=await qi.default.toString(e,{type:"terminal",small:!0,errorCorrectionLevel:"M"});_t(`
|
|
108
108
|
Scan this QR code with Vibelet app:
|
|
109
109
|
|
|
110
110
|
${n}
|
|
111
|
-
`),
|
|
112
|
-
${
|
|
113
|
-
`)}async function Di(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function N(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function ev(t){let e=(0,An.extname)(t).toLowerCase();return{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".heic":"image/heic",".heif":"image/heif",".pdf":"application/pdf",".md":"text/markdown; charset=utf-8",".markdown":"text/markdown; charset=utf-8",".txt":"text/plain; charset=utf-8",".log":"text/plain; charset=utf-8",".json":"application/json; charset=utf-8",".js":"text/plain; charset=utf-8",".jsx":"text/plain; charset=utf-8",".ts":"text/plain; charset=utf-8",".tsx":"text/plain; charset=utf-8",".mjs":"text/plain; charset=utf-8",".cjs":"text/plain; charset=utf-8",".css":"text/plain; charset=utf-8",".html":"text/plain; charset=utf-8",".yml":"text/plain; charset=utf-8",".yaml":"text/plain; charset=utf-8"}[e]||"application/octet-stream"}function Xu(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function tv(t,e){if(Xe(t.socket.remoteAddress))return!0;let n=Li(t.headers.authorization,e.searchParams.get("token"));return Ni(n,S.legacyToken,(r,s)=>le.validateAnyPairToken(r,s),!1)}function nv(){let t=le.openWindow(Xu(),S.pairReusable),e=In();return{type:"vibelet-pair",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts.length>0?e.fallbackHosts:void 0,port:e.port,connections:e.connections,pairNonce:t.pairNonce,expiresAt:t.expiresAt}}async function rv(t,e){let n=xi(t,e),r=await(0,ne.readdir)(n),s=[];for(let i of r){if(i.startsWith("."))continue;let o=await(0,ne.stat)((0,An.join)(n,i)).catch(()=>null);o&&s.push({name:i,isDirectory:o.isDirectory()})}return s.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:s}}var xn=(0,Yu.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let s=In(),i=Jy(),o={status:"ok",version:bt,...i?{latestVersion:i}:{}};if(!tv(t,n)){N(e,200,o);return}let a={...o,status:"ok",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:s.canonicalHost,uptimeSeconds:Math.round((Date.now()-Qu)/1e3),activeSessions:J.getActiveSessionCount(),pairedDevices:le.pairedCount(),wsClients:ae.clients.size,drivers:J.getDriverCounts(),sessionInventory:Qc(),metrics:w.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),N(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!Xe(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}N(e,200,nv());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!Xe(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}le.reset(),N(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!Xe(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}N(e,200,{status:"stopping"}),setTimeout(()=>Ze("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!Xe(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}try{let s=await Di(t),i=t.headers[on],o=Array.isArray(i)?i[0]:i;J.handleClaudeSessionStartHook(o,s),N(e,200,{ok:!0})}catch(s){N(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!Xe(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}try{let s=await Di(t),i=t.headers[on],o=Array.isArray(i)?i[0]:i,a=await J.handleClaudePermissionHook(o,s);N(e,200,a)}catch(s){N(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let s=await Di(t);if(s.daemonId!==D.daemonId||typeof s.pairNonce!="string"||typeof s.deviceId!="string"||typeof s.deviceName!="string"){N(e,400,{error:"invalid_pair_request"});return}if(!le.consumeWindow(s.pairNonce)){N(e,401,{error:"pair_window_expired"});return}let o=le.issuePairToken(s.deviceId,s.deviceName),a=In();N(e,200,{daemonId:D.daemonId,displayName:D.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:s.deviceId,pairToken:o})}catch(s){N(e,400,{error:String(s)})}return}let r=Li(t.headers.authorization,n.searchParams.get("token"));if(!Ni(r,S.legacyToken,(s,i)=>le.validateAnyPairToken(s,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let s={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif"},i=(t.headers["content-type"]??"").split(";")[0].trim(),o=s[i];if(!o){N(e,400,{error:"Unsupported content type"});return}let a=10*1024*1024,l=[],c=0;for await(let u of t){let d=Buffer.isBuffer(u)?u:Buffer.from(u);if(c+=d.length,c>a){e.writeHead(413),e.end("File too large");return}l.push(d)}try{await(0,ne.mkdir)(Ys,{recursive:!0});let u=`${Date.now()}_${(0,Ju.randomBytes)(8).toString("hex")}${o}`,d=(0,An.join)(Ys,u);await(0,ne.writeFile)(d,Buffer.concat(l)),j.info({filePath:d,size:c},"file uploaded"),N(e,200,{path:d})}catch(u){j.error({error:String(u)},"upload failed"),N(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let s=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!s){e.writeHead(400),e.end("Missing path parameter");return}try{let o=xi(s,i);if(!(await(0,ne.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=ev(o),c=await(0,ne.readFile)(o);e.writeHead(200,{"Content-Type":l,"Content-Length":c.length}),e.end(c)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${bt}`)}),ae=new rs.default({server:xn});xn.on("connection",t=>{Nr.add(t),t.on("close",()=>{Nr.delete(t)})});ae.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(r&&Rr(r,S.legacyToken))Be.set(t,{authMode:"query_token"}),w.increment("ws.auth.success",{mode:"query_token"}),J.addGlobalClient(t),J.prewarmCaches();else if(r){let s=le.validateAnyPairToken(r);if(s)Be.set(t,{authMode:"query_token",deviceId:s.deviceId}),w.increment("ws.auth.success",{mode:"query_token"}),J.addGlobalClient(t),J.prewarmCaches();else{w.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}wn.info({clients:ae.clients.size},"client connected"),w.increment("ws.connect"),w.gauge("ws.clients",ae.clients.size),b.emit("ws.connect",{clients:ae.clients.size,authMode:Be.get(t)?.authMode??"pending",deviceId:Be.get(t)?.deviceId}),t.on("message",async s=>{try{let i=JSON.parse($u(s));if(!i||typeof i.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(i.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=i;if(!Be.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(Rr(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===D.daemonId&&le.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===D.daemonId){let l=le.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){Be.set(t,{authMode:"auth_hello",deviceId:a.deviceId}),w.increment("ws.auth.success",{mode:"auth_hello"}),J.addGlobalClient(t),J.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:D.daemonId,displayName:D.displayName}}));return}w.increment("ws.auth.failure",{mode:"auth_hello"}),t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:"auth_failed"})),t.close(4001,"Unauthorized");return}w.increment("ws.auth.failure",{mode:"missing"}),t.send(JSON.stringify({type:"error",sessionId:"",message:"Authentication required"})),t.close(4001,"Unauthorized");return}if(o.action==="log.report"){for(let a of o.entries)b.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?j.error:a.level==="warn"?j.warn:j.info).call(j,{event:a.event,...a.data},`[app] ${a.event}`);t.send(JSON.stringify({type:"response",id:o.id,ok:!0}));return}if(o.action==="dirs.list"){try{let a=await rv(o.path,o.cwd);t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:a}))}catch(a){t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:String(a)}))}return}if(i.action==="push.register"){let a=Be.get(t);Ei(i,{deviceId:a?.deviceId,registerToken:Ti,unregisterToken:ki,respond:l=>t.send(JSON.stringify(l))});return}if(i.action==="push.unregister"){let a=Be.get(t);Ei(i,{deviceId:a?.deviceId,registerToken:Ti,unregisterToken:ki,respond:l=>t.send(JSON.stringify(l))});return}await J.handle(t,o)}catch(i){wn.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",s=>{wn.info({clients:ae.clients.size,code:s},"client disconnected"),w.increment("ws.disconnect"),w.increment("ws.disconnect.code",{code:String(s)}),w.gauge("ws.clients",ae.clients.size),b.emit("ws.disconnect",{clients:ae.clients.size,code:s}),J.removeClient(t)}),t.on("error",s=>{wn.error({error:s.message},"websocket error")})});function Hi(){for(let t of Nr)try{t.destroy()}catch{}Nr.clear()}function Zu(){let t=mc({auditPath:yt,stdoutLogPath:nr,stderrLogPath:rr,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&j.info({trimmedFiles:t.trimmedFiles,reclaimedBytes:t.reclaimedBytes,files:t.files.filter(e=>e.trimmed).map(e=>({path:e.path,beforeBytes:e.beforeBytes,afterBytes:e.afterBytes}))},"trimmed vibelet storage")}function sv(){Ot||(Ot=setInterval(Zu,S.storageHousekeepingIntervalMs),Ot.unref())}function iv(){Ot&&(clearInterval(Ot),Ot=null)}function Ze(t,e=0){if(!zu){zu=!0,j.info({reason:t,exitCode:e},"shutting down"),b.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-Qu)/1e3)}),w.stopPeriodicLog(),iv(),J.shutdown();for(let n of ae.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}ae.close(n=>{n&&j.error({error:String(n)},"websocket close error")}),xn.close(n=>{if(n){j.error({error:String(n)},"http close error"),Hi(),process.exit(1);return}Hi(),process.exit(e)}),setTimeout(()=>{j.error("force exiting after shutdown timeout"),Hi(),process.exit(e||1)},3e3).unref()}}ae.on("error",t=>{wn.error({error:t.message},"wss error")});xn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Ru(S.port).filter(n=>n.pid!==process.pid);j.error({port:S.port,occupants:e},"port is already in use. Stop the existing process or use VIBE_PORT=<port> to specify another port")}else j.error({error:String(t)},"server error");Ze(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>Ze("SIGINT"));process.once("SIGTERM",()=>Ze("SIGTERM"));process.once("SIGHUP",()=>Ze("SIGHUP"));process.once("SIGTTIN",()=>Ze("SIGTTIN"));process.once("SIGTSTP",()=>Ze("SIGTSTP"));process.on("uncaughtException",t=>{j.error({error:String(t),stack:t.stack},"uncaughtException"),b.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{j.error({reason:String(t)},"unhandledRejection"),b.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});xn.listen(S.port,async()=>{Zu(),b.emit("daemon.start",{port:S.port}),w.startPeriodicLog(),sv();let t=In();j.info({port:S.port,pairingPort:t.port,daemonId:D.daemonId,displayName:D.displayName,canonicalHost:t.canonicalHost,fallbackHosts:t.fallbackHosts,claudePath:S.claudePath,codexPath:S.codexPath,auditMaxBytes:S.auditMaxBytes,daemonLogMaxBytes:S.daemonLogMaxBytes,storageHousekeepingIntervalMs:S.storageHousekeepingIntervalMs,turnStallTimeoutMs:S.turnStallTimeoutMs},"daemon started");let e=le.openWindow(Xu(),S.pairReusable),n={type:"vibelet-pair",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:t.canonicalHost,fallbackHosts:t.fallbackHosts.length>0?t.fallbackHosts:void 0,port:t.port,connections:t.connections,pairNonce:e.pairNonce,expiresAt:e.expiresAt};vt(`
|
|
111
|
+
`),_t(`If Vibelet app can't scan the terminal QR, open this PNG instead:
|
|
112
|
+
${Ks}
|
|
113
|
+
`)}async function Fi(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function N(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function lv(t){let e=(0,xn.extname)(t).toLowerCase();return{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".heic":"image/heic",".heif":"image/heif",".pdf":"application/pdf",".md":"text/markdown; charset=utf-8",".markdown":"text/markdown; charset=utf-8",".txt":"text/plain; charset=utf-8",".log":"text/plain; charset=utf-8",".json":"application/json; charset=utf-8",".js":"text/plain; charset=utf-8",".jsx":"text/plain; charset=utf-8",".ts":"text/plain; charset=utf-8",".tsx":"text/plain; charset=utf-8",".mjs":"text/plain; charset=utf-8",".cjs":"text/plain; charset=utf-8",".css":"text/plain; charset=utf-8",".html":"text/plain; charset=utf-8",".yml":"text/plain; charset=utf-8",".yaml":"text/plain; charset=utf-8"}[e]||"application/octet-stream"}function ad(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function cv(t,e){if(et(t.socket.remoteAddress))return!0;let n=Oi(t.headers.authorization,e.searchParams.get("token"));return Bi(n,S.legacyToken,(r,s)=>ce.validateAnyPairToken(r,s),!1)}function uv(){let t=ce.openWindow(ad(),S.pairReusable),e=An();return{type:"vibelet-pair",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts.length>0?e.fallbackHosts:void 0,port:e.port,connections:e.connections,pairNonce:t.pairNonce,expiresAt:t.expiresAt}}async function dv(t,e){let n=Ci(t,e),r=await(0,re.readdir)(n),s=[];for(let i of r){if(i.startsWith("."))continue;let o=await(0,re.stat)((0,xn.join)(n,i)).catch(()=>null);o&&s.push({name:i,isDirectory:o.isDirectory()})}return s.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:s}}var Tn=(0,rd.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let s=An(),i=rv(),o={status:"ok",version:It,...i?{latestVersion:i}:{}};if(!cv(t,n)){N(e,200,o);return}let a={...o,status:"ok",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:s.canonicalHost,uptimeSeconds:Math.round((Date.now()-od)/1e3),activeSessions:J.getActiveSessionCount(),pairedDevices:ce.pairedCount(),wsClients:le.clients.size,drivers:J.getDriverCounts(),sessionInventory:iu(),metrics:w.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),N(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!et(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}N(e,200,uv());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!et(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}ce.reset(),N(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!et(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}N(e,200,{status:"stopping"}),setTimeout(()=>tt("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!et(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}try{let s=await Fi(t),i=t.headers[ln],o=Array.isArray(i)?i[0]:i;J.handleClaudeSessionStartHook(o,s),N(e,200,{ok:!0})}catch(s){N(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!et(t.socket.remoteAddress)){N(e,403,{error:"forbidden"});return}try{let s=await Fi(t),i=t.headers[ln],o=Array.isArray(i)?i[0]:i,a=await J.handleClaudePermissionHook(o,s);N(e,200,a)}catch(s){N(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let s=await Fi(t);if(s.daemonId!==D.daemonId||typeof s.pairNonce!="string"||typeof s.deviceId!="string"||typeof s.deviceName!="string"){N(e,400,{error:"invalid_pair_request"});return}if(!ce.consumeWindow(s.pairNonce)){N(e,401,{error:"pair_window_expired"});return}let o=ce.issuePairToken(s.deviceId,s.deviceName),a=An();N(e,200,{daemonId:D.daemonId,displayName:D.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:s.deviceId,pairToken:o})}catch(s){N(e,400,{error:String(s)})}return}let r=Oi(t.headers.authorization,n.searchParams.get("token"));if(!Bi(r,S.legacyToken,(s,i)=>ce.validateAnyPairToken(s,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let s={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif"},i=(t.headers["content-type"]??"").split(";")[0].trim(),o=s[i];if(!o){N(e,400,{error:"Unsupported content type"});return}let a=10*1024*1024,l=[],c=0;for await(let u of t){let d=Buffer.isBuffer(u)?u:Buffer.from(u);if(c+=d.length,c>a){e.writeHead(413),e.end("File too large");return}l.push(d)}try{await(0,re.mkdir)(Js,{recursive:!0});let u=`${Date.now()}_${(0,sd.randomBytes)(8).toString("hex")}${o}`,d=(0,xn.join)(Js,u);await(0,re.writeFile)(d,Buffer.concat(l)),j.info({filePath:d,size:c},"file uploaded"),N(e,200,{path:d})}catch(u){j.error({error:String(u)},"upload failed"),N(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let s=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!s){e.writeHead(400),e.end("Missing path parameter");return}try{let o=Ci(s,i);if(!(await(0,re.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=lv(o),c=await(0,re.readFile)(o);e.writeHead(200,{"Content-Type":l,"Content-Length":c.length}),e.end(c)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${It}`)}),le=new ss.default({server:Tn});Tn.on("connection",t=>{Or.add(t),t.on("close",()=>{Or.delete(t)})});le.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(r&&Pr(r,S.legacyToken))De.set(t,{authMode:"query_token"}),w.increment("ws.auth.success",{mode:"query_token"}),J.addGlobalClient(t),J.prewarmCaches();else if(r){let s=ce.validateAnyPairToken(r);if(s)De.set(t,{authMode:"query_token",deviceId:s.deviceId}),w.increment("ws.auth.success",{mode:"query_token"}),J.addGlobalClient(t),J.prewarmCaches();else{w.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}wn.info({clients:le.clients.size},"client connected"),w.increment("ws.connect"),w.gauge("ws.clients",le.clients.size),I.emit("ws.connect",{clients:le.clients.size,authMode:De.get(t)?.authMode??"pending",deviceId:De.get(t)?.deviceId}),t.on("message",async s=>{try{let i=JSON.parse(td(s));if(!i||typeof i.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(i.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=i;if(!De.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(Pr(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===D.daemonId&&ce.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===D.daemonId){let l=ce.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){De.set(t,{authMode:"auth_hello",deviceId:a.deviceId}),w.increment("ws.auth.success",{mode:"auth_hello"}),J.addGlobalClient(t),J.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:D.daemonId,displayName:D.displayName}}));return}w.increment("ws.auth.failure",{mode:"auth_hello"}),t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:"auth_failed"})),t.close(4001,"Unauthorized");return}w.increment("ws.auth.failure",{mode:"missing"}),t.send(JSON.stringify({type:"error",sessionId:"",message:"Authentication required"})),t.close(4001,"Unauthorized");return}if(o.action==="log.report"){for(let a of o.entries)I.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?j.error:a.level==="warn"?j.warn:j.info).call(j,{event:a.event,...a.data},`[app] ${a.event}`);t.send(JSON.stringify({type:"response",id:o.id,ok:!0}));return}if(o.action==="dirs.list"){try{let a=await dv(o.path,o.cwd);t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:a}))}catch(a){t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:String(a)}))}return}if(i.action==="push.register"){let a=De.get(t);Pi(i,{deviceId:a?.deviceId,registerToken:ki,unregisterToken:Ei,respond:l=>t.send(JSON.stringify(l))});return}if(i.action==="push.unregister"){let a=De.get(t);Pi(i,{deviceId:a?.deviceId,registerToken:ki,unregisterToken:Ei,respond:l=>t.send(JSON.stringify(l))});return}await J.handle(t,o)}catch(i){wn.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",s=>{wn.info({clients:le.clients.size,code:s},"client disconnected"),w.increment("ws.disconnect"),w.increment("ws.disconnect.code",{code:String(s)}),w.gauge("ws.clients",le.clients.size),I.emit("ws.disconnect",{clients:le.clients.size,code:s}),J.removeClient(t)}),t.on("error",s=>{wn.error({error:s.message},"websocket error")})});function Ui(){for(let t of Or)try{t.destroy()}catch{}Or.clear()}function ld(){let t=vc({auditPath:St,stdoutLogPath:rr,stderrLogPath:sr,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&j.info({trimmedFiles:t.trimmedFiles,reclaimedBytes:t.reclaimedBytes,files:t.files.filter(e=>e.trimmed).map(e=>({path:e.path,beforeBytes:e.beforeBytes,afterBytes:e.afterBytes}))},"trimmed vibelet storage")}function fv(){Dt||(Dt=setInterval(ld,S.storageHousekeepingIntervalMs),Dt.unref())}function pv(){Dt&&(clearInterval(Dt),Dt=null)}function tt(t,e=0){if(!nd){nd=!0,j.info({reason:t,exitCode:e},"shutting down"),I.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-od)/1e3)}),w.stopPeriodicLog(),pv(),J.shutdown();for(let n of le.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}le.close(n=>{n&&j.error({error:String(n)},"websocket close error")}),Tn.close(n=>{if(n){j.error({error:String(n)},"http close error"),Ui(),process.exit(1);return}Ui(),process.exit(e)}),setTimeout(()=>{j.error("force exiting after shutdown timeout"),Ui(),process.exit(e||1)},3e3).unref()}}le.on("error",t=>{wn.error({error:t.message},"wss error")});Tn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Fu(S.port).filter(n=>n.pid!==process.pid);j.error({port:S.port,occupants:e},"port is already in use. Stop the existing process or use VIBE_PORT=<port> to specify another port")}else j.error({error:String(t)},"server error");tt(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>tt("SIGINT"));process.once("SIGTERM",()=>tt("SIGTERM"));process.once("SIGHUP",()=>tt("SIGHUP"));process.once("SIGTTIN",()=>tt("SIGTTIN"));process.once("SIGTSTP",()=>tt("SIGTSTP"));process.on("uncaughtException",t=>{j.error({error:String(t),stack:t.stack},"uncaughtException"),I.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{j.error({reason:String(t)},"unhandledRejection"),I.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});Tn.listen(S.port,async()=>{ld(),I.emit("daemon.start",{port:S.port}),w.startPeriodicLog(),fv();let t=An();j.info({port:S.port,pairingPort:t.port,daemonId:D.daemonId,displayName:D.displayName,canonicalHost:t.canonicalHost,fallbackHosts:t.fallbackHosts,claudePath:S.claudePath,codexPath:S.codexPath,auditMaxBytes:S.auditMaxBytes,daemonLogMaxBytes:S.daemonLogMaxBytes,storageHousekeepingIntervalMs:S.storageHousekeepingIntervalMs,turnStallTimeoutMs:S.turnStallTimeoutMs},"daemon started");let e=ce.openWindow(ad(),S.pairReusable),n={type:"vibelet-pair",daemonId:D.daemonId,displayName:D.displayName,canonicalHost:t.canonicalHost,fallbackHosts:t.fallbackHosts.length>0?t.fallbackHosts:void 0,port:t.port,connections:t.connections,pairNonce:e.pairNonce,expiresAt:e.expiresAt};_t(`
|
|
114
114
|
\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|
|
115
|
-
\u2551 Vibelet Daemon v${
|
|
115
|
+
\u2551 Vibelet Daemon v${It} \u2551
|
|
116
116
|
\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563
|
|
117
117
|
\u2551 Port: ${String(n.port).padEnd(28)}\u2551
|
|
118
118
|
\u2551 ID: ${D.daemonId.slice(0,28).padEnd(28)}\u2551
|
|
@@ -125,4 +125,4 @@ Fallbacks: ${n.fallbackHosts?.join(", ")||"(none)"}
|
|
|
125
125
|
|
|
126
126
|
Claude: ${S.claudePath}
|
|
127
127
|
Codex: ${S.codexPath}
|
|
128
|
-
`);try{await
|
|
128
|
+
`);try{await av(n)}catch{}});
|