@vibelet/cli 1.0.26 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,28 +1,28 @@
1
- "use strict";var _f=Object.create;var To=Object.defineProperty;var bf=Object.getOwnPropertyDescriptor;var wf=Object.getOwnPropertyNames;var If=Object.getPrototypeOf,Tf=Object.prototype.hasOwnProperty;var v=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Af=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of wf(e))!Tf.call(t,r)&&r!==n&&To(t,r,{get:()=>e[r],enumerable:!(s=bf(e,r))||s.enumerable});return t};var ut=(t,e,n)=>(n=t!=null?_f(If(t)):{},Af(e||!t||!t.__esModule?To(n,"default",{value:t,enumerable:!0}):n,t));var ve=v((A_,Co)=>{"use strict";var Ao=["nodebuffer","arraybuffer","fragments"],ko=typeof Blob<"u";ko&&Ao.push("blob");Co.exports={BINARY_TYPES:Ao,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:ko,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Vt=v((k_,Un)=>{"use strict";var{EMPTY_BUFFER:kf}=ve(),lr=Buffer[Symbol.species];function Cf(t,e){if(t.length===0)return kf;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),s=0;for(let r=0;r<t.length;r++){let i=t[r];n.set(i,s),s+=i.length}return s<e?new lr(n.buffer,n.byteOffset,s):n}function xo(t,e,n,s,r){for(let i=0;i<r;i++)n[s+i]=t[i]^e[i&3]}function Ro(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function xf(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function cr(t){if(cr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new lr(t):ArrayBuffer.isView(t)?e=new lr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),cr.readOnly=!1),e}Un.exports={concat:Cf,mask:xo,toArrayBuffer:xf,toBuffer:cr,unmask:Ro};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Un.exports.mask=function(e,n,s,r,i){i<48?xo(e,n,s,r,i):t.mask(e,n,s,r,i)},Un.exports.unmask=function(e,n){e.length<32?Ro(e,n):t.unmask(e,n)}}catch{}});var Mo=v((C_,Po)=>{"use strict";var Eo=Symbol("kDone"),ur=Symbol("kRun"),dr=class{constructor(e){this[Eo]=()=>{this.pending--,this[ur]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[ur]()}[ur](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Eo])}}};Po.exports=dr});var Yt=v((x_,Bo)=>{"use strict";var Qt=require("zlib"),Lo=Vt(),Rf=Mo(),{kStatusCode:No}=ve(),Ef=Buffer[Symbol.species],Pf=Buffer.from([0,0,255,255]),qn=Symbol("permessage-deflate"),Se=Symbol("total-length"),dt=Symbol("callback"),Ce=Symbol("buffers"),ft=Symbol("error"),Wn,fr=class{constructor(e,n,s){if(this._maxPayload=s|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,!Wn){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Wn=new Rf(r)}}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[dt];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,s=e.find(r=>!(n.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>r.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(s.server_no_context_takeover=!0),n.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(s.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?s.client_max_window_bits=n.clientMaxWindowBits:(s.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}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(s=>{let r=n[s];if(r.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(r=r[0],s==="client_max_window_bits"){if(r!==!0){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else if(s==="server_max_window_bits"){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else throw new Error(`Unknown parameter "${s}"`);n[s]=r})}),e}decompress(e,n,s){Wn.add(r=>{this._decompress(e,n,(i,o)=>{r(),s(i,o)})})}compress(e,n,s){Wn.add(r=>{this._compress(e,n,(i,o)=>{r(),s(i,o)})})}_decompress(e,n,s){let r=this._isServer?"client":"server";if(!this._inflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Qt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Qt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[qn]=this,this._inflate[Se]=0,this._inflate[Ce]=[],this._inflate.on("error",Lf),this._inflate.on("data",Oo)}this._inflate[dt]=s,this._inflate.write(e),n&&this._inflate.write(Pf),this._inflate.flush(()=>{let i=this._inflate[ft];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=Lo.concat(this._inflate[Ce],this._inflate[Se]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Se]=0,this._inflate[Ce]=[],n&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,n,s){let r=this._isServer?"server":"client";if(!this._deflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Qt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Qt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Se]=0,this._deflate[Ce]=[],this._deflate.on("data",Mf)}this._deflate[dt]=s,this._deflate.write(e),this._deflate.flush(Qt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Lo.concat(this._deflate[Ce],this._deflate[Se]);n&&(i=new Ef(i.buffer,i.byteOffset,i.length-4)),this._deflate[dt]=null,this._deflate[Se]=0,this._deflate[Ce]=[],n&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};Bo.exports=fr;function Mf(t){this[Ce].push(t),this[Se]+=t.length}function Oo(t){if(this[Se]+=t.length,this[qn]._maxPayload<1||this[Se]<=this[qn]._maxPayload){this[Ce].push(t);return}this[ft]=new RangeError("Max payload size exceeded"),this[ft].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ft][No]=1009,this.removeListener("data",Oo),this.reset()}function Lf(t){if(this[qn]._inflate=null,this[ft]){this[dt](this[ft]);return}t[No]=1007,this[dt](t)}});var pt=v((R_,Gn)=>{"use strict";var{isUtf8:Do}=require("buffer"),{hasBlob:Nf}=ve(),Of=[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 Bf(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function pr(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 Df(t){return Nf&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Gn.exports={isBlob:Df,isValidStatusCode:Bf,isValidUTF8:pr,tokenChars:Of};if(Do)Gn.exports.isValidUTF8=function(t){return t.length<24?pr(t):Do(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Gn.exports.isValidUTF8=function(e){return e.length<32?pr(e):t(e)}}catch{}});var vr=v((E_,jo)=>{"use strict";var{Writable:Ff}=require("stream"),Fo=Yt(),{BINARY_TYPES:Hf,EMPTY_BUFFER:Ho,kStatusCode:Uf,kWebSocket:Wf}=ve(),{concat:hr,toArrayBuffer:qf,unmask:Gf}=Vt(),{isValidStatusCode:jf,isValidUTF8:Uo}=pt(),jn=Buffer[Symbol.species],te=0,Wo=1,qo=2,Go=3,gr=4,mr=5,$n=6,yr=class extends Ff{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Hf[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Wf]=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=te}_write(e,n,s){if(this._opcode===8&&this._state==te)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new jn(s.buffer,s.byteOffset+e,s.length-e),new jn(s.buffer,s.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let s=this._buffers[0],r=n.length-e;e>=s.length?n.set(this._buffers.shift(),r):(n.set(new Uint8Array(s.buffer,s.byteOffset,e),r),this._buffers[0]=new jn(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case te:this.getInfo(e);break;case Wo:this.getPayloadLength16(e);break;case qo:this.getPayloadLength64(e);break;case Go:this.getMask();break;case gr:this.getData(e);break;case mr:case $n: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 r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(r);return}let s=(n[0]&64)===64;if(s&&!this._extensions[Fo.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(r);return}if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(r);return}this._payloadLength===126?this._state=Wo:this._payloadLength===127?this._state=qo: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),s=n.readUInt32BE(0);if(s>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(r);return}this._payloadLength=s*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=Go:this._state=gr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=gr}getData(e){let n=Ho;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&&Gf(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=mr,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[Fo.extensionName].decompress(e,this._fin,(r,i)=>{if(r)return n(r);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===te&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=te;return}let n=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=hr(s,n):this._binaryType==="arraybuffer"?r=qf(hr(s,n)):this._binaryType==="blob"?r=new Blob(s):r=s,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=te):(this._state=$n,setImmediate(()=>{this.emit("message",r,!0),this._state=te,this.startLoop(e)}))}else{let r=hr(s,n);if(!this._skipUTF8Validation&&!Uo(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===mr||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=te):(this._state=$n,setImmediate(()=>{this.emit("message",r,!1),this._state=te,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Ho),this.end();else{let s=e.readUInt16BE(0);if(!jf(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let r=new jn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Uo(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",s,r),this.end()}this._state=te;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=te):(this._state=$n,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=te,this.startLoop(n)}))}createError(e,n,s,r,i){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[Uf]=r,o}};jo.exports=yr});var br=v((M_,Vo)=>{"use strict";var{Duplex:P_}=require("stream"),{randomFillSync:$f}=require("crypto"),$o=Yt(),{EMPTY_BUFFER:zf,kWebSocket:Vf,NOOP:Qf}=ve(),{isBlob:ht,isValidStatusCode:Yf}=pt(),{mask:zo,toBuffer:We}=Vt(),ne=Symbol("kByteLength"),Jf=Buffer.alloc(4),zn=8*1024,qe,gt=zn,le=0,Kf=1,Xf=2,Sr=class t{constructor(e,n,s){this._extensions=n||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=le,this.onerror=Qf,this[Vf]=void 0}static frame(e,n){let s,r=!1,i=2,o=!1;n.mask&&(s=n.maskBuffer||Jf,n.generateMask?n.generateMask(s):(gt===zn&&(qe===void 0&&(qe=Buffer.alloc(zn)),$f(qe,0,zn),gt=0),s[0]=qe[gt++],s[1]=qe[gt++],s[2]=qe[gt++],s[3]=qe[gt++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[ne]!==void 0?a=n[ne]:(e=Buffer.from(e),a=e.length):(a=e.length,r=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let u=Buffer.allocUnsafe(r?a+i:i);return u[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(u[0]|=64),u[1]=l,l===126?u.writeUInt16BE(a,2):l===127&&(u[2]=u[3]=0,u.writeUIntBE(a,4,6)),n.mask?(u[1]|=128,u[i-4]=s[0],u[i-3]=s[1],u[i-2]=s[2],u[i-1]=s[3],o?[u,e]:r?(zo(e,s,u,i,a),[u]):(zo(e,s,e,0,a),[u,e])):[u,e]}close(e,n,s,r){let i;if(e===void 0)i=zf;else{if(typeof e!="number"||!Yf(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={[ne]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==le?this.enqueue([this.dispatch,i,!1,o,r]):this.sendFrame(t.frame(i,o),r)}ping(e,n,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):ht(e)?(r=e.size,i=!1):(e=We(e),r=e.length,i=We.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[ne]:r,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==le?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}pong(e,n,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):ht(e)?(r=e.size,i=!1):(e=We(e),r=e.length,i=We.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[ne]:r,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==le?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}send(e,n,s){let r=this._extensions[$o.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):ht(e)?(a=e.size,l=!1):(e=We(e),a=e.length,l=We.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=r._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[ne]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,this._compress,u,s]):this.getBlobData(e,this._compress,u,s):this._state!==le?this.enqueue([this.dispatch,e,this._compress,u,s]):this.dispatch(e,this._compress,u,s)}getBlobData(e,n,s,r){this._bufferedBytes+=s[ne],this._state=Xf,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(_r,this,a,r);return}this._bufferedBytes-=s[ne];let o=We(i);n?this.dispatch(o,n,s,r):(this._state=le,this.sendFrame(t.frame(o,s),r),this.dequeue())}).catch(i=>{process.nextTick(Zf,this,i,r)})}dispatch(e,n,s,r){if(!n){this.sendFrame(t.frame(e,s),r);return}let i=this._extensions[$o.extensionName];this._bufferedBytes+=s[ne],this._state=Kf,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");_r(this,l,r);return}this._bufferedBytes-=s[ne],this._state=le,s.readOnly=!1,this.sendFrame(t.frame(a,s),r),this.dequeue()})}dequeue(){for(;this._state===le&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][ne],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][ne],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)}};Vo.exports=Sr;function _r(t,e,n){typeof n=="function"&&n(e);for(let s=0;s<t._queue.length;s++){let r=t._queue[s],i=r[r.length-1];typeof i=="function"&&i(e)}}function Zf(t,e,n){_r(t,e,n),t.onerror(e)}});var na=v((L_,ta)=>{"use strict";var{kForOnEventAttribute:Jt,kListener:wr}=ve(),Qo=Symbol("kCode"),Yo=Symbol("kData"),Jo=Symbol("kError"),Ko=Symbol("kMessage"),Xo=Symbol("kReason"),mt=Symbol("kTarget"),Zo=Symbol("kType"),ea=Symbol("kWasClean"),_e=class{constructor(e){this[mt]=null,this[Zo]=e}get target(){return this[mt]}get type(){return this[Zo]}};Object.defineProperty(_e.prototype,"target",{enumerable:!0});Object.defineProperty(_e.prototype,"type",{enumerable:!0});var Ge=class extends _e{constructor(e,n={}){super(e),this[Qo]=n.code===void 0?0:n.code,this[Xo]=n.reason===void 0?"":n.reason,this[ea]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[Qo]}get reason(){return this[Xo]}get wasClean(){return this[ea]}};Object.defineProperty(Ge.prototype,"code",{enumerable:!0});Object.defineProperty(Ge.prototype,"reason",{enumerable:!0});Object.defineProperty(Ge.prototype,"wasClean",{enumerable:!0});var yt=class extends _e{constructor(e,n={}){super(e),this[Jo]=n.error===void 0?null:n.error,this[Ko]=n.message===void 0?"":n.message}get error(){return this[Jo]}get message(){return this[Ko]}};Object.defineProperty(yt.prototype,"error",{enumerable:!0});Object.defineProperty(yt.prototype,"message",{enumerable:!0});var Kt=class extends _e{constructor(e,n={}){super(e),this[Yo]=n.data===void 0?null:n.data}get data(){return this[Yo]}};Object.defineProperty(Kt.prototype,"data",{enumerable:!0});var ep={addEventListener(t,e,n={}){for(let r of this.listeners(t))if(!n[Jt]&&r[wr]===e&&!r[Jt])return;let s;if(t==="message")s=function(i,o){let a=new Kt("message",{data:o?i:i.toString()});a[mt]=this,Vn(e,this,a)};else if(t==="close")s=function(i,o){let a=new Ge("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[mt]=this,Vn(e,this,a)};else if(t==="error")s=function(i){let o=new yt("error",{error:i,message:i.message});o[mt]=this,Vn(e,this,o)};else if(t==="open")s=function(){let i=new _e("open");i[mt]=this,Vn(e,this,i)};else return;s[Jt]=!!n[Jt],s[wr]=e,n.once?this.once(t,s):this.on(t,s)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[wr]===e&&!n[Jt]){this.removeListener(t,n);break}}};ta.exports={CloseEvent:Ge,ErrorEvent:yt,Event:_e,EventTarget:ep,MessageEvent:Kt};function Vn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var Ir=v((N_,sa)=>{"use strict";var{tokenChars:Xt}=pt();function he(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function tp(t){let e=Object.create(null),n=Object.create(null),s=!1,r=!1,i=!1,o,a,l=-1,u=-1,c=-1,d=0;for(;d<t.length;d++)if(u=t.charCodeAt(d),o===void 0)if(c===-1&&Xt[u]===1)l===-1&&(l=d);else if(d!==0&&(u===32||u===9))c===-1&&l!==-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d);let h=t.slice(l,c);u===44?(he(e,h,n),n=Object.create(null)):o=h,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(c===-1&&Xt[u]===1)l===-1&&(l=d);else if(u===32||u===9)c===-1&&l!==-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d),he(n,t.slice(l,c),!0),u===44&&(he(e,o,n),n=Object.create(null),o=void 0),l=c=-1}else if(u===61&&l!==-1&&c===-1)a=t.slice(l,d),l=c=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(r){if(Xt[u]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:s||(s=!0),r=!1}else if(i)if(Xt[u]===1)l===-1&&(l=d);else if(u===34&&l!==-1)i=!1,c=d;else if(u===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(u===34&&t.charCodeAt(d-1)===61)i=!0;else if(c===-1&&Xt[u]===1)l===-1&&(l=d);else if(l!==-1&&(u===32||u===9))c===-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d);let h=t.slice(l,c);s&&(h=h.replace(/\\/g,""),s=!1),he(n,a,h),u===44&&(he(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||i||u===32||u===9)throw new SyntaxError("Unexpected end of input");c===-1&&(c=d);let f=t.slice(l,c);return o===void 0?he(e,f,n):(a===void 0?he(n,f,!0):s?he(n,a,f.replace(/\\/g,"")):he(n,a,f),he(e,o,n)),e}function np(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(s=>[e].concat(Object.keys(s).map(r=>{let i=s[r];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}sa.exports={format:np,parse:tp}});var Kn=v((D_,ga)=>{"use strict";var sp=require("events"),rp=require("https"),ip=require("http"),oa=require("net"),op=require("tls"),{randomBytes:ap,createHash:lp}=require("crypto"),{Duplex:O_,Readable:B_}=require("stream"),{URL:Tr}=require("url"),xe=Yt(),cp=vr(),up=br(),{isBlob:dp}=pt(),{BINARY_TYPES:ra,CLOSE_TIMEOUT:fp,EMPTY_BUFFER:Qn,GUID:pp,kForOnEventAttribute:Ar,kListener:hp,kStatusCode:gp,kWebSocket:q,NOOP:aa}=ve(),{EventTarget:{addEventListener:mp,removeEventListener:yp}}=na(),{format:vp,parse:Sp}=Ir(),{toBuffer:_p}=Vt(),la=Symbol("kAborted"),kr=[8,13],be=["CONNECTING","OPEN","CLOSING","CLOSED"],bp=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,L=class t extends sp{constructor(e,n,s){super(),this._binaryType=ra[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Qn,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?(s=n,n=[]):n=[n]),ca(this,e,n,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){ra.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,s){let r=new cp({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new up(e,this._extensions,s.generateMask);this._receiver=r,this._sender=i,this._socket=e,r[q]=this,i[q]=this,e[q]=this,r.on("conclude",Tp),r.on("drain",Ap),r.on("error",kp),r.on("message",Cp),r.on("ping",xp),r.on("pong",Rp),i.onerror=Ep,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",fa),e.on("data",Jn),e.on("end",pa),e.on("error",ha),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[xe.extensionName]&&this._extensions[xe.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){Z(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,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),da(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=n=void 0):typeof n=="function"&&(s=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Cr(this,e,s);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||Qn,n,s)}pong(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=n=void 0):typeof n=="function"&&(s=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Cr(this,e,s);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||Qn,n,s)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(s=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Cr(this,e,s);return}let r={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[xe.extensionName]||(r.compress=!1),this._sender.send(e||Qn,r,s)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Z(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(L,"CONNECTING",{enumerable:!0,value:be.indexOf("CONNECTING")});Object.defineProperty(L.prototype,"CONNECTING",{enumerable:!0,value:be.indexOf("CONNECTING")});Object.defineProperty(L,"OPEN",{enumerable:!0,value:be.indexOf("OPEN")});Object.defineProperty(L.prototype,"OPEN",{enumerable:!0,value:be.indexOf("OPEN")});Object.defineProperty(L,"CLOSING",{enumerable:!0,value:be.indexOf("CLOSING")});Object.defineProperty(L.prototype,"CLOSING",{enumerable:!0,value:be.indexOf("CLOSING")});Object.defineProperty(L,"CLOSED",{enumerable:!0,value:be.indexOf("CLOSED")});Object.defineProperty(L.prototype,"CLOSED",{enumerable:!0,value:be.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(L.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(L.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Ar])return e[hp];return null},set(e){for(let n of this.listeners(t))if(n[Ar]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[Ar]:!0})}})});L.prototype.addEventListener=mp;L.prototype.removeEventListener=yp;ga.exports=L;function ca(t,e,n,s){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:fp,protocolVersion:kr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=r.autoPong,t._closeTimeout=r.closeTimeout,!kr.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${kr.join(", ")})`);let i;if(e instanceof Tr)i=e;else try{i=new Tr(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;Yn(t,p);return}let u=o?443:80,c=ap(16).toString("base64"),d=o?rp.request:ip.request,f=new Set,h;if(r.createConnection=r.createConnection||(o?Ip:wp),r.defaultPort=r.defaultPort||u,r.port=i.port||u,r.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":c,Connection:"Upgrade",Upgrade:"websocket"},r.path=i.pathname+i.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(h=new xe(r.perMessageDeflate!==!0?r.perMessageDeflate:{},!1,r.maxPayload),r.headers["Sec-WebSocket-Extensions"]=vp({[xe.extensionName]:h.offer()})),n.length){for(let p of n){if(typeof p!="string"||!bp.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}r.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(i.username||i.password)&&(r.auth=`${i.username}:${i.password}`),a){let p=r.path.split(":");r.socketPath=p[0],r.path=p[1]}let g;if(r.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?r.socketPath:i.host;let p=s&&s.headers;if(s={...s,headers:{}},p)for(let[m,y]of Object.entries(p))s.headers[m.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let p=a?t._originalIpc?r.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!p||t._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,p||delete r.headers.host,r.auth=void 0)}r.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),g=t._req=d(r),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(r);r.timeout&&g.on("timeout",()=>{Z(t,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[la]||(g=t._req=null,Yn(t,p))}),g.on("response",p=>{let m=p.headers.location,y=p.statusCode;if(m&&r.followRedirects&&y>=300&&y<400){if(++t._redirects>r.maxRedirects){Z(t,g,"Maximum redirects exceeded");return}g.abort();let C;try{C=new Tr(m,e)}catch{let A=new SyntaxError(`Invalid URL: ${m}`);Yn(t,A);return}ca(t,C,n,s)}else t.emit("unexpected-response",g,p)||Z(t,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,y)=>{if(t.emit("upgrade",p),t.readyState!==L.CONNECTING)return;g=t._req=null;let C=p.headers.upgrade;if(C===void 0||C.toLowerCase()!=="websocket"){Z(t,m,"Invalid Upgrade header");return}let _=lp("sha1").update(c+pp).digest("base64");if(p.headers["sec-websocket-accept"]!==_){Z(t,m,"Invalid Sec-WebSocket-Accept header");return}let A=p.headers["sec-websocket-protocol"],I;if(A!==void 0?f.size?f.has(A)||(I="Server sent an invalid subprotocol"):I="Server sent a subprotocol but none was requested":f.size&&(I="Server sent no subprotocol"),I){Z(t,m,I);return}A&&(t._protocol=A);let B=p.headers["sec-websocket-extensions"];if(B!==void 0){if(!h){Z(t,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let x;try{x=Sp(B)}catch{Z(t,m,"Invalid Sec-WebSocket-Extensions header");return}let X=Object.keys(x);if(X.length!==1||X[0]!==xe.extensionName){Z(t,m,"Server indicated an extension that was not requested");return}try{h.accept(x[xe.extensionName])}catch{Z(t,m,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[xe.extensionName]=h}t.setSocket(m,y,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(g,t):g.end()}function Yn(t,e){t._readyState=L.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function wp(t){return t.path=t.socketPath,oa.connect(t)}function Ip(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=oa.isIP(t.host)?"":t.host),op.connect(t)}function Z(t,e,n){t._readyState=L.CLOSING;let s=new Error(n);Error.captureStackTrace(s,Z),e.setHeader?(e[la]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(Yn,t,s)):(e.destroy(s),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Cr(t,e,n){if(e){let s=dp(e)?e.size:_p(e).length;t._socket?t._sender._bufferedBytes+=s:t._bufferedAmount+=s}if(n){let s=new Error(`WebSocket is not open: readyState ${t.readyState} (${be[t.readyState]})`);process.nextTick(n,s)}}function Tp(t,e){let n=this[q];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[q]!==void 0&&(n._socket.removeListener("data",Jn),process.nextTick(ua,n._socket),t===1005?n.close():n.close(t,e))}function Ap(){let t=this[q];t.isPaused||t._socket.resume()}function kp(t){let e=this[q];e._socket[q]!==void 0&&(e._socket.removeListener("data",Jn),process.nextTick(ua,e._socket),e.close(t[gp])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function ia(){this[q].emitClose()}function Cp(t,e){this[q].emit("message",t,e)}function xp(t){let e=this[q];e._autoPong&&e.pong(t,!this._isServer,aa),e.emit("ping",t)}function Rp(t){this[q].emit("pong",t)}function ua(t){t.resume()}function Ep(t){let e=this[q];e.readyState!==L.CLOSED&&(e.readyState===L.OPEN&&(e._readyState=L.CLOSING,da(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function da(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function fa(){let t=this[q];if(this.removeListener("close",fa),this.removeListener("data",Jn),this.removeListener("end",pa),t._readyState=L.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[q]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",ia),t._receiver.on("finish",ia))}function Jn(t){this[q]._receiver.write(t)||this.pause()}function pa(){let t=this[q];t._readyState=L.CLOSING,t._receiver.end(),this.end()}function ha(){let t=this[q];this.removeListener("error",ha),this.on("error",aa),t&&(t._readyState=L.CLOSING,this.destroy())}});var Sa=v((H_,va)=>{"use strict";var F_=Kn(),{Duplex:Pp}=require("stream");function ma(t){t.emit("close")}function Mp(){!this.destroyed&&this._writableState.finished&&this.destroy()}function ya(t){this.removeListener("error",ya),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Lp(t,e){let n=!0,s=new Pp({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||t.pause()}),t.once("error",function(i){s.destroyed||(n=!1,s.destroy(i))}),t.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(r,i){if(t.readyState===t.CLOSED){i(r),process.nextTick(ma,s);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(r),process.nextTick(ma,s)}),n&&t.terminate()},s._final=function(r){if(t.readyState===t.CONNECTING){t.once("open",function(){s._final(r)});return}t._socket!==null&&(t._socket._writableState.finished?(r(),s._readableState.endEmitted&&s.destroy()):(t._socket.once("finish",function(){r()}),t.close()))},s._read=function(){t.isPaused&&t.resume()},s._write=function(r,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){s._write(r,i,o)});return}t.send(r,o)},s.on("end",Mp),s.on("error",ya),s}va.exports=Lp});var ba=v((U_,_a)=>{"use strict";var{tokenChars:Np}=pt();function Op(t){let e=new Set,n=-1,s=-1,r=0;for(r;r<t.length;r++){let o=t.charCodeAt(r);if(s===-1&&Np[o]===1)n===-1&&(n=r);else if(r!==0&&(o===32||o===9))s===-1&&n!==-1&&(s=r);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${r}`);s===-1&&(s=r);let a=t.slice(n,s);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=s=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(n===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,r);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}_a.exports={parse:Op}});var xa=v((q_,Ca)=>{"use strict";var Bp=require("events"),Xn=require("http"),{Duplex:W_}=require("stream"),{createHash:Dp}=require("crypto"),wa=Ir(),je=Yt(),Fp=ba(),Hp=Kn(),{CLOSE_TIMEOUT:Up,GUID:Wp,kWebSocket:qp}=ve(),Gp=/^[+/0-9A-Za-z]{22}==$/,Ia=0,Ta=1,ka=2,xr=class extends Bp{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Up,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Hp,...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=Xn.createServer((s,r)=>{let i=Xn.STATUS_CODES[426];r.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),r.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=jp(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,i,o)=>{this.handleUpgrade(r,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Ia}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===ka){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Zt,this);return}if(e&&this.once("close",e),this._state!==Ta)if(this._state=Ta,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(Zt,this):process.nextTick(Zt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Zt(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,s,r){n.on("error",Aa);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){$e(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){$e(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!Gp.test(i)){$e(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){$e(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){en(n,400);return}let l=e.headers["sec-websocket-protocol"],u=new Set;if(l!==void 0)try{u=Fp.parse(l)}catch{$e(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let c=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&c!==void 0){let f=new je(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=wa.parse(c);h[je.extensionName]&&(f.accept(h[je.extensionName]),d[je.extensionName]=f)}catch{$e(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 en(n,g||401,p,m);this.completeUpgrade(d,i,u,e,n,s,r)});return}if(!this.options.verifyClient(f))return en(n,401)}this.completeUpgrade(d,i,u,e,n,s,r)}completeUpgrade(e,n,s,r,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[qp])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Ia)return en(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Dp("sha1").update(n+Wp).digest("base64")}`],c=new this.options.WebSocket(null,void 0,this.options);if(s.size){let d=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;d&&(u.push(`Sec-WebSocket-Protocol: ${d}`),c._protocol=d)}if(e[je.extensionName]){let d=e[je.extensionName].params,f=wa.format({[je.extensionName]:[d]});u.push(`Sec-WebSocket-Extensions: ${f}`),c._extensions=e}this.emit("headers",u,r),i.write(u.concat(`\r
1
+ "use strict";var Df=Object.create;var Lo=Object.defineProperty;var Bf=Object.getOwnPropertyDescriptor;var Ff=Object.getOwnPropertyNames;var Hf=Object.getPrototypeOf,Uf=Object.prototype.hasOwnProperty;var v=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Wf=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ff(e))!Uf.call(t,r)&&r!==n&&Lo(t,r,{get:()=>e[r],enumerable:!(s=Bf(e,r))||s.enumerable});return t};var ut=(t,e,n)=>(n=t!=null?Df(Hf(t)):{},Wf(e||!t||!t.__esModule?Lo(n,"default",{value:t,enumerable:!0}):n,t));var ve=v((sb,Do)=>{"use strict";var No=["nodebuffer","arraybuffer","fragments"],Oo=typeof Blob<"u";Oo&&No.push("blob");Do.exports={BINARY_TYPES:No,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Oo,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Qt=v((rb,jn)=>{"use strict";var{EMPTY_BUFFER:qf}=ve(),gr=Buffer[Symbol.species];function Gf(t,e){if(t.length===0)return qf;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),s=0;for(let r=0;r<t.length;r++){let i=t[r];n.set(i,s),s+=i.length}return s<e?new gr(n.buffer,n.byteOffset,s):n}function Bo(t,e,n,s,r){for(let i=0;i<r;i++)n[s+i]=t[i]^e[i&3]}function Fo(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function jf(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function mr(t){if(mr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new gr(t):ArrayBuffer.isView(t)?e=new gr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),mr.readOnly=!1),e}jn.exports={concat:Gf,mask:Bo,toArrayBuffer:jf,toBuffer:mr,unmask:Fo};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");jn.exports.mask=function(e,n,s,r,i){i<48?Bo(e,n,s,r,i):t.mask(e,n,s,r,i)},jn.exports.unmask=function(e,n){e.length<32?Fo(e,n):t.unmask(e,n)}}catch{}});var Wo=v((ib,Uo)=>{"use strict";var Ho=Symbol("kDone"),yr=Symbol("kRun"),vr=class{constructor(e){this[Ho]=()=>{this.pending--,this[yr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[yr]()}[yr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Ho])}}};Uo.exports=vr});var Jt=v((ob,$o)=>{"use strict";var Yt=require("zlib"),qo=Qt(),$f=Wo(),{kStatusCode:Go}=ve(),zf=Buffer[Symbol.species],Vf=Buffer.from([0,0,255,255]),zn=Symbol("permessage-deflate"),Se=Symbol("total-length"),dt=Symbol("callback"),ke=Symbol("buffers"),ft=Symbol("error"),$n,Sr=class{constructor(e,n,s){if(this._maxPayload=s|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,!$n){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;$n=new $f(r)}}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[dt];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,s=e.find(r=>!(n.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>r.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(s.server_no_context_takeover=!0),n.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(s.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?s.client_max_window_bits=n.clientMaxWindowBits:(s.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}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(s=>{let r=n[s];if(r.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(r=r[0],s==="client_max_window_bits"){if(r!==!0){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else if(s==="server_max_window_bits"){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else throw new Error(`Unknown parameter "${s}"`);n[s]=r})}),e}decompress(e,n,s){$n.add(r=>{this._decompress(e,n,(i,o)=>{r(),s(i,o)})})}compress(e,n,s){$n.add(r=>{this._compress(e,n,(i,o)=>{r(),s(i,o)})})}_decompress(e,n,s){let r=this._isServer?"client":"server";if(!this._inflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Yt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Yt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[zn]=this,this._inflate[Se]=0,this._inflate[ke]=[],this._inflate.on("error",Yf),this._inflate.on("data",jo)}this._inflate[dt]=s,this._inflate.write(e),n&&this._inflate.write(Vf),this._inflate.flush(()=>{let i=this._inflate[ft];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=qo.concat(this._inflate[ke],this._inflate[Se]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Se]=0,this._inflate[ke]=[],n&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,n,s){let r=this._isServer?"server":"client";if(!this._deflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Yt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Yt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Se]=0,this._deflate[ke]=[],this._deflate.on("data",Qf)}this._deflate[dt]=s,this._deflate.write(e),this._deflate.flush(Yt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=qo.concat(this._deflate[ke],this._deflate[Se]);n&&(i=new zf(i.buffer,i.byteOffset,i.length-4)),this._deflate[dt]=null,this._deflate[Se]=0,this._deflate[ke]=[],n&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};$o.exports=Sr;function Qf(t){this[ke].push(t),this[Se]+=t.length}function jo(t){if(this[Se]+=t.length,this[zn]._maxPayload<1||this[Se]<=this[zn]._maxPayload){this[ke].push(t);return}this[ft]=new RangeError("Max payload size exceeded"),this[ft].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ft][Go]=1009,this.removeListener("data",jo),this.reset()}function Yf(t){if(this[zn]._inflate=null,this[ft]){this[dt](this[ft]);return}t[Go]=1007,this[dt](t)}});var pt=v((ab,Vn)=>{"use strict";var{isUtf8:zo}=require("buffer"),{hasBlob:Jf}=ve(),Kf=[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 Xf(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function _r(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 Zf(t){return Jf&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Vn.exports={isBlob:Zf,isValidStatusCode:Xf,isValidUTF8:_r,tokenChars:Kf};if(zo)Vn.exports.isValidUTF8=function(t){return t.length<24?_r(t):zo(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Vn.exports.isValidUTF8=function(e){return e.length<32?_r(e):t(e)}}catch{}});var Ar=v((lb,Zo)=>{"use strict";var{Writable:ep}=require("stream"),Vo=Jt(),{BINARY_TYPES:tp,EMPTY_BUFFER:Qo,kStatusCode:np,kWebSocket:sp}=ve(),{concat:br,toArrayBuffer:rp,unmask:ip}=Qt(),{isValidStatusCode:op,isValidUTF8:Yo}=pt(),Qn=Buffer[Symbol.species],te=0,Jo=1,Ko=2,Xo=3,wr=4,Ir=5,Yn=6,Tr=class extends ep{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||tp[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[sp]=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=te}_write(e,n,s){if(this._opcode===8&&this._state==te)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new Qn(s.buffer,s.byteOffset+e,s.length-e),new Qn(s.buffer,s.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let s=this._buffers[0],r=n.length-e;e>=s.length?n.set(this._buffers.shift(),r):(n.set(new Uint8Array(s.buffer,s.byteOffset,e),r),this._buffers[0]=new Qn(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case te:this.getInfo(e);break;case Jo:this.getPayloadLength16(e);break;case Ko:this.getPayloadLength64(e);break;case Xo:this.getMask();break;case wr:this.getData(e);break;case Ir:case Yn: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 r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(r);return}let s=(n[0]&64)===64;if(s&&!this._extensions[Vo.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(r);return}if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(r);return}this._payloadLength===126?this._state=Jo:this._payloadLength===127?this._state=Ko: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),s=n.readUInt32BE(0);if(s>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(r);return}this._payloadLength=s*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=Xo:this._state=wr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=wr}getData(e){let n=Qo;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&&ip(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=Ir,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[Vo.extensionName].decompress(e,this._fin,(r,i)=>{if(r)return n(r);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===te&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=te;return}let n=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=br(s,n):this._binaryType==="arraybuffer"?r=rp(br(s,n)):this._binaryType==="blob"?r=new Blob(s):r=s,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=te):(this._state=Yn,setImmediate(()=>{this.emit("message",r,!0),this._state=te,this.startLoop(e)}))}else{let r=br(s,n);if(!this._skipUTF8Validation&&!Yo(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ir||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=te):(this._state=Yn,setImmediate(()=>{this.emit("message",r,!1),this._state=te,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Qo),this.end();else{let s=e.readUInt16BE(0);if(!op(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let r=new Qn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Yo(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",s,r),this.end()}this._state=te;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=te):(this._state=Yn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=te,this.startLoop(n)}))}createError(e,n,s,r,i){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[np]=r,o}};Zo.exports=Tr});var xr=v((ub,na)=>{"use strict";var{Duplex:cb}=require("stream"),{randomFillSync:ap}=require("crypto"),ea=Jt(),{EMPTY_BUFFER:lp,kWebSocket:cp,NOOP:up}=ve(),{isBlob:ht,isValidStatusCode:dp}=pt(),{mask:ta,toBuffer:We}=Qt(),ne=Symbol("kByteLength"),fp=Buffer.alloc(4),Jn=8*1024,qe,gt=Jn,le=0,pp=1,hp=2,Cr=class t{constructor(e,n,s){this._extensions=n||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=le,this.onerror=up,this[cp]=void 0}static frame(e,n){let s,r=!1,i=2,o=!1;n.mask&&(s=n.maskBuffer||fp,n.generateMask?n.generateMask(s):(gt===Jn&&(qe===void 0&&(qe=Buffer.alloc(Jn)),ap(qe,0,Jn),gt=0),s[0]=qe[gt++],s[1]=qe[gt++],s[2]=qe[gt++],s[3]=qe[gt++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[ne]!==void 0?a=n[ne]:(e=Buffer.from(e),a=e.length):(a=e.length,r=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let u=Buffer.allocUnsafe(r?a+i:i);return u[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(u[0]|=64),u[1]=l,l===126?u.writeUInt16BE(a,2):l===127&&(u[2]=u[3]=0,u.writeUIntBE(a,4,6)),n.mask?(u[1]|=128,u[i-4]=s[0],u[i-3]=s[1],u[i-2]=s[2],u[i-1]=s[3],o?[u,e]:r?(ta(e,s,u,i,a),[u]):(ta(e,s,e,0,a),[u,e])):[u,e]}close(e,n,s,r){let i;if(e===void 0)i=lp;else{if(typeof e!="number"||!dp(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={[ne]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==le?this.enqueue([this.dispatch,i,!1,o,r]):this.sendFrame(t.frame(i,o),r)}ping(e,n,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):ht(e)?(r=e.size,i=!1):(e=We(e),r=e.length,i=We.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[ne]:r,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==le?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}pong(e,n,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):ht(e)?(r=e.size,i=!1):(e=We(e),r=e.length,i=We.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[ne]:r,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==le?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}send(e,n,s){let r=this._extensions[ea.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):ht(e)?(a=e.size,l=!1):(e=We(e),a=e.length,l=We.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=r._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[ne]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};ht(e)?this._state!==le?this.enqueue([this.getBlobData,e,this._compress,u,s]):this.getBlobData(e,this._compress,u,s):this._state!==le?this.enqueue([this.dispatch,e,this._compress,u,s]):this.dispatch(e,this._compress,u,s)}getBlobData(e,n,s,r){this._bufferedBytes+=s[ne],this._state=hp,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(kr,this,a,r);return}this._bufferedBytes-=s[ne];let o=We(i);n?this.dispatch(o,n,s,r):(this._state=le,this.sendFrame(t.frame(o,s),r),this.dequeue())}).catch(i=>{process.nextTick(gp,this,i,r)})}dispatch(e,n,s,r){if(!n){this.sendFrame(t.frame(e,s),r);return}let i=this._extensions[ea.extensionName];this._bufferedBytes+=s[ne],this._state=pp,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");kr(this,l,r);return}this._bufferedBytes-=s[ne],this._state=le,s.readOnly=!1,this.sendFrame(t.frame(a,s),r),this.dequeue()})}dequeue(){for(;this._state===le&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][ne],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][ne],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)}};na.exports=Cr;function kr(t,e,n){typeof n=="function"&&n(e);for(let s=0;s<t._queue.length;s++){let r=t._queue[s],i=r[r.length-1];typeof i=="function"&&i(e)}}function gp(t,e,n){kr(t,e,n),t.onerror(e)}});var da=v((db,ua)=>{"use strict";var{kForOnEventAttribute:Kt,kListener:Rr}=ve(),sa=Symbol("kCode"),ra=Symbol("kData"),ia=Symbol("kError"),oa=Symbol("kMessage"),aa=Symbol("kReason"),mt=Symbol("kTarget"),la=Symbol("kType"),ca=Symbol("kWasClean"),_e=class{constructor(e){this[mt]=null,this[la]=e}get target(){return this[mt]}get type(){return this[la]}};Object.defineProperty(_e.prototype,"target",{enumerable:!0});Object.defineProperty(_e.prototype,"type",{enumerable:!0});var Ge=class extends _e{constructor(e,n={}){super(e),this[sa]=n.code===void 0?0:n.code,this[aa]=n.reason===void 0?"":n.reason,this[ca]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[sa]}get reason(){return this[aa]}get wasClean(){return this[ca]}};Object.defineProperty(Ge.prototype,"code",{enumerable:!0});Object.defineProperty(Ge.prototype,"reason",{enumerable:!0});Object.defineProperty(Ge.prototype,"wasClean",{enumerable:!0});var yt=class extends _e{constructor(e,n={}){super(e),this[ia]=n.error===void 0?null:n.error,this[oa]=n.message===void 0?"":n.message}get error(){return this[ia]}get message(){return this[oa]}};Object.defineProperty(yt.prototype,"error",{enumerable:!0});Object.defineProperty(yt.prototype,"message",{enumerable:!0});var Xt=class extends _e{constructor(e,n={}){super(e),this[ra]=n.data===void 0?null:n.data}get data(){return this[ra]}};Object.defineProperty(Xt.prototype,"data",{enumerable:!0});var mp={addEventListener(t,e,n={}){for(let r of this.listeners(t))if(!n[Kt]&&r[Rr]===e&&!r[Kt])return;let s;if(t==="message")s=function(i,o){let a=new Xt("message",{data:o?i:i.toString()});a[mt]=this,Kn(e,this,a)};else if(t==="close")s=function(i,o){let a=new Ge("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[mt]=this,Kn(e,this,a)};else if(t==="error")s=function(i){let o=new yt("error",{error:i,message:i.message});o[mt]=this,Kn(e,this,o)};else if(t==="open")s=function(){let i=new _e("open");i[mt]=this,Kn(e,this,i)};else return;s[Kt]=!!n[Kt],s[Rr]=e,n.once?this.once(t,s):this.on(t,s)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Rr]===e&&!n[Kt]){this.removeListener(t,n);break}}};ua.exports={CloseEvent:Ge,ErrorEvent:yt,Event:_e,EventTarget:mp,MessageEvent:Xt};function Kn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var Er=v((fb,fa)=>{"use strict";var{tokenChars:Zt}=pt();function he(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function yp(t){let e=Object.create(null),n=Object.create(null),s=!1,r=!1,i=!1,o,a,l=-1,u=-1,c=-1,d=0;for(;d<t.length;d++)if(u=t.charCodeAt(d),o===void 0)if(c===-1&&Zt[u]===1)l===-1&&(l=d);else if(d!==0&&(u===32||u===9))c===-1&&l!==-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d);let h=t.slice(l,c);u===44?(he(e,h,n),n=Object.create(null)):o=h,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(c===-1&&Zt[u]===1)l===-1&&(l=d);else if(u===32||u===9)c===-1&&l!==-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d),he(n,t.slice(l,c),!0),u===44&&(he(e,o,n),n=Object.create(null),o=void 0),l=c=-1}else if(u===61&&l!==-1&&c===-1)a=t.slice(l,d),l=c=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(r){if(Zt[u]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:s||(s=!0),r=!1}else if(i)if(Zt[u]===1)l===-1&&(l=d);else if(u===34&&l!==-1)i=!1,c=d;else if(u===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(u===34&&t.charCodeAt(d-1)===61)i=!0;else if(c===-1&&Zt[u]===1)l===-1&&(l=d);else if(l!==-1&&(u===32||u===9))c===-1&&(c=d);else if(u===59||u===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);c===-1&&(c=d);let h=t.slice(l,c);s&&(h=h.replace(/\\/g,""),s=!1),he(n,a,h),u===44&&(he(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||i||u===32||u===9)throw new SyntaxError("Unexpected end of input");c===-1&&(c=d);let f=t.slice(l,c);return o===void 0?he(e,f,n):(a===void 0?he(n,f,!0):s?he(n,a,f.replace(/\\/g,"")):he(n,a,f),he(e,o,n)),e}function vp(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(s=>[e].concat(Object.keys(s).map(r=>{let i=s[r];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}fa.exports={format:vp,parse:yp}});var ts=v((gb,Ta)=>{"use strict";var Sp=require("events"),_p=require("https"),bp=require("http"),ga=require("net"),wp=require("tls"),{randomBytes:Ip,createHash:Tp}=require("crypto"),{Duplex:pb,Readable:hb}=require("stream"),{URL:Pr}=require("url"),xe=Jt(),Ap=Ar(),Cp=xr(),{isBlob:kp}=pt(),{BINARY_TYPES:pa,CLOSE_TIMEOUT:xp,EMPTY_BUFFER:Xn,GUID:Rp,kForOnEventAttribute:Mr,kListener:Ep,kStatusCode:Pp,kWebSocket:q,NOOP:ma}=ve(),{EventTarget:{addEventListener:Mp,removeEventListener:Lp}}=da(),{format:Np,parse:Op}=Er(),{toBuffer:Dp}=Qt(),ya=Symbol("kAborted"),Lr=[8,13],be=["CONNECTING","OPEN","CLOSING","CLOSED"],Bp=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,N=class t extends Sp{constructor(e,n,s){super(),this._binaryType=pa[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Xn,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?(s=n,n=[]):n=[n]),va(this,e,n,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){pa.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,s){let r=new Ap({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new Cp(e,this._extensions,s.generateMask);this._receiver=r,this._sender=i,this._socket=e,r[q]=this,i[q]=this,e[q]=this,r.on("conclude",Up),r.on("drain",Wp),r.on("error",qp),r.on("message",Gp),r.on("ping",jp),r.on("pong",$p),i.onerror=zp,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",ba),e.on("data",es),e.on("end",wa),e.on("error",Ia),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[xe.extensionName]&&this._extensions[xe.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){Z(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,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),_a(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=n=void 0):typeof n=="function"&&(s=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Nr(this,e,s);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||Xn,n,s)}pong(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=n=void 0):typeof n=="function"&&(s=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Nr(this,e,s);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||Xn,n,s)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(s=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Nr(this,e,s);return}let r={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[xe.extensionName]||(r.compress=!1),this._sender.send(e||Xn,r,s)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Z(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(N,"CONNECTING",{enumerable:!0,value:be.indexOf("CONNECTING")});Object.defineProperty(N.prototype,"CONNECTING",{enumerable:!0,value:be.indexOf("CONNECTING")});Object.defineProperty(N,"OPEN",{enumerable:!0,value:be.indexOf("OPEN")});Object.defineProperty(N.prototype,"OPEN",{enumerable:!0,value:be.indexOf("OPEN")});Object.defineProperty(N,"CLOSING",{enumerable:!0,value:be.indexOf("CLOSING")});Object.defineProperty(N.prototype,"CLOSING",{enumerable:!0,value:be.indexOf("CLOSING")});Object.defineProperty(N,"CLOSED",{enumerable:!0,value:be.indexOf("CLOSED")});Object.defineProperty(N.prototype,"CLOSED",{enumerable:!0,value:be.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(N.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(N.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Mr])return e[Ep];return null},set(e){for(let n of this.listeners(t))if(n[Mr]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[Mr]:!0})}})});N.prototype.addEventListener=Mp;N.prototype.removeEventListener=Lp;Ta.exports=N;function va(t,e,n,s){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:xp,protocolVersion:Lr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=r.autoPong,t._closeTimeout=r.closeTimeout,!Lr.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${Lr.join(", ")})`);let i;if(e instanceof Pr)i=e;else try{i=new Pr(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 m=new SyntaxError(l);if(t._redirects===0)throw m;Zn(t,m);return}let u=o?443:80,c=Ip(16).toString("base64"),d=o?_p.request:bp.request,f=new Set,h;if(r.createConnection=r.createConnection||(o?Hp:Fp),r.defaultPort=r.defaultPort||u,r.port=i.port||u,r.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":c,Connection:"Upgrade",Upgrade:"websocket"},r.path=i.pathname+i.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(h=new xe(r.perMessageDeflate!==!0?r.perMessageDeflate:{},!1,r.maxPayload),r.headers["Sec-WebSocket-Extensions"]=Np({[xe.extensionName]:h.offer()})),n.length){for(let m of n){if(typeof m!="string"||!Bp.test(m)||f.has(m))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(m)}r.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(i.username||i.password)&&(r.auth=`${i.username}:${i.password}`),a){let m=r.path.split(":");r.socketPath=m[0],r.path=m[1]}let g;if(r.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?r.socketPath:i.host;let m=s&&s.headers;if(s={...s,headers:{}},m)for(let[p,y]of Object.entries(m))s.headers[p.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let m=a?t._originalIpc?r.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!m||t._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,m||delete r.headers.host,r.auth=void 0)}r.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),g=t._req=d(r),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(r);r.timeout&&g.on("timeout",()=>{Z(t,g,"Opening handshake has timed out")}),g.on("error",m=>{g===null||g[ya]||(g=t._req=null,Zn(t,m))}),g.on("response",m=>{let p=m.headers.location,y=m.statusCode;if(p&&r.followRedirects&&y>=300&&y<400){if(++t._redirects>r.maxRedirects){Z(t,g,"Maximum redirects exceeded");return}g.abort();let C;try{C=new Pr(p,e)}catch{let A=new SyntaxError(`Invalid URL: ${p}`);Zn(t,A);return}va(t,C,n,s)}else t.emit("unexpected-response",g,m)||Z(t,g,`Unexpected server response: ${m.statusCode}`)}),g.on("upgrade",(m,p,y)=>{if(t.emit("upgrade",m),t.readyState!==N.CONNECTING)return;g=t._req=null;let C=m.headers.upgrade;if(C===void 0||C.toLowerCase()!=="websocket"){Z(t,p,"Invalid Upgrade header");return}let I=Tp("sha1").update(c+Rp).digest("base64");if(m.headers["sec-websocket-accept"]!==I){Z(t,p,"Invalid Sec-WebSocket-Accept header");return}let A=m.headers["sec-websocket-protocol"],w;if(A!==void 0?f.size?f.has(A)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":f.size&&(w="Server sent no subprotocol"),w){Z(t,p,w);return}A&&(t._protocol=A);let D=m.headers["sec-websocket-extensions"];if(D!==void 0){if(!h){Z(t,p,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let x;try{x=Op(D)}catch{Z(t,p,"Invalid Sec-WebSocket-Extensions header");return}let X=Object.keys(x);if(X.length!==1||X[0]!==xe.extensionName){Z(t,p,"Server indicated an extension that was not requested");return}try{h.accept(x[xe.extensionName])}catch{Z(t,p,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[xe.extensionName]=h}t.setSocket(p,y,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(g,t):g.end()}function Zn(t,e){t._readyState=N.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function Fp(t){return t.path=t.socketPath,ga.connect(t)}function Hp(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=ga.isIP(t.host)?"":t.host),wp.connect(t)}function Z(t,e,n){t._readyState=N.CLOSING;let s=new Error(n);Error.captureStackTrace(s,Z),e.setHeader?(e[ya]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(Zn,t,s)):(e.destroy(s),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Nr(t,e,n){if(e){let s=kp(e)?e.size:Dp(e).length;t._socket?t._sender._bufferedBytes+=s:t._bufferedAmount+=s}if(n){let s=new Error(`WebSocket is not open: readyState ${t.readyState} (${be[t.readyState]})`);process.nextTick(n,s)}}function Up(t,e){let n=this[q];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[q]!==void 0&&(n._socket.removeListener("data",es),process.nextTick(Sa,n._socket),t===1005?n.close():n.close(t,e))}function Wp(){let t=this[q];t.isPaused||t._socket.resume()}function qp(t){let e=this[q];e._socket[q]!==void 0&&(e._socket.removeListener("data",es),process.nextTick(Sa,e._socket),e.close(t[Pp])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function ha(){this[q].emitClose()}function Gp(t,e){this[q].emit("message",t,e)}function jp(t){let e=this[q];e._autoPong&&e.pong(t,!this._isServer,ma),e.emit("ping",t)}function $p(t){this[q].emit("pong",t)}function Sa(t){t.resume()}function zp(t){let e=this[q];e.readyState!==N.CLOSED&&(e.readyState===N.OPEN&&(e._readyState=N.CLOSING,_a(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function _a(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function ba(){let t=this[q];if(this.removeListener("close",ba),this.removeListener("data",es),this.removeListener("end",wa),t._readyState=N.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[q]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",ha),t._receiver.on("finish",ha))}function es(t){this[q]._receiver.write(t)||this.pause()}function wa(){let t=this[q];t._readyState=N.CLOSING,t._receiver.end(),this.end()}function Ia(){let t=this[q];this.removeListener("error",Ia),this.on("error",ma),t&&(t._readyState=N.CLOSING,this.destroy())}});var xa=v((yb,ka)=>{"use strict";var mb=ts(),{Duplex:Vp}=require("stream");function Aa(t){t.emit("close")}function Qp(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Ca(t){this.removeListener("error",Ca),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Yp(t,e){let n=!0,s=new Vp({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||t.pause()}),t.once("error",function(i){s.destroyed||(n=!1,s.destroy(i))}),t.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(r,i){if(t.readyState===t.CLOSED){i(r),process.nextTick(Aa,s);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(r),process.nextTick(Aa,s)}),n&&t.terminate()},s._final=function(r){if(t.readyState===t.CONNECTING){t.once("open",function(){s._final(r)});return}t._socket!==null&&(t._socket._writableState.finished?(r(),s._readableState.endEmitted&&s.destroy()):(t._socket.once("finish",function(){r()}),t.close()))},s._read=function(){t.isPaused&&t.resume()},s._write=function(r,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){s._write(r,i,o)});return}t.send(r,o)},s.on("end",Qp),s.on("error",Ca),s}ka.exports=Yp});var Ea=v((vb,Ra)=>{"use strict";var{tokenChars:Jp}=pt();function Kp(t){let e=new Set,n=-1,s=-1,r=0;for(r;r<t.length;r++){let o=t.charCodeAt(r);if(s===-1&&Jp[o]===1)n===-1&&(n=r);else if(r!==0&&(o===32||o===9))s===-1&&n!==-1&&(s=r);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${r}`);s===-1&&(s=r);let a=t.slice(n,s);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=s=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(n===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,r);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Ra.exports={parse:Kp}});var Ba=v((_b,Da)=>{"use strict";var Xp=require("events"),ns=require("http"),{Duplex:Sb}=require("stream"),{createHash:Zp}=require("crypto"),Pa=Er(),je=Jt(),eh=Ea(),th=ts(),{CLOSE_TIMEOUT:nh,GUID:sh,kWebSocket:rh}=ve(),ih=/^[+/0-9A-Za-z]{22}==$/,Ma=0,La=1,Oa=2,Or=class extends Xp{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:nh,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:th,...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=ns.createServer((s,r)=>{let i=ns.STATUS_CODES[426];r.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),r.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=oh(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,i,o)=>{this.handleUpgrade(r,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Ma}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===Oa){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(en,this);return}if(e&&this.once("close",e),this._state!==La)if(this._state=La,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(en,this):process.nextTick(en,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{en(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,s,r){n.on("error",Na);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){$e(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){$e(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!ih.test(i)){$e(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){$e(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){tn(n,400);return}let l=e.headers["sec-websocket-protocol"],u=new Set;if(l!==void 0)try{u=eh.parse(l)}catch{$e(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let c=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&c!==void 0){let f=new je(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=Pa.parse(c);h[je.extensionName]&&(f.accept(h[je.extensionName]),d[je.extensionName]=f)}catch{$e(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,m,p)=>{if(!h)return tn(n,g||401,m,p);this.completeUpgrade(d,i,u,e,n,s,r)});return}if(!this.options.verifyClient(f))return tn(n,401)}this.completeUpgrade(d,i,u,e,n,s,r)}completeUpgrade(e,n,s,r,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[rh])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Ma)return tn(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Zp("sha1").update(n+sh).digest("base64")}`],c=new this.options.WebSocket(null,void 0,this.options);if(s.size){let d=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;d&&(u.push(`Sec-WebSocket-Protocol: ${d}`),c._protocol=d)}if(e[je.extensionName]){let d=e[je.extensionName].params,f=Pa.format({[je.extensionName]:[d]});u.push(`Sec-WebSocket-Extensions: ${f}`),c._extensions=e}this.emit("headers",u,r),i.write(u.concat(`\r
2
2
  `).join(`\r
3
- `)),i.removeListener("error",Aa),c.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(c),c.on("close",()=>{this.clients.delete(c),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Zt,this)})),a(c,r)}};Ca.exports=xr;function jp(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let s of Object.keys(e))t.removeListener(s,e[s])}}function Zt(t){t._state=ka,t.emit("close")}function Aa(){this.destroy()}function en(t,e,n,s){n=n||Xn.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...s},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${Xn.STATUS_CODES[e]}\r
3
+ `)),i.removeListener("error",Na),c.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(c),c.on("close",()=>{this.clients.delete(c),this._shouldEmitClose&&!this.clients.size&&process.nextTick(en,this)})),a(c,r)}};Da.exports=Or;function oh(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let s of Object.keys(e))t.removeListener(s,e[s])}}function en(t){t._state=Oa,t.emit("close")}function Na(){this.destroy()}function tn(t,e,n,s){n=n||ns.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...s},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${ns.STATUS_CODES[e]}\r
4
4
  `+Object.keys(s).map(r=>`${r}: ${s[r]}`).join(`\r
5
5
  `)+`\r
6
6
  \r
7
- `+n)}function $e(t,e,n,s,r,i){if(t.listenerCount("wsClientError")){let o=new Error(r);Error.captureStackTrace(o,$e),t.emit("wsClientError",o,n,e)}else en(n,s,r,i)}});var Er=v((j_,Ra)=>{Ra.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var Re=v(ze=>{var Pr,Yp=[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];ze.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};ze.getSymbolTotalCodewords=function(e){return Yp[e]};ze.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};ze.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');Pr=e};ze.isKanjiModeEnabled=function(){return typeof Pr<"u"};ze.toSJIS=function(e){return Pr(e)}});var Zn=v(se=>{se.L={bit:1};se.M={bit:0};se.Q={bit:3};se.H={bit:2};function Jp(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return se.L;case"m":case"medium":return se.M;case"q":case"quartile":return se.Q;case"h":case"high":return se.H;default:throw new Error("Unknown EC Level: "+t)}}se.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};se.from=function(e,n){if(se.isValid(e))return e;try{return Jp(e)}catch{return n}}});var Ma=v((V_,Pa)=>{function Ea(){this.buffer=[],this.length=0}Ea.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++}};Pa.exports=Ea});var Na=v((Q_,La)=>{function tn(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)}tn.prototype.set=function(t,e,n,s){let r=t*this.size+e;this.data[r]=n,s&&(this.reservedBit[r]=!0)};tn.prototype.get=function(t,e){return this.data[t*this.size+e]};tn.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};tn.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};La.exports=tn});var Oa=v(es=>{var Kp=Re().getSymbolSize;es.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,s=Kp(e),r=s===145?26:Math.ceil((s-13)/(2*n-2))*2,i=[s-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-r;return i.push(6),i.reverse()};es.getPositions=function(e){let n=[],s=es.getRowColCoords(e),r=s.length;for(let i=0;i<r;i++)for(let o=0;o<r;o++)i===0&&o===0||i===0&&o===r-1||i===r-1&&o===0||n.push([s[i],s[o]]);return n}});var Fa=v(Da=>{var Xp=Re().getSymbolSize,Ba=7;Da.getPositions=function(e){let n=Xp(e);return[[0,0],[n-Ba,0],[0,n-Ba]]}});var Ha=v(R=>{R.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var Ve={N1:3,N2:3,N3:40,N4:10};R.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7};R.from=function(e){return R.isValid(e)?parseInt(e,10):void 0};R.getPenaltyN1=function(e){let n=e.size,s=0,r=0,i=0,o=null,a=null;for(let l=0;l<n;l++){r=i=0,o=a=null;for(let u=0;u<n;u++){let c=e.get(l,u);c===o?r++:(r>=5&&(s+=Ve.N1+(r-5)),o=c,r=1),c=e.get(u,l),c===a?i++:(i>=5&&(s+=Ve.N1+(i-5)),a=c,i=1)}r>=5&&(s+=Ve.N1+(r-5)),i>=5&&(s+=Ve.N1+(i-5))}return s};R.getPenaltyN2=function(e){let n=e.size,s=0;for(let r=0;r<n-1;r++)for(let i=0;i<n-1;i++){let o=e.get(r,i)+e.get(r,i+1)+e.get(r+1,i)+e.get(r+1,i+1);(o===4||o===0)&&s++}return s*Ve.N2};R.getPenaltyN3=function(e){let n=e.size,s=0,r=0,i=0;for(let o=0;o<n;o++){r=i=0;for(let a=0;a<n;a++)r=r<<1&2047|e.get(o,a),a>=10&&(r===1488||r===93)&&s++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&s++}return s*Ve.N3};R.getPenaltyN4=function(e){let n=0,s=e.data.length;for(let i=0;i<s;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/s/5)-10)*Ve.N4};function Zp(t,e,n){switch(t){case R.Patterns.PATTERN000:return(e+n)%2===0;case R.Patterns.PATTERN001:return e%2===0;case R.Patterns.PATTERN010:return n%3===0;case R.Patterns.PATTERN011:return(e+n)%3===0;case R.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2===0;case R.Patterns.PATTERN101:return e*n%2+e*n%3===0;case R.Patterns.PATTERN110:return(e*n%2+e*n%3)%2===0;case R.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}R.applyMask=function(e,n){let s=n.size;for(let r=0;r<s;r++)for(let i=0;i<s;i++)n.isReserved(i,r)||n.xor(i,r,Zp(e,i,r))};R.getBestMask=function(e,n){let s=Object.keys(R.Patterns).length,r=0,i=1/0;for(let o=0;o<s;o++){n(o),R.applyMask(o,e);let a=R.getPenaltyN1(e)+R.getPenaltyN2(e)+R.getPenaltyN3(e)+R.getPenaltyN4(e);R.applyMask(o,e),a<i&&(i=a,r=o)}return r}});var Lr=v(Mr=>{var Ee=Zn(),ts=[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],ns=[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];Mr.getBlocksCount=function(e,n){switch(n){case Ee.L:return ts[(e-1)*4+0];case Ee.M:return ts[(e-1)*4+1];case Ee.Q:return ts[(e-1)*4+2];case Ee.H:return ts[(e-1)*4+3];default:return}};Mr.getTotalCodewordsCount=function(e,n){switch(n){case Ee.L:return ns[(e-1)*4+0];case Ee.M:return ns[(e-1)*4+1];case Ee.Q:return ns[(e-1)*4+2];case Ee.H:return ns[(e-1)*4+3];default:return}}});var Ua=v(rs=>{var nn=new Uint8Array(512),ss=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)nn[n]=e,ss[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)nn[n]=nn[n-255]})();rs.log=function(e){if(e<1)throw new Error("log("+e+")");return ss[e]};rs.exp=function(e){return nn[e]};rs.mul=function(e,n){return e===0||n===0?0:nn[ss[e]+ss[n]]}});var Wa=v(sn=>{var Nr=Ua();sn.mul=function(e,n){let s=new Uint8Array(e.length+n.length-1);for(let r=0;r<e.length;r++)for(let i=0;i<n.length;i++)s[r+i]^=Nr.mul(e[r],n[i]);return s};sn.mod=function(e,n){let s=new Uint8Array(e);for(;s.length-n.length>=0;){let r=s[0];for(let o=0;o<n.length;o++)s[o]^=Nr.mul(n[o],r);let i=0;for(;i<s.length&&s[i]===0;)i++;s=s.slice(i)}return s};sn.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let s=0;s<e;s++)n=sn.mul(n,new Uint8Array([1,Nr.exp(s)]));return n}});var ja=v((tb,Ga)=>{var qa=Wa();function Or(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}Or.prototype.initialize=function(e){this.degree=e,this.genPoly=qa.generateECPolynomial(this.degree)};Or.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 s=qa.mod(n,this.genPoly),r=this.degree-s.length;if(r>0){let i=new Uint8Array(this.degree);return i.set(s,r),i}return s};Ga.exports=Or});var Br=v($a=>{$a.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var Dr=v(we=>{var za="[0-9]+",eh="[A-Z $%*+\\-./:]+",rn="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";rn=rn.replace(/u/g,"\\u");var th="(?:(?![A-Z0-9 $%*+\\-./:]|"+rn+`)(?:.|[\r
8
- ]))+`;we.KANJI=new RegExp(rn,"g");we.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");we.BYTE=new RegExp(th,"g");we.NUMERIC=new RegExp(za,"g");we.ALPHANUMERIC=new RegExp(eh,"g");var nh=new RegExp("^"+rn+"$"),sh=new RegExp("^"+za+"$"),rh=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");we.testKanji=function(e){return nh.test(e)};we.testNumeric=function(e){return sh.test(e)};we.testAlphanumeric=function(e){return rh.test(e)}});var Pe=v(D=>{var ih=Br(),Fr=Dr();D.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]};D.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]};D.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]};D.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]};D.MIXED={bit:-1};D.getCharCountIndicator=function(e,n){if(!e.ccBits)throw new Error("Invalid mode: "+e);if(!ih.isValid(n))throw new Error("Invalid version: "+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]};D.getBestModeForData=function(e){return Fr.testNumeric(e)?D.NUMERIC:Fr.testAlphanumeric(e)?D.ALPHANUMERIC:Fr.testKanji(e)?D.KANJI:D.BYTE};D.toString=function(e){if(e&&e.id)return e.id;throw new Error("Invalid mode")};D.isValid=function(e){return e&&e.bit&&e.ccBits};function oh(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return D.NUMERIC;case"alphanumeric":return D.ALPHANUMERIC;case"kanji":return D.KANJI;case"byte":return D.BYTE;default:throw new Error("Unknown mode: "+t)}}D.from=function(e,n){if(D.isValid(e))return e;try{return oh(e)}catch{return n}}});var Ka=v(Qe=>{var is=Re(),ah=Lr(),Va=Zn(),Me=Pe(),Hr=Br(),Ya=7973,Qa=is.getBCHDigit(Ya);function lh(t,e,n){for(let s=1;s<=40;s++)if(e<=Qe.getCapacity(s,n,t))return s}function Ja(t,e){return Me.getCharCountIndicator(t,e)+4}function ch(t,e){let n=0;return t.forEach(function(s){let r=Ja(s.mode,e);n+=r+s.getBitsLength()}),n}function uh(t,e){for(let n=1;n<=40;n++)if(ch(t,n)<=Qe.getCapacity(n,e,Me.MIXED))return n}Qe.from=function(e,n){return Hr.isValid(e)?parseInt(e,10):n};Qe.getCapacity=function(e,n,s){if(!Hr.isValid(e))throw new Error("Invalid QR Code version");typeof s>"u"&&(s=Me.BYTE);let r=is.getSymbolTotalCodewords(e),i=ah.getTotalCodewordsCount(e,n),o=(r-i)*8;if(s===Me.MIXED)return o;let a=o-Ja(s,e);switch(s){case Me.NUMERIC:return Math.floor(a/10*3);case Me.ALPHANUMERIC:return Math.floor(a/11*2);case Me.KANJI:return Math.floor(a/13);case Me.BYTE:default:return Math.floor(a/8)}};Qe.getBestVersionForData=function(e,n){let s,r=Va.from(n,Va.M);if(Array.isArray(e)){if(e.length>1)return uh(e,r);if(e.length===0)return 1;s=e[0]}else s=e;return lh(s.mode,s.getLength(),r)};Qe.getEncodedBits=function(e){if(!Hr.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;is.getBCHDigit(n)-Qa>=0;)n^=Ya<<is.getBCHDigit(n)-Qa;return e<<12|n}});var tl=v(el=>{var Ur=Re(),Za=1335,dh=21522,Xa=Ur.getBCHDigit(Za);el.getEncodedBits=function(e,n){let s=e.bit<<3|n,r=s<<10;for(;Ur.getBCHDigit(r)-Xa>=0;)r^=Za<<Ur.getBCHDigit(r)-Xa;return(s<<10|r)^dh}});var sl=v((ab,nl)=>{var fh=Pe();function vt(t){this.mode=fh.NUMERIC,this.data=t.toString()}vt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};vt.prototype.getLength=function(){return this.data.length};vt.prototype.getBitsLength=function(){return vt.getBitsLength(this.data.length)};vt.prototype.write=function(e){let n,s,r;for(n=0;n+3<=this.data.length;n+=3)s=this.data.substr(n,3),r=parseInt(s,10),e.put(r,10);let i=this.data.length-n;i>0&&(s=this.data.substr(n),r=parseInt(s,10),e.put(r,i*3+1))};nl.exports=vt});var il=v((lb,rl)=>{var ph=Pe(),Wr=["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 St(t){this.mode=ph.ALPHANUMERIC,this.data=t}St.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};St.prototype.getLength=function(){return this.data.length};St.prototype.getBitsLength=function(){return St.getBitsLength(this.data.length)};St.prototype.write=function(e){let n;for(n=0;n+2<=this.data.length;n+=2){let s=Wr.indexOf(this.data[n])*45;s+=Wr.indexOf(this.data[n+1]),e.put(s,11)}this.data.length%2&&e.put(Wr.indexOf(this.data[n]),6)};rl.exports=St});var al=v((cb,ol)=>{var hh=Pe();function _t(t){this.mode=hh.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}_t.getBitsLength=function(e){return e*8};_t.prototype.getLength=function(){return this.data.length};_t.prototype.getBitsLength=function(){return _t.getBitsLength(this.data.length)};_t.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};ol.exports=_t});var cl=v((ub,ll)=>{var gh=Pe(),mh=Re();function bt(t){this.mode=gh.KANJI,this.data=t}bt.getBitsLength=function(e){return e*13};bt.prototype.getLength=function(){return this.data.length};bt.prototype.getBitsLength=function(){return bt.getBitsLength(this.data.length)};bt.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=mh.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)}};ll.exports=bt});var ul=v((db,qr)=>{"use strict";var on={single_source_shortest_paths:function(t,e,n){var s={},r={};r[e]=0;var i=on.PriorityQueue.make();i.push(e,0);for(var o,a,l,u,c,d,f,h,g;!i.empty();){o=i.pop(),a=o.value,u=o.cost,c=t[a]||{};for(l in c)c.hasOwnProperty(l)&&(d=c[l],f=u+d,h=r[l],g=typeof r[l]>"u",(g||h>f)&&(r[l]=f,i.push(l,f),s[l]=a))}if(typeof n<"u"&&typeof r[n]>"u"){var p=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(p)}return s},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],s=e,r;s;)n.push(s),r=t[s],s=t[s];return n.reverse(),n},find_path:function(t,e,n){var s=on.single_source_shortest_paths(t,e,n);return on.extract_shortest_path_from_predecessor_list(s,n)},PriorityQueue:{make:function(t){var e=on.PriorityQueue,n={},s;t=t||{};for(s in e)e.hasOwnProperty(s)&&(n[s]=e[s]);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 qr<"u"&&(qr.exports=on)});var vl=v(wt=>{var k=Pe(),pl=sl(),hl=il(),gl=al(),ml=cl(),an=Dr(),os=Re(),yh=ul();function dl(t){return unescape(encodeURIComponent(t)).length}function ln(t,e,n){let s=[],r;for(;(r=t.exec(n))!==null;)s.push({data:r[0],index:r.index,mode:e,length:r[0].length});return s}function yl(t){let e=ln(an.NUMERIC,k.NUMERIC,t),n=ln(an.ALPHANUMERIC,k.ALPHANUMERIC,t),s,r;return os.isKanjiModeEnabled()?(s=ln(an.BYTE,k.BYTE,t),r=ln(an.KANJI,k.KANJI,t)):(s=ln(an.BYTE_KANJI,k.BYTE,t),r=[]),e.concat(n,s,r).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function Gr(t,e){switch(e){case k.NUMERIC:return pl.getBitsLength(t);case k.ALPHANUMERIC:return hl.getBitsLength(t);case k.KANJI:return ml.getBitsLength(t);case k.BYTE:return gl.getBitsLength(t)}}function vh(t){return t.reduce(function(e,n){let s=e.length-1>=0?e[e.length-1]:null;return s&&s.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function Sh(t){let e=[];for(let n=0;n<t.length;n++){let s=t[n];switch(s.mode){case k.NUMERIC:e.push([s,{data:s.data,mode:k.ALPHANUMERIC,length:s.length},{data:s.data,mode:k.BYTE,length:s.length}]);break;case k.ALPHANUMERIC:e.push([s,{data:s.data,mode:k.BYTE,length:s.length}]);break;case k.KANJI:e.push([s,{data:s.data,mode:k.BYTE,length:dl(s.data)}]);break;case k.BYTE:e.push([{data:s.data,mode:k.BYTE,length:dl(s.data)}])}}return e}function _h(t,e){let n={},s={start:{}},r=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let u=o[l],c=""+i+l;a.push(c),n[c]={node:u,lastCount:0},s[c]={};for(let d=0;d<r.length;d++){let f=r[d];n[f]&&n[f].node.mode===u.mode?(s[f][c]=Gr(n[f].lastCount+u.length,u.mode)-Gr(n[f].lastCount,u.mode),n[f].lastCount+=u.length):(n[f]&&(n[f].lastCount=u.length),s[f][c]=Gr(u.length,u.mode)+4+k.getCharCountIndicator(u.mode,e))}}r=a}for(let i=0;i<r.length;i++)s[r[i]].end=0;return{map:s,table:n}}function fl(t,e){let n,s=k.getBestModeForData(t);if(n=k.from(e,s),n!==k.BYTE&&n.bit<s.bit)throw new Error('"'+t+'" cannot be encoded with mode '+k.toString(n)+`.
10
- Suggested mode is: `+k.toString(s));switch(n===k.KANJI&&!os.isKanjiModeEnabled()&&(n=k.BYTE),n){case k.NUMERIC:return new pl(t);case k.ALPHANUMERIC:return new hl(t);case k.KANJI:return new ml(t);case k.BYTE:return new gl(t)}}wt.fromArray=function(e){return e.reduce(function(n,s){return typeof s=="string"?n.push(fl(s,null)):s.data&&n.push(fl(s.data,s.mode)),n},[])};wt.fromString=function(e,n){let s=yl(e,os.isKanjiModeEnabled()),r=Sh(s),i=_h(r,n),o=yh.find_path(i.map,"start","end"),a=[];for(let l=1;l<o.length-1;l++)a.push(i.table[o[l]].node);return wt.fromArray(vh(a))};wt.rawSplit=function(e){return wt.fromArray(yl(e,os.isKanjiModeEnabled()))}});var Yr=v(Sl=>{var ls=Re(),jr=Zn(),bh=Ma(),wh=Na(),Ih=Oa(),Th=Fa(),Vr=Ha(),Qr=Lr(),Ah=ja(),as=Ka(),kh=tl(),Ch=Pe(),$r=vl();function xh(t,e){let n=t.size,s=Th.getPositions(e);for(let r=0;r<s.length;r++){let i=s[r][0],o=s[r][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 Rh(t){let e=t.size;for(let n=8;n<e-8;n++){let s=n%2===0;t.set(n,6,s,!0),t.set(6,n,s,!0)}}function Eh(t,e){let n=Ih.getPositions(e);for(let s=0;s<n.length;s++){let r=n[s][0],i=n[s][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(r+o,i+a,!0,!0):t.set(r+o,i+a,!1,!0)}}function Ph(t,e){let n=t.size,s=as.getEncodedBits(e),r,i,o;for(let a=0;a<18;a++)r=Math.floor(a/3),i=a%3+n-8-3,o=(s>>a&1)===1,t.set(r,i,o,!0),t.set(i,r,o,!0)}function zr(t,e,n){let s=t.size,r=kh.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(r>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(s-15+i,8,o,!0),i<8?t.set(8,s-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(s-8,8,1,!0)}function Mh(t,e){let n=t.size,s=-1,r=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(r,a-l)){let u=!1;o<e.length&&(u=(e[o]>>>i&1)===1),t.set(r,a-l,u),i--,i===-1&&(o++,i=7)}if(r+=s,r<0||n<=r){r-=s,s=-s;break}}}function Lh(t,e,n){let s=new bh;n.forEach(function(l){s.put(l.mode.bit,4),s.put(l.getLength(),Ch.getCharCountIndicator(l.mode,t)),l.write(s)});let r=ls.getSymbolTotalCodewords(t),i=Qr.getTotalCodewordsCount(t,e),o=(r-i)*8;for(s.getLengthInBits()+4<=o&&s.put(0,4);s.getLengthInBits()%8!==0;)s.putBit(0);let a=(o-s.getLengthInBits())/8;for(let l=0;l<a;l++)s.put(l%2?17:236,8);return Nh(s,t,e)}function Nh(t,e,n){let s=ls.getSymbolTotalCodewords(e),r=Qr.getTotalCodewordsCount(e,n),i=s-r,o=Qr.getBlocksCount(e,n),a=s%o,l=o-a,u=Math.floor(s/o),c=Math.floor(i/o),d=c+1,f=u-c,h=new Ah(f),g=0,p=new Array(o),m=new Array(o),y=0,C=new Uint8Array(t.buffer);for(let x=0;x<o;x++){let X=x<l?c:d;p[x]=C.slice(g,g+X),m[x]=h.encode(p[x]),g+=X,y=Math.max(y,X)}let _=new Uint8Array(s),A=0,I,B;for(I=0;I<y;I++)for(B=0;B<o;B++)I<p[B].length&&(_[A++]=p[B][I]);for(I=0;I<f;I++)for(B=0;B<o;B++)_[A++]=m[B][I];return _}function Oh(t,e,n,s){let r;if(Array.isArray(t))r=$r.fromArray(t);else if(typeof t=="string"){let u=e;if(!u){let c=$r.rawSplit(t);u=as.getBestVersionForData(c,n)}r=$r.fromString(t,u||40)}else throw new Error("Invalid data");let i=as.getBestVersionForData(r,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(`
7
+ `+n)}function $e(t,e,n,s,r,i){if(t.listenerCount("wsClientError")){let o=new Error(r);Error.captureStackTrace(o,$e),t.emit("wsClientError",o,n,e)}else tn(n,s,r,i)}});var Br=v((wb,Fa)=>{Fa.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var Re=v(ze=>{var Fr,dh=[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];ze.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};ze.getSymbolTotalCodewords=function(e){return dh[e]};ze.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};ze.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');Fr=e};ze.isKanjiModeEnabled=function(){return typeof Fr<"u"};ze.toSJIS=function(e){return Fr(e)}});var ss=v(se=>{se.L={bit:1};se.M={bit:0};se.Q={bit:3};se.H={bit:2};function fh(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return se.L;case"m":case"medium":return se.M;case"q":case"quartile":return se.Q;case"h":case"high":return se.H;default:throw new Error("Unknown EC Level: "+t)}}se.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};se.from=function(e,n){if(se.isValid(e))return e;try{return fh(e)}catch{return n}}});var Wa=v((Ab,Ua)=>{function Ha(){this.buffer=[],this.length=0}Ha.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++}};Ua.exports=Ha});var Ga=v((Cb,qa)=>{function nn(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)}nn.prototype.set=function(t,e,n,s){let r=t*this.size+e;this.data[r]=n,s&&(this.reservedBit[r]=!0)};nn.prototype.get=function(t,e){return this.data[t*this.size+e]};nn.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};nn.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};qa.exports=nn});var ja=v(rs=>{var ph=Re().getSymbolSize;rs.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,s=ph(e),r=s===145?26:Math.ceil((s-13)/(2*n-2))*2,i=[s-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-r;return i.push(6),i.reverse()};rs.getPositions=function(e){let n=[],s=rs.getRowColCoords(e),r=s.length;for(let i=0;i<r;i++)for(let o=0;o<r;o++)i===0&&o===0||i===0&&o===r-1||i===r-1&&o===0||n.push([s[i],s[o]]);return n}});var Va=v(za=>{var hh=Re().getSymbolSize,$a=7;za.getPositions=function(e){let n=hh(e);return[[0,0],[n-$a,0],[0,n-$a]]}});var Qa=v(R=>{R.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var Ve={N1:3,N2:3,N3:40,N4:10};R.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7};R.from=function(e){return R.isValid(e)?parseInt(e,10):void 0};R.getPenaltyN1=function(e){let n=e.size,s=0,r=0,i=0,o=null,a=null;for(let l=0;l<n;l++){r=i=0,o=a=null;for(let u=0;u<n;u++){let c=e.get(l,u);c===o?r++:(r>=5&&(s+=Ve.N1+(r-5)),o=c,r=1),c=e.get(u,l),c===a?i++:(i>=5&&(s+=Ve.N1+(i-5)),a=c,i=1)}r>=5&&(s+=Ve.N1+(r-5)),i>=5&&(s+=Ve.N1+(i-5))}return s};R.getPenaltyN2=function(e){let n=e.size,s=0;for(let r=0;r<n-1;r++)for(let i=0;i<n-1;i++){let o=e.get(r,i)+e.get(r,i+1)+e.get(r+1,i)+e.get(r+1,i+1);(o===4||o===0)&&s++}return s*Ve.N2};R.getPenaltyN3=function(e){let n=e.size,s=0,r=0,i=0;for(let o=0;o<n;o++){r=i=0;for(let a=0;a<n;a++)r=r<<1&2047|e.get(o,a),a>=10&&(r===1488||r===93)&&s++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&s++}return s*Ve.N3};R.getPenaltyN4=function(e){let n=0,s=e.data.length;for(let i=0;i<s;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/s/5)-10)*Ve.N4};function gh(t,e,n){switch(t){case R.Patterns.PATTERN000:return(e+n)%2===0;case R.Patterns.PATTERN001:return e%2===0;case R.Patterns.PATTERN010:return n%3===0;case R.Patterns.PATTERN011:return(e+n)%3===0;case R.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2===0;case R.Patterns.PATTERN101:return e*n%2+e*n%3===0;case R.Patterns.PATTERN110:return(e*n%2+e*n%3)%2===0;case R.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}R.applyMask=function(e,n){let s=n.size;for(let r=0;r<s;r++)for(let i=0;i<s;i++)n.isReserved(i,r)||n.xor(i,r,gh(e,i,r))};R.getBestMask=function(e,n){let s=Object.keys(R.Patterns).length,r=0,i=1/0;for(let o=0;o<s;o++){n(o),R.applyMask(o,e);let a=R.getPenaltyN1(e)+R.getPenaltyN2(e)+R.getPenaltyN3(e)+R.getPenaltyN4(e);R.applyMask(o,e),a<i&&(i=a,r=o)}return r}});var Ur=v(Hr=>{var Ee=ss(),is=[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],os=[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];Hr.getBlocksCount=function(e,n){switch(n){case Ee.L:return is[(e-1)*4+0];case Ee.M:return is[(e-1)*4+1];case Ee.Q:return is[(e-1)*4+2];case Ee.H:return is[(e-1)*4+3];default:return}};Hr.getTotalCodewordsCount=function(e,n){switch(n){case Ee.L:return os[(e-1)*4+0];case Ee.M:return os[(e-1)*4+1];case Ee.Q:return os[(e-1)*4+2];case Ee.H:return os[(e-1)*4+3];default:return}}});var Ya=v(ls=>{var sn=new Uint8Array(512),as=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)sn[n]=e,as[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)sn[n]=sn[n-255]})();ls.log=function(e){if(e<1)throw new Error("log("+e+")");return as[e]};ls.exp=function(e){return sn[e]};ls.mul=function(e,n){return e===0||n===0?0:sn[as[e]+as[n]]}});var Ja=v(rn=>{var Wr=Ya();rn.mul=function(e,n){let s=new Uint8Array(e.length+n.length-1);for(let r=0;r<e.length;r++)for(let i=0;i<n.length;i++)s[r+i]^=Wr.mul(e[r],n[i]);return s};rn.mod=function(e,n){let s=new Uint8Array(e);for(;s.length-n.length>=0;){let r=s[0];for(let o=0;o<n.length;o++)s[o]^=Wr.mul(n[o],r);let i=0;for(;i<s.length&&s[i]===0;)i++;s=s.slice(i)}return s};rn.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let s=0;s<e;s++)n=rn.mul(n,new Uint8Array([1,Wr.exp(s)]));return n}});var Za=v((Lb,Xa)=>{var Ka=Ja();function qr(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}qr.prototype.initialize=function(e){this.degree=e,this.genPoly=Ka.generateECPolynomial(this.degree)};qr.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 s=Ka.mod(n,this.genPoly),r=this.degree-s.length;if(r>0){let i=new Uint8Array(this.degree);return i.set(s,r),i}return s};Xa.exports=qr});var Gr=v(el=>{el.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var jr=v(we=>{var tl="[0-9]+",mh="[A-Z $%*+\\-./:]+",on="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";on=on.replace(/u/g,"\\u");var yh="(?:(?![A-Z0-9 $%*+\\-./:]|"+on+`)(?:.|[\r
8
+ ]))+`;we.KANJI=new RegExp(on,"g");we.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");we.BYTE=new RegExp(yh,"g");we.NUMERIC=new RegExp(tl,"g");we.ALPHANUMERIC=new RegExp(mh,"g");var vh=new RegExp("^"+on+"$"),Sh=new RegExp("^"+tl+"$"),_h=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");we.testKanji=function(e){return vh.test(e)};we.testNumeric=function(e){return Sh.test(e)};we.testAlphanumeric=function(e){return _h.test(e)}});var Pe=v(B=>{var bh=Gr(),$r=jr();B.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]};B.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]};B.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]};B.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]};B.MIXED={bit:-1};B.getCharCountIndicator=function(e,n){if(!e.ccBits)throw new Error("Invalid mode: "+e);if(!bh.isValid(n))throw new Error("Invalid version: "+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]};B.getBestModeForData=function(e){return $r.testNumeric(e)?B.NUMERIC:$r.testAlphanumeric(e)?B.ALPHANUMERIC:$r.testKanji(e)?B.KANJI:B.BYTE};B.toString=function(e){if(e&&e.id)return e.id;throw new Error("Invalid mode")};B.isValid=function(e){return e&&e.bit&&e.ccBits};function wh(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return B.NUMERIC;case"alphanumeric":return B.ALPHANUMERIC;case"kanji":return B.KANJI;case"byte":return B.BYTE;default:throw new Error("Unknown mode: "+t)}}B.from=function(e,n){if(B.isValid(e))return e;try{return wh(e)}catch{return n}}});var ol=v(Qe=>{var cs=Re(),Ih=Ur(),nl=ss(),Me=Pe(),zr=Gr(),rl=7973,sl=cs.getBCHDigit(rl);function Th(t,e,n){for(let s=1;s<=40;s++)if(e<=Qe.getCapacity(s,n,t))return s}function il(t,e){return Me.getCharCountIndicator(t,e)+4}function Ah(t,e){let n=0;return t.forEach(function(s){let r=il(s.mode,e);n+=r+s.getBitsLength()}),n}function Ch(t,e){for(let n=1;n<=40;n++)if(Ah(t,n)<=Qe.getCapacity(n,e,Me.MIXED))return n}Qe.from=function(e,n){return zr.isValid(e)?parseInt(e,10):n};Qe.getCapacity=function(e,n,s){if(!zr.isValid(e))throw new Error("Invalid QR Code version");typeof s>"u"&&(s=Me.BYTE);let r=cs.getSymbolTotalCodewords(e),i=Ih.getTotalCodewordsCount(e,n),o=(r-i)*8;if(s===Me.MIXED)return o;let a=o-il(s,e);switch(s){case Me.NUMERIC:return Math.floor(a/10*3);case Me.ALPHANUMERIC:return Math.floor(a/11*2);case Me.KANJI:return Math.floor(a/13);case Me.BYTE:default:return Math.floor(a/8)}};Qe.getBestVersionForData=function(e,n){let s,r=nl.from(n,nl.M);if(Array.isArray(e)){if(e.length>1)return Ch(e,r);if(e.length===0)return 1;s=e[0]}else s=e;return Th(s.mode,s.getLength(),r)};Qe.getEncodedBits=function(e){if(!zr.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;cs.getBCHDigit(n)-sl>=0;)n^=rl<<cs.getBCHDigit(n)-sl;return e<<12|n}});var ul=v(cl=>{var Vr=Re(),ll=1335,kh=21522,al=Vr.getBCHDigit(ll);cl.getEncodedBits=function(e,n){let s=e.bit<<3|n,r=s<<10;for(;Vr.getBCHDigit(r)-al>=0;)r^=ll<<Vr.getBCHDigit(r)-al;return(s<<10|r)^kh}});var fl=v((Hb,dl)=>{var xh=Pe();function vt(t){this.mode=xh.NUMERIC,this.data=t.toString()}vt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};vt.prototype.getLength=function(){return this.data.length};vt.prototype.getBitsLength=function(){return vt.getBitsLength(this.data.length)};vt.prototype.write=function(e){let n,s,r;for(n=0;n+3<=this.data.length;n+=3)s=this.data.substr(n,3),r=parseInt(s,10),e.put(r,10);let i=this.data.length-n;i>0&&(s=this.data.substr(n),r=parseInt(s,10),e.put(r,i*3+1))};dl.exports=vt});var hl=v((Ub,pl)=>{var Rh=Pe(),Qr=["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 St(t){this.mode=Rh.ALPHANUMERIC,this.data=t}St.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};St.prototype.getLength=function(){return this.data.length};St.prototype.getBitsLength=function(){return St.getBitsLength(this.data.length)};St.prototype.write=function(e){let n;for(n=0;n+2<=this.data.length;n+=2){let s=Qr.indexOf(this.data[n])*45;s+=Qr.indexOf(this.data[n+1]),e.put(s,11)}this.data.length%2&&e.put(Qr.indexOf(this.data[n]),6)};pl.exports=St});var ml=v((Wb,gl)=>{var Eh=Pe();function _t(t){this.mode=Eh.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}_t.getBitsLength=function(e){return e*8};_t.prototype.getLength=function(){return this.data.length};_t.prototype.getBitsLength=function(){return _t.getBitsLength(this.data.length)};_t.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};gl.exports=_t});var vl=v((qb,yl)=>{var Ph=Pe(),Mh=Re();function bt(t){this.mode=Ph.KANJI,this.data=t}bt.getBitsLength=function(e){return e*13};bt.prototype.getLength=function(){return this.data.length};bt.prototype.getBitsLength=function(){return bt.getBitsLength(this.data.length)};bt.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=Mh.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)}};yl.exports=bt});var Sl=v((Gb,Yr)=>{"use strict";var an={single_source_shortest_paths:function(t,e,n){var s={},r={};r[e]=0;var i=an.PriorityQueue.make();i.push(e,0);for(var o,a,l,u,c,d,f,h,g;!i.empty();){o=i.pop(),a=o.value,u=o.cost,c=t[a]||{};for(l in c)c.hasOwnProperty(l)&&(d=c[l],f=u+d,h=r[l],g=typeof r[l]>"u",(g||h>f)&&(r[l]=f,i.push(l,f),s[l]=a))}if(typeof n<"u"&&typeof r[n]>"u"){var m=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(m)}return s},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],s=e,r;s;)n.push(s),r=t[s],s=t[s];return n.reverse(),n},find_path:function(t,e,n){var s=an.single_source_shortest_paths(t,e,n);return an.extract_shortest_path_from_predecessor_list(s,n)},PriorityQueue:{make:function(t){var e=an.PriorityQueue,n={},s;t=t||{};for(s in e)e.hasOwnProperty(s)&&(n[s]=e[s]);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 Yr<"u"&&(Yr.exports=an)});var kl=v(wt=>{var k=Pe(),wl=fl(),Il=hl(),Tl=ml(),Al=vl(),ln=jr(),us=Re(),Lh=Sl();function _l(t){return unescape(encodeURIComponent(t)).length}function cn(t,e,n){let s=[],r;for(;(r=t.exec(n))!==null;)s.push({data:r[0],index:r.index,mode:e,length:r[0].length});return s}function Cl(t){let e=cn(ln.NUMERIC,k.NUMERIC,t),n=cn(ln.ALPHANUMERIC,k.ALPHANUMERIC,t),s,r;return us.isKanjiModeEnabled()?(s=cn(ln.BYTE,k.BYTE,t),r=cn(ln.KANJI,k.KANJI,t)):(s=cn(ln.BYTE_KANJI,k.BYTE,t),r=[]),e.concat(n,s,r).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function Jr(t,e){switch(e){case k.NUMERIC:return wl.getBitsLength(t);case k.ALPHANUMERIC:return Il.getBitsLength(t);case k.KANJI:return Al.getBitsLength(t);case k.BYTE:return Tl.getBitsLength(t)}}function Nh(t){return t.reduce(function(e,n){let s=e.length-1>=0?e[e.length-1]:null;return s&&s.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function Oh(t){let e=[];for(let n=0;n<t.length;n++){let s=t[n];switch(s.mode){case k.NUMERIC:e.push([s,{data:s.data,mode:k.ALPHANUMERIC,length:s.length},{data:s.data,mode:k.BYTE,length:s.length}]);break;case k.ALPHANUMERIC:e.push([s,{data:s.data,mode:k.BYTE,length:s.length}]);break;case k.KANJI:e.push([s,{data:s.data,mode:k.BYTE,length:_l(s.data)}]);break;case k.BYTE:e.push([{data:s.data,mode:k.BYTE,length:_l(s.data)}])}}return e}function Dh(t,e){let n={},s={start:{}},r=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let u=o[l],c=""+i+l;a.push(c),n[c]={node:u,lastCount:0},s[c]={};for(let d=0;d<r.length;d++){let f=r[d];n[f]&&n[f].node.mode===u.mode?(s[f][c]=Jr(n[f].lastCount+u.length,u.mode)-Jr(n[f].lastCount,u.mode),n[f].lastCount+=u.length):(n[f]&&(n[f].lastCount=u.length),s[f][c]=Jr(u.length,u.mode)+4+k.getCharCountIndicator(u.mode,e))}}r=a}for(let i=0;i<r.length;i++)s[r[i]].end=0;return{map:s,table:n}}function bl(t,e){let n,s=k.getBestModeForData(t);if(n=k.from(e,s),n!==k.BYTE&&n.bit<s.bit)throw new Error('"'+t+'" cannot be encoded with mode '+k.toString(n)+`.
10
+ Suggested mode is: `+k.toString(s));switch(n===k.KANJI&&!us.isKanjiModeEnabled()&&(n=k.BYTE),n){case k.NUMERIC:return new wl(t);case k.ALPHANUMERIC:return new Il(t);case k.KANJI:return new Al(t);case k.BYTE:return new Tl(t)}}wt.fromArray=function(e){return e.reduce(function(n,s){return typeof s=="string"?n.push(bl(s,null)):s.data&&n.push(bl(s.data,s.mode)),n},[])};wt.fromString=function(e,n){let s=Cl(e,us.isKanjiModeEnabled()),r=Oh(s),i=Dh(r,n),o=Lh.find_path(i.map,"start","end"),a=[];for(let l=1;l<o.length-1;l++)a.push(i.table[o[l]].node);return wt.fromArray(Nh(a))};wt.rawSplit=function(e){return wt.fromArray(Cl(e,us.isKanjiModeEnabled()))}});var ni=v(xl=>{var fs=Re(),Kr=ss(),Bh=Wa(),Fh=Ga(),Hh=ja(),Uh=Va(),ei=Qa(),ti=Ur(),Wh=Za(),ds=ol(),qh=ul(),Gh=Pe(),Xr=kl();function jh(t,e){let n=t.size,s=Uh.getPositions(e);for(let r=0;r<s.length;r++){let i=s[r][0],o=s[r][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 $h(t){let e=t.size;for(let n=8;n<e-8;n++){let s=n%2===0;t.set(n,6,s,!0),t.set(6,n,s,!0)}}function zh(t,e){let n=Hh.getPositions(e);for(let s=0;s<n.length;s++){let r=n[s][0],i=n[s][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(r+o,i+a,!0,!0):t.set(r+o,i+a,!1,!0)}}function Vh(t,e){let n=t.size,s=ds.getEncodedBits(e),r,i,o;for(let a=0;a<18;a++)r=Math.floor(a/3),i=a%3+n-8-3,o=(s>>a&1)===1,t.set(r,i,o,!0),t.set(i,r,o,!0)}function Zr(t,e,n){let s=t.size,r=qh.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(r>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(s-15+i,8,o,!0),i<8?t.set(8,s-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(s-8,8,1,!0)}function Qh(t,e){let n=t.size,s=-1,r=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(r,a-l)){let u=!1;o<e.length&&(u=(e[o]>>>i&1)===1),t.set(r,a-l,u),i--,i===-1&&(o++,i=7)}if(r+=s,r<0||n<=r){r-=s,s=-s;break}}}function Yh(t,e,n){let s=new Bh;n.forEach(function(l){s.put(l.mode.bit,4),s.put(l.getLength(),Gh.getCharCountIndicator(l.mode,t)),l.write(s)});let r=fs.getSymbolTotalCodewords(t),i=ti.getTotalCodewordsCount(t,e),o=(r-i)*8;for(s.getLengthInBits()+4<=o&&s.put(0,4);s.getLengthInBits()%8!==0;)s.putBit(0);let a=(o-s.getLengthInBits())/8;for(let l=0;l<a;l++)s.put(l%2?17:236,8);return Jh(s,t,e)}function Jh(t,e,n){let s=fs.getSymbolTotalCodewords(e),r=ti.getTotalCodewordsCount(e,n),i=s-r,o=ti.getBlocksCount(e,n),a=s%o,l=o-a,u=Math.floor(s/o),c=Math.floor(i/o),d=c+1,f=u-c,h=new Wh(f),g=0,m=new Array(o),p=new Array(o),y=0,C=new Uint8Array(t.buffer);for(let x=0;x<o;x++){let X=x<l?c:d;m[x]=C.slice(g,g+X),p[x]=h.encode(m[x]),g+=X,y=Math.max(y,X)}let I=new Uint8Array(s),A=0,w,D;for(w=0;w<y;w++)for(D=0;D<o;D++)w<m[D].length&&(I[A++]=m[D][w]);for(w=0;w<f;w++)for(D=0;D<o;D++)I[A++]=p[D][w];return I}function Kh(t,e,n,s){let r;if(Array.isArray(t))r=Xr.fromArray(t);else if(typeof t=="string"){let u=e;if(!u){let c=Xr.rawSplit(t);u=ds.getBestVersionForData(c,n)}r=Xr.fromString(t,u||40)}else throw new Error("Invalid data");let i=ds.getBestVersionForData(r,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=Lh(e,n,r),a=ls.getSymbolSize(e),l=new wh(a);return xh(l,e),Rh(l),Eh(l,e),zr(l,n,0),e>=7&&Ph(l,e),Mh(l,o),isNaN(s)&&(s=Vr.getBestMask(l,zr.bind(null,l,n))),Vr.applyMask(s,l),zr(l,n,s),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:s,segments:r}}Sl.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let s=jr.M,r,i;return typeof n<"u"&&(s=jr.from(n.errorCorrectionLevel,jr.M),r=as.from(n.version),i=Vr.from(n.maskPattern),n.toSJISFunc&&ls.setToSJISFunction(n.toSJISFunc)),Oh(e,r,s,i)}});var Jr=v((hb,bl)=>{"use strict";var Bh=require("util"),_l=require("stream"),ce=bl.exports=function(){_l.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Bh.inherits(ce,_l);ce.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))};ce.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};ce.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()))};ce.prototype.destroySoon=ce.prototype.end;ce.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};ce.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};ce.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))};ce.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,s=Buffer.alloc(t.length);for(;e<t.length;){let r=this._buffers[n++],i=Math.min(r.length,t.length-e);r.copy(s,e,0,i),e+=i,i!==r.length&&(this._buffers[--n]=r.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,s)};ce.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 Xr=v(Kr=>{"use strict";var Le=[{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]}];Kr.getImagePasses=function(t,e){let n=[],s=t%8,r=e%8,i=(t-s)/8,o=(e-r)/8;for(let a=0;a<Le.length;a++){let l=Le[a],u=i*l.x.length,c=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<s;d++)u++;for(let d=0;d<l.y.length&&l.y[d]<r;d++)c++;u>0&&c>0&&n.push({width:u,height:c,index:a})}return n};Kr.getInterlaceIterator=function(t){return function(e,n,s){let r=e%Le[s].x.length,i=(e-r)/Le[s].x.length*8+Le[s].x[r],o=n%Le[s].y.length,a=(n-o)/Le[s].y.length*8+Le[s].y[o];return i*4+a*t*4}}});var Zr=v((mb,wl)=>{"use strict";wl.exports=function(e,n,s){let r=e+n-s,i=Math.abs(r-e),o=Math.abs(r-n),a=Math.abs(r-s);return i<=o&&i<=a?e:o<=a?n:s}});var ei=v((yb,Tl)=>{"use strict";var Dh=Xr(),Fh=Zr();function Il(t,e,n){let s=t*e;return n!==8&&(s=Math.ceil(s/(8/n))),s}var It=Tl.exports=function(t,e){let n=t.width,s=t.height,r=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=[],r){let a=Dh.getImagePasses(n,s);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Il(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Il(n,i,o),height:s,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};It.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};It.prototype._unFilterType1=function(t,e,n){let s=this._xComparison,r=s-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>r?e[i-s]:0;e[i]=o+a}};It.prototype._unFilterType2=function(t,e,n){let s=this._lastLine;for(let r=0;r<n;r++){let i=t[1+r],o=s?s[r]:0;e[r]=i+o}};It.prototype._unFilterType3=function(t,e,n){let s=this._xComparison,r=s-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>r?e[o-s]:0,c=Math.floor((u+l)/2);e[o]=a+c}};It.prototype._unFilterType4=function(t,e,n){let s=this._xComparison,r=s-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>r?e[o-s]:0,c=o>r&&i?i[o-s]:0,d=Fh(u,l,c);e[o]=a+d}};It.prototype._reverseFilterLine=function(t){let e=t[0],n,s=this._images[this._imageIndex],r=s.byteWidth;if(e===0)n=t.slice(1,r+1);else switch(n=Buffer.alloc(r),e){case 1:this._unFilterType1(t,n,r);break;case 2:this._unFilterType2(t,n,r);break;case 3:this._unFilterType3(t,n,r);break;case 4:this._unFilterType4(t,n,r);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),s.lineIndex++,s.lineIndex>=s.height?(this._lastLine=null,this._imageIndex++,s=this._images[this._imageIndex]):this._lastLine=n,s?this.read(s.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Cl=v((vb,kl)=>{"use strict";var Hh=require("util"),Al=Jr(),Uh=ei(),Wh=kl.exports=function(t){Al.call(this);let e=[],n=this;this._filter=new Uh(t,{read:this.read.bind(this),write:function(s){e.push(s)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Hh.inherits(Wh,Al)});var Tt=v((Sb,xl)=>{"use strict";xl.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 si=v((_b,Rl)=>{"use strict";var ti=[];(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;ti[t]=e}})();var ni=Rl.exports=function(){this._crc=-1};ni.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=ti[(this._crc^t[e])&255]^this._crc>>>8;return!0};ni.prototype.crc32=function(){return this._crc^-1};ni.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=ti[(e^t[n])&255]^e>>>8;return e^-1}});var ri=v((bb,El)=>{"use strict";var U=Tt(),qh=si(),G=El.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[U.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[U.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[U.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[U.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[U.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[U.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(){}};G.prototype.start=function(){this.read(U.PNG_SIGNATURE.length,this._parseSignature.bind(this))};G.prototype._parseSignature=function(t){let e=U.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))};G.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),s="";for(let i=4;i<8;i++)s+=String.fromCharCode(t[i]);let r=!!(t[4]&32);if(!this._hasIHDR&&n!==U.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new qh,this._crc.write(Buffer.from(s)),this._chunks[n])return this._chunks[n](e);if(!r){this.error(new Error("Unsupported critical chunk type "+s));return}this.read(e+4,this._skipChunk.bind(this))};G.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};G.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};G.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))};G.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};G.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),s=t[8],r=t[9],i=t[10],o=t[11],a=t[12];if(s!==8&&s!==4&&s!==2&&s!==1&&s!==16){this.error(new Error("Unsupported bit depth "+s));return}if(!(r in U.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=r;let l=U.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:s,interlace:!!a,palette:!!(r&U.COLORTYPE_PALETTE),color:!!(r&U.COLORTYPE_COLOR),alpha:!!(r&U.COLORTYPE_ALPHA),bpp:l,colorType:r}),this._handleChunkEnd()};G.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};G.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()};G.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};G.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===U.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===U.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===U.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};G.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};G.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/U.GAMMA_DIVISION),this._handleChunkEnd()};G.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};G.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===U.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()};G.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};G.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ii=v(Ml=>{"use strict";var Pl=Xr(),Gh=[function(){},function(t,e,n,s){if(s===e.length)throw new Error("Ran out of data");let r=e[s];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=255},function(t,e,n,s){if(s+1>=e.length)throw new Error("Ran out of data");let r=e[s];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[s+1]},function(t,e,n,s){if(s+2>=e.length)throw new Error("Ran out of data");t[n]=e[s],t[n+1]=e[s+1],t[n+2]=e[s+2],t[n+3]=255},function(t,e,n,s){if(s+3>=e.length)throw new Error("Ran out of data");t[n]=e[s],t[n+1]=e[s+1],t[n+2]=e[s+2],t[n+3]=e[s+3]}],jh=[function(){},function(t,e,n,s){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=s},function(t,e,n){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[1]},function(t,e,n,s){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=s},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function $h(t,e){let n=[],s=0;function r(){if(s===t.length)throw new Error("Ran out of data");let i=t[s];s++;let o,a,l,u,c,d,f,h;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[s],s++,n.push((i<<8)+f);break;case 4:f=i&15,h=i>>4,n.push(h,f);break;case 2:c=i&3,d=i>>2&3,f=i>>4&3,h=i>>6&3,n.push(h,f,d,c);break;case 1:o=i&1,a=i>>1&1,l=i>>2&1,u=i>>3&1,c=i>>4&1,d=i>>5&1,f=i>>6&1,h=i>>7&1,n.push(h,f,d,c,u,l,a,o);break}}return{get:function(i){for(;n.length<i;)r();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(s!==t.length)throw new Error("extra data found")}}}function zh(t,e,n,s,r,i){let o=t.width,a=t.height,l=t.index;for(let u=0;u<a;u++)for(let c=0;c<o;c++){let d=n(c,u,l);Gh[s](e,r,d,i),i+=s}return i}function Vh(t,e,n,s,r,i){let o=t.width,a=t.height,l=t.index;for(let u=0;u<a;u++){for(let c=0;c<o;c++){let d=r.get(s),f=n(c,u,l);jh[s](e,d,f,i)}r.resetAfterLine()}}Ml.dataToBitMap=function(t,e){let n=e.width,s=e.height,r=e.depth,i=e.bpp,o=e.interlace,a;r!==8&&(a=$h(t,r));let l;r<=8?l=Buffer.alloc(n*s*4):l=new Uint16Array(n*s*4);let u=Math.pow(2,r)-1,c=0,d,f;if(o)d=Pl.getImagePasses(n,s),f=Pl.getInterlaceIterator(n,s);else{let h=0;f=function(){let g=h;return h+=4,g},d=[{width:n,height:s}]}for(let h=0;h<d.length;h++)r===8?c=zh(d[h],l,f,i,t,c):Vh(d[h],l,f,i,a,u);if(r===8){if(c!==t.length)throw new Error("extra data found")}else a.end();return l}});var oi=v((Ib,Ll)=>{"use strict";function Qh(t,e,n,s,r){let i=0;for(let o=0;o<s;o++)for(let a=0;a<n;a++){let l=r[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let u=0;u<4;u++)e[i+u]=l[u];i+=4}}function Yh(t,e,n,s,r){let i=0;for(let o=0;o<s;o++)for(let a=0;a<n;a++){let l=!1;if(r.length===1?r[0]===t[i]&&(l=!0):r[0]===t[i]&&r[1]===t[i+1]&&r[2]===t[i+2]&&(l=!0),l)for(let u=0;u<4;u++)e[i+u]=0;i+=4}}function Jh(t,e,n,s,r){let i=255,o=Math.pow(2,r)-1,a=0;for(let l=0;l<s;l++)for(let u=0;u<n;u++){for(let c=0;c<4;c++)e[a+c]=Math.floor(t[a+c]*i/o+.5);a+=4}}Ll.exports=function(t,e){let n=e.depth,s=e.width,r=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?Qh(t,l,s,r,a):(o&&Yh(t,l,s,r,o),n!==8&&(n===16&&(l=Buffer.alloc(s*r*4)),Jh(t,l,s,r,n))),l}});var Bl=v((Tb,Ol)=>{"use strict";var Kh=require("util"),ai=require("zlib"),Nl=Jr(),Xh=Cl(),Zh=ri(),eg=ii(),tg=oi(),ge=Ol.exports=function(t){Nl.call(this),this._parser=new Zh(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()};Kh.inherits(ge,Nl);ge.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};ge.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=ai.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,s=Math.max(n,ai.Z_MIN_CHUNK);this._inflate=ai.createInflate({chunkSize:s});let r=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){r&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){r&&(a.length>r&&(a=a.slice(0,r)),r-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};ge.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Xh(this._bitmapInfo)};ge.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};ge.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};ge.prototype._simpleTransparency=function(){this._metaData.alpha=!0};ge.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};ge.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};ge.prototype._complete=function(t){if(this.errord)return;let e;try{let n=eg.dataToBitMap(t,this._bitmapInfo);e=tg(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var Fl=v((Ab,Dl)=>{"use strict";var re=Tt();Dl.exports=function(t,e,n,s){let r=[re.COLORTYPE_COLOR_ALPHA,re.COLORTYPE_ALPHA].indexOf(s.colorType)!==-1;if(s.colorType===s.inputColorType){let g=(function(){let p=new ArrayBuffer(2);return new DataView(p).setInt16(0,256,!0),new Int16Array(p)[0]!==256})();if(s.bitDepth===8||s.bitDepth===16&&g)return t}let i=s.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=re.COLORTYPE_TO_BPP_MAP[s.inputColorType];a===4&&!s.inputHasAlpha&&(a=3);let l=re.COLORTYPE_TO_BPP_MAP[s.colorType];s.bitDepth===16&&(o=65535,l*=2);let u=Buffer.alloc(e*n*l),c=0,d=0,f=s.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,y=o;switch(s.inputColorType){case re.COLORTYPE_COLOR_ALPHA:y=i[c+3],g=i[c],p=i[c+1],m=i[c+2];break;case re.COLORTYPE_COLOR:g=i[c],p=i[c+1],m=i[c+2];break;case re.COLORTYPE_ALPHA:y=i[c+1],g=i[c],p=g,m=g;break;case re.COLORTYPE_GRAYSCALE:g=i[c],p=g,m=g;break;default:throw new Error("input color type:"+s.inputColorType+" is not supported at present")}return s.inputHasAlpha&&(r||(y/=o,g=Math.min(Math.max(Math.round((1-y)*f.red+y*g),0),o),p=Math.min(Math.max(Math.round((1-y)*f.green+y*p),0),o),m=Math.min(Math.max(Math.round((1-y)*f.blue+y*m),0),o))),{red:g,green:p,blue:m,alpha:y}}for(let g=0;g<n;g++)for(let p=0;p<e;p++){let m=h(i,c);switch(s.colorType){case re.COLORTYPE_COLOR_ALPHA:case re.COLORTYPE_COLOR:s.bitDepth===8?(u[d]=m.red,u[d+1]=m.green,u[d+2]=m.blue,r&&(u[d+3]=m.alpha)):(u.writeUInt16BE(m.red,d),u.writeUInt16BE(m.green,d+2),u.writeUInt16BE(m.blue,d+4),r&&u.writeUInt16BE(m.alpha,d+6));break;case re.COLORTYPE_ALPHA:case re.COLORTYPE_GRAYSCALE:{let y=(m.red+m.green+m.blue)/3;s.bitDepth===8?(u[d]=y,r&&(u[d+1]=m.alpha)):(u.writeUInt16BE(y,d),r&&u.writeUInt16BE(m.alpha,d+2));break}default:throw new Error("unrecognised color Type "+s.colorType)}c+=a,d+=l}return u}});var Wl=v((kb,Ul)=>{"use strict";var Hl=Zr();function ng(t,e,n,s,r){for(let i=0;i<n;i++)s[r+i]=t[e+i]}function sg(t,e,n){let s=0,r=e+n;for(let i=e;i<r;i++)s+=Math.abs(t[i]);return s}function rg(t,e,n,s,r,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;s[r+o]=l}}function ig(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=t[e+i]-o;r+=Math.abs(a)}return r}function og(t,e,n,s,r){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;s[r+i]=a}}function ag(t,e,n){let s=0,r=e+n;for(let i=e;i<r;i++){let o=e>0?t[i-n]:0,a=t[i]-o;s+=Math.abs(a)}return s}function lg(t,e,n,s,r,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,u=t[e+o]-(a+l>>1);s[r+o]=u}}function cg(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);r+=Math.abs(l)}return r}function ug(t,e,n,s,r,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,u=e>0&&o>=i?t[e+o-(n+i)]:0,c=t[e+o]-Hl(a,l,u);s[r+o]=c}}function dg(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=s?t[e+i-(n+s)]:0,u=t[e+i]-Hl(o,a,l);r+=Math.abs(u)}return r}var fg={0:ng,1:rg,2:og,3:lg,4:ug},pg={0:sg,1:ig,2:ag,3:cg,4:dg};Ul.exports=function(t,e,n,s,r){let i;if(!("filterType"in s)||s.filterType===-1)i=[0,1,2,3,4];else if(typeof s.filterType=="number")i=[s.filterType];else throw new Error("unrecognised filter types");s.bitDepth===16&&(r*=2);let o=e*r,a=0,l=0,u=Buffer.alloc((o+1)*n),c=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=pg[i[h]](t,l,o,r);g<f&&(c=i[h],f=g)}}u[a]=c,a++,fg[c](t,l,o,u,a,r),a+=o,l+=o}return u}});var li=v((Cb,ql)=>{"use strict";var V=Tt(),hg=si(),gg=Fl(),mg=Wl(),yg=require("zlib"),Ne=ql.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||yg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:V.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:V.COLORTYPE_COLOR_ALPHA,[V.COLORTYPE_GRAYSCALE,V.COLORTYPE_COLOR,V.COLORTYPE_COLOR_ALPHA,V.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([V.COLORTYPE_GRAYSCALE,V.COLORTYPE_COLOR,V.COLORTYPE_COLOR_ALPHA,V.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")};Ne.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Ne.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Ne.prototype.filterData=function(t,e,n){let s=gg(t,e,n,this._options),r=V.COLORTYPE_TO_BPP_MAP[this._options.colorType];return mg(s,e,n,this._options,r)};Ne.prototype._packChunk=function(t,e){let n=e?e.length:0,s=Buffer.alloc(n+12);return s.writeUInt32BE(n,0),s.writeUInt32BE(t,4),e&&e.copy(s,8),s.writeInt32BE(hg.crc32(s.slice(4,s.length-4)),s.length-4),s};Ne.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*V.GAMMA_DIVISION),0),this._packChunk(V.TYPE_gAMA,e)};Ne.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(V.TYPE_IHDR,n)};Ne.prototype.packIDAT=function(t){return this._packChunk(V.TYPE_IDAT,t)};Ne.prototype.packIEND=function(){return this._packChunk(V.TYPE_IEND,null)}});var zl=v((xb,$l)=>{"use strict";var vg=require("util"),Gl=require("stream"),Sg=Tt(),_g=li(),jl=$l.exports=function(t){Gl.call(this);let e=t||{};this._packer=new _g(e),this._deflate=this._packer.createDeflate(),this.readable=!0};vg.inherits(jl,Gl);jl.prototype.pack=function(t,e,n,s){this.emit("data",Buffer.from(Sg.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),s&&this.emit("data",this._packer.packGAMA(s));let r=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(r)}});var Xl=v((cn,Kl)=>{"use strict";var Vl=require("assert").ok,At=require("zlib"),bg=require("util"),Ql=require("buffer").kMaxLength;function Ye(t){if(!(this instanceof Ye))return new Ye(t);t&&t.chunkSize<At.Z_MIN_CHUNK&&(t.chunkSize=At.Z_MIN_CHUNK),At.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 wg(t){return new Ye(t)}function Yl(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}Ye.prototype._processChunk=function(t,e,n){if(typeof n=="function")return At.Inflate._processChunk.call(this,t,e,n);let s=this,r=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],u=0,c;this.on("error",function(g){c=g});function d(g,p){if(s._hadError)return;let m=i-p;if(Vl(m>=0,"have should not go down"),m>0){let y=s._buffer.slice(s._offset,s._offset+m);if(s._offset+=m,y.length>o&&(y=y.slice(0,o)),l.push(y),u+=y.length,o-=y.length,o===0)return!1}return(p===0||s._offset>=s._chunkSize)&&(i=s._chunkSize,s._offset=0,s._buffer=Buffer.allocUnsafe(s._chunkSize)),p===0?(a+=r-g,r=g,!0):!1}Vl(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,r,this._buffer,this._offset,i),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw c;if(u>=Ql)throw Yl(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+Ql.toString(16)+" bytes");let h=Buffer.concat(l,u);return Yl(this),h};bg.inherits(Ye,At.Inflate);function Ig(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=At.Z_FINISH),t._processChunk(e,n)}function Jl(t,e){return Ig(new Ye(e),t)}Kl.exports=cn=Jl;cn.Inflate=Ye;cn.createInflate=wg;cn.inflateSync=Jl});var ci=v((Rb,ec)=>{"use strict";var Zl=ec.exports=function(t){this._buffer=t,this._reads=[]};Zl.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Zl.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 nc=v(tc=>{"use strict";var Tg=ci(),Ag=ei();tc.process=function(t,e){let n=[],s=new Tg(t);return new Ag(e,{read:s.read.bind(s),write:function(i){n.push(i)},complete:function(){}}).start(),s.process(),Buffer.concat(n)}});var oc=v((Pb,ic)=>{"use strict";var sc=!0,rc=require("zlib"),kg=Xl();rc.deflateSync||(sc=!1);var Cg=ci(),xg=nc(),Rg=ri(),Eg=ii(),Pg=oi();ic.exports=function(t,e){if(!sc)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 s(A){n=A}let r;function i(A){r=A}function o(A){r.transColor=A}function a(A){r.palette=A}function l(){r.alpha=!0}let u;function c(A){u=A}let d=[];function f(A){d.push(A)}let h=new Cg(t);if(new Rg(e,{read:h.read.bind(h),error:s,metadata:i,gamma:c,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(r.interlace)m=rc.inflateSync(p);else{let I=((r.width*r.bpp*r.depth+7>>3)+1)*r.height;m=kg(p,{chunkSize:I,maxLength:I})}if(p=null,!m||!m.length)throw new Error("bad png - invalid inflate data response");let y=xg.process(m,r);p=null;let C=Eg.dataToBitMap(y,r);y=null;let _=Pg(C,r);return r.data=_,r.gamma=u||0,r}});var uc=v((Mb,cc)=>{"use strict";var ac=!0,lc=require("zlib");lc.deflateSync||(ac=!1);var Mg=Tt(),Lg=li();cc.exports=function(t,e){if(!ac)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||{},s=new Lg(n),r=[];r.push(Buffer.from(Mg.PNG_SIGNATURE)),r.push(s.packIHDR(t.width,t.height)),t.gamma&&r.push(s.packGAMA(t.gamma));let i=s.filterData(t.data,t.width,t.height),o=lc.deflateSync(i,s.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return r.push(s.packIDAT(o)),r.push(s.packIEND()),Buffer.concat(r)}});var dc=v(ui=>{"use strict";var Ng=oc(),Og=uc();ui.read=function(t,e){return Ng(t,e||{})};ui.write=function(t,e){return Og(t,e)}});var hc=v(pc=>{"use strict";var Bg=require("util"),fc=require("stream"),Dg=Bl(),Fg=zl(),Hg=dc(),Y=pc.PNG=function(t){fc.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 Dg(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 Fg(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"))};Bg.inherits(Y,fc);Y.sync=Hg;Y.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)};Y.prototype.parse=function(t,e){if(e){let n,s;n=function(r){this.removeListener("error",s),this.data=r,e(null,this)}.bind(this),s=function(r){this.removeListener("parsed",n),e(r,null)}.bind(this),this.once("parsed",n),this.once("error",s)}return this.end(t),this};Y.prototype.write=function(t){return this._parser.write(t),!0};Y.prototype.end=function(t){this._parser.end(t)};Y.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Y.prototype._gamma=function(t){this.gamma=t};Y.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};Y.bitblt=function(t,e,n,s,r,i,o,a){if(n|=0,s|=0,r|=0,i|=0,o|=0,a|=0,n>t.width||s>t.height||n+r>t.width||s+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+r>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,(s+l)*t.width+n<<2,(s+l)*t.width+n+r<<2)};Y.prototype.bitblt=function(t,e,n,s,r,i,o){return Y.bitblt(this,t,e,n,s,r,i,o),this};Y.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let s=t.width*e+n<<2;for(let r=0;r<3;r++){let i=t.data[s+r]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[s+r]=Math.round(i*255)}}t.gamma=0}};Y.prototype.adjustGamma=function(){Y.adjustGamma(this)}});var un=v(Je=>{function gc(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(s){return[s,s]}))),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("")}}Je.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,s=e.width&&e.width>=21?e.width:void 0,r=e.scale||4;return{width:s,scale:s?4:r,margin:n,color:{dark:gc(e.color.dark||"#000000ff"),light:gc(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};Je.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};Je.getImageWidth=function(e,n){let s=Je.getScale(e,n);return Math.floor((e+n.margin*2)*s)};Je.qrToImageData=function(e,n,s){let r=n.modules.size,i=n.modules.data,o=Je.getScale(r,s),a=Math.floor((r+s.margin*2)*o),l=s.margin*o,u=[s.color.light,s.color.dark];for(let c=0;c<a;c++)for(let d=0;d<a;d++){let f=(c*a+d)*4,h=s.color.light;if(c>=l&&d>=l&&c<a-l&&d<a-l){let g=Math.floor((c-l)/o),p=Math.floor((d-l)/o);h=u[i[g*r+p]?1:0]}e[f++]=h.r,e[f++]=h.g,e[f++]=h.b,e[f]=h.a}}});var mc=v(me=>{var Ug=require("fs"),Wg=hc().PNG,di=un();me.render=function(e,n){let s=di.getOptions(n),r=s.rendererOpts,i=di.getImageWidth(e.modules.size,s);r.width=i,r.height=i;let o=new Wg(r);return di.qrToImageData(o.data,e,s),o};me.renderToDataURL=function(e,n,s){typeof s>"u"&&(s=n,n=void 0),me.renderToBuffer(e,n,function(r,i){r&&s(r);let o="data:image/png;base64,";o+=i.toString("base64"),s(null,o)})};me.renderToBuffer=function(e,n,s){typeof s>"u"&&(s=n,n=void 0);let r=me.render(e,n),i=[];r.on("error",s),r.on("data",function(o){i.push(o)}),r.on("end",function(){s(null,Buffer.concat(i))}),r.pack()};me.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=void 0);let i=!1,o=(...l)=>{i||(i=!0,r.apply(null,l))},a=Ug.createWriteStream(e);a.on("error",o),a.on("close",o),me.renderToFileStream(a,n,s)};me.renderToFileStream=function(e,n,s){me.render(n,s).pack().pipe(e)}});var yc=v(cs=>{var qg=un(),Gg={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},jg={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function $g(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}cs.render=function(t,e,n){let s=qg.getOptions(e),r=Gg;(s.color.dark.hex==="#ffffff"||s.color.light.hex==="#000000")&&(r=jg);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+s.margin*2+1).join(r.WW);l=Array(s.margin/2+1).join(l+`
14
- `);let u=Array(s.margin+1).join(r.WW);a+=l;for(let c=0;c<i;c+=2){a+=u;for(let d=0;d<i;d++){let f=o[c*i+d],h=o[(c+1)*i+d];a+=$g(f,h,r)}a+=u+`
15
- `}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};cs.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=void 0);let i=require("fs"),o=cs.render(n,s);i.writeFile(e,o,r)}});var Sc=v(vc=>{vc.render=function(t,e,n){let s=t.modules.size,r=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(s+3).join(o),u=Array(2).join(o);a+=l+`
13
+ `);let o=Yh(e,n,r),a=fs.getSymbolSize(e),l=new Fh(a);return jh(l,e),$h(l),zh(l,e),Zr(l,n,0),e>=7&&Vh(l,e),Qh(l,o),isNaN(s)&&(s=ei.getBestMask(l,Zr.bind(null,l,n))),ei.applyMask(s,l),Zr(l,n,s),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:s,segments:r}}xl.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let s=Kr.M,r,i;return typeof n<"u"&&(s=Kr.from(n.errorCorrectionLevel,Kr.M),r=ds.from(n.version),i=ei.from(n.maskPattern),n.toSJISFunc&&fs.setToSJISFunction(n.toSJISFunc)),Kh(e,r,s,i)}});var si=v((zb,El)=>{"use strict";var Xh=require("util"),Rl=require("stream"),ce=El.exports=function(){Rl.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Xh.inherits(ce,Rl);ce.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))};ce.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};ce.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()))};ce.prototype.destroySoon=ce.prototype.end;ce.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};ce.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};ce.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))};ce.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,s=Buffer.alloc(t.length);for(;e<t.length;){let r=this._buffers[n++],i=Math.min(r.length,t.length-e);r.copy(s,e,0,i),e+=i,i!==r.length&&(this._buffers[--n]=r.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,s)};ce.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 ii=v(ri=>{"use strict";var Le=[{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]}];ri.getImagePasses=function(t,e){let n=[],s=t%8,r=e%8,i=(t-s)/8,o=(e-r)/8;for(let a=0;a<Le.length;a++){let l=Le[a],u=i*l.x.length,c=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<s;d++)u++;for(let d=0;d<l.y.length&&l.y[d]<r;d++)c++;u>0&&c>0&&n.push({width:u,height:c,index:a})}return n};ri.getInterlaceIterator=function(t){return function(e,n,s){let r=e%Le[s].x.length,i=(e-r)/Le[s].x.length*8+Le[s].x[r],o=n%Le[s].y.length,a=(n-o)/Le[s].y.length*8+Le[s].y[o];return i*4+a*t*4}}});var oi=v((Qb,Pl)=>{"use strict";Pl.exports=function(e,n,s){let r=e+n-s,i=Math.abs(r-e),o=Math.abs(r-n),a=Math.abs(r-s);return i<=o&&i<=a?e:o<=a?n:s}});var ai=v((Yb,Ll)=>{"use strict";var Zh=ii(),eg=oi();function Ml(t,e,n){let s=t*e;return n!==8&&(s=Math.ceil(s/(8/n))),s}var It=Ll.exports=function(t,e){let n=t.width,s=t.height,r=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=[],r){let a=Zh.getImagePasses(n,s);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Ml(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Ml(n,i,o),height:s,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};It.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};It.prototype._unFilterType1=function(t,e,n){let s=this._xComparison,r=s-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>r?e[i-s]:0;e[i]=o+a}};It.prototype._unFilterType2=function(t,e,n){let s=this._lastLine;for(let r=0;r<n;r++){let i=t[1+r],o=s?s[r]:0;e[r]=i+o}};It.prototype._unFilterType3=function(t,e,n){let s=this._xComparison,r=s-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>r?e[o-s]:0,c=Math.floor((u+l)/2);e[o]=a+c}};It.prototype._unFilterType4=function(t,e,n){let s=this._xComparison,r=s-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>r?e[o-s]:0,c=o>r&&i?i[o-s]:0,d=eg(u,l,c);e[o]=a+d}};It.prototype._reverseFilterLine=function(t){let e=t[0],n,s=this._images[this._imageIndex],r=s.byteWidth;if(e===0)n=t.slice(1,r+1);else switch(n=Buffer.alloc(r),e){case 1:this._unFilterType1(t,n,r);break;case 2:this._unFilterType2(t,n,r);break;case 3:this._unFilterType3(t,n,r);break;case 4:this._unFilterType4(t,n,r);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),s.lineIndex++,s.lineIndex>=s.height?(this._lastLine=null,this._imageIndex++,s=this._images[this._imageIndex]):this._lastLine=n,s?this.read(s.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Dl=v((Jb,Ol)=>{"use strict";var tg=require("util"),Nl=si(),ng=ai(),sg=Ol.exports=function(t){Nl.call(this);let e=[],n=this;this._filter=new ng(t,{read:this.read.bind(this),write:function(s){e.push(s)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};tg.inherits(sg,Nl)});var Tt=v((Kb,Bl)=>{"use strict";Bl.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 ui=v((Xb,Fl)=>{"use strict";var li=[];(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;li[t]=e}})();var ci=Fl.exports=function(){this._crc=-1};ci.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=li[(this._crc^t[e])&255]^this._crc>>>8;return!0};ci.prototype.crc32=function(){return this._crc^-1};ci.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=li[(e^t[n])&255]^e>>>8;return e^-1}});var di=v((Zb,Hl)=>{"use strict";var U=Tt(),rg=ui(),G=Hl.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[U.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[U.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[U.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[U.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[U.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[U.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(){}};G.prototype.start=function(){this.read(U.PNG_SIGNATURE.length,this._parseSignature.bind(this))};G.prototype._parseSignature=function(t){let e=U.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))};G.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),s="";for(let i=4;i<8;i++)s+=String.fromCharCode(t[i]);let r=!!(t[4]&32);if(!this._hasIHDR&&n!==U.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new rg,this._crc.write(Buffer.from(s)),this._chunks[n])return this._chunks[n](e);if(!r){this.error(new Error("Unsupported critical chunk type "+s));return}this.read(e+4,this._skipChunk.bind(this))};G.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};G.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};G.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))};G.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};G.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),s=t[8],r=t[9],i=t[10],o=t[11],a=t[12];if(s!==8&&s!==4&&s!==2&&s!==1&&s!==16){this.error(new Error("Unsupported bit depth "+s));return}if(!(r in U.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=r;let l=U.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:s,interlace:!!a,palette:!!(r&U.COLORTYPE_PALETTE),color:!!(r&U.COLORTYPE_COLOR),alpha:!!(r&U.COLORTYPE_ALPHA),bpp:l,colorType:r}),this._handleChunkEnd()};G.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};G.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()};G.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};G.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===U.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===U.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===U.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};G.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};G.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/U.GAMMA_DIVISION),this._handleChunkEnd()};G.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};G.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===U.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()};G.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};G.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var fi=v(Wl=>{"use strict";var Ul=ii(),ig=[function(){},function(t,e,n,s){if(s===e.length)throw new Error("Ran out of data");let r=e[s];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=255},function(t,e,n,s){if(s+1>=e.length)throw new Error("Ran out of data");let r=e[s];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[s+1]},function(t,e,n,s){if(s+2>=e.length)throw new Error("Ran out of data");t[n]=e[s],t[n+1]=e[s+1],t[n+2]=e[s+2],t[n+3]=255},function(t,e,n,s){if(s+3>=e.length)throw new Error("Ran out of data");t[n]=e[s],t[n+1]=e[s+1],t[n+2]=e[s+2],t[n+3]=e[s+3]}],og=[function(){},function(t,e,n,s){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=s},function(t,e,n){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[1]},function(t,e,n,s){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=s},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function ag(t,e){let n=[],s=0;function r(){if(s===t.length)throw new Error("Ran out of data");let i=t[s];s++;let o,a,l,u,c,d,f,h;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[s],s++,n.push((i<<8)+f);break;case 4:f=i&15,h=i>>4,n.push(h,f);break;case 2:c=i&3,d=i>>2&3,f=i>>4&3,h=i>>6&3,n.push(h,f,d,c);break;case 1:o=i&1,a=i>>1&1,l=i>>2&1,u=i>>3&1,c=i>>4&1,d=i>>5&1,f=i>>6&1,h=i>>7&1,n.push(h,f,d,c,u,l,a,o);break}}return{get:function(i){for(;n.length<i;)r();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(s!==t.length)throw new Error("extra data found")}}}function lg(t,e,n,s,r,i){let o=t.width,a=t.height,l=t.index;for(let u=0;u<a;u++)for(let c=0;c<o;c++){let d=n(c,u,l);ig[s](e,r,d,i),i+=s}return i}function cg(t,e,n,s,r,i){let o=t.width,a=t.height,l=t.index;for(let u=0;u<a;u++){for(let c=0;c<o;c++){let d=r.get(s),f=n(c,u,l);og[s](e,d,f,i)}r.resetAfterLine()}}Wl.dataToBitMap=function(t,e){let n=e.width,s=e.height,r=e.depth,i=e.bpp,o=e.interlace,a;r!==8&&(a=ag(t,r));let l;r<=8?l=Buffer.alloc(n*s*4):l=new Uint16Array(n*s*4);let u=Math.pow(2,r)-1,c=0,d,f;if(o)d=Ul.getImagePasses(n,s),f=Ul.getInterlaceIterator(n,s);else{let h=0;f=function(){let g=h;return h+=4,g},d=[{width:n,height:s}]}for(let h=0;h<d.length;h++)r===8?c=lg(d[h],l,f,i,t,c):cg(d[h],l,f,i,a,u);if(r===8){if(c!==t.length)throw new Error("extra data found")}else a.end();return l}});var pi=v((t0,ql)=>{"use strict";function ug(t,e,n,s,r){let i=0;for(let o=0;o<s;o++)for(let a=0;a<n;a++){let l=r[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let u=0;u<4;u++)e[i+u]=l[u];i+=4}}function dg(t,e,n,s,r){let i=0;for(let o=0;o<s;o++)for(let a=0;a<n;a++){let l=!1;if(r.length===1?r[0]===t[i]&&(l=!0):r[0]===t[i]&&r[1]===t[i+1]&&r[2]===t[i+2]&&(l=!0),l)for(let u=0;u<4;u++)e[i+u]=0;i+=4}}function fg(t,e,n,s,r){let i=255,o=Math.pow(2,r)-1,a=0;for(let l=0;l<s;l++)for(let u=0;u<n;u++){for(let c=0;c<4;c++)e[a+c]=Math.floor(t[a+c]*i/o+.5);a+=4}}ql.exports=function(t,e){let n=e.depth,s=e.width,r=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?ug(t,l,s,r,a):(o&&dg(t,l,s,r,o),n!==8&&(n===16&&(l=Buffer.alloc(s*r*4)),fg(t,l,s,r,n))),l}});var $l=v((n0,jl)=>{"use strict";var pg=require("util"),hi=require("zlib"),Gl=si(),hg=Dl(),gg=di(),mg=fi(),yg=pi(),ge=jl.exports=function(t){Gl.call(this),this._parser=new gg(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()};pg.inherits(ge,Gl);ge.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};ge.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=hi.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,s=Math.max(n,hi.Z_MIN_CHUNK);this._inflate=hi.createInflate({chunkSize:s});let r=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){r&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){r&&(a.length>r&&(a=a.slice(0,r)),r-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};ge.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new hg(this._bitmapInfo)};ge.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};ge.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};ge.prototype._simpleTransparency=function(){this._metaData.alpha=!0};ge.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};ge.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};ge.prototype._complete=function(t){if(this.errord)return;let e;try{let n=mg.dataToBitMap(t,this._bitmapInfo);e=yg(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var Vl=v((s0,zl)=>{"use strict";var re=Tt();zl.exports=function(t,e,n,s){let r=[re.COLORTYPE_COLOR_ALPHA,re.COLORTYPE_ALPHA].indexOf(s.colorType)!==-1;if(s.colorType===s.inputColorType){let g=(function(){let m=new ArrayBuffer(2);return new DataView(m).setInt16(0,256,!0),new Int16Array(m)[0]!==256})();if(s.bitDepth===8||s.bitDepth===16&&g)return t}let i=s.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=re.COLORTYPE_TO_BPP_MAP[s.inputColorType];a===4&&!s.inputHasAlpha&&(a=3);let l=re.COLORTYPE_TO_BPP_MAP[s.colorType];s.bitDepth===16&&(o=65535,l*=2);let u=Buffer.alloc(e*n*l),c=0,d=0,f=s.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,m,p,y=o;switch(s.inputColorType){case re.COLORTYPE_COLOR_ALPHA:y=i[c+3],g=i[c],m=i[c+1],p=i[c+2];break;case re.COLORTYPE_COLOR:g=i[c],m=i[c+1],p=i[c+2];break;case re.COLORTYPE_ALPHA:y=i[c+1],g=i[c],m=g,p=g;break;case re.COLORTYPE_GRAYSCALE:g=i[c],m=g,p=g;break;default:throw new Error("input color type:"+s.inputColorType+" is not supported at present")}return s.inputHasAlpha&&(r||(y/=o,g=Math.min(Math.max(Math.round((1-y)*f.red+y*g),0),o),m=Math.min(Math.max(Math.round((1-y)*f.green+y*m),0),o),p=Math.min(Math.max(Math.round((1-y)*f.blue+y*p),0),o))),{red:g,green:m,blue:p,alpha:y}}for(let g=0;g<n;g++)for(let m=0;m<e;m++){let p=h(i,c);switch(s.colorType){case re.COLORTYPE_COLOR_ALPHA:case re.COLORTYPE_COLOR:s.bitDepth===8?(u[d]=p.red,u[d+1]=p.green,u[d+2]=p.blue,r&&(u[d+3]=p.alpha)):(u.writeUInt16BE(p.red,d),u.writeUInt16BE(p.green,d+2),u.writeUInt16BE(p.blue,d+4),r&&u.writeUInt16BE(p.alpha,d+6));break;case re.COLORTYPE_ALPHA:case re.COLORTYPE_GRAYSCALE:{let y=(p.red+p.green+p.blue)/3;s.bitDepth===8?(u[d]=y,r&&(u[d+1]=p.alpha)):(u.writeUInt16BE(y,d),r&&u.writeUInt16BE(p.alpha,d+2));break}default:throw new Error("unrecognised color Type "+s.colorType)}c+=a,d+=l}return u}});var Jl=v((r0,Yl)=>{"use strict";var Ql=oi();function vg(t,e,n,s,r){for(let i=0;i<n;i++)s[r+i]=t[e+i]}function Sg(t,e,n){let s=0,r=e+n;for(let i=e;i<r;i++)s+=Math.abs(t[i]);return s}function _g(t,e,n,s,r,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;s[r+o]=l}}function bg(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=t[e+i]-o;r+=Math.abs(a)}return r}function wg(t,e,n,s,r){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;s[r+i]=a}}function Ig(t,e,n){let s=0,r=e+n;for(let i=e;i<r;i++){let o=e>0?t[i-n]:0,a=t[i]-o;s+=Math.abs(a)}return s}function Tg(t,e,n,s,r,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,u=t[e+o]-(a+l>>1);s[r+o]=u}}function Ag(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);r+=Math.abs(l)}return r}function Cg(t,e,n,s,r,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,u=e>0&&o>=i?t[e+o-(n+i)]:0,c=t[e+o]-Ql(a,l,u);s[r+o]=c}}function kg(t,e,n,s){let r=0;for(let i=0;i<n;i++){let o=i>=s?t[e+i-s]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=s?t[e+i-(n+s)]:0,u=t[e+i]-Ql(o,a,l);r+=Math.abs(u)}return r}var xg={0:vg,1:_g,2:wg,3:Tg,4:Cg},Rg={0:Sg,1:bg,2:Ig,3:Ag,4:kg};Yl.exports=function(t,e,n,s,r){let i;if(!("filterType"in s)||s.filterType===-1)i=[0,1,2,3,4];else if(typeof s.filterType=="number")i=[s.filterType];else throw new Error("unrecognised filter types");s.bitDepth===16&&(r*=2);let o=e*r,a=0,l=0,u=Buffer.alloc((o+1)*n),c=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=Rg[i[h]](t,l,o,r);g<f&&(c=i[h],f=g)}}u[a]=c,a++,xg[c](t,l,o,u,a,r),a+=o,l+=o}return u}});var gi=v((i0,Kl)=>{"use strict";var V=Tt(),Eg=ui(),Pg=Vl(),Mg=Jl(),Lg=require("zlib"),Ne=Kl.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||Lg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:V.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:V.COLORTYPE_COLOR_ALPHA,[V.COLORTYPE_GRAYSCALE,V.COLORTYPE_COLOR,V.COLORTYPE_COLOR_ALPHA,V.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([V.COLORTYPE_GRAYSCALE,V.COLORTYPE_COLOR,V.COLORTYPE_COLOR_ALPHA,V.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")};Ne.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Ne.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Ne.prototype.filterData=function(t,e,n){let s=Pg(t,e,n,this._options),r=V.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Mg(s,e,n,this._options,r)};Ne.prototype._packChunk=function(t,e){let n=e?e.length:0,s=Buffer.alloc(n+12);return s.writeUInt32BE(n,0),s.writeUInt32BE(t,4),e&&e.copy(s,8),s.writeInt32BE(Eg.crc32(s.slice(4,s.length-4)),s.length-4),s};Ne.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*V.GAMMA_DIVISION),0),this._packChunk(V.TYPE_gAMA,e)};Ne.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(V.TYPE_IHDR,n)};Ne.prototype.packIDAT=function(t){return this._packChunk(V.TYPE_IDAT,t)};Ne.prototype.packIEND=function(){return this._packChunk(V.TYPE_IEND,null)}});var tc=v((o0,ec)=>{"use strict";var Ng=require("util"),Xl=require("stream"),Og=Tt(),Dg=gi(),Zl=ec.exports=function(t){Xl.call(this);let e=t||{};this._packer=new Dg(e),this._deflate=this._packer.createDeflate(),this.readable=!0};Ng.inherits(Zl,Xl);Zl.prototype.pack=function(t,e,n,s){this.emit("data",Buffer.from(Og.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),s&&this.emit("data",this._packer.packGAMA(s));let r=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(r)}});var ac=v((un,oc)=>{"use strict";var nc=require("assert").ok,At=require("zlib"),Bg=require("util"),sc=require("buffer").kMaxLength;function Ye(t){if(!(this instanceof Ye))return new Ye(t);t&&t.chunkSize<At.Z_MIN_CHUNK&&(t.chunkSize=At.Z_MIN_CHUNK),At.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 Fg(t){return new Ye(t)}function rc(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}Ye.prototype._processChunk=function(t,e,n){if(typeof n=="function")return At.Inflate._processChunk.call(this,t,e,n);let s=this,r=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],u=0,c;this.on("error",function(g){c=g});function d(g,m){if(s._hadError)return;let p=i-m;if(nc(p>=0,"have should not go down"),p>0){let y=s._buffer.slice(s._offset,s._offset+p);if(s._offset+=p,y.length>o&&(y=y.slice(0,o)),l.push(y),u+=y.length,o-=y.length,o===0)return!1}return(m===0||s._offset>=s._chunkSize)&&(i=s._chunkSize,s._offset=0,s._buffer=Buffer.allocUnsafe(s._chunkSize)),m===0?(a+=r-g,r=g,!0):!1}nc(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,r,this._buffer,this._offset,i),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw c;if(u>=sc)throw rc(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+sc.toString(16)+" bytes");let h=Buffer.concat(l,u);return rc(this),h};Bg.inherits(Ye,At.Inflate);function Hg(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=At.Z_FINISH),t._processChunk(e,n)}function ic(t,e){return Hg(new Ye(e),t)}oc.exports=un=ic;un.Inflate=Ye;un.createInflate=Fg;un.inflateSync=ic});var mi=v((a0,cc)=>{"use strict";var lc=cc.exports=function(t){this._buffer=t,this._reads=[]};lc.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};lc.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 dc=v(uc=>{"use strict";var Ug=mi(),Wg=ai();uc.process=function(t,e){let n=[],s=new Ug(t);return new Wg(e,{read:s.read.bind(s),write:function(i){n.push(i)},complete:function(){}}).start(),s.process(),Buffer.concat(n)}});var gc=v((c0,hc)=>{"use strict";var fc=!0,pc=require("zlib"),qg=ac();pc.deflateSync||(fc=!1);var Gg=mi(),jg=dc(),$g=di(),zg=fi(),Vg=pi();hc.exports=function(t,e){if(!fc)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 s(A){n=A}let r;function i(A){r=A}function o(A){r.transColor=A}function a(A){r.palette=A}function l(){r.alpha=!0}let u;function c(A){u=A}let d=[];function f(A){d.push(A)}let h=new Gg(t);if(new $g(e,{read:h.read.bind(h),error:s,metadata:i,gamma:c,palette:a,transColor:o,inflateData:f,simpleTransparency:l}).start(),h.process(),n)throw n;let m=Buffer.concat(d);d.length=0;let p;if(r.interlace)p=pc.inflateSync(m);else{let w=((r.width*r.bpp*r.depth+7>>3)+1)*r.height;p=qg(m,{chunkSize:w,maxLength:w})}if(m=null,!p||!p.length)throw new Error("bad png - invalid inflate data response");let y=jg.process(p,r);m=null;let C=zg.dataToBitMap(y,r);y=null;let I=Vg(C,r);return r.data=I,r.gamma=u||0,r}});var Sc=v((u0,vc)=>{"use strict";var mc=!0,yc=require("zlib");yc.deflateSync||(mc=!1);var Qg=Tt(),Yg=gi();vc.exports=function(t,e){if(!mc)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||{},s=new Yg(n),r=[];r.push(Buffer.from(Qg.PNG_SIGNATURE)),r.push(s.packIHDR(t.width,t.height)),t.gamma&&r.push(s.packGAMA(t.gamma));let i=s.filterData(t.data,t.width,t.height),o=yc.deflateSync(i,s.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return r.push(s.packIDAT(o)),r.push(s.packIEND()),Buffer.concat(r)}});var _c=v(yi=>{"use strict";var Jg=gc(),Kg=Sc();yi.read=function(t,e){return Jg(t,e||{})};yi.write=function(t,e){return Kg(t,e)}});var Ic=v(wc=>{"use strict";var Xg=require("util"),bc=require("stream"),Zg=$l(),em=tc(),tm=_c(),Y=wc.PNG=function(t){bc.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 Zg(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 em(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"))};Xg.inherits(Y,bc);Y.sync=tm;Y.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)};Y.prototype.parse=function(t,e){if(e){let n,s;n=function(r){this.removeListener("error",s),this.data=r,e(null,this)}.bind(this),s=function(r){this.removeListener("parsed",n),e(r,null)}.bind(this),this.once("parsed",n),this.once("error",s)}return this.end(t),this};Y.prototype.write=function(t){return this._parser.write(t),!0};Y.prototype.end=function(t){this._parser.end(t)};Y.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Y.prototype._gamma=function(t){this.gamma=t};Y.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};Y.bitblt=function(t,e,n,s,r,i,o,a){if(n|=0,s|=0,r|=0,i|=0,o|=0,a|=0,n>t.width||s>t.height||n+r>t.width||s+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+r>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,(s+l)*t.width+n<<2,(s+l)*t.width+n+r<<2)};Y.prototype.bitblt=function(t,e,n,s,r,i,o){return Y.bitblt(this,t,e,n,s,r,i,o),this};Y.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let s=t.width*e+n<<2;for(let r=0;r<3;r++){let i=t.data[s+r]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[s+r]=Math.round(i*255)}}t.gamma=0}};Y.prototype.adjustGamma=function(){Y.adjustGamma(this)}});var dn=v(Je=>{function Tc(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(s){return[s,s]}))),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("")}}Je.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,s=e.width&&e.width>=21?e.width:void 0,r=e.scale||4;return{width:s,scale:s?4:r,margin:n,color:{dark:Tc(e.color.dark||"#000000ff"),light:Tc(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};Je.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};Je.getImageWidth=function(e,n){let s=Je.getScale(e,n);return Math.floor((e+n.margin*2)*s)};Je.qrToImageData=function(e,n,s){let r=n.modules.size,i=n.modules.data,o=Je.getScale(r,s),a=Math.floor((r+s.margin*2)*o),l=s.margin*o,u=[s.color.light,s.color.dark];for(let c=0;c<a;c++)for(let d=0;d<a;d++){let f=(c*a+d)*4,h=s.color.light;if(c>=l&&d>=l&&c<a-l&&d<a-l){let g=Math.floor((c-l)/o),m=Math.floor((d-l)/o);h=u[i[g*r+m]?1:0]}e[f++]=h.r,e[f++]=h.g,e[f++]=h.b,e[f]=h.a}}});var Ac=v(me=>{var nm=require("fs"),sm=Ic().PNG,vi=dn();me.render=function(e,n){let s=vi.getOptions(n),r=s.rendererOpts,i=vi.getImageWidth(e.modules.size,s);r.width=i,r.height=i;let o=new sm(r);return vi.qrToImageData(o.data,e,s),o};me.renderToDataURL=function(e,n,s){typeof s>"u"&&(s=n,n=void 0),me.renderToBuffer(e,n,function(r,i){r&&s(r);let o="data:image/png;base64,";o+=i.toString("base64"),s(null,o)})};me.renderToBuffer=function(e,n,s){typeof s>"u"&&(s=n,n=void 0);let r=me.render(e,n),i=[];r.on("error",s),r.on("data",function(o){i.push(o)}),r.on("end",function(){s(null,Buffer.concat(i))}),r.pack()};me.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=void 0);let i=!1,o=(...l)=>{i||(i=!0,r.apply(null,l))},a=nm.createWriteStream(e);a.on("error",o),a.on("close",o),me.renderToFileStream(a,n,s)};me.renderToFileStream=function(e,n,s){me.render(n,s).pack().pipe(e)}});var Cc=v(ps=>{var rm=dn(),im={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},om={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function am(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}ps.render=function(t,e,n){let s=rm.getOptions(e),r=im;(s.color.dark.hex==="#ffffff"||s.color.light.hex==="#000000")&&(r=om);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+s.margin*2+1).join(r.WW);l=Array(s.margin/2+1).join(l+`
14
+ `);let u=Array(s.margin+1).join(r.WW);a+=l;for(let c=0;c<i;c+=2){a+=u;for(let d=0;d<i;d++){let f=o[c*i+d],h=o[(c+1)*i+d];a+=am(f,h,r)}a+=u+`
15
+ `}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};ps.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=void 0);let i=require("fs"),o=ps.render(n,s);i.writeFile(e,o,r)}});var xc=v(kc=>{kc.render=function(t,e,n){let s=t.modules.size,r=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(s+3).join(o),u=Array(2).join(o);a+=l+`
16
16
  `;for(let c=0;c<s;++c){a+=o;for(let d=0;d<s;d++)a+=r[c*s+d]?i:o;a+=u+`
17
17
  `}return a+=l+`
18
- `,typeof n=="function"&&n(null,a),a}});var Ic=v(wc=>{var zg="\x1B[47m",Vg="\x1B[40m",fi="\x1B[37m",pi="\x1B[30m",Ke="\x1B[0m",Qg=zg+pi,Yg=Vg+fi,Jg=function(t,e,n){return{"00":Ke+" "+t,"01":Ke+e+"\u2584"+t,"02":Ke+n+"\u2584"+t,10:Ke+e+"\u2580"+t,11:" ",12:"\u2584",20:Ke+n+"\u2580"+t,21:"\u2580",22:"\u2588"}},_c=function(t,e,n,s){let r=e+1;if(n>=r||s>=r||s<-1||n<-1)return"0";if(n>=e||s>=e||s<0||n<0)return"1";let i=s*e+n;return t[i]?"2":"1"},bc=function(t,e,n,s){return _c(t,e,n,s)+_c(t,e,n,s+1)};wc.render=function(t,e,n){let s=t.modules.size,r=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?Yg:Qg,u=Jg(o,i?pi:fi,i?fi:pi),c=Ke+`
19
- `+o,d=o;for(let f=-1;f<s+1;f+=2){for(let h=-1;h<s;h++)d+=u[bc(r,s,h,f)];d+=u[bc(r,s,s,f)]+c}return d+=Ke,typeof n=="function"&&n(null,d),d}});var Ac=v(Tc=>{var Kg=Sc(),Xg=Ic();Tc.render=function(t,e,n){return e&&e.small?Xg.render(t,e,n):Kg.render(t,e,n)}});var gi=v(Cc=>{var Zg=un();function kc(t,e){let n=t.a/255,s=e+'="'+t.hex+'"';return n<1?s+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':s}function hi(t,e,n){let s=t+e;return typeof n<"u"&&(s+=" "+n),s}function em(t,e,n){let s="",r=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),u=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(s+=i?hi("M",l+n,.5+u+n):hi("m",r,0),r=0,i=!1),l+1<e&&t[a+1]||(s+=hi("h",o),o=0)):r++}return s}Cc.render=function(e,n,s){let r=Zg.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+r.margin*2,l=r.color.light.a?"<path "+kc(r.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",u="<path "+kc(r.color.dark,"stroke")+' d="'+em(o,i,r.margin)+'"/>',c='viewBox="0 0 '+a+" "+a+'"',f='<svg xmlns="http://www.w3.org/2000/svg" '+(r.width?'width="'+r.width+'" height="'+r.width+'" ':"")+c+' shape-rendering="crispEdges">'+l+u+`</svg>
20
- `;return typeof s=="function"&&s(null,f),f}});var xc=v(us=>{var tm=gi();us.render=tm.render;us.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=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">'+us.render(n,s);i.writeFile(e,a,r)}});var Rc=v(ds=>{var mi=un();function nm(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 sm(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}ds.render=function(e,n,s){let r=s,i=n;typeof r>"u"&&(!n||!n.getContext)&&(r=n,n=void 0),n||(i=sm()),r=mi.getOptions(r);let o=mi.getImageWidth(e.modules.size,r),a=i.getContext("2d"),l=a.createImageData(o,o);return mi.qrToImageData(l.data,e,r),nm(a,i,o),a.putImageData(l,0,0),i};ds.renderToDataURL=function(e,n,s){let r=s;typeof r>"u"&&(!n||!n.getContext)&&(r=n,n=void 0),r||(r={});let i=ds.render(e,n,r),o=r.type||"image/png",a=r.rendererOpts||{};return i.toDataURL(o,a.quality)}});var Pc=v(dn=>{var rm=Er(),yi=Yr(),Ec=Rc(),im=gi();function vi(t,e,n,s,r){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!rm())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(r=n,n=e,e=s=void 0):o===3&&(e.getContext&&typeof r>"u"?(r=s,s=void 0):(r=s,s=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=s=void 0):o===2&&!e.getContext&&(s=n,n=e,e=void 0),new Promise(function(l,u){try{let c=yi.create(n,s);l(t(c,e,s))}catch(c){u(c)}})}try{let l=yi.create(n,s);r(null,t(l,e,s))}catch(l){r(l)}}dn.create=yi.create;dn.toCanvas=vi.bind(null,Ec.render);dn.toDataURL=vi.bind(null,Ec.renderToDataURL);dn.toString=vi.bind(null,function(t,e,n){return im.render(t,n)})});var Oc=v(Oe=>{var Mc=Er(),Si=Yr(),om=mc(),Lc=yc(),am=Ac(),Nc=xc();function fn(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(Mc())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function lm(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function fs(t){switch(t){case"svg":return Nc;case"txt":case"utf8":return Lc;case"png":case"image/png":default:return om}}function cm(t){switch(t){case"svg":return Nc;case"terminal":return am;case"utf8":default:return Lc}}function pn(t,e,n){if(!n.cb)return new Promise(function(s,r){try{let i=Si.create(e,n.opts);return t(i,n.opts,function(o,a){return o?r(o):s(a)})}catch(i){r(i)}});try{let s=Si.create(e,n.opts);return t(s,n.opts,n.cb)}catch(s){n.cb(s)}}Oe.create=Si.create;Oe.toCanvas=Pc().toCanvas;Oe.toString=function(e,n,s){let r=fn(e,n,s),i=r.opts?r.opts.type:void 0,o=cm(i);return pn(o.render,e,r)};Oe.toDataURL=function(e,n,s){let r=fn(e,n,s),i=fs(r.opts.type);return pn(i.renderToDataURL,e,r)};Oe.toBuffer=function(e,n,s){let r=fn(e,n,s),i=fs(r.opts.type);return pn(i.renderToBuffer,e,r)};Oe.toFile=function(e,n,s,r){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!Mc())throw new Error("Too few arguments provided");let i=fn(n,s,r),o=i.opts.type||lm(e),l=fs(o).renderToFile.bind(null,e);return pn(l,n,i)};Oe.toFileStream=function(e,n,s){if(arguments.length<2)throw new Error("Too few arguments provided");let r=fn(n,s,e.emit.bind(e,"error")),o=fs("png").renderToFileStream.bind(null,e);pn(o,n,r)}});var Dc=v((zb,Bc)=>{Bc.exports=Oc()});var hf=require("http");var $p=ut(Sa(),1),zp=ut(vr(),1),Vp=ut(br(),1),Qp=ut(Kn(),1),Rr=ut(xa(),1);var ae=require("fs/promises"),gf=require("crypto"),zt=require("path"),mf=require("os"),Io=ut(Dc(),1);var Xe=require("child_process"),xt=require("fs"),E=require("path"),mn=require("os");var _s=require("fs");var Fc=require("os"),Q=require("path"),Ie=(0,Q.join)((0,Fc.homedir)(),".vibelet"),ps=(0,Q.join)(Ie,"logs"),hs=(0,Q.join)(Ie,"data"),um=(0,Q.join)(Ie,"runtime"),Vb=(0,Q.join)(um,"current"),Hc=(0,Q.join)(Ie,"identity.json"),Uc=(0,Q.join)(Ie,"pairings.json"),Wc=(0,Q.join)(hs,"push-subscriptions.json"),gs=(0,Q.join)(hs,"sessions.json"),kt=(0,Q.join)(hs,"audit.jsonl"),_i=(0,Q.join)(hs,"uploads"),ms=(0,Q.join)(ps,"daemon.stdout.log"),ys=(0,Q.join)(ps,"daemon.stderr.log"),qc=(0,Q.join)(Ie,"update-check.json"),bi=(0,Q.join)(Ie,"pairing-qr.png");var vs={stdout:!1,stderr:!1};function Gc(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function dm(t){return!t.destroyed&&t.writable!==!1}function jc(t,e){if(vs[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!dm(n))return vs[t]=!0,!1;try{return n.write(e,s=>{Gc(s)&&(vs[t]=!0)}),!0}catch(s){return Gc(s)&&(vs[t]=!0),!1}}function Ct(t){return jc("stdout",t)}function Ss(t){return jc("stderr",t)}var $c={debug:10,info:20,warn:30,error:40},fm=process.env.VIBE_LOG_LEVEL||"info";function pm(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function hm(){try{let{fstatSync:t}=require("fs");return t(1).isFile()}catch{return!1}}var Vc=!pm()&&!hm();if(Vc)try{(0,_s.mkdirSync)(ps,{recursive:!0})}catch{}function zc(t,e,n){if($c[t]<$c[fm])return;let s={level:t,ts:new Date().toISOString(),msg:n,...e},r=JSON.stringify(s);if(t==="error"||t==="warn"?Ss(r+`
21
- `):Ct(r+`
22
- `),Vc){let i=t==="error"||t==="warn"?ys:ms;try{(0,_s.appendFileSync)(i,r+`
23
- `)}catch{}}}function Qc(t={}){function e(n,s,r){typeof s=="string"?zc(n,t,s):zc(n,{...t,...s},r)}return{debug:(n,s)=>e("debug",n,s),info:(n,s)=>e("info",n,s),warn:(n,s)=>e("warn",n,s),error:(n,s)=>e("error",n,s),child:n=>Qc({...t,...n})}}var N=Qc({module:"daemon"});var gm=["fnm_multishells"],mm=6e4,Be=process.platform==="win32",ym=300*1e3,vm=900*1e3,Sm=N.child({module:"config"});function ie(t){return gm.some(e=>t.includes(e))}function _m(t){if(!t||!ie(t))return t;try{let e=(0,E.join)((0,xt.realpathSync)((0,E.dirname)(t)),(0,E.basename)(t));if((0,xt.existsSync)(e)&&!ie(e))return e}catch{}return t}function bm(t){if(!t||!ie(t))return t;try{let e=(0,xt.realpathSync)(t);if(e&&!ie(e))return e}catch{}return t}function Ii(){return Be?[]:[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var hn=null;function Kc(){if(hn&&hn.PATH&&!ie(hn.PATH))return hn;for(let t of Ii())try{let e=(0,Xe.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let s of e.split(`
24
- `)){let r=s.indexOf("=");r>0&&(n[s.slice(0,r)]=s.slice(r+1))}return n.PATH&&!ie(n.PATH)&&(hn=n),n}catch{}return{}}function wm(t=Kc()){let e=(0,mn.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(Be?(0,E.join)(e,"pnpm"):(0,E.join)(e,"Library","pnpm")),s=t.PATH||process.env.PATH||"",r=Be?[(0,E.join)(e,".npm-global","bin"),(0,E.join)(e,".local","bin"),(0,E.join)(e,".claude","bin"),n,(0,E.join)(e,"AppData","Roaming","npm"),(0,E.join)(e,"AppData","Local","Programs","node")]:["/usr/local/bin","/opt/homebrew/bin","/usr/bin","/bin",(0,E.join)(e,".npm-global","bin"),(0,E.join)(e,".local","bin"),(0,E.join)(e,".claude","bin"),n],i=s.split(E.delimiter).filter(Boolean).map(bm),o=new Set(i);for(let a of r)o.has(a)||(i.push(a),o.add(a));return i.join(E.delimiter)}function wi(t,e){let n=process.env[t];if(!n)return e;let s=Number(n);return Number.isFinite(s)&&s>0?Math.floor(s):e}function bs(t,e){let n=process.env[t];if(n==null||n==="")return e;let s=Number(n);return Number.isFinite(s)&&s>=0?Math.floor(s):e}function Ze(){let t=Kc(),e={};for(let[n,s]of Object.entries(process.env))typeof s=="string"&&(e[n]=s);for(let[n,s]of Object.entries(t))typeof s=="string"&&(e[n]=s);return e.PATH=wm(t),e.HOME||(e.HOME=(0,mn.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function Ti(t){if(Be)try{let n=(0,Xe.execFileSync)("where.exe",[t],{timeout:3e3,stdio:"pipe",encoding:"utf-8"}).trim().split(/\r?\n/).filter(Boolean);return n.find(r=>r.endsWith(".exe"))??n[0]}catch{return}}function gn(t,e=3e3){try{return(0,Xe.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Ze(),...Be?{shell:!0}:{}}).trim()||null}catch{return null}}function Im(t){for(let e of Ii())try{let n=(0,Xe.execFileSync)(e,["-ilc",`command -v ${t}`],{timeout:5e3,stdio:["pipe","pipe","pipe"],encoding:"utf-8"}).trim();if(n)return n}catch{}}function Tm(){let t=(0,mn.homedir)();return[(0,E.join)(t,".local","bin","claude"),(0,E.join)(t,".claude","bin","claude"),"/usr/local/bin/claude","/opt/homebrew/bin/claude",(0,E.join)(t,".npm-global","bin","claude")]}function Am(){if(Be){let t=Ti("claude");return t&&gn(t)?t:void 0}for(let t of Tm())if(gn(t))return t;try{let t=(0,Xe.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Ze()}).trim();if(t&&!t.includes("cmux")&&gn(t))return t}catch{}}function km(){let t=(0,mn.homedir)(),e=[process.env.PNPM_HOME,(0,E.join)(t,"Library","pnpm")].filter(n=>!!n);return["/usr/local/bin/codex","/opt/homebrew/bin/codex",(0,E.join)(t,".npm-global","bin","codex"),(0,E.join)(t,".local","bin","codex"),...e.map(n=>(0,E.join)(n,"codex"))]}function Cm(){if(Be){let r=Ti("codex");return r&&gn(r)?r:void 0}let t=r=>{let i=_m(r);return gn(i)?i:void 0},e;for(let r of km()){let i=t(r);if(i){if(!ie(i))return i;e=i}}try{let r=(0,Xe.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Ze()}).trim(),i=r?t(r):void 0;if(i){if(!ie(i))return i;e=e??i}}catch{}let n=Im("codex"),s=n?t(n):void 0;if(s){if(!ie(s))return s;e=e??s}return e}function Xc(t,e){let n=null,s=0;return()=>{let r=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[r])return process.env[r];let i=Date.now();if(!n||i-s>mm||!(0,xt.existsSync)(n)||ie(n)){let o=t();n=o??e,s=i,Sm.info({name:e,path:n,transient:ie(n),isBare:o==null},"binary resolved")}return n}}var xm=Xc(Am,"claude"),Rm=Xc(Cm,"codex");function Em(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let s=e[n];if(s.startsWith("--")&&n+1<e.length){let r=s.slice(2);t[r]=e[++n]}}return t}var Yc=Em(),ws=bs("VIBE_TURN_STALL_TIMEOUT_MS",ym),Jc=bs("VIBE_TURN_STALL_HARD_TIMEOUT_MS",Math.max(vm,ws*3)),Pm=ws<=0||Jc===0?0:Math.max(Jc,ws);function Mm(t,e){if(Be)return{command:Ti(t)??t,args:e};let n=Ii()[0]??"/bin/zsh",s=`if ! command -v ${t} >/dev/null 2>&1; then echo "${t}: not found in login shell PATH=$PATH" >&2; exit 127; fi; exec ${t} "$@"`;return{command:n,args:["-lc",s,"--",...e]}}var S={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:Yc.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:Yc["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:bs("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:ws,turnStallHardTimeoutMs:Pm,auditMaxBytes:wi("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:wi("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:wi("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),pairWindowMs:bs("VIBE_PAIR_WINDOW_MS",300*1e3),pairReusable:process.env.VIBE_PAIR_REUSABLE==="1",reviewMock:process.env.VIBE_REVIEW_MOCK==="1",get claudePath(){return xm()},get codexPath(){return Rm()},isTransientPath:ie,execViaLoginShell:Mm,buildSanitizedEnv:Ze};var fo=require("crypto"),jd=require("fs/promises");var pu=require("child_process"),Cs=require("fs");var Is=require("fs"),tu=require("path");var J=require("fs");function Lm(t,e,n,s){let r=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,r,s??i))}function yn(t,e){if(!(0,J.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let s=(0,J.statSync)(t).size,r=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||s+r<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:s,afterBytes:s,reclaimedBytes:0};let i=Lm(s,e.maxBytes,r,e.retainBytes),o=(0,J.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,J.readSync)(o,l,0,i,s-i);let u=0;if(s>i){let c=l.indexOf(10);c>=0&&c+1<l.length&&(u=c+1)}a=l.subarray(u)}return(0,J.ftruncateSync)(o,0),a.length>0&&(0,J.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:s,afterBytes:a.length,reclaimedBytes:s-a.length}}finally{(0,J.closeSync)(o)}}function Zc(t){let e=[yn(t.auditPath,{maxBytes:t.auditMaxBytes}),yn(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),yn(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,s)=>n+s.reclaimedBytes,0)}}var eu=!1,Nm=new Set(["ts","event","source","appEvent","level"]);function Om(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Bm(t={}){let e={};for(let[n,s]of Object.entries(t))Nm.has(n)||(e[n]=s);return e}function Dm(t,e,n={},s){return{ts:s??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...Bm(n)}}function Fm(){eu||((0,Is.mkdirSync)((0,tu.dirname)(kt),{recursive:!0}),eu=!0)}var Ai=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,s={},r){this.write(Dm(e,n,s,r))}write(e){if(!Om()){Fm();try{let n=JSON.stringify(e)+`
25
- `;yn(kt,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,Is.appendFileSync)(kt,n)}catch{}}}},T=new Ai;var De=require("fs"),nu=require("os"),vn=require("path"),su=require("crypto"),ki="claude-hook:",Sn="x-vibelet-claude-hook-secret",_n={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function Hm(t,e){return`#!/usr/bin/env node
18
+ `,typeof n=="function"&&n(null,a),a}});var Mc=v(Pc=>{var lm="\x1B[47m",cm="\x1B[40m",Si="\x1B[37m",_i="\x1B[30m",Ke="\x1B[0m",um=lm+_i,dm=cm+Si,fm=function(t,e,n){return{"00":Ke+" "+t,"01":Ke+e+"\u2584"+t,"02":Ke+n+"\u2584"+t,10:Ke+e+"\u2580"+t,11:" ",12:"\u2584",20:Ke+n+"\u2580"+t,21:"\u2580",22:"\u2588"}},Rc=function(t,e,n,s){let r=e+1;if(n>=r||s>=r||s<-1||n<-1)return"0";if(n>=e||s>=e||s<0||n<0)return"1";let i=s*e+n;return t[i]?"2":"1"},Ec=function(t,e,n,s){return Rc(t,e,n,s)+Rc(t,e,n,s+1)};Pc.render=function(t,e,n){let s=t.modules.size,r=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?dm:um,u=fm(o,i?_i:Si,i?Si:_i),c=Ke+`
19
+ `+o,d=o;for(let f=-1;f<s+1;f+=2){for(let h=-1;h<s;h++)d+=u[Ec(r,s,h,f)];d+=u[Ec(r,s,s,f)]+c}return d+=Ke,typeof n=="function"&&n(null,d),d}});var Nc=v(Lc=>{var pm=xc(),hm=Mc();Lc.render=function(t,e,n){return e&&e.small?hm.render(t,e,n):pm.render(t,e,n)}});var wi=v(Dc=>{var gm=dn();function Oc(t,e){let n=t.a/255,s=e+'="'+t.hex+'"';return n<1?s+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':s}function bi(t,e,n){let s=t+e;return typeof n<"u"&&(s+=" "+n),s}function mm(t,e,n){let s="",r=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),u=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(s+=i?bi("M",l+n,.5+u+n):bi("m",r,0),r=0,i=!1),l+1<e&&t[a+1]||(s+=bi("h",o),o=0)):r++}return s}Dc.render=function(e,n,s){let r=gm.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+r.margin*2,l=r.color.light.a?"<path "+Oc(r.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",u="<path "+Oc(r.color.dark,"stroke")+' d="'+mm(o,i,r.margin)+'"/>',c='viewBox="0 0 '+a+" "+a+'"',f='<svg xmlns="http://www.w3.org/2000/svg" '+(r.width?'width="'+r.width+'" height="'+r.width+'" ':"")+c+' shape-rendering="crispEdges">'+l+u+`</svg>
20
+ `;return typeof s=="function"&&s(null,f),f}});var Bc=v(hs=>{var ym=wi();hs.render=ym.render;hs.renderToFile=function(e,n,s,r){typeof r>"u"&&(r=s,s=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">'+hs.render(n,s);i.writeFile(e,a,r)}});var Fc=v(gs=>{var Ii=dn();function vm(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 Sm(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}gs.render=function(e,n,s){let r=s,i=n;typeof r>"u"&&(!n||!n.getContext)&&(r=n,n=void 0),n||(i=Sm()),r=Ii.getOptions(r);let o=Ii.getImageWidth(e.modules.size,r),a=i.getContext("2d"),l=a.createImageData(o,o);return Ii.qrToImageData(l.data,e,r),vm(a,i,o),a.putImageData(l,0,0),i};gs.renderToDataURL=function(e,n,s){let r=s;typeof r>"u"&&(!n||!n.getContext)&&(r=n,n=void 0),r||(r={});let i=gs.render(e,n,r),o=r.type||"image/png",a=r.rendererOpts||{};return i.toDataURL(o,a.quality)}});var Uc=v(fn=>{var _m=Br(),Ti=ni(),Hc=Fc(),bm=wi();function Ai(t,e,n,s,r){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!_m())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(r=n,n=e,e=s=void 0):o===3&&(e.getContext&&typeof r>"u"?(r=s,s=void 0):(r=s,s=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=s=void 0):o===2&&!e.getContext&&(s=n,n=e,e=void 0),new Promise(function(l,u){try{let c=Ti.create(n,s);l(t(c,e,s))}catch(c){u(c)}})}try{let l=Ti.create(n,s);r(null,t(l,e,s))}catch(l){r(l)}}fn.create=Ti.create;fn.toCanvas=Ai.bind(null,Hc.render);fn.toDataURL=Ai.bind(null,Hc.renderToDataURL);fn.toString=Ai.bind(null,function(t,e,n){return bm.render(t,n)})});var jc=v(Oe=>{var Wc=Br(),Ci=ni(),wm=Ac(),qc=Cc(),Im=Nc(),Gc=Bc();function pn(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(Wc())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function Tm(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function ms(t){switch(t){case"svg":return Gc;case"txt":case"utf8":return qc;case"png":case"image/png":default:return wm}}function Am(t){switch(t){case"svg":return Gc;case"terminal":return Im;case"utf8":default:return qc}}function hn(t,e,n){if(!n.cb)return new Promise(function(s,r){try{let i=Ci.create(e,n.opts);return t(i,n.opts,function(o,a){return o?r(o):s(a)})}catch(i){r(i)}});try{let s=Ci.create(e,n.opts);return t(s,n.opts,n.cb)}catch(s){n.cb(s)}}Oe.create=Ci.create;Oe.toCanvas=Uc().toCanvas;Oe.toString=function(e,n,s){let r=pn(e,n,s),i=r.opts?r.opts.type:void 0,o=Am(i);return hn(o.render,e,r)};Oe.toDataURL=function(e,n,s){let r=pn(e,n,s),i=ms(r.opts.type);return hn(i.renderToDataURL,e,r)};Oe.toBuffer=function(e,n,s){let r=pn(e,n,s),i=ms(r.opts.type);return hn(i.renderToBuffer,e,r)};Oe.toFile=function(e,n,s,r){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!Wc())throw new Error("Too few arguments provided");let i=pn(n,s,r),o=i.opts.type||Tm(e),l=ms(o).renderToFile.bind(null,e);return hn(l,n,i)};Oe.toFileStream=function(e,n,s){if(arguments.length<2)throw new Error("Too few arguments provided");let r=pn(n,s,e.emit.bind(e,"error")),o=ms("png").renderToFileStream.bind(null,e);hn(o,n,r)}});var zc=v((T0,$c)=>{$c.exports=jc()});var Ef=require("http");var ah=ut(xa(),1),lh=ut(Ar(),1),ch=ut(xr(),1),uh=ut(ts(),1),Dr=ut(Ba(),1);var ae=require("fs/promises"),Pf=require("crypto"),Vt=require("path"),Mf=require("os"),Mo=ut(zc(),1);var Xe=require("child_process"),xt=require("fs"),E=require("path"),yn=require("os");var Ts=require("fs");var Vc=require("os"),Q=require("path"),Ie=(0,Q.join)((0,Vc.homedir)(),".vibelet"),ys=(0,Q.join)(Ie,"logs"),vs=(0,Q.join)(Ie,"data"),Cm=(0,Q.join)(Ie,"runtime"),A0=(0,Q.join)(Cm,"current"),Qc=(0,Q.join)(Ie,"identity.json"),Yc=(0,Q.join)(Ie,"pairings.json"),Jc=(0,Q.join)(vs,"push-subscriptions.json"),Ss=(0,Q.join)(vs,"sessions.json"),Ct=(0,Q.join)(vs,"audit.jsonl"),ki=(0,Q.join)(vs,"uploads"),_s=(0,Q.join)(ys,"daemon.stdout.log"),bs=(0,Q.join)(ys,"daemon.stderr.log"),Kc=(0,Q.join)(Ie,"update-check.json"),xi=(0,Q.join)(Ie,"pairing-qr.png");var ws={stdout:!1,stderr:!1};function Xc(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function km(t){return!t.destroyed&&t.writable!==!1}function Zc(t,e){if(ws[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!km(n))return ws[t]=!0,!1;try{return n.write(e,s=>{Xc(s)&&(ws[t]=!0)}),!0}catch(s){return Xc(s)&&(ws[t]=!0),!1}}function kt(t){return Zc("stdout",t)}function Is(t){return Zc("stderr",t)}var eu={debug:10,info:20,warn:30,error:40},xm=process.env.VIBE_LOG_LEVEL||"info";function Rm(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Em(){try{let{fstatSync:t}=require("fs");return t(1).isFile()}catch{return!1}}var nu=!Rm()&&!Em();if(nu)try{(0,Ts.mkdirSync)(ys,{recursive:!0})}catch{}function tu(t,e,n){if(eu[t]<eu[xm])return;let s={level:t,ts:new Date().toISOString(),msg:n,...e},r=JSON.stringify(s);if(t==="error"||t==="warn"?Is(r+`
21
+ `):kt(r+`
22
+ `),nu){let i=t==="error"||t==="warn"?bs:_s;try{(0,Ts.appendFileSync)(i,r+`
23
+ `)}catch{}}}function su(t={}){function e(n,s,r){typeof s=="string"?tu(n,t,s):tu(n,{...t,...s},r)}return{debug:(n,s)=>e("debug",n,s),info:(n,s)=>e("info",n,s),warn:(n,s)=>e("warn",n,s),error:(n,s)=>e("error",n,s),child:n=>su({...t,...n})}}var M=su({module:"daemon"});var Pm=["fnm_multishells"],Mm=6e4,De=process.platform==="win32",Lm=300*1e3,Nm=900*1e3,Om=M.child({module:"config"});function ie(t){return Pm.some(e=>t.includes(e))}function Dm(t){if(!t||!ie(t))return t;try{let e=(0,E.join)((0,xt.realpathSync)((0,E.dirname)(t)),(0,E.basename)(t));if((0,xt.existsSync)(e)&&!ie(e))return e}catch{}return t}function Bm(t){if(!t||!ie(t))return t;try{let e=(0,xt.realpathSync)(t);if(e&&!ie(e))return e}catch{}return t}function Ei(){return De?[]:[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var gn=null;function ou(){if(gn&&gn.PATH&&!ie(gn.PATH))return gn;for(let t of Ei())try{let e=(0,Xe.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let s of e.split(`
24
+ `)){let r=s.indexOf("=");r>0&&(n[s.slice(0,r)]=s.slice(r+1))}return n.PATH&&!ie(n.PATH)&&(gn=n),n}catch{}return{}}function Fm(t=ou()){let e=(0,yn.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(De?(0,E.join)(e,"pnpm"):(0,E.join)(e,"Library","pnpm")),s=t.PATH||process.env.PATH||"",r=De?[(0,E.join)(e,".npm-global","bin"),(0,E.join)(e,".local","bin"),(0,E.join)(e,".claude","bin"),n,(0,E.join)(e,"AppData","Roaming","npm"),(0,E.join)(e,"AppData","Local","Programs","node")]:["/usr/local/bin","/opt/homebrew/bin","/usr/bin","/bin",(0,E.join)(e,".npm-global","bin"),(0,E.join)(e,".local","bin"),(0,E.join)(e,".claude","bin"),n],i=s.split(E.delimiter).filter(Boolean).map(Bm),o=new Set(i);for(let a of r)o.has(a)||(i.push(a),o.add(a));return i.join(E.delimiter)}function Ri(t,e){let n=process.env[t];if(!n)return e;let s=Number(n);return Number.isFinite(s)&&s>0?Math.floor(s):e}function As(t,e){let n=process.env[t];if(n==null||n==="")return e;let s=Number(n);return Number.isFinite(s)&&s>=0?Math.floor(s):e}function Ze(){let t=ou(),e={};for(let[n,s]of Object.entries(process.env))typeof s=="string"&&(e[n]=s);for(let[n,s]of Object.entries(t))typeof s=="string"&&(e[n]=s);return e.PATH=Fm(t),e.HOME||(e.HOME=(0,yn.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function Pi(t){if(De)try{let n=(0,Xe.execFileSync)("where.exe",[t],{timeout:3e3,stdio:"pipe",encoding:"utf-8"}).trim().split(/\r?\n/).filter(Boolean);return n.find(r=>r.endsWith(".exe"))??n[0]}catch{return}}function mn(t,e=3e3){try{return(0,Xe.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Ze(),...De?{shell:!0}:{}}).trim()||null}catch{return null}}function Hm(t){for(let e of Ei())try{let n=(0,Xe.execFileSync)(e,["-ilc",`command -v ${t}`],{timeout:5e3,stdio:["pipe","pipe","pipe"],encoding:"utf-8"}).trim();if(n)return n}catch{}}function Um(){let t=(0,yn.homedir)();return[(0,E.join)(t,".local","bin","claude"),(0,E.join)(t,".claude","bin","claude"),"/usr/local/bin/claude","/opt/homebrew/bin/claude",(0,E.join)(t,".npm-global","bin","claude")]}function Wm(){if(De){let t=Pi("claude");return t&&mn(t)?t:void 0}for(let t of Um())if(mn(t))return t;try{let t=(0,Xe.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Ze()}).trim();if(t&&!t.includes("cmux")&&mn(t))return t}catch{}}function qm(){let t=(0,yn.homedir)(),e=[process.env.PNPM_HOME,(0,E.join)(t,"Library","pnpm")].filter(n=>!!n);return["/usr/local/bin/codex","/opt/homebrew/bin/codex",(0,E.join)(t,".npm-global","bin","codex"),(0,E.join)(t,".local","bin","codex"),...e.map(n=>(0,E.join)(n,"codex"))]}function Gm(){if(De){let r=Pi("codex");return r&&mn(r)?r:void 0}let t=r=>{let i=Dm(r);return mn(i)?i:void 0},e;for(let r of qm()){let i=t(r);if(i){if(!ie(i))return i;e=i}}try{let r=(0,Xe.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Ze()}).trim(),i=r?t(r):void 0;if(i){if(!ie(i))return i;e=e??i}}catch{}let n=Hm("codex"),s=n?t(n):void 0;if(s){if(!ie(s))return s;e=e??s}return e}function au(t,e){let n=null,s=0;return()=>{let r=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[r])return process.env[r];let i=Date.now();if(!n||i-s>Mm||!(0,xt.existsSync)(n)||ie(n)){let o=t();n=o??e,s=i,Om.info({name:e,path:n,transient:ie(n),isBare:o==null},"binary resolved")}return n}}var jm=au(Wm,"claude"),$m=au(Gm,"codex");function zm(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let s=e[n];if(s.startsWith("--")&&n+1<e.length){let r=s.slice(2);t[r]=e[++n]}}return t}var ru=zm(),Cs=As("VIBE_TURN_STALL_TIMEOUT_MS",Lm),iu=As("VIBE_TURN_STALL_HARD_TIMEOUT_MS",Math.max(Nm,Cs*3)),Vm=Cs<=0||iu===0?0:Math.max(iu,Cs);function Qm(t,e){if(De)return{command:Pi(t)??t,args:e};let n=Ei()[0]??"/bin/zsh",s=`if ! command -v ${t} >/dev/null 2>&1; then echo "${t}: not found in login shell PATH=$PATH" >&2; exit 127; fi; exec ${t} "$@"`;return{command:n,args:["-lc",s,"--",...e]}}var S={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:ru.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:ru["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:As("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:Cs,turnStallHardTimeoutMs:Vm,auditMaxBytes:Ri("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:Ri("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:Ri("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),pairWindowMs:As("VIBE_PAIR_WINDOW_MS",300*1e3),pairReusable:process.env.VIBE_PAIR_REUSABLE==="1",reviewMock:process.env.VIBE_REVIEW_MOCK==="1",get claudePath(){return jm()},get codexPath(){return $m()},isTransientPath:ie,execViaLoginShell:Qm,buildSanitizedEnv:Ze};var bo=require("crypto"),af=require("fs/promises");var wu=require("child_process"),Ps=require("fs");var ks=require("fs"),uu=require("path");var J=require("fs");function Ym(t,e,n,s){let r=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,r,s??i))}function vn(t,e){if(!(0,J.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let s=(0,J.statSync)(t).size,r=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||s+r<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:s,afterBytes:s,reclaimedBytes:0};let i=Ym(s,e.maxBytes,r,e.retainBytes),o=(0,J.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,J.readSync)(o,l,0,i,s-i);let u=0;if(s>i){let c=l.indexOf(10);c>=0&&c+1<l.length&&(u=c+1)}a=l.subarray(u)}return(0,J.ftruncateSync)(o,0),a.length>0&&(0,J.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:s,afterBytes:a.length,reclaimedBytes:s-a.length}}finally{(0,J.closeSync)(o)}}function lu(t){let e=[vn(t.auditPath,{maxBytes:t.auditMaxBytes}),vn(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),vn(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,s)=>n+s.reclaimedBytes,0)}}var cu=!1,Jm=new Set(["ts","event","source","appEvent","level"]);function Km(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Xm(t={}){let e={};for(let[n,s]of Object.entries(t))Jm.has(n)||(e[n]=s);return e}function Zm(t,e,n={},s){return{ts:s??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...Xm(n)}}function ey(){cu||((0,ks.mkdirSync)((0,uu.dirname)(Ct),{recursive:!0}),cu=!0)}var Mi=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,s={},r){this.write(Zm(e,n,s,r))}write(e){if(!Km()){ey();try{let n=JSON.stringify(e)+`
25
+ `;vn(Ct,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,ks.appendFileSync)(Ct,n)}catch{}}}},T=new Mi;var Be=require("fs"),du=require("os"),Sn=require("path"),fu=require("crypto"),Li="claude-hook:",_n="x-vibelet-claude-hook-secret",bn={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function ty(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
- '${Sn}': ${JSON.stringify(e)}
39
+ '${_n}': ${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 Um(t,e){return`#!/usr/bin/env node
46
+ `}function ny(t,e){return`#!/usr/bin/env node
47
47
  const http = require('http');
48
- const fallback = ${JSON.stringify(JSON.stringify(_n))};
48
+ const fallback = ${JSON.stringify(JSON.stringify(bn))};
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
- '${Sn}': ${JSON.stringify(e)}
61
+ '${_n}': ${JSON.stringify(e)}
62
62
  }
63
63
  }, (res) => {
64
64
  const responseChunks = [];
@@ -79,46 +79,46 @@ process.stdin.on('end', () => {
79
79
  req.end(body);
80
80
  });
81
81
  process.stdin.resume();
82
- `}function ru(t,e){let n=(0,vn.join)((0,nu.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,su.randomUUID)()}`);(0,De.mkdirSync)(n,{recursive:!0});let s=(0,vn.join)(n,"settings.json"),r=(0,vn.join)(n,"session_hook_forwarder.cjs"),i=(0,vn.join)(n,"permission_hook_forwarder.cjs");return(0,De.writeFileSync)(r,Hm(t,e),"utf8"),(0,De.writeFileSync)(i,Um(t,e),"utf8"),(0,De.writeFileSync)(s,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(r)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:s,sessionScriptPath:r,permissionScriptPath:i}}function Ts(t){if(t)try{(0,De.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var iu=require("os"),et=require("path"),ou=require("fs/promises"),Wm=new Set([".c",".cc",".cpp",".cs",".css",".dart",".elm",".ex",".exs",".fish",".go",".h",".hpp",".hrl",".java",".js",".jsx",".kt",".kts",".less",".lua",".m",".mm",".mjs",".php",".pl",".ps1",".py",".r",".rb",".rs",".sass",".scala",".scss",".sh",".sql",".swift",".ts",".tsx",".vue",".xml",".yaml",".yml",".zsh"]),qm=5e3,au="Generated file: ",lu=`Generated files:
83
- `;function Rt(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function bn(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function Ci(t){let e=t.trim().replace(/[.,!?;:,。!?;:、]+$/u,""),n=e.indexOf("#");n>0&&(e=e.slice(0,n));let s=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return s?.[1]&&(e=s[1]),e}function tt(t,e){let n=Ci(t);return n?n.startsWith("~/")?(0,et.resolve)((0,iu.homedir)(),n.slice(2)):(0,et.isAbsolute)(n)?n:e?(0,et.resolve)(e,n):n:""}function Gm(t){return Wm.has((0,et.extname)(Ci(t)).toLowerCase())}function Et(t){let e=Ci(t);return e?!Gm(e):!1}function Te(t){let e=[...new Set(t.map(n=>tt(n)).filter(Boolean))];return e.length===0?"":e.length===1?`${au}${e[0]}`:`${lu}${e.join(`
84
- `)}`}function cu(t){return typeof t!="string"?!1:t.startsWith(au)||t.startsWith(lu)}function jm(t,e){let n=t.matchAll(/^\*\*\* Add File: (.+)$/gm),s=new Set;for(let r of n){let i=Rt(r[1]);if(!i)continue;let o=tt(i,e);!o||!Et(o)||s.add(o)}return[...s]}function $m(t){let e=Rt(t);return e?e.toLowerCase():""}function zm(t,e){let n=Rt(t?.file_path)??Rt(t?.path);if(!n)return null;let s=tt(n,e);return s&&Et(s)?s:null}function As(t,e,n){return $m(t)!=="write"?null:zm(e,n)}function Vm(t){let e=t.toLowerCase();return e.includes("updated successfully")||e.includes("updated. all occurrences were successfully replaced")||e.includes("all occurrences were successfully replaced")||e.includes("successfully replaced")}function Qm(t){return/^\d+\t/m.test(t)}function ks(t,e){let n=typeof e=="string"?e.trim():"";if(n&&Vm(n))return!1;let s=bn(t);if(s?.type==="update"||s?.type==="replace"||s&&(Object.hasOwn(s,"oldString")||Object.hasOwn(s,"structuredPatch")||Object.hasOwn(s,"originalFile")||Object.hasOwn(s,"replaceAll")))return!1;if(typeof bn(s?.file)?.filePath=="string"||typeof s?.filePath=="string")return!0;if(n){let i=n.toLowerCase();if(i.includes("created successfully")||i.includes("has been created")||Qm(n))return!0}return!1}function xi(t,e){let n=bn(t);if(!n)return[];let s=new Set;if(n.type==="event_msg"){let r=bn(n.payload);if(r?.type==="image_generation_end"){let i=Rt(r.saved_path);if(i){let o=tt(i,e?.cwd);o&&Et(o)&&s.add(o)}}}if(e?.includePatchCalls&&n.type==="response_item"){let r=bn(n.payload);if(r?.type==="function_call"&&r.name==="apply_patch"){let i=Rt(r.arguments);if(i)for(let o of jm(i,e?.cwd))s.add(o)}}return[...s]}async function uu(t,e){let n=[...new Set(t.map(r=>tt(r)).filter(Boolean))],s=[];for(let r of n)if(Et(r))try{let i=await(0,ou.stat)(r);if(Math.max(i.birthtimeMs||0,i.ctimeMs||0,i.mtimeMs||0)+qm<e)continue;s.push(r)}catch{}return s}var oe=N.child({module:"claude"}),hu="claude-permission-denial:",Ym=/\u001B\[[0-?]*[ -/]*[@-~]/g;function Jm(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function Ri(t){Jm()&&Ss(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
85
- `)}function Km(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(`
86
- `):""}function Xm(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function Zm(t){if(typeof t=="string")return t;let e=Km(t);return e||(Xm(t)?"":JSON.stringify(t))}function ey(t){return/requested permissions|haven't granted/i.test(t)}function du(t){return t.replace(Ym,"").replace(/\s+/g," ").trim()}function ty(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function ny(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 sy(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function fu(t){let e=du(t.resultText??""),n=(t.stderrLines??[]).map(du).filter(Boolean).slice(-3),s=[e,...n].find(i=>!!i&&ny(i));if(s)return sy(s);let r=[e,...n].find(i=>!!i&&!ty(i));return r?t.exitCode!=null&&r!==e?`Claude exited with code ${t.exitCode}: ${r}`:r:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function xs(t){return t.startsWith(hu)}var wn=class{proc=null;handler=null;sessionId="";buffer="";cwd="";approvalMode;sawFinalResult=!1;interrupted=!1;exitHandler=null;lastStderr=[];pendingPermissionDescriptions=new Map;emittedToolCallIds=new Set;toolCallContext=new Map;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,s){return this.cwd=e,this.approvalMode=s,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),oe.info({sessionId:this.sessionId,cwd:e},"session initialized"),T.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 s=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];n&&s.push("--model",n),this.sessionId&&!this.sessionId.startsWith("pending_")&&s.push("--resume",this.sessionId),Ts(this.hookFiles),this.hookFiles=null,this.approvalMode!=="plan"&&this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=ru(this.hookPort,this.hookSecret),s.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="plan"&&s.push("--permission-mode","plan"),this.approvalMode==="acceptEdits"&&s.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&s.push("--dangerously-skip-permissions");let r=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;oe.info({sessionId:this.sessionId,label:r,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.toolCallContext.clear(),this.replayPhase=!0;let i=S.claudePath,o,a=s;if(S.isTransientPath(i)||i==="claude"){let u=S.execViaLoginShell("claude",s);o=u.command,a=u.args}else o=i;this.proc=(0,pu.spawn)(o,a,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv(),...process.platform==="win32"?{shell:!0,windowsHide:!0}:{}}),this.proc.on("error",u=>{let c=u.message;u.code==="ENOENT"&&this.cwd&&!(0,Cs.existsSync)(this.cwd)&&(c=`Working directory does not exist: ${this.cwd}`),oe.error({sessionId:this.sessionId,error:c,cwd:this.cwd},"spawn error"),T.emit("driver.error",{agent:"claude",sessionId:this.sessionId,error:c}),this.handler?.({type:"error",sessionId:this.sessionId,message:c})}),this.buffer="",this.proc.stdout.on("data",u=>{this.buffer+=u.toString();let c=this.buffer.split(`
87
- `);this.buffer=c.pop();for(let d of c)if(d.trim())try{this.handleRaw(JSON.parse(d))}catch{oe.warn({sessionId:this.sessionId,linePreview:d.slice(0,100)},"failed to parse stdout line")}}),this.proc.stderr.on("data",u=>{let c=u.toString().trim();c&&(oe.debug({sessionId:this.sessionId,stderr:c},"stderr"),this.lastStderr.push(c),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(u,c)=>{oe.info({sessionId:this.sessionId,exitCode:u,signal:c},"process exited");let d=this.interrupted;this.proc=null,Ts(this.hookFiles),this.hookFiles=null,this.interrupted=!1,this.toolCallContext.clear(),d&&!this.sawFinalResult?this.handler?.({type:"session.interrupted",sessionId:this.sessionId}):u&&u!==0&&!this.sawFinalResult&&(oe.error({sessionId:this.sessionId,exitCode:u,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:fu({stderrLines:this.lastStderr,exitCode:u})})),this.exitHandler?.(u)})}respondApproval(e,n){if(oe.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return oe.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let s=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(s+`
88
- `),!0}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}setApprovalMode(e){this.approvalMode=e,oe.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),oe.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,Ts(this.hookFiles),this.hookFiles=null,this.toolCallContext.clear()}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}handleRaw(e){let n=e.type;if(n==="system"&&e.subtype==="init"){let s=e.session_id??"";s&&s!==this.sessionId&&(oe.info({oldSessionId:this.sessionId,newSessionId:s},"session ID resolved"),T.emit("driver.init",{agent:"claude",sessionId:s}),this.sessionId=s);return}if(this.handler)switch(n){case"assistant":{if(this.replayPhase)break;let s=e.message?.content;if(!Array.isArray(s))break;for(let r of s)if(r.type==="tool_use"&&!this.emittedToolCallIds.has(r.id)){this.emittedToolCallIds.add(r.id);let i=r.input??{},o=As(r.name,i,this.cwd);this.toolCallContext.set(r.id,{toolName:r.name,...o?{generatedFilePath:o,fileExistedAtStart:(0,Cs.existsSync)(o)}:{}}),this.handler({type:"tool.call",sessionId:this.sessionId,toolName:r.name,input:i,toolCallId:r.id})}break}case"user":{if(this.replayPhase)break;let s=e.message?.content;if(!Array.isArray(s))break;for(let r of s)if(r.type==="tool_result"){let i=typeof r.tool_use_id=="string"?r.tool_use_id:"",o=i?this.toolCallContext.get(i):void 0,a=Zm(r.content);if(!r.is_error&&o?.generatedFilePath&&o.fileExistedAtStart===!1&&(0,Cs.existsSync)(o.generatedFilePath)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}else if(!r.is_error&&o?.generatedFilePath&&o.fileExistedAtStart==null&&ks(e.toolUseResult,a)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}if(!a){i&&this.toolCallContext.delete(i);continue}if(r.is_error===!0&&i&&ey(a)){this.pendingPermissionDescriptions.set(i,a);continue}this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:a}),i&&this.toolCallContext.delete(i)}break}case"control_request":{this.replayPhase=!1;let s=e.request;s?.subtype==="can_use_tool"&&(T.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:s.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:s.tool_name??"unknown",input:s.input??{},description:s.description??s.title??""}));break}case"stream_event":{this.replayPhase=!1;let s=e.event;s?.type==="content_block_delta"&&s?.delta?.type==="text_delta"&&s?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:s.delta.text});break}case"result":{this.replayPhase=!1,this.sawFinalResult=!0;let s=typeof e.result=="string"?e.result:"";if(e.is_error){Ri("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:fu({resultText:s,stderrLines:this.lastStderr})});break}let r=Array.isArray(e.permission_denials)?e.permission_denials:[];if(r.length>0){let a=r[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,u=typeof a.tool_name=="string"?a.tool_name:"unknown",c=a.tool_input&&typeof a.tool_input=="object"?a.tool_input:{},d=this.pendingPermissionDescriptions.get(l)??`Claude requested permissions to use ${u}.`;T.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:u}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${hu}${l}`,toolName:u,input:c,description:d})}this.pendingPermissionDescriptions.clear();let i=e.total_cost_usd,o=e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens,...Number.isFinite(e.usage.cache_creation_input_tokens)?{cacheCreationInputTokens:e.usage.cache_creation_input_tokens}:{},...Number.isFinite(e.usage.cache_read_input_tokens)?{cacheReadInputTokens:e.usage.cache_read_input_tokens}:{}}:void 0;Ri("Claude finished. Run `claude --continue` to continue on desktop."),T.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 vu=require("child_process"),Su=require("fs");var Ei=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 s=this.counters.get(e),r=JSON.stringify(n),i=s.find(o=>JSON.stringify(o.labels)===r);i?i.value++:s.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let s=Math.round(performance.now()-n),r=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return r.count++,r.totalMs+=s,r.minMs=Math.min(r.minMs,s),r.maxMs=Math.max(r.maxMs,s),r.lastMs=s,this.timers.set(e,r),s}}snapshot(){let e={};for(let[r,i]of this.counters)e[r]=i.map(o=>({...o}));let n={};for(let[r,i]of this.timers)n[r]={...i,minMs:i.minMs===1/0?0:i.minMs};let s={};for(let[r,i]of this.gauges)s[r]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:s}}startPeriodicLog(e=6e4){this.logInterval||(this.logInterval=setInterval(()=>{let n=this.snapshot();N.info({metrics:n},"periodic metrics snapshot")},e),this.logInterval.unref())}stopPeriodicLog(){this.logInterval&&(clearInterval(this.logInterval),this.logInterval=null)}},b=new Ei;var gu=require("node:fs"),Pi=require("node:path"),ry="@vibelet/cli";function iy(t){try{let e=JSON.parse((0,gu.readFileSync)(t,"utf8"));if(e.name===ry&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function oy(){return"1.0.26"}var Pt=oy();var P=N.child({module:"codex"});function ay(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 ly(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 M(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function Mi(t){let e=Number(t);return!Number.isFinite(e)||e<=0?null:Math.trunc(e)}var cy=new Set(["aborted","interrupted","cancelled","canceled"]);function uy(t){let e=M(t);return e?e.toLowerCase():null}function dy(t){let e=M(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function Li(t){return t?M(t.itemId)??M(t.id)??M(t.callId)??M(t.call_id):null}function Ni(t,e){let n={};for(let[s,r]of Object.entries(t))e.includes(s)||(n[s]=r);return n}function _u(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function bu(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function fy(t){if(!Array.isArray(t))return null;for(let e of t){let n=$(e);if(!n)continue;let s=M(n.id),r=Array.isArray(n.options)?n.options.map(l=>$(l)).filter(l=>!!l):[];if(!s||r.length===0)continue;let i=r.map(l=>M(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>_u(l))??i[0],a=i.find(l=>bu(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:s,approveLabel:o,denyLabel:a}}return null}function py(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(r=>$(r)).filter(r=>!!r).flatMap(r=>(Array.isArray(r.options)?r.options:[]).map(o=>$(o)).filter(o=>!!o).map(o=>M(o.label)).filter(o=>!!o)),n=e.some(r=>_u(r)),s=e.some(r=>bu(r));return n&&s}function mu(t){let e=dy(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:Ni(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:Ni(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=M(t.server),s=M(t.tool)??M(t.name);return s?{toolName:n?`mcp__${n}__${s}`:s,input:$(t.arguments)??$(t.input)??{}}:null}return null}function hy(t,e){let n=M(t.path);if(!n||!(Array.isArray(t.changes)?t.changes:[]).some(o=>$(o)?.kind==="create"))return null;let i=tt(n,e);return Et(i)?i:null}function gy(t){if(!Array.isArray(t))return"";for(let e of t){let n=$(e);if(!n)continue;let s=M(n.question)??M(n.header);if(s)return s}return""}function my(t){let e=$(t);if(!e)return;let n=Mi(e.input_tokens??e.inputTokens)??0,s=Mi(e.output_tokens??e.outputTokens)??0,r=Mi(e.modelContextWindow??e.model_context_window??e.contextWindowTokens);if(!(n<=0&&s<=0&&!r))return{inputTokens:n,outputTokens:s,...r?{contextWindowTokens:r}:{}}}function yu(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 In=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;latestTurnUsage;approvalMode;cwd="";model;async start(e,n,s){this.approvalMode=s,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let r=S.codexPath,i,o=this.buildSpawnArgs();if(S.isTransientPath(r)||r==="codex"){let c=S.execViaLoginShell("codex",o);i=c.command,o=c.args,P.info({spawnCmd:i,argsPreview:o.slice(0,2)},"spawning via login shell")}else i=r,P.info({spawnCmd:i,args:o},"spawning");T.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,vu.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:S.buildSanitizedEnv(),...process.platform==="win32"?{shell:!0,windowsHide:!0}:{}}),this.proc.on("error",c=>{let d=c.message;c.code==="ENOENT"&&e&&!(0,Su.existsSync)(e)&&(d=`Working directory does not exist: ${e}`),P.error({error:d,cwd:e},"spawn error"),T.emit("driver.error",{agent:"codex",error:d})}),this.proc.stdout.on("data",c=>{this.buffer+=c.toString();let d=this.buffer.split(`
89
- `);this.buffer=d.pop();for(let f of d)if(f.trim())try{this.handleRaw(JSON.parse(f))}catch{P.warn({linePreview:f.slice(0,200)},"failed to parse stdout line")}}),this.proc.stderr.on("data",c=>{let d=c.toString().trim();d&&(P.debug({stderr:d},"stderr"),this.lastStderr.push(d),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",c=>{P.info({threadId:this.threadId,exitCode:c},"process exited"),c&&c!==0&&P.error({threadId:this.threadId,exitCode:c,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 ${c}`));this.pending.clear(),this.exitHandler?.(c),c&&this.handler&&this.threadId&&this.handler({type:"error",sessionId:this.threadId,message:`Codex process exited with code ${c}`})});let l=b.startTimer("rpc.duration");await this.rpc("initialize",{clientInfo:{name:"@vibelet/cli",version:Pt},capabilities:{experimentalApi:!0}}),l(),this.rpcNotify("initialized",{});let u=yu(this.approvalMode,e);if(n){let c=await this.rpc("thread/resume",{threadId:n,approvalPolicy:u.approvalPolicy,sandbox:u.sandbox,persistExtendedHistory:!0});this.threadId=c?.thread?.id??n,P.info({threadId:this.threadId},"thread resumed"),T.emit("driver.init",{agent:"codex",sessionId:this.threadId})}else{let c=await this.rpc("thread/start",{cwd:e,approvalPolicy:u.approvalPolicy,sandbox:u.sandbox,experimentalRawEvents:!0,persistExtendedHistory:!0});this.threadId=c?.thread?.id??c?.threadId??"",P.info({threadId:this.threadId},"thread created"),T.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 s=yu(this.approvalMode,this.cwd||process.cwd());this.latestTurnUsage=void 0,this.turnStartInFlight=!0,this.interruptRequestedDuringTurnStart=!1,P.info({threadId:this.threadId,promptPreview:e.slice(0,50)},"turn/start"),this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}],approvalPolicy:s.approvalPolicy,sandboxPolicy:s.sandboxPolicy,...n?{model:n}:{}}).then(r=>{P.debug({resultPreview:JSON.stringify(r).slice(0,200)},"turn/start result"),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart&&(this.interruptRequestedDuringTurnStart=!1,this.requestTurnInterrupt())}).catch(r=>{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,P.error({threadId:this.threadId,error:r.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:r.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let s=this.approvalRequests.get(e),r=s?.rpcId??Number(e);if(!Number.isFinite(r))return!1;let i;if(!s)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(s.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[s.questionId]:{answers:[n?s.approveLabel:s.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 P.info({threadId:this.threadId,rpcId:r,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:r,result:i})+`
90
- `),!0}restorePendingApproval(e){let n=ly(e);n&&this.approvalRequests.set(e.requestId,n)}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}interrupt(){this.turnStartInFlight&&(this.interruptRequestedDuringTurnStart=!0),this.requestTurnInterrupt()}setApprovalMode(e){this.approvalMode=e,P.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,this.latestTurnUsage=void 0;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 s=++this.rpcId,r=b.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(s,{resolve:a=>{r(),i(a)},reject:a=>{r(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(s),r(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:s,params:n})+`
82
+ `}function pu(t,e){let n=(0,Sn.join)((0,du.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,fu.randomUUID)()}`);(0,Be.mkdirSync)(n,{recursive:!0});let s=(0,Sn.join)(n,"settings.json"),r=(0,Sn.join)(n,"session_hook_forwarder.cjs"),i=(0,Sn.join)(n,"permission_hook_forwarder.cjs");return(0,Be.writeFileSync)(r,ty(t,e),"utf8"),(0,Be.writeFileSync)(i,ny(t,e),"utf8"),(0,Be.writeFileSync)(s,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(r)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:s,sessionScriptPath:r,permissionScriptPath:i}}function xs(t){if(t)try{(0,Be.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var hu=require("os"),et=require("path"),gu=require("fs/promises"),sy=new Set([".c",".cc",".cpp",".cs",".css",".dart",".elm",".ex",".exs",".fish",".go",".h",".hpp",".hrl",".java",".js",".jsx",".kt",".kts",".less",".lua",".m",".mm",".mjs",".php",".pl",".ps1",".py",".r",".rb",".rs",".sass",".scala",".scss",".sh",".sql",".swift",".ts",".tsx",".vue",".xml",".yaml",".yml",".zsh"]),ry=5e3,mu="Generated file: ",yu=`Generated files:
83
+ `;function Rt(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function wn(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function Ni(t){let e=t.trim().replace(/[.,!?;:,。!?;:、]+$/u,""),n=e.indexOf("#");n>0&&(e=e.slice(0,n));let s=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return s?.[1]&&(e=s[1]),e}function tt(t,e){let n=Ni(t);return n?n.startsWith("~/")?(0,et.resolve)((0,hu.homedir)(),n.slice(2)):(0,et.isAbsolute)(n)?n:e?(0,et.resolve)(e,n):n:""}function iy(t){return sy.has((0,et.extname)(Ni(t)).toLowerCase())}function Et(t){let e=Ni(t);return e?!iy(e):!1}function Te(t){let e=[...new Set(t.map(n=>tt(n)).filter(Boolean))];return e.length===0?"":e.length===1?`${mu}${e[0]}`:`${yu}${e.join(`
84
+ `)}`}function vu(t){return typeof t!="string"?!1:t.startsWith(mu)||t.startsWith(yu)}function oy(t,e){let n=t.matchAll(/^\*\*\* Add File: (.+)$/gm),s=new Set;for(let r of n){let i=Rt(r[1]);if(!i)continue;let o=tt(i,e);!o||!Et(o)||s.add(o)}return[...s]}function ay(t){let e=Rt(t);return e?e.toLowerCase():""}function ly(t,e){let n=Rt(t?.file_path)??Rt(t?.path);if(!n)return null;let s=tt(n,e);return s&&Et(s)?s:null}function Rs(t,e,n){return ay(t)!=="write"?null:ly(e,n)}function cy(t){let e=t.toLowerCase();return e.includes("updated successfully")||e.includes("updated. all occurrences were successfully replaced")||e.includes("all occurrences were successfully replaced")||e.includes("successfully replaced")}function uy(t){return/^\d+\t/m.test(t)}function Es(t,e){let n=typeof e=="string"?e.trim():"";if(n&&cy(n))return!1;let s=wn(t);if(s?.type==="update"||s?.type==="replace"||s&&(Object.hasOwn(s,"oldString")||Object.hasOwn(s,"structuredPatch")||Object.hasOwn(s,"originalFile")||Object.hasOwn(s,"replaceAll")))return!1;if(typeof wn(s?.file)?.filePath=="string"||typeof s?.filePath=="string")return!0;if(n){let i=n.toLowerCase();if(i.includes("created successfully")||i.includes("has been created")||uy(n))return!0}return!1}function Oi(t,e){let n=wn(t);if(!n)return[];let s=new Set;if(n.type==="event_msg"){let r=wn(n.payload);if(r?.type==="image_generation_end"){let i=Rt(r.saved_path);if(i){let o=tt(i,e?.cwd);o&&Et(o)&&s.add(o)}}}if(e?.includePatchCalls&&n.type==="response_item"){let r=wn(n.payload);if(r?.type==="function_call"&&r.name==="apply_patch"){let i=Rt(r.arguments);if(i)for(let o of oy(i,e?.cwd))s.add(o)}}return[...s]}async function Su(t,e){let n=[...new Set(t.map(r=>tt(r)).filter(Boolean))],s=[];for(let r of n)if(Et(r))try{let i=await(0,gu.stat)(r);if(Math.max(i.birthtimeMs||0,i.ctimeMs||0,i.mtimeMs||0)+ry<e)continue;s.push(r)}catch{}return s}var oe=M.child({module:"claude"}),Iu="claude-permission-denial:",dy=/\u001B\[[0-?]*[ -/]*[@-~]/g;function fy(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function Di(t){fy()&&Is(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
85
+ `)}function py(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(`
86
+ `):""}function hy(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function gy(t){if(typeof t=="string")return t;let e=py(t);return e||(hy(t)?"":JSON.stringify(t))}function my(t){return/requested permissions|haven't granted/i.test(t)}function _u(t){return t.replace(dy,"").replace(/\s+/g," ").trim()}function yy(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function vy(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 Sy(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function bu(t){let e=_u(t.resultText??""),n=(t.stderrLines??[]).map(_u).filter(Boolean).slice(-3),s=[e,...n].find(i=>!!i&&vy(i));if(s)return Sy(s);let r=[e,...n].find(i=>!!i&&!yy(i));return r?t.exitCode!=null&&r!==e?`Claude exited with code ${t.exitCode}: ${r}`:r:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function Ms(t){return t.startsWith(Iu)}var In=class{proc=null;handler=null;sessionId="";buffer="";cwd="";approvalMode;sawFinalResult=!1;interrupted=!1;exitHandler=null;lastStderr=[];pendingPermissionDescriptions=new Map;emittedToolCallIds=new Set;toolCallContext=new Map;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,s){return this.cwd=e,this.approvalMode=s,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),oe.info({sessionId:this.sessionId,cwd:e},"session initialized"),T.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 s=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];n&&s.push("--model",n),this.sessionId&&!this.sessionId.startsWith("pending_")&&s.push("--resume",this.sessionId),xs(this.hookFiles),this.hookFiles=null,this.approvalMode!=="plan"&&this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=pu(this.hookPort,this.hookSecret),s.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="plan"&&s.push("--permission-mode","plan"),this.approvalMode==="acceptEdits"&&s.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&s.push("--dangerously-skip-permissions");let r=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;oe.info({sessionId:this.sessionId,label:r,promptPreview:e.slice(0,50)},"running claude"),Di(`New message: ${e.slice(0,60)}`),this.sawFinalResult=!1,this.interrupted=!1,this.lastStderr=[],this.pendingPermissionDescriptions.clear(),this.emittedToolCallIds.clear(),this.toolCallContext.clear(),this.replayPhase=!0;let i=S.claudePath,o,a=s;if(S.isTransientPath(i)||i==="claude"){let u=S.execViaLoginShell("claude",s);o=u.command,a=u.args}else o=i;this.proc=(0,wu.spawn)(o,a,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv(),...process.platform==="win32"?{shell:!0,windowsHide:!0}:{}}),this.proc.on("error",u=>{let c=u.message;u.code==="ENOENT"&&this.cwd&&!(0,Ps.existsSync)(this.cwd)&&(c=`Working directory does not exist: ${this.cwd}`),oe.error({sessionId:this.sessionId,error:c,cwd:this.cwd},"spawn error"),T.emit("driver.error",{agent:"claude",sessionId:this.sessionId,error:c}),this.handler?.({type:"error",sessionId:this.sessionId,message:c})}),this.buffer="",this.proc.stdout.on("data",u=>{this.buffer+=u.toString();let c=this.buffer.split(`
87
+ `);this.buffer=c.pop();for(let d of c)if(d.trim())try{this.handleRaw(JSON.parse(d))}catch{oe.warn({sessionId:this.sessionId,linePreview:d.slice(0,100)},"failed to parse stdout line")}}),this.proc.stderr.on("data",u=>{let c=u.toString().trim();c&&(oe.debug({sessionId:this.sessionId,stderr:c},"stderr"),this.lastStderr.push(c),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(u,c)=>{oe.info({sessionId:this.sessionId,exitCode:u,signal:c},"process exited");let d=this.interrupted;this.proc=null,xs(this.hookFiles),this.hookFiles=null,this.interrupted=!1,this.toolCallContext.clear(),d&&!this.sawFinalResult?this.handler?.({type:"session.interrupted",sessionId:this.sessionId}):u&&u!==0&&!this.sawFinalResult&&(oe.error({sessionId:this.sessionId,exitCode:u,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:bu({stderrLines:this.lastStderr,exitCode:u})})),this.exitHandler?.(u)})}respondApproval(e,n){if(oe.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return oe.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let s=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(s+`
88
+ `),!0}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}setApprovalMode(e){this.approvalMode=e,oe.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),oe.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,xs(this.hookFiles),this.hookFiles=null,this.toolCallContext.clear()}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}handleRaw(e){let n=e.type;if(n==="system"&&e.subtype==="init"){let s=e.session_id??"";s&&s!==this.sessionId&&(oe.info({oldSessionId:this.sessionId,newSessionId:s},"session ID resolved"),T.emit("driver.init",{agent:"claude",sessionId:s}),this.sessionId=s);return}if(this.handler)switch(n){case"assistant":{if(this.replayPhase)break;let s=e.message?.content;if(!Array.isArray(s))break;for(let r of s)if(r.type==="tool_use"&&!this.emittedToolCallIds.has(r.id)){this.emittedToolCallIds.add(r.id);let i=r.input??{},o=Rs(r.name,i,this.cwd);this.toolCallContext.set(r.id,{toolName:r.name,...o?{generatedFilePath:o,fileExistedAtStart:(0,Ps.existsSync)(o)}:{}}),this.handler({type:"tool.call",sessionId:this.sessionId,toolName:r.name,input:i,toolCallId:r.id})}break}case"user":{if(this.replayPhase)break;let s=e.message?.content;if(!Array.isArray(s))break;for(let r of s)if(r.type==="tool_result"){let i=typeof r.tool_use_id=="string"?r.tool_use_id:"",o=i?this.toolCallContext.get(i):void 0,a=gy(r.content);if(!r.is_error&&o?.generatedFilePath&&o.fileExistedAtStart===!1&&(0,Ps.existsSync)(o.generatedFilePath)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}else if(!r.is_error&&o?.generatedFilePath&&o.fileExistedAtStart==null&&Es(e.toolUseResult,a)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}if(!a){i&&this.toolCallContext.delete(i);continue}if(r.is_error===!0&&i&&my(a)){this.pendingPermissionDescriptions.set(i,a);continue}this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:a}),i&&this.toolCallContext.delete(i)}break}case"control_request":{this.replayPhase=!1;let s=e.request;s?.subtype==="can_use_tool"&&(T.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:s.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:s.tool_name??"unknown",input:s.input??{},description:s.description??s.title??""}));break}case"stream_event":{this.replayPhase=!1;let s=e.event;s?.type==="content_block_delta"&&s?.delta?.type==="text_delta"&&s?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:s.delta.text});break}case"result":{this.replayPhase=!1,this.sawFinalResult=!0;let s=typeof e.result=="string"?e.result:"";if(e.is_error){Di("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:bu({resultText:s,stderrLines:this.lastStderr})});break}let r=Array.isArray(e.permission_denials)?e.permission_denials:[];if(r.length>0){let a=r[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,u=typeof a.tool_name=="string"?a.tool_name:"unknown",c=a.tool_input&&typeof a.tool_input=="object"?a.tool_input:{},d=this.pendingPermissionDescriptions.get(l)??`Claude requested permissions to use ${u}.`;T.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:u}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${Iu}${l}`,toolName:u,input:c,description:d})}this.pendingPermissionDescriptions.clear();let i=e.total_cost_usd,o=e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens,...Number.isFinite(e.usage.cache_creation_input_tokens)?{cacheCreationInputTokens:e.usage.cache_creation_input_tokens}:{},...Number.isFinite(e.usage.cache_read_input_tokens)?{cacheReadInputTokens:e.usage.cache_read_input_tokens}:{}}:void 0;Di("Claude finished. Run `claude --continue` to continue on desktop."),T.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 ku=require("child_process"),xu=require("fs");var Bi=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 s=this.counters.get(e),r=JSON.stringify(n),i=s.find(o=>JSON.stringify(o.labels)===r);i?i.value++:s.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let s=Math.round(performance.now()-n),r=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return r.count++,r.totalMs+=s,r.minMs=Math.min(r.minMs,s),r.maxMs=Math.max(r.maxMs,s),r.lastMs=s,this.timers.set(e,r),s}}snapshot(){let e={};for(let[r,i]of this.counters)e[r]=i.map(o=>({...o}));let n={};for(let[r,i]of this.timers)n[r]={...i,minMs:i.minMs===1/0?0:i.minMs};let s={};for(let[r,i]of this.gauges)s[r]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:s}}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)}},_=new Bi;var Tu=require("node:fs"),Fi=require("node:path"),_y="@vibelet/cli";function by(t){try{let e=JSON.parse((0,Tu.readFileSync)(t,"utf8"));if(e.name===_y&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function wy(){return"1.1.0"}var Pt=wy();var P=M.child({module:"codex"});function Iy(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 Ty(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 L(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function Hi(t){let e=Number(t);return!Number.isFinite(e)||e<=0?null:Math.trunc(e)}var Ay=new Set(["aborted","interrupted","cancelled","canceled"]);function Cy(t){let e=L(t);return e?e.toLowerCase():null}function ky(t){let e=L(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function Ui(t){return t?L(t.itemId)??L(t.id)??L(t.callId)??L(t.call_id):null}function Wi(t,e){let n={};for(let[s,r]of Object.entries(t))e.includes(s)||(n[s]=r);return n}function Ru(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function Eu(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function xy(t){if(!Array.isArray(t))return null;for(let e of t){let n=$(e);if(!n)continue;let s=L(n.id),r=Array.isArray(n.options)?n.options.map(l=>$(l)).filter(l=>!!l):[];if(!s||r.length===0)continue;let i=r.map(l=>L(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>Ru(l))??i[0],a=i.find(l=>Eu(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:s,approveLabel:o,denyLabel:a}}return null}function Ry(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(r=>$(r)).filter(r=>!!r).flatMap(r=>(Array.isArray(r.options)?r.options:[]).map(o=>$(o)).filter(o=>!!o).map(o=>L(o.label)).filter(o=>!!o)),n=e.some(r=>Ru(r)),s=e.some(r=>Eu(r));return n&&s}function Au(t){let e=ky(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:Wi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:Wi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=L(t.server),s=L(t.tool)??L(t.name);return s?{toolName:n?`mcp__${n}__${s}`:s,input:$(t.arguments)??$(t.input)??{}}:null}return null}function Ey(t,e){let n=L(t.path);if(!n||!(Array.isArray(t.changes)?t.changes:[]).some(o=>$(o)?.kind==="create"))return null;let i=tt(n,e);return Et(i)?i:null}function Py(t){if(!Array.isArray(t))return"";for(let e of t){let n=$(e);if(!n)continue;let s=L(n.question)??L(n.header);if(s)return s}return""}function My(t){let e=$(t);if(!e)return;let n=Hi(e.input_tokens??e.inputTokens)??0,s=Hi(e.output_tokens??e.outputTokens)??0,r=Hi(e.modelContextWindow??e.model_context_window??e.contextWindowTokens);if(!(n<=0&&s<=0&&!r))return{inputTokens:n,outputTokens:s,...r?{contextWindowTokens:r}:{}}}function Cu(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 Tn=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;latestTurnUsage;approvalMode;cwd="";model;async start(e,n,s){this.approvalMode=s,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let r=S.codexPath,i,o=this.buildSpawnArgs();if(S.isTransientPath(r)||r==="codex"){let c=S.execViaLoginShell("codex",o);i=c.command,o=c.args,P.info({spawnCmd:i,argsPreview:o.slice(0,2)},"spawning via login shell")}else i=r,P.info({spawnCmd:i,args:o},"spawning");T.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,ku.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:S.buildSanitizedEnv(),...process.platform==="win32"?{shell:!0,windowsHide:!0}:{}}),this.proc.on("error",c=>{let d=c.message;c.code==="ENOENT"&&e&&!(0,xu.existsSync)(e)&&(d=`Working directory does not exist: ${e}`),P.error({error:d,cwd:e},"spawn error"),T.emit("driver.error",{agent:"codex",error:d})}),this.proc.stdout.on("data",c=>{this.buffer+=c.toString();let d=this.buffer.split(`
89
+ `);this.buffer=d.pop();for(let f of d)if(f.trim())try{this.handleRaw(JSON.parse(f))}catch{P.warn({linePreview:f.slice(0,200)},"failed to parse stdout line")}}),this.proc.stderr.on("data",c=>{let d=c.toString().trim();d&&(P.debug({stderr:d},"stderr"),this.lastStderr.push(d),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",c=>{P.info({threadId:this.threadId,exitCode:c},"process exited"),c&&c!==0&&P.error({threadId:this.threadId,exitCode:c,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 ${c}`));this.pending.clear(),this.exitHandler?.(c),c&&this.handler&&this.threadId&&this.handler({type:"error",sessionId:this.threadId,message:`Codex process exited with code ${c}`})});let l=_.startTimer("rpc.duration");await this.rpc("initialize",{clientInfo:{name:"@vibelet/cli",version:Pt},capabilities:{experimentalApi:!0}}),l(),this.rpcNotify("initialized",{});let u=Cu(this.approvalMode,e);if(n){let c=await this.rpc("thread/resume",{threadId:n,approvalPolicy:u.approvalPolicy,sandbox:u.sandbox,persistExtendedHistory:!0});this.threadId=c?.thread?.id??n,P.info({threadId:this.threadId},"thread resumed"),T.emit("driver.init",{agent:"codex",sessionId:this.threadId})}else{let c=await this.rpc("thread/start",{cwd:e,approvalPolicy:u.approvalPolicy,sandbox:u.sandbox,experimentalRawEvents:!0,persistExtendedHistory:!0});this.threadId=c?.thread?.id??c?.threadId??"",P.info({threadId:this.threadId},"thread created"),T.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 s=Cu(this.approvalMode,this.cwd||process.cwd());this.latestTurnUsage=void 0,this.turnStartInFlight=!0,this.interruptRequestedDuringTurnStart=!1,P.info({threadId:this.threadId,promptPreview:e.slice(0,50)},"turn/start"),this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}],approvalPolicy:s.approvalPolicy,sandboxPolicy:s.sandboxPolicy,...n?{model:n}:{}}).then(r=>{P.debug({resultPreview:JSON.stringify(r).slice(0,200)},"turn/start result"),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart&&(this.interruptRequestedDuringTurnStart=!1,this.requestTurnInterrupt())}).catch(r=>{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,P.error({threadId:this.threadId,error:r.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:r.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let s=this.approvalRequests.get(e),r=s?.rpcId??Number(e);if(!Number.isFinite(r))return!1;let i;if(!s)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(s.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[s.questionId]:{answers:[n?s.approveLabel:s.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 P.info({threadId:this.threadId,rpcId:r,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:r,result:i})+`
90
+ `),!0}restorePendingApproval(e){let n=Ty(e);n&&this.approvalRequests.set(e.requestId,n)}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}interrupt(){this.turnStartInFlight&&(this.interruptRequestedDuringTurnStart=!0),this.requestTurnInterrupt()}setApprovalMode(e){this.approvalMode=e,P.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,this.latestTurnUsage=void 0;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 s=++this.rpcId,r=_.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(s,{resolve:a=>{r(),i(a)},reject:a=>{r(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(s),r(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:s,params:n})+`
91
91
  `),setTimeout(()=>{this.pending.has(s)&&(this.pending.delete(s),P.error({method:e,rpcId:s,threadId:this.threadId},"RPC timeout"),r(),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})+`
92
92
  `)}writeServerRequestError(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:e,error:{code:-32601,message:n}})+`
93
- `)}resolveToolContext(e){let n=$(e?.item)??e??null,s=Li(n);if(!s)return null;let r=n?mu(n):null;if(r)return this.toolContextByCallId.set(s,r),{callId:s,toolContext:r};let i=this.toolContextByCallId.get(s);return i?{callId:s,toolContext:i}:null}createFallbackInput(e,n){return e?Ni(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,s){if(this.approvalRequests.set(e,n),T.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){P.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:s,approvalContext:ay(n)})}handleServerRequest(e,n,s){let r=String(n),i=this.resolveToolContext(s);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(r,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(s,["itemId","reason","description"])},M(s?.reason)??M(s?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(r,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(s,["itemId","reason","description"])},M(s?.reason)??M(s?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=s?.questions;if(!py(o)){P.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=fy(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(r,{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(s,["itemId","questions"])},gy(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(r,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(s,[])},M(s?.reason)??M(s?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(r,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(s,[])},M(s?.reason)??M(s?.description)??"");return}if(e==="item/permissions/requestApproval"){P.warn({threadId:this.threadId,rpcId:n},"unsupported permissions approval request"),this.writeServerRequestError(n,"Unsupported permissions approval request");return}P.warn({threadId:this.threadId,rpcId:n,method:e},"unsupported server request"),this.writeServerRequestError(n,`Unsupported server request: ${e}`)}handleRaw(e){if(P.debug({method:e.method??"(response)",rpcId:e.id??"-"},"handleRaw"),e.id!=null&&!e.method&&this.pending.has(e.id)){let r=this.pending.get(e.id);this.pending.delete(e.id),e.error?r.reject(new Error(e.error.message??"RPC error")):r.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,s=$(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,s??void 0);return}switch(n&&P.debug({method:n,paramsPreview:JSON.stringify(s??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let r=s?.text??s?.delta??s?.content??"";r&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:r}):r||P.debug({paramsKeys:Object.keys(s??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":s?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:s.itemId??"",output:String(s.output)});break;case"item/started":{let r=$(s?.item),i=Li(r),o=r?mu(r):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 r=$(s?.item)??s,i=Li(r),o=i?this.toolContextByCallId.get(i):null;if(i&&o?.toolName==="Patch"&&this.handler){let a=hy(o.input,this.cwd);if(a){let l=Te([a]);l&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:i,output:l})}}i&&this.toolContextByCallId.delete(i);break}case"thread/tokenUsage/updated":{let r=$(s?.tokenUsage),i=$(r?.last);if(!i)break;this.latestTurnUsage=my({...i,modelContextWindow:r?.modelContextWindow});break}case"turn/aborted":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let r=M(s?.reason)??M($(s?.turn)?.reason);P.info({threadId:this.threadId,reason:r},"turn interrupted"),T.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,...r?{reason:r}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}case"turn/completed":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let r=$(s?.turn),i=uy(r?.status),o=this.latestTurnUsage;if(this.latestTurnUsage=void 0,i&&cy.has(i)){P.info({threadId:this.threadId,status:i},"turn interrupted"),T.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,status:i,...o?{usage:o}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}P.info({threadId:this.threadId,status:i??"completed"},"turn completed"),T.emit("session.done",{agent:"codex",sessionId:this.threadId,usage:o}),this.handler&&this.handler({type:"session.done",sessionId:this.threadId,usage:o});break}default:n&&P.debug({method:n},"unhandled notification");break}}};var Iu=require("crypto"),wu=["Received. This is the hosted Vibelet review demo environment.","The app is connected to a public review backend and can send and receive assistant messages.","For review purposes, this backend returns deterministic demo responses without requiring a local computer on the same Wi-Fi network."].join(" ");function yy(t){let e=t.replace(/\s+/g," ").trim();return e?e.length>120?`${e.slice(0,117)}...`:e:""}var Rs=class{sessionId="";messageHandler=null;exitHandler=null;pendingTimer=null;responding=!1;stopped=!1;async start(e,n){return this.stopped=!1,this.sessionId=n||`review-${(0,Iu.randomUUID)()}`,this.sessionId}sendPrompt(e){if(this.stopped||!this.sessionId)return;this.clearPendingTimer(),this.responding=!0;let n=yy(e),s=n?`${wu}
93
+ `)}resolveToolContext(e){let n=$(e?.item)??e??null,s=Ui(n);if(!s)return null;let r=n?Au(n):null;if(r)return this.toolContextByCallId.set(s,r),{callId:s,toolContext:r};let i=this.toolContextByCallId.get(s);return i?{callId:s,toolContext:i}:null}createFallbackInput(e,n){return e?Wi(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,s){if(this.approvalRequests.set(e,n),T.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){P.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:s,approvalContext:Iy(n)})}handleServerRequest(e,n,s){let r=String(n),i=this.resolveToolContext(s);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(r,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(s,["itemId","reason","description"])},L(s?.reason)??L(s?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(r,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(s,["itemId","reason","description"])},L(s?.reason)??L(s?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=s?.questions;if(!Ry(o)){P.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=xy(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(r,{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(s,["itemId","questions"])},Py(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(r,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(s,[])},L(s?.reason)??L(s?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(r,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(s,[])},L(s?.reason)??L(s?.description)??"");return}if(e==="item/permissions/requestApproval"){P.warn({threadId:this.threadId,rpcId:n},"unsupported permissions approval request"),this.writeServerRequestError(n,"Unsupported permissions approval request");return}P.warn({threadId:this.threadId,rpcId:n,method:e},"unsupported server request"),this.writeServerRequestError(n,`Unsupported server request: ${e}`)}handleRaw(e){if(P.debug({method:e.method??"(response)",rpcId:e.id??"-"},"handleRaw"),e.id!=null&&!e.method&&this.pending.has(e.id)){let r=this.pending.get(e.id);this.pending.delete(e.id),e.error?r.reject(new Error(e.error.message??"RPC error")):r.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,s=$(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,s??void 0);return}switch(n&&P.debug({method:n,paramsPreview:JSON.stringify(s??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let r=s?.text??s?.delta??s?.content??"";r&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:r}):r||P.debug({paramsKeys:Object.keys(s??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":s?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:s.itemId??"",output:String(s.output)});break;case"item/started":{let r=$(s?.item),i=Ui(r),o=r?Au(r):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 r=$(s?.item)??s,i=Ui(r),o=i?this.toolContextByCallId.get(i):null;if(i&&o?.toolName==="Patch"&&this.handler){let a=Ey(o.input,this.cwd);if(a){let l=Te([a]);l&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:i,output:l})}}i&&this.toolContextByCallId.delete(i);break}case"thread/tokenUsage/updated":{let r=$(s?.tokenUsage),i=$(r?.last);if(!i)break;this.latestTurnUsage=My({...i,modelContextWindow:r?.modelContextWindow});break}case"turn/aborted":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let r=L(s?.reason)??L($(s?.turn)?.reason);P.info({threadId:this.threadId,reason:r},"turn interrupted"),T.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,...r?{reason:r}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}case"turn/completed":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let r=$(s?.turn),i=Cy(r?.status),o=this.latestTurnUsage;if(this.latestTurnUsage=void 0,i&&Ay.has(i)){P.info({threadId:this.threadId,status:i},"turn interrupted"),T.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,status:i,...o?{usage:o}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}P.info({threadId:this.threadId,status:i??"completed"},"turn completed"),T.emit("session.done",{agent:"codex",sessionId:this.threadId,usage:o}),this.handler&&this.handler({type:"session.done",sessionId:this.threadId,usage:o});break}default:n&&P.debug({method:n},"unhandled notification");break}}};var Mu=require("crypto"),Pu=["Received. This is the hosted Vibelet review demo environment.","The app is connected to a public review backend and can send and receive assistant messages.","For review purposes, this backend returns deterministic demo responses without requiring a local computer on the same Wi-Fi network."].join(" ");function Ly(t){let e=t.replace(/\s+/g," ").trim();return e?e.length>120?`${e.slice(0,117)}...`:e:""}var Ls=class{sessionId="";messageHandler=null;exitHandler=null;pendingTimer=null;responding=!1;stopped=!1;async start(e,n){return this.stopped=!1,this.sessionId=n||`review-${(0,Mu.randomUUID)()}`,this.sessionId}sendPrompt(e){if(this.stopped||!this.sessionId)return;this.clearPendingTimer(),this.responding=!0;let n=Ly(e),s=n?`${Pu}
94
94
 
95
- Your message was received: "${n}"`:wu;this.pendingTimer=setTimeout(()=>{this.pendingTimer=null,!(this.stopped||!this.sessionId)&&(this.emit({type:"text.delta",sessionId:this.sessionId,content:s}),this.responding=!1,this.emit({type:"session.done",sessionId:this.sessionId,usage:{inputTokens:Math.max(1,Math.ceil(e.length/4)),outputTokens:Math.max(1,Math.ceil(s.length/4))}}))},25)}respondApproval(){return!1}getRespondingLivenessHint(){return this.responding?"alive":"unknown"}interrupt(){!this.responding||!this.sessionId||(this.clearPendingTimer(),this.responding=!1,this.emit({type:"session.interrupted",sessionId:this.sessionId}))}stop(){this.clearPendingTimer(),this.responding=!1,this.stopped=!0,this.exitHandler?.(0)}setApprovalMode(){}onMessage(e){this.messageHandler=e}onExit(e){this.exitHandler=e}emit(e){this.messageHandler?.(e)}clearPendingTimer(){this.pendingTimer&&(clearTimeout(this.pendingTimer),this.pendingTimer=null)}};var O=require("fs/promises"),Zi=require("fs"),eo=require("readline"),F=require("path"),ye=require("os");var vy=new Set(["New session","Resumed session","Untitled session"]),Sy=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function _y(t){return t.replace(/\s+/g," ").trim()}function Es(t){return typeof t!="string"?void 0:_y(t)||void 0}function Tu(t){let e=Es(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 Mt(t){let e=Es(t);return!e||vy.has(e)||Tu(e)}function by(t){for(let e of t.replace(/\r/g,"").split(`
96
- `)){let n=Es(e);if(n&&!wy(n)&&!Iy(n))return n}}function wy(t){return Sy.some(e=>t.startsWith(e))}function Iy(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function Ty(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 s=t[e+1];if(!s||/\s/.test(s))return e+1}}return-1}function Oi(t,e=80){if(typeof t!="string")return;let n=by(t);if(!n)return;let s=Ty(n),i=(s>0?n.slice(0,s):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||Tu(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function nt(t,e){for(let n of t){let s=Es(n);if(!(!s||Mt(s)))return s}return Oi(e)}var Cu=require("child_process"),xu=require("util");var Ru=(0,xu.promisify)(Cu.execFile),Eu=5e3,Ay=2500,ky=3e3,Pu=8,Ps=new Map,Bi=new Map,Au=null;function Cy(t){let e=Ps.get(t);return e?Date.now()>e.expiresAt?(Ps.delete(t),null):e.value??void 0:null}function xy(t,e){if(e===void 0){Ps.delete(t);return}Ps.set(t,{value:e,expiresAt:Date.now()+Eu})}async function Ry(t){if(!t)return;if(Au)return Au(t);let e=[["branch","--show-current"],["rev-parse","--abbrev-ref","HEAD"]];for(let n of e)try{let{stdout:s}=await Ru("git",["-C",t,...n],{env:Ze(),timeout:Ay,maxBuffer:65536}),r=s.trim();if(r&&r!=="HEAD")return r}catch{}}async function Ey(t){let e=Cy(t);if(e!==null)return e;let n=Bi.get(t);if(n)return n;let s=Ry(t).then(r=>(xy(t,r),r)).finally(()=>{Bi.delete(t)});return Bi.set(t,s),s}async function Mu(t,e,n){if(t.length===0)return;let s=Math.max(1,Math.min(e,t.length)),r=0;await Promise.all(Array.from({length:s},async()=>{for(;;){let i=r;if(r+=1,i>=t.length)return;await n(t[i])}}))}async function Lu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Mu(e,Pu,async s=>{n.set(s,await Ey(s))}),n}var Fi=new Map,Di=new Map,ku=null;function Py(t,e){if(e===void 0){Fi.delete(t);return}Fi.set(t,{value:e,expiresAt:Date.now()+Eu})}async function My(t){if(t){if(ku)return ku(t);for(let e=0;e<2;e+=1)try{let{stdout:n}=await Ru("git",["-C",t,"diff","HEAD","--shortstat"],{env:Ze(),timeout:ky,maxBuffer:65536}),s=n.trim();if(!s)return;let r=s.match(/(\d+) insertion/),i=s.match(/(\d+) deletion/),o=r?Number(r[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 Ly(t){let e=Fi.get(t);if(e&&Date.now()<=e.expiresAt)return e.value;let n=Di.get(t);if(n)return n;let s=My(t).then(r=>(Py(t,r),r)).finally(()=>{Di.delete(t)});return Di.set(t,s),s}async function Nu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Mu(e,Pu,async s=>{n.set(s,await Ly(s))}),n}var Bu=require("child_process"),Ns=require("fs/promises"),st=require("path"),Du=require("os"),Fu=require("util");var Ny=(0,Fu.promisify)(Bu.execFile),Ls=N.child({module:"process-scanner"}),Hu=5e3,Oy=1500,By=/(^|[^A-Za-z0-9_.-])(claude|codex)([^A-Za-z0-9_.-]|$)/,Dy=500,Fy=15e3,An=null,Tn=null;function Os(){An=null}var Hy=new Set(["sh","bash","zsh","fish"]),Uy=new Set(["env","nohup","timeout","gtimeout"]),Wy=new Set(["node","nodejs","bun","tsx"]),qy=new Set(["-e","--eval","-p","--print"]),Gy=new Set(["-r","--require","--import","--loader","--experimental-loader","--env-file","--input-type"]);function jy(t){return t.replace(/^['"]|['"]$/g,"")}function Uu(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(jy)}function Ou(t){let e=(0,st.basename)(t);return e==="claude"||e==="codex"?e:null}function $y(t){for(let e of t.split(/&&|\|\||;|\n/)){let n=Wu(Uu(e.trim()),!0);if(n)return n}return null}function Wu(t,e=!1){let n=0;for(;n<t.length;){let s=t[n],r=(0,st.basename)(s);if(Uy.has(r)){if(n+=1,r==="env")for(;n<t.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(t[n]);)n+=1;else if(r==="timeout"||r==="gtimeout"){for(;n<t.length&&t[n].startsWith("-");){let o=t[n];n+=1,o==="-k"&&n<t.length&&(n+=1)}n<t.length&&(n+=1)}continue}if(Hy.has(r)){for(let o=n+1;o<t.length;o+=1){let a=t[o];if(a==="-c"||a==="-lc"||a==="-ic"||a==="-xc"||a==="-ec"||a==="-xec"){let l=t[o+1];return l?$y(l):null}}return null}if(Wy.has(r)){let o=n+1;for(;o<t.length;){let l=t[o];if(qy.has(l))return null;if(l==="--"){o+=1;break}if(!l.startsWith("-"))break;o+=1,Gy.has(l)&&o<t.length&&(o+=1)}if(o>=t.length)return null;let a=Ou(t[o]);return a?{agent:a,args:t.slice(o+1),viaWrapper:!0}:null}let i=Ou(s);return i?{agent:i,args:t.slice(n+1),viaWrapper:e}:null}return null}function Hi(t,e=!1){return Wu(Uu(t),e)}function Bs(t){let e=Hi(t);return e?{agent:e.agent,args:e.args}:null}function qu(t){return By.test(t)&&Hi(t)!==null}function zy(t,e){let n=Bs(e);if(!n||n.agent!==t)return null;let{args:s}=n;if(t==="claude"){for(let r=0;r<s.length;r+=1){let i=s[r];if((i==="--resume"||i==="--session-id")&&s[r+1]&&!s[r+1].startsWith("-"))return s[r+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(s[0]!=="resume")return null;for(let r=1;r<s.length;r+=1){let i=s[r];if(!i.startsWith("-"))return i}return null}function Vy(t){if(t.includes("--dangerously-skip-permissions"))return"autoApprove";for(let e=0;e<t.length;e+=1){let n=t[e],s=t[e+1],r=n==="--permission-mode"?s:n.startsWith("--permission-mode=")?n.slice(18):void 0;if(r==="plan")return"plan";if(r==="acceptEdits")return"acceptEdits";if(r==="default")return"normal"}}function Qy(t){if(t.includes("--dangerously-bypass-approvals-and-sandbox"))return"autoApprove"}function Yy(t,e){let n=Bs(e);if(!(!n||n.agent!==t))return t==="claude"?Vy(n.args):Qy(n.args)}function Ms(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function Jy(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function Ky(t,e){let n=Hi(e);return!n||n.agent!==t||n.viaWrapper?!1:t==="claude"?!n.args.includes("--continue")&&!n.args.includes("-c"):!(n.args[0]==="app-server"&&!n.args.includes("--listen")&&!n.args.some(s=>s.startsWith("--listen=")))}function Xy(t){let e=[...new Set(t.sessionFiles)].filter(i=>Jy(t.agent,i)),n=zy(t.agent,t.command),s=Yy(t.agent,t.command);if(n)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:n,confidence:"high",...s?{approvalMode:s}:{},...e.length===1?{sessionFilePath:e[0]}:{}};if(e.length!==1)return null;let r=Lt(t.agent,e[0]);return r?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:r,confidence:"medium",...s?{approvalMode:s}:{},sessionFilePath:e[0]}:null}function Zy(t,e){let n=t,s=e;(Ms(e.confidence)>Ms(t.confidence)||Ms(e.confidence)===Ms(t.confidence)&&e.pid!==void 0&&t.pid!==void 0&&e.pid<t.pid)&&(n=e,s=t);let r=n.approvalMode??s.approvalMode;return{...n,cwd:n.cwd||s.cwd,...r?{approvalMode:r}:{},title:n.title??s.title,sessionFilePath:n.sessionFilePath??s.sessionFilePath,isResponding:n.isResponding??s.isResponding}}function Ui(t){let e=new Map;for(let n of t){let s=`${n.agent}:${n.sessionId}`,r=e.get(s);e.set(s,r?Zy(r,n):n)}return[...e.values()]}function ev(t){try{return process.kill(t,0),!0}catch{return!1}}async function Ds(t,e,n=Oy){try{let{stdout:s}=await Ny(t,e,{maxBuffer:8388608,timeout:n});return s}catch(s){let r=typeof s=="object"&&s!==null?{code:"code"in s?s.code:void 0,signal:"signal"in s?s.signal:void 0,killed:"killed"in s?s.killed:void 0}:{},i=String(s);return i.includes("ESRCH")||i.includes("No such process")?Ls.debug({file:t,args:e,timeoutMs:n,error:i,...r},"process scan command skipped \u2014 process exited"):Ls.warn({file:t,args:e,timeoutMs:n,error:i,...r},"process scan command failed"),""}}async function tv(t){if(!t.sessionFilePath)return t;let e=await rt(t.sessionFilePath,t.agent);if(!e)return null;let n=await qi(t.sessionFilePath,t.agent),s=e.approvalMode??t.approvalMode;return{...t,cwd:t.cwd||e.cwd,...s?{approvalMode:s}:{},title:t.title??e.title,isResponding:n.isResponding}}async function nv(t){return process.platform==="win32"?"":(await Ds("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
97
- `).find(s=>s.startsWith("n"))?.slice(1).trim()??""}async function sv(t){if(process.platform==="win32")return[];let n=(await Ds("lsof",["-p",String(t),"-Fn"])).split(`
98
- `).filter(s=>s.startsWith("n")).map(s=>s.slice(1).trim()).filter(s=>s.endsWith(".jsonl")?s.includes("/.claude/projects/")||s.includes("/.codex/sessions/"):!1);return[...new Set(n)]}function rv(t){return t.split(`
99
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let s=Number(n[1]),r=n[2];if(!qu(r))return null;let i=Bs(r);return!Number.isFinite(s)||!i?null:{pid:s,command:r,agent:i.agent}}).filter(e=>!!e)}async function iv(){let t=await Ds("ps",["-axo","pid=,command="],Hu);return rv(t)}async function ov(){return(await Ds("wmic",["process","get","ProcessId,CommandLine","/FORMAT:CSV"],Hu)).split(`
100
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let s=Number(n[n.length-1]),r=n.slice(1,n.length-1).join(",");if(!Number.isFinite(s)||s===0||!qu(r))return null;let i=Bs(r);return i?{pid:s,command:r,agent:i.agent}:null}).filter(e=>!!e)}async function av(){return process.platform==="win32"?ov():iv()}async function lv(t){let e=b.startTimer("process.scan.pgrep_ms"),n=await av();t&&(t.pgrepMs+=e()),t&&(t.matchedProcesses=n.length);let s=n.filter(o=>ev(o.pid));t&&(t.aliveProcesses=s.length);let r=b.startTimer("process.scan.lsof_ms"),i=await Promise.all(s.map(async o=>({pid:o.pid,agent:o.agent,command:o.command,cwd:await nv(o.pid),sessionFiles:await sv(o.pid)})));return t&&(t.lsofMs+=r()),t&&(t.snapshots=i.length),i}function cv(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function uv(t,e){if(!e)return null;try{if(t==="claude"){let n=(0,st.join)((0,Du.homedir)(),".claude","projects",cv(e)),r=(await(0,Ns.readdir)(n).catch(()=>[])).filter(l=>l.endsWith(".jsonl"));if(r.length===0)return null;let i=null;if(await Promise.all(r.map(async l=>{let u=await(0,Ns.stat)((0,st.join)(n,l)).catch(()=>null);u&&(!i||u.mtimeMs>i.mtimeMs)&&(i={name:l,mtimeMs:u.mtimeMs})})),!i)return null;let o=(0,st.join)(n,i.name),a=Lt(t,o);return a?{sessionId:a,filePath:o}:null}return ju(e)}catch{return null}}async function dv(){let t={pgrepMs:0,lsofMs:0,fallbackMs:0,hydrateMs:0,totalMs:0,matchedProcesses:0,aliveProcesses:0,snapshots:0,directCandidates:0,fallbackLookups:0,fallbackHits:0,hydratedCandidates:0},e=b.startTimer("process.scan.total_ms"),n=await lv(t),s=[],r=[];for(let c of n){let d=Xy(c);if(d){s.push(d);continue}Ky(c.agent,c.command)&&r.push(c)}t.directCandidates=s.length,t.fallbackLookups=r.length;let i=b.startTimer("process.scan.fallback_ms"),o=await Promise.all(r.map(async c=>{let d=await uv(c.agent,c.cwd);return d?{agent:c.agent,pid:c.pid,cwd:c.cwd,command:c.command,sessionId:d.sessionId,confidence:"low",sessionFilePath:d.filePath}:null}));t.fallbackMs=i(),t.fallbackHits=o.filter(c=>c!==null).length;let a=b.startTimer("process.scan.hydrate_ms"),l=await Promise.all([...s,...o.filter(c=>c!==null)].map(c=>tv(c)));t.hydrateMs=a(),t.hydratedCandidates=l.filter(c=>c!==null).length;let u=Ui(l.filter(c=>c!==null));return t.totalMs=e(),(t.totalMs>=Dy||t.fallbackLookups>0)&&Ls.info({durationMs:t.totalMs,pgrepMs:t.pgrepMs,lsofMs:t.lsofMs,fallbackMs:t.fallbackMs,hydrateMs:t.hydrateMs,matchedProcesses:t.matchedProcesses,aliveProcesses:t.aliveProcesses,snapshots:t.snapshots,directCandidates:t.directCandidates,fallbackLookups:t.fallbackLookups,fallbackHits:t.fallbackHits,hydratedCandidates:t.hydratedCandidates,sessions:u.length},"process running sessions scanned"),An={value:u,expiresAt:Date.now()+Fy},u}async function Wi(){return An&&Date.now()<An.expiresAt?An.value:Tn||(Tn=dv().finally(()=>{Tn=null}),Tn)}async function Gu(t){try{return(await Wi()).some(n=>n.sessionId===t)}catch(e){return Ls.warn({sessionId:t,error:String(e)},"isSessionProcessAlive failed, treating as not alive"),!1}}var Vu=require("fs"),Fe=require("fs/promises"),ji=require("os"),Cn=require("path");var kn=N.child({module:"activity-watcher"}),fv=12e4,pv=5e3,hv=6e4,$u=5;function gv(){return(0,Cn.join)((0,ji.homedir)(),".claude","projects")}function mv(){return(0,Cn.join)((0,ji.homedir)(),".codex","sessions")}async function zu(t){try{return await(0,Fe.realpath)(t)}catch{return t}}function Fs(t,e){return!(!t.endsWith(".jsonl")||e==="claude"&&t.includes("/subagents/"))}var Gi=class{entries=new Map;filePathIndex=new Map;metaInFlight=new Map;roots=new Map;watchers=[];pollTimers=[];rescanTimer=null;listeners=new Set;started=!1;async start(e){if(this.started)return;this.started=!0;let n=await zu(e?.claudeDir??gv()),s=await zu(e?.codexDir??mv());if(this.roots.set(n,"claude"),this.roots.set(s,"codex"),await Promise.all([this.bootstrap("claude",n),this.bootstrap("codex",s)]),this.updateGauges(),e?.usePolling){let r=e.pollingIntervalMs??100;for(let[i,o]of this.roots){let a=setInterval(()=>{this.pollScan(o,i)},r);a.unref?.(),this.pollTimers.push(a)}}else for(let[r,i]of this.roots)this.startNativeWatch(r,i);this.rescanTimer=setInterval(()=>{this.safetyRescan().catch(r=>{kn.warn({error:String(r)},"activity watcher rescan failed")})},hv),this.rescanTimer.unref?.(),kn.info({seeded:this.entries.size},"activity watcher started")}async stop(){if(this.started){this.started=!1,this.rescanTimer&&(clearInterval(this.rescanTimer),this.rescanTimer=null);for(let e of this.pollTimers)clearInterval(e);this.pollTimers=[];for(let e of this.watchers)try{e.close()}catch{}this.watchers=[],this.entries.clear(),this.filePathIndex.clear(),this.metaInFlight.clear(),this.roots.clear(),this.listeners.clear(),this.updateGauges()}}startNativeWatch(e,n){try{let s=(0,Vu.watch)(e,{recursive:!0,persistent:!0},(r,i)=>{if(!i)return;let o=(0,Cn.join)(e,i.toString());Fs(o,n)&&this.resolveFsEvent(n,o)});s.on("error",r=>{kn.warn({error:String(r),root:e},"activity watcher error")}),this.watchers.push(s)}catch(s){kn.warn({error:String(s),root:e},"failed to start native recursive watch")}}async resolveFsEvent(e,n){let s=await(0,Fe.stat)(n).catch(()=>null);if(!s){this.handleUnlink(n);return}s.isFile()&&await this.handleFsChange(n,s.mtimeMs)}async pollScan(e,n){let s=await this.walkSessionFiles(n,$u),r=new Set,i=!1;for(let{filePath:o,mtimeMs:a}of s){if(!Fs(o,e))continue;r.add(o);let l=this.filePathIndex.get(o);if(l){let c=this.entries.get(l);if(!c||a<=c.mtimeMs)continue}await this.ingestPath(e,o,Date.now(),a)&&(i=!0)}for(let[o]of this.filePathIndex)this.identifyAgent(o)===e&&(r.has(o)||(this.handleUnlink(o),i=!0));i&&(this.updateGauges(),this.notify())}identifyAgent(e){for(let[n,s]of this.roots)if(e===n||e.startsWith(`${n}/`))return s;return null}listActive(e=fv){let n=Date.now(),s=n-e,r=n-pv,i=[];for(let o of this.entries.values())o.lastActivityMs<s||i.push({...o,isResponding:o.lastActivityMs>=r});return i}onActivity(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async bootstrap(e,n){let s=await this.walkSessionFiles(n,$u);await Promise.all(s.map(async({filePath:r,mtimeMs:i})=>{Fs(r,e)&&await this.ingestPath(e,r,i,i)}))}async walkSessionFiles(e,n){let s=[],r=async(i,o)=>{if(o>n)return;let a=await(0,Fe.readdir)(i,{withFileTypes:!0}).catch(()=>[]);await Promise.all(a.map(async l=>{let u=(0,Cn.join)(i,l.name);if(l.isDirectory()){await r(u,o+1);return}if(!l.isFile()||!l.name.endsWith(".jsonl"))return;let c=await(0,Fe.stat)(u).catch(()=>null);c&&s.push({filePath:u,mtimeMs:c.mtimeMs})}))};return await r(e,0),s}async handleFsChange(e,n){let s=this.identifyAgent(e);if(!s||!Fs(e,s))return;let r=Date.now(),i=n??r;await this.ingestPath(s,e,r,i)&&(this.updateGauges(),this.notify())}handleUnlink(e){let n=this.filePathIndex.get(e);n&&(this.filePathIndex.delete(e),this.entries.delete(n),this.updateGauges(),this.notify())}async ingestPath(e,n,s,r){let i=this.filePathIndex.get(n);if(i)return this.touchEntry(i,s,r);let o=`${e}:${n}`,a=this.metaInFlight.get(o);return a||(a=(async()=>{try{let l=await rt(n,e);if(!l)return;let u=`${e}:${l.sessionId}`,c=this.entries.get(u);if(c){c.lastActivityMs=Math.max(c.lastActivityMs,s),c.mtimeMs=Math.max(c.mtimeMs,r),c.filePath!==n&&(this.filePathIndex.delete(c.filePath),c.filePath=n),this.filePathIndex.set(n,u);return}this.entries.set(u,{agent:e,sessionId:l.sessionId,cwd:l.cwd,title:l.title,filePath:n,lastActivityMs:s,mtimeMs:r}),this.filePathIndex.set(n,u)}finally{this.metaInFlight.delete(o)}})(),this.metaInFlight.set(o,a)),await a,this.filePathIndex.has(n)}touchEntry(e,n,s){let r=this.entries.get(e);if(!r)return!1;let i=Math.max(r.lastActivityMs,n),o=Math.max(r.mtimeMs,s);return i===r.lastActivityMs&&o===r.mtimeMs?!1:(r.lastActivityMs=i,r.mtimeMs=o,!0)}async safetyRescan(){if(this.entries.size===0)return;let e=[];for(let[s,r]of this.entries)e.push((async()=>{let i=await(0,Fe.stat)(r.filePath).catch(()=>null);return i?i.mtimeMs>r.mtimeMs?this.touchEntry(s,i.mtimeMs,i.mtimeMs):!1:(this.filePathIndex.delete(r.filePath),this.entries.delete(s),!0)})());(await Promise.all(e)).some(Boolean)&&(this.updateGauges(),this.notify())}notify(){for(let e of this.listeners)try{e()}catch(n){kn.warn({error:String(n)},"activity listener failed")}}updateGauges(){b.gauge("session.activity_watcher.entries",this.entries.size)}__injectEntryForTests(e){let n=`${e.agent}:${e.sessionId}`;this.entries.set(n,{...e}),this.filePathIndex.set(e.filePath,n),this.updateGauges(),this.notify()}__resetForTests(){this.started=!1,this.rescanTimer&&(clearInterval(this.rescanTimer),this.rescanTimer=null);for(let e of this.pollTimers)clearInterval(e);this.pollTimers=[],this.watchers=[],this.entries.clear(),this.filePathIndex.clear(),this.metaInFlight.clear(),this.roots.clear(),this.listeners.clear(),this.updateGauges()}},Nt=new Gi;var He=N.child({module:"inventory"}),Xu=6e3,yv=3e4,vv=1e4;function Sv(t){return{agent:t.agent,cwd:t.cwd,sessionId:t.sessionId,confidence:"high",sessionFilePath:t.filePath,title:t.title,isResponding:t.isResponding}}async function _v(){return Nt.listActive().map(Sv)}var Zu={listScannedSessions:Pn,listWatcherSessions:_v,scanRunningSessions:Wi,searchSessionContent:ad},ue=bv(),Rn=null,Hs=0,Ws=0,Us=0,$i=0,zi=new Set;function bv(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function wv(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,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,lastUsage:t.lastUsage,interruptReason:t.interruptReason,stallWarning:t.stallWarning})}function Iv(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 Qu(t){return JSON.stringify({scannedSessions:t.scannedSessions.map(wv).sort(),runningSessions:t.runningSessions.map(Iv).sort()})}function ed(){for(let t of zi)try{t()}catch(e){He.warn({error:String(e)},"session inventory backfill listener failed")}}function xn(){b.gauge("session.inventory.external_cached_sessions",ue.scannedSessions.length),b.gauge("session.inventory.external_running_sessions",ue.runningSessions.length),b.gauge("session.inventory.backfill_inflight",Rn?1:0)}function td(t){return zi.add(t),()=>{zi.delete(t)}}function nd(){return{cachedSessions:ue.scannedSessions.length,runningSessions:ue.runningSessions.length,cacheAgeMs:ue.refreshedAt?Math.max(0,Date.now()-ue.refreshedAt):void 0,backfillInFlight:!!Rn,lastBackfillDurationMs:Us||void 0,lastBackfillCompletedAt:Ws?new Date(Ws).toISOString():void 0,lastBackfillAppliedAt:$i?new Date($i).toISOString():void 0}}xn();function sd(){return Nt.onActivity(()=>{od(Zu,Xu)})}var Ot={daemonActive:3,externalRunning:2,idle:1},Yu={high:3,medium:2,low:1};function rd(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function Tv(t,e){let n=t.runtime.needsAttention?1:0,s=e.runtime.needsAttention?1:0,r=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return s-n||i-r||Ot[e.runtime.state]-Ot[t.runtime.state]||rd(t,e)}function Av(t,e){return Ot[e.state]>Ot[t.state]?e:Ot[e.state]<Ot[t.state]?t:Yu[e.confidence]>Yu[t.confidence]?e:t}function kv(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function Cv(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function xv(t,e){return e?t?!(Mt(e)&&!Mt(t)):!0:!1}function Vi(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function Rv(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["record"],runtime:{...Vi(),...t.interruptReason||t.stallWarning?{needsAttention:!0}:{}},managed:t.managed,approvalMode:t.approvalMode,lastUsage:t.lastUsage,...t.interruptReason?{interruptReason:t.interruptReason}:{},...t.stallWarning?{stallWarning:t.stallWarning}:{}}}function Ev(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",...t.pid!==void 0?{pid:t.pid}:{},...t.command!==void 0?{command:t.command}:{},isResponding:t.isResponding},observedApprovalMode:t.approvalMode}}function Pv(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["daemon"],runtime:{state:"daemonActive",confidence:"high",resumeMode:"reuseDriver",needsAttention:t.needsAttention||!!t.interruptReason||!!t.stallWarning||void 0,isResponding:t.isResponding||void 0},managed:t.managed,approvalMode:t.approvalMode,lastUsage:t.lastUsage,...t.interruptReason?{interruptReason:t.interruptReason}:{},...t.stallWarning?{stallWarning:t.stallWarning}:{}}}function Mv(t,e){for(let n of e){let s=`${n.agent}:${n.sessionId}`,r=t.get(s);if(!r){t.set(s,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=xv(r.title,n.title)?n.title:r.title,o=n.cwd||r.cwd,a=n.branch??r.branch,l=Av(r.runtime,n.runtime),u=r.sources.slice();for(let h of n.sources)u.includes(h)||u.push(h);let c=n.sources.includes("process"),d=r.sources.includes("process")&&!r.sources.includes("daemon"),f=c?r.lastActivityAt:d?n.lastActivityAt:Cv(r.lastActivityAt,n.lastActivityAt);t.set(s,{...r,cwd:o,model:n.model??r.model,branch:a,title:i,createdAt:kv(r.createdAt,n.createdAt),lastActivityAt:f,sources:u,runtime:l,managed:r.managed||n.managed,approvalMode:n.approvalMode??r.approvalMode,observedApprovalMode:n.observedApprovalMode??r.observedApprovalMode,lastUsage:n.lastUsage??r.lastUsage,interruptReason:n.interruptReason??r.interruptReason,stallWarning:n.stallWarning??r.stallWarning})}}function Lv(...t){let e=new Map;for(let n of t)Mv(e,n);return[...e.values()]}function Nv(t,e,n,s,r,i,o){let a=s?.toLowerCase(),l=o&&o>0?o:0,u=t.filter(c=>{if(e&&c.agent!==e||n&&c.cwd!==n)return!1;if(l>0&&c.runtime.state==="idle"){let d=Date.parse(c.lastActivityAt);if(Number.isFinite(d)&&d<l)return!1}if(a){let d=(c.title??"").toLowerCase(),f=i?.[c.sessionId]?.toLowerCase()??"",h=d.includes(a)||(f?f.includes(a):!1),g=r?.has(c.sessionId)??!1;if(!h&&!g)return!1}return!0});return(s||l>0)&&He.info({total:t.length,filtered:u.length,search:s,contentMatchIds:r?.size??0,sinceMs:l||void 0},"filter applied"),u}function Ov(t,e){if(!e)return 0;let n=0,s=t.length;for(;n<s;){let r=n+s>>1,i=t[r];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?s=r:n=r+1}if(n>0){let r=t[n-1];if(r.lastActivityAt===e.lastActivityAt&&r.sessionId===e.sessionId)return n}return 0}function Ju(t,e,n,s,r,i,o,a,l){let u=i?1/0:Math.max(1,e||50),c=Lv(t.sessionRecords.map(Rv),t.scannedSessions,t.runningSessions.map(_=>Ev(_,t.scannedAt)),t.activeSessions.map(Pv)),d=t.deletedSessionIds?.size?c.filter(_=>!t.deletedSessionIds?.has(_.sessionId)):c,f=Nv(d,s,r,i,o,a,l),h=f.filter(_=>_.runtime.state!=="idle"||_.managed).sort(Tv),g=f.filter(_=>_.runtime.state==="idle"&&!_.managed).sort(rd),p=Ov(g,n),m=g.slice(p,p+u),C=p+m.length<g.length&&m.length>0?{lastActivityAt:m[m.length-1].lastActivityAt,sessionId:m[m.length-1].sessionId}:void 0;return{sessions:n?m:[...h,...m],nextCursor:C}}async function Ku(t){if(t.sessions.length===0)return t;let e=t.sessions.map(o=>o.cwd),[n,s]=await Promise.all([Lu(e),Nu(e)]),r=!1,i=t.sessions.map(o=>{let a=n.get(o.cwd),l=s.get(o.cwd);return o.branch===a&&o.diffStat===l?o:(r=!0,{...o,branch:a,diffStat:l})});return r?{...t,sessions:i}:t}function En(t,e,n,s,r,i){return new Promise(o=>{let a=Date.now(),l=!1,u=!1,c=null,d=f=>{l||(l=!0,c&&(clearTimeout(c),c=null),o(f))};c=setTimeout(()=>{if(l)return;let f=Array.isArray(r)&&r.length>0;He.warn({source:t,timeoutMs:s,durationMs:Date.now()-a,partial:f?r.length:0},f?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),u=!0,d(f?r:n)},s),typeof c=="object"&&"unref"in c&&c.unref(),e().then(f=>{let h=u;if(d(f),h&&i)try{i(f)}catch(g){He.warn({source:t,error:String(g)},"inventory source late-result handler failed")}}).catch(f=>{l||He.warn({source:t,error:String(f)},"session inventory source failed, using fallback"),d(n)})})}function Bv(t=Date.now()){return ue.refreshedAt===0||t-ue.refreshedAt>=vv}async function id(t,e){let[n,s]=await Promise.all([En("watcher.running_sessions",()=>t.listWatcherSessions(),[],e),En("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return Ui([...n,...s])}async function Dv(t,e){let n=new Date().toISOString(),s=[],[r,i]=await Promise.all([En("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,s),[],e,s),id(t,e)]);return{scannedSessions:r,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function od(t,e){if(Rn)return;let n=Hs,s=b.startTimer("session.inventory.backfill_latency_ms");Rn=Dv(t,e).then(r=>{if(n!==Hs)return;let i=Qu(ue);ue=r;let o=Qu(r),a=s();Us=a,Ws=Date.now(),xn(),i!==o&&($i=Date.now(),b.increment("session.inventory.backfill_applied"),He.info({durationMs:a,scanned:r.scannedSessions.length,running:r.runningSessions.length},"session inventory external backfill applied"),ed())}).catch(r=>{n===Hs&&(Us=s(),Ws=Date.now(),xn(),He.warn({error:String(r),durationMs:Us},"session inventory external backfill failed"))}).finally(()=>{n===Hs&&(Rn=null,xn())}),xn()}async function qs(t){let e={...Zu,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??Xu),s=t.sourceTimeoutMs!==void 0?n:yv;if(!t.search){let f=b.startTimer("session.inventory.fast_path_latency_ms");Bv()&&od(e,n);let h=ue,g=Ju({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:h.scannedSessions,runningSessions:h.runningSessions,scannedAt:h.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,void 0,void 0,t.customTitles,t.sinceMs);if(t.skipGitMetadata)return f(),g;let p=await Ku(g);return f(),p}let r=[],i=new Date().toISOString(),o=t.search,a=t.sinceMs,[l,u,c]=await Promise.all([En("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),id(e,n),En("scanner.search_content",()=>e.searchSessionContent(o,t.agent,a),void 0,s,void 0,f=>{f&&f.size>0&&ed()})]);He.info({search:t.search,sinceMs:a&&a>0?a:void 0,contentMatches:c?.size??0,scanned:l.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let d=Ju({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:l,runningSessions:u,scannedAt:i,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,o,c,t.customTitles,a);return t.skipGitMetadata?d:Ku(d)}var Ae=N.child({module:"scanner"});function to(t){let e=new Map;return{get(n){let s=e.get(n);if(s){if(Date.now()>s.expiresAt){e.delete(n);return}return s.value}},set(n,s){e.set(n,{value:s,expiresAt:Date.now()+t})},clear(){e.clear()}}}var no=3e4,Ki=to(no),Xi=to(no),js=to(no),Qi=new Map,Yi=new Map,Gs=null,it=24;function Vs(){Ki.clear(),Xi.clear(),js.clear()}function gd(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ot(t,e,n){if(t.length===0)return[];let s=Math.max(1,Math.min(e,t.length)),r=new Array(t.length),i=0;return await Promise.all(Array.from({length:s},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;r[o]=await n(t[o],o)}})),r}async function md(t){let e=await ot(t,it,async n=>{let s=await(0,O.stat)(n).catch(()=>null);return{path:n,mtimeMs:s?.mtimeMs??0}});return e.sort((n,s)=>s.mtimeMs-n.mtimeMs),e}async function Fv(){let t=(0,F.join)((0,ye.homedir)(),".claude","projects"),e=[],n=await(0,O.readdir)(t,{withFileTypes:!0}).catch(()=>[]);for(let s of n){if(!s.isDirectory())continue;let r=(0,F.join)(t,s.name),i=await(0,O.readdir)(r).catch(()=>[]);for(let o of i)o.endsWith(".jsonl")&&e.push((0,F.join)(r,o))}return e}async function Hv(){let t=(0,F.join)((0,ye.homedir)(),".codex","sessions"),e=[],n=await(0,O.readdir)(t).catch(()=>[]);for(let s of n){let r=(0,F.join)(t,s),i=await(0,O.readdir)(r).catch(()=>[]);for(let o of i){let a=(0,F.join)(r,o),l=await(0,O.readdir)(a).catch(()=>[]);for(let u of l){let c=(0,F.join)(a,u),d=await(0,O.readdir)(c).catch(()=>[]);for(let f of d)f.endsWith(".jsonl")&&e.push((0,F.join)(c,f))}}}return e}async function so(){let t=await Hv();return md(t)}function Uv(t){let e=`codex-latest:${(0,ye.homedir)()}`,n=new Map;for(let s of t)n.has(s.cwd)||n.set(s.cwd,s.match);js.set(e,n)}function*yd(t,e){let n=0,s=0;for(;n<t.length&&s<e;){let r=t.indexOf(`
101
- `,n);r===-1&&(r=t.length);let i=t.substring(n,r);n=r+1,!(i.length===0||i.trim().length===0)&&(yield i,s+=1)}}var Ji=512*1024,ld=256*1024;async function vd(t,e){if(e<=Ji)return(0,O.readFile)(t,"utf-8");let n=await(0,O.open)(t,"r");try{let s=Buffer.alloc(Ji),{bytesRead:r}=await n.read(s,0,Ji,0);return s.toString("utf-8",0,r)}finally{await n.close()}}async function Sd(t,e){if(e<=ld)return(0,O.readFile)(t,"utf-8");let n=await(0,O.open)(t,"r");try{let s=Math.max(0,e-ld),r=Buffer.alloc(e-s),{bytesRead:i}=await n.read(r,0,r.length,s);return r.toString("utf-8",0,i)}finally{await n.close()}}function cd(t){switch(t){case"plan":return"plan";case"acceptEdits":return"acceptEdits";case"bypassPermissions":return"autoApprove";case"default":return"normal";default:return}}function Wv(t){let e=typeof t?.approval_policy=="string"?t.approval_policy:"",n=t?.sandbox_policy,s=typeof n?.type=="string"?n.type:"",r=Array.isArray(n?.writable_roots)?n.writable_roots:null;if(e==="never"&&s==="danger-full-access")return"autoApprove";if(e==="on-request"&&s==="workspace-write")return r?.length?"normal":"plan"}function qv(t){return t?.type==="permission-mode"?cd(t.permissionMode):cd(t?.permissionMode)}function Gv(t){if(t?.type==="turn_context")return Wv(t.payload)}function jv(t){if(t?.type!=="event_msg"||t.payload?.type!=="token_count")return;let e=t.payload.info;if(!e||typeof e!="object")return;let n=e.last_token_usage;if(!n||typeof n!="object")return;let s=Number(n.input_tokens),r=Number(n.output_tokens);if(!Number.isFinite(s)||!Number.isFinite(r))return;let i=Number(e.model_context_window);return{inputTokens:s,outputTokens:r,...Number.isFinite(i)&&i>0?{contextWindowTokens:i}:{}}}async function $v(t,e){let n,s,r=await Sd(t,e);for(let i of r.split(`
102
- `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=Gv(o);a&&(n=a);let l=jv(o);l&&(s=l)}return{approvalMode:n,lastUsage:s}}function ud(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.input_tokens??e.inputTokens),s=Number(e.output_tokens??e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(s))return;let r=Number(e.cache_creation_input_tokens??e.cacheCreationInputTokens),i=Number(e.cache_read_input_tokens??e.cacheReadInputTokens);return{inputTokens:n,outputTokens:s,...Number.isFinite(r)?{cacheCreationInputTokens:r}:{},...Number.isFinite(i)?{cacheReadInputTokens:i}:{}}}function zv(t){return t?.type==="assistant"?ud(t.message?.usage??t.usage):ud(t?.toolUseResult?.usage)}async function _d(t,e){let n,s,r=await Sd(t,e);for(let i of r.split(`
103
- `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=qv(o);a&&(n=a);let l=zv(o);l&&(s=l)}return{approvalMode:n,lastUsage:s}}function ro(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 bd(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?ro(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function Qs(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 Vv=/^\[Attached image: ([^\n]+)\]$/gm;function Qv(t){let e=[],n=new Set;for(let s of t.matchAll(Vv)){let r=s[1]?.trim();!r||n.has(r)||(n.add(r),e.push(r))}return e}function Yv(t){if(t.role!=="user")return t;let e=[...t.images??[],...Qv(t.content)].filter((n,s,r)=>n&&r.indexOf(n)===s);return e.length?{...t,images:e}:t}var Jv=["<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 Kv(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?Jv.some(s=>n.startsWith(s)):!1}function Ys(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=Qs(t.message.content);return Kv(t,e)?"":e}function Xv(t){return Array.isArray(t)&&t.some(e=>e&&typeof e=="object"&&e.type==="tool_result")}function Zv(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(s=>!s||typeof s!="object"?"":typeof s.text=="string"?s.text:typeof s.content=="string"?s.content:"").filter(Boolean).join(`
95
+ Your message was received: "${n}"`:Pu;this.pendingTimer=setTimeout(()=>{this.pendingTimer=null,!(this.stopped||!this.sessionId)&&(this.emit({type:"text.delta",sessionId:this.sessionId,content:s}),this.responding=!1,this.emit({type:"session.done",sessionId:this.sessionId,usage:{inputTokens:Math.max(1,Math.ceil(e.length/4)),outputTokens:Math.max(1,Math.ceil(s.length/4))}}))},25)}respondApproval(){return!1}getRespondingLivenessHint(){return this.responding?"alive":"unknown"}interrupt(){!this.responding||!this.sessionId||(this.clearPendingTimer(),this.responding=!1,this.emit({type:"session.interrupted",sessionId:this.sessionId}))}stop(){this.clearPendingTimer(),this.responding=!1,this.stopped=!0,this.exitHandler?.(0)}setApprovalMode(){}onMessage(e){this.messageHandler=e}onExit(e){this.exitHandler=e}emit(e){this.messageHandler?.(e)}clearPendingTimer(){this.pendingTimer&&(clearTimeout(this.pendingTimer),this.pendingTimer=null)}};var O=require("fs/promises"),oo=require("fs"),ao=require("readline"),F=require("path"),ye=require("os");var Ny=new Set(["New session","Resumed session","Untitled session"]),Oy=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function Dy(t){return t.replace(/\s+/g," ").trim()}function Ns(t){return typeof t!="string"?void 0:Dy(t)||void 0}function Lu(t){let e=Ns(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 Mt(t){let e=Ns(t);return!e||Ny.has(e)||Lu(e)}function By(t){for(let e of t.replace(/\r/g,"").split(`
96
+ `)){let n=Ns(e);if(n&&!Fy(n)&&!Hy(n))return n}}function Fy(t){return Oy.some(e=>t.startsWith(e))}function Hy(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function Uy(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 s=t[e+1];if(!s||/\s/.test(s))return e+1}}return-1}function qi(t,e=80){if(typeof t!="string")return;let n=By(t);if(!n)return;let s=Uy(n),i=(s>0?n.slice(0,s):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||Lu(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function nt(t,e){for(let n of t){let s=Ns(n);if(!(!s||Mt(s)))return s}return qi(e)}var Du=require("child_process"),Bu=require("util");var Fu=(0,Bu.promisify)(Du.execFile),Hu=5e3,Wy=2500,qy=3e3,Uu=8,Os=new Map,Gi=new Map,Nu=null;function Gy(t){let e=Os.get(t);return e?Date.now()>e.expiresAt?(Os.delete(t),null):e.value??void 0:null}function jy(t,e){if(e===void 0){Os.delete(t);return}Os.set(t,{value:e,expiresAt:Date.now()+Hu})}async function $y(t){if(!t)return;if(Nu)return Nu(t);let e=[["branch","--show-current"],["rev-parse","--abbrev-ref","HEAD"]];for(let n of e)try{let{stdout:s}=await Fu("git",["-C",t,...n],{env:Ze(),timeout:Wy,maxBuffer:65536}),r=s.trim();if(r&&r!=="HEAD")return r}catch{}}async function zy(t){let e=Gy(t);if(e!==null)return e;let n=Gi.get(t);if(n)return n;let s=$y(t).then(r=>(jy(t,r),r)).finally(()=>{Gi.delete(t)});return Gi.set(t,s),s}async function Wu(t,e,n){if(t.length===0)return;let s=Math.max(1,Math.min(e,t.length)),r=0;await Promise.all(Array.from({length:s},async()=>{for(;;){let i=r;if(r+=1,i>=t.length)return;await n(t[i])}}))}async function qu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Wu(e,Uu,async s=>{n.set(s,await zy(s))}),n}var $i=new Map,ji=new Map,Ou=null;function Vy(t,e){if(e===void 0){$i.delete(t);return}$i.set(t,{value:e,expiresAt:Date.now()+Hu})}async function Qy(t){if(t){if(Ou)return Ou(t);for(let e=0;e<2;e+=1)try{let{stdout:n}=await Fu("git",["-C",t,"diff","HEAD","--shortstat"],{env:Ze(),timeout:qy,maxBuffer:65536}),s=n.trim();if(!s)return;let r=s.match(/(\d+) insertion/),i=s.match(/(\d+) deletion/),o=r?Number(r[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 Yy(t){let e=$i.get(t);if(e&&Date.now()<=e.expiresAt)return e.value;let n=ji.get(t);if(n)return n;let s=Qy(t).then(r=>(Vy(t,r),r)).finally(()=>{ji.delete(t)});return ji.set(t,s),s}async function Gu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await Wu(e,Uu,async s=>{n.set(s,await Yy(s))}),n}var $u=require("child_process"),Fs=require("fs/promises"),st=require("path"),zu=require("os"),Vu=require("util");var Jy=(0,Vu.promisify)($u.execFile),Bs=M.child({module:"process-scanner"}),Qu=5e3,Ky=1500,Xy=/(^|[^A-Za-z0-9_.-])(claude|codex)([^A-Za-z0-9_.-]|$)/,Zy=500,ev=15e3,Cn=null,An=null;function Hs(){Cn=null}var tv=new Set(["sh","bash","zsh","fish"]),nv=new Set(["env","nohup","timeout","gtimeout"]),sv=new Set(["node","nodejs","bun","tsx"]),rv=new Set(["-e","--eval","-p","--print"]),iv=new Set(["-r","--require","--import","--loader","--experimental-loader","--env-file","--input-type"]);function ov(t){return t.replace(/^['"]|['"]$/g,"")}function Yu(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(ov)}function ju(t){let e=(0,st.basename)(t);return e==="claude"||e==="codex"?e:null}function av(t){for(let e of t.split(/&&|\|\||;|\n/)){let n=Ju(Yu(e.trim()),!0);if(n)return n}return null}function Ju(t,e=!1){let n=0;for(;n<t.length;){let s=t[n],r=(0,st.basename)(s);if(nv.has(r)){if(n+=1,r==="env")for(;n<t.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(t[n]);)n+=1;else if(r==="timeout"||r==="gtimeout"){for(;n<t.length&&t[n].startsWith("-");){let o=t[n];n+=1,o==="-k"&&n<t.length&&(n+=1)}n<t.length&&(n+=1)}continue}if(tv.has(r)){for(let o=n+1;o<t.length;o+=1){let a=t[o];if(a==="-c"||a==="-lc"||a==="-ic"||a==="-xc"||a==="-ec"||a==="-xec"){let l=t[o+1];return l?av(l):null}}return null}if(sv.has(r)){let o=n+1;for(;o<t.length;){let l=t[o];if(rv.has(l))return null;if(l==="--"){o+=1;break}if(!l.startsWith("-"))break;o+=1,iv.has(l)&&o<t.length&&(o+=1)}if(o>=t.length)return null;let a=ju(t[o]);return a?{agent:a,args:t.slice(o+1),viaWrapper:!0}:null}let i=ju(s);return i?{agent:i,args:t.slice(n+1),viaWrapper:e}:null}return null}function zi(t,e=!1){return Ju(Yu(t),e)}function Us(t){let e=zi(t);return e?{agent:e.agent,args:e.args}:null}function Ku(t){return Xy.test(t)&&zi(t)!==null}function lv(t,e){let n=Us(e);if(!n||n.agent!==t)return null;let{args:s}=n;if(t==="claude"){for(let r=0;r<s.length;r+=1){let i=s[r];if((i==="--resume"||i==="--session-id")&&s[r+1]&&!s[r+1].startsWith("-"))return s[r+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(s[0]!=="resume")return null;for(let r=1;r<s.length;r+=1){let i=s[r];if(!i.startsWith("-"))return i}return null}function cv(t){if(t.includes("--dangerously-skip-permissions"))return"autoApprove";for(let e=0;e<t.length;e+=1){let n=t[e],s=t[e+1],r=n==="--permission-mode"?s:n.startsWith("--permission-mode=")?n.slice(18):void 0;if(r==="plan")return"plan";if(r==="acceptEdits")return"acceptEdits";if(r==="default")return"normal"}}function uv(t){if(t.includes("--dangerously-bypass-approvals-and-sandbox"))return"autoApprove"}function dv(t,e){let n=Us(e);if(!(!n||n.agent!==t))return t==="claude"?cv(n.args):uv(n.args)}function Ds(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function fv(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function pv(t,e){let n=zi(e);return!n||n.agent!==t||n.viaWrapper?!1:t==="claude"?!n.args.includes("--continue")&&!n.args.includes("-c"):!(n.args[0]==="app-server"&&!n.args.includes("--listen")&&!n.args.some(s=>s.startsWith("--listen=")))}function hv(t){let e=[...new Set(t.sessionFiles)].filter(i=>fv(t.agent,i)),n=lv(t.agent,t.command),s=dv(t.agent,t.command);if(n)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:n,confidence:"high",...s?{approvalMode:s}:{},...e.length===1?{sessionFilePath:e[0]}:{}};if(e.length!==1)return null;let r=Lt(t.agent,e[0]);return r?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:r,confidence:"medium",...s?{approvalMode:s}:{},sessionFilePath:e[0]}:null}function gv(t,e){let n=t,s=e;(Ds(e.confidence)>Ds(t.confidence)||Ds(e.confidence)===Ds(t.confidence)&&e.pid!==void 0&&t.pid!==void 0&&e.pid<t.pid)&&(n=e,s=t);let r=n.approvalMode??s.approvalMode;return{...n,cwd:n.cwd||s.cwd,...r?{approvalMode:r}:{},title:n.title??s.title,sessionFilePath:n.sessionFilePath??s.sessionFilePath,isResponding:n.isResponding??s.isResponding}}function Vi(t){let e=new Map;for(let n of t){let s=`${n.agent}:${n.sessionId}`,r=e.get(s);e.set(s,r?gv(r,n):n)}return[...e.values()]}function mv(t){try{return process.kill(t,0),!0}catch{return!1}}async function Ws(t,e,n=Ky){try{let{stdout:s}=await Jy(t,e,{maxBuffer:8388608,timeout:n});return s}catch(s){let r=typeof s=="object"&&s!==null?{code:"code"in s?s.code:void 0,signal:"signal"in s?s.signal:void 0,killed:"killed"in s?s.killed:void 0}:{},i=String(s);return i.includes("ESRCH")||i.includes("No such process")?Bs.debug({file:t,args:e,timeoutMs:n,error:i,...r},"process scan command skipped \u2014 process exited"):Bs.warn({file:t,args:e,timeoutMs:n,error:i,...r},"process scan command failed"),""}}async function yv(t){if(!t.sessionFilePath)return t;let e=await rt(t.sessionFilePath,t.agent);if(!e)return null;let n=await Yi(t.sessionFilePath,t.agent),s=e.approvalMode??t.approvalMode;return{...t,cwd:t.cwd||e.cwd,...s?{approvalMode:s}:{},title:t.title??e.title,isResponding:n.isResponding}}async function vv(t){return process.platform==="win32"?"":(await Ws("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
97
+ `).find(s=>s.startsWith("n"))?.slice(1).trim()??""}async function Sv(t){if(process.platform==="win32")return[];let n=(await Ws("lsof",["-p",String(t),"-Fn"])).split(`
98
+ `).filter(s=>s.startsWith("n")).map(s=>s.slice(1).trim()).filter(s=>s.endsWith(".jsonl")?s.includes("/.claude/projects/")||s.includes("/.codex/sessions/"):!1);return[...new Set(n)]}function _v(t){return t.split(`
99
+ `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let s=Number(n[1]),r=n[2];if(!Ku(r))return null;let i=Us(r);return!Number.isFinite(s)||!i?null:{pid:s,command:r,agent:i.agent}}).filter(e=>!!e)}async function bv(){let t=await Ws("ps",["-axo","pid=,command="],Qu);return _v(t)}async function wv(){return(await Ws("wmic",["process","get","ProcessId,CommandLine","/FORMAT:CSV"],Qu)).split(`
100
+ `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let s=Number(n[n.length-1]),r=n.slice(1,n.length-1).join(",");if(!Number.isFinite(s)||s===0||!Ku(r))return null;let i=Us(r);return i?{pid:s,command:r,agent:i.agent}:null}).filter(e=>!!e)}async function Iv(){return process.platform==="win32"?wv():bv()}async function Tv(t){let e=_.startTimer("process.scan.pgrep_ms"),n=await Iv();t&&(t.pgrepMs+=e()),t&&(t.matchedProcesses=n.length);let s=n.filter(o=>mv(o.pid));t&&(t.aliveProcesses=s.length);let r=_.startTimer("process.scan.lsof_ms"),i=await Promise.all(s.map(async o=>({pid:o.pid,agent:o.agent,command:o.command,cwd:await vv(o.pid),sessionFiles:await Sv(o.pid)})));return t&&(t.lsofMs+=r()),t&&(t.snapshots=i.length),i}function Av(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Cv(t,e){if(!e)return null;try{if(t==="claude"){let n=(0,st.join)((0,zu.homedir)(),".claude","projects",Av(e)),r=(await(0,Fs.readdir)(n).catch(()=>[])).filter(l=>l.endsWith(".jsonl"));if(r.length===0)return null;let i=null;if(await Promise.all(r.map(async l=>{let u=await(0,Fs.stat)((0,st.join)(n,l)).catch(()=>null);u&&(!i||u.mtimeMs>i.mtimeMs)&&(i={name:l,mtimeMs:u.mtimeMs})})),!i)return null;let o=(0,st.join)(n,i.name),a=Lt(t,o);return a?{sessionId:a,filePath:o}:null}return Zu(e)}catch{return null}}async function kv(){let t={pgrepMs:0,lsofMs:0,fallbackMs:0,hydrateMs:0,totalMs:0,matchedProcesses:0,aliveProcesses:0,snapshots:0,directCandidates:0,fallbackLookups:0,fallbackHits:0,hydratedCandidates:0},e=_.startTimer("process.scan.total_ms"),n=await Tv(t),s=[],r=[];for(let c of n){let d=hv(c);if(d){s.push(d);continue}pv(c.agent,c.command)&&r.push(c)}t.directCandidates=s.length,t.fallbackLookups=r.length;let i=_.startTimer("process.scan.fallback_ms"),o=await Promise.all(r.map(async c=>{let d=await Cv(c.agent,c.cwd);return d?{agent:c.agent,pid:c.pid,cwd:c.cwd,command:c.command,sessionId:d.sessionId,confidence:"low",sessionFilePath:d.filePath}:null}));t.fallbackMs=i(),t.fallbackHits=o.filter(c=>c!==null).length;let a=_.startTimer("process.scan.hydrate_ms"),l=await Promise.all([...s,...o.filter(c=>c!==null)].map(c=>yv(c)));t.hydrateMs=a(),t.hydratedCandidates=l.filter(c=>c!==null).length;let u=Vi(l.filter(c=>c!==null));return t.totalMs=e(),(t.totalMs>=Zy||t.fallbackLookups>0)&&Bs.info({durationMs:t.totalMs,pgrepMs:t.pgrepMs,lsofMs:t.lsofMs,fallbackMs:t.fallbackMs,hydrateMs:t.hydrateMs,matchedProcesses:t.matchedProcesses,aliveProcesses:t.aliveProcesses,snapshots:t.snapshots,directCandidates:t.directCandidates,fallbackLookups:t.fallbackLookups,fallbackHits:t.fallbackHits,hydratedCandidates:t.hydratedCandidates,sessions:u.length},"process running sessions scanned"),Cn={value:u,expiresAt:Date.now()+ev},u}async function Qi(){return Cn&&Date.now()<Cn.expiresAt?Cn.value:An||(An=kv().finally(()=>{An=null}),An)}async function Xu(t){try{return(await Qi()).some(n=>n.sessionId===t)}catch(e){return Bs.warn({sessionId:t,error:String(e)},"isSessionProcessAlive failed, treating as not alive"),!1}}var nd=require("fs"),Fe=require("fs/promises"),Ki=require("os"),xn=require("path");var kn=M.child({module:"activity-watcher"}),xv=12e4,Rv=5e3,Ev=6e4,ed=5;function Pv(){return(0,xn.join)((0,Ki.homedir)(),".claude","projects")}function Mv(){return(0,xn.join)((0,Ki.homedir)(),".codex","sessions")}async function td(t){try{return await(0,Fe.realpath)(t)}catch{return t}}function qs(t,e){return!(!t.endsWith(".jsonl")||e==="claude"&&t.includes("/subagents/"))}var Ji=class{entries=new Map;filePathIndex=new Map;metaInFlight=new Map;roots=new Map;watchers=[];pollTimers=[];rescanTimer=null;listeners=new Set;started=!1;async start(e){if(this.started)return;this.started=!0;let n=await td(e?.claudeDir??Pv()),s=await td(e?.codexDir??Mv());if(this.roots.set(n,"claude"),this.roots.set(s,"codex"),await Promise.all([this.bootstrap("claude",n),this.bootstrap("codex",s)]),this.updateGauges(),e?.usePolling){let r=e.pollingIntervalMs??100;for(let[i,o]of this.roots){let a=setInterval(()=>{this.pollScan(o,i)},r);a.unref?.(),this.pollTimers.push(a)}}else for(let[r,i]of this.roots)this.startNativeWatch(r,i);this.rescanTimer=setInterval(()=>{this.safetyRescan().catch(r=>{kn.warn({error:String(r)},"activity watcher rescan failed")})},Ev),this.rescanTimer.unref?.(),kn.info({seeded:this.entries.size},"activity watcher started")}async stop(){if(this.started){this.started=!1,this.rescanTimer&&(clearInterval(this.rescanTimer),this.rescanTimer=null);for(let e of this.pollTimers)clearInterval(e);this.pollTimers=[];for(let e of this.watchers)try{e.close()}catch{}this.watchers=[],this.entries.clear(),this.filePathIndex.clear(),this.metaInFlight.clear(),this.roots.clear(),this.listeners.clear(),this.updateGauges()}}startNativeWatch(e,n){try{let s=(0,nd.watch)(e,{recursive:!0,persistent:!0},(r,i)=>{if(!i)return;let o=(0,xn.join)(e,i.toString());qs(o,n)&&this.resolveFsEvent(n,o)});s.on("error",r=>{kn.warn({error:String(r),root:e},"activity watcher error")}),this.watchers.push(s)}catch(s){kn.warn({error:String(s),root:e},"failed to start native recursive watch")}}async resolveFsEvent(e,n){let s=await(0,Fe.stat)(n).catch(()=>null);if(!s){this.handleUnlink(n);return}s.isFile()&&await this.handleFsChange(n,s.mtimeMs)}async pollScan(e,n){let s=await this.walkSessionFiles(n,ed),r=new Set,i=!1;for(let{filePath:o,mtimeMs:a}of s){if(!qs(o,e))continue;r.add(o);let l=this.filePathIndex.get(o);if(l){let c=this.entries.get(l);if(!c||a<=c.mtimeMs)continue}await this.ingestPath(e,o,Date.now(),a)&&(i=!0)}for(let[o]of this.filePathIndex)this.identifyAgent(o)===e&&(r.has(o)||(this.handleUnlink(o),i=!0));i&&(this.updateGauges(),this.notify())}identifyAgent(e){for(let[n,s]of this.roots)if(e===n||e.startsWith(`${n}/`))return s;return null}listActive(e=xv){let n=Date.now(),s=n-e,r=n-Rv,i=[];for(let o of this.entries.values())o.lastActivityMs<s||i.push({...o,isResponding:o.lastActivityMs>=r});return i}onActivity(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async bootstrap(e,n){let s=await this.walkSessionFiles(n,ed);await Promise.all(s.map(async({filePath:r,mtimeMs:i})=>{qs(r,e)&&await this.ingestPath(e,r,i,i)}))}async walkSessionFiles(e,n){let s=[],r=async(i,o)=>{if(o>n)return;let a=await(0,Fe.readdir)(i,{withFileTypes:!0}).catch(()=>[]);await Promise.all(a.map(async l=>{let u=(0,xn.join)(i,l.name);if(l.isDirectory()){await r(u,o+1);return}if(!l.isFile()||!l.name.endsWith(".jsonl"))return;let c=await(0,Fe.stat)(u).catch(()=>null);c&&s.push({filePath:u,mtimeMs:c.mtimeMs})}))};return await r(e,0),s}async handleFsChange(e,n){let s=this.identifyAgent(e);if(!s||!qs(e,s))return;let r=Date.now(),i=n??r;await this.ingestPath(s,e,r,i)&&(this.updateGauges(),this.notify())}handleUnlink(e){let n=this.filePathIndex.get(e);n&&(this.filePathIndex.delete(e),this.entries.delete(n),this.updateGauges(),this.notify())}async ingestPath(e,n,s,r){let i=this.filePathIndex.get(n);if(i)return this.touchEntry(i,s,r);let o=`${e}:${n}`,a=this.metaInFlight.get(o);return a||(a=(async()=>{try{let l=await rt(n,e);if(!l)return;let u=`${e}:${l.sessionId}`,c=this.entries.get(u);if(c){c.lastActivityMs=Math.max(c.lastActivityMs,s),c.mtimeMs=Math.max(c.mtimeMs,r),c.filePath!==n&&(this.filePathIndex.delete(c.filePath),c.filePath=n),this.filePathIndex.set(n,u);return}this.entries.set(u,{agent:e,sessionId:l.sessionId,cwd:l.cwd,title:l.title,filePath:n,lastActivityMs:s,mtimeMs:r}),this.filePathIndex.set(n,u)}finally{this.metaInFlight.delete(o)}})(),this.metaInFlight.set(o,a)),await a,this.filePathIndex.has(n)}touchEntry(e,n,s){let r=this.entries.get(e);if(!r)return!1;let i=Math.max(r.lastActivityMs,n),o=Math.max(r.mtimeMs,s);return i===r.lastActivityMs&&o===r.mtimeMs?!1:(r.lastActivityMs=i,r.mtimeMs=o,!0)}async safetyRescan(){if(this.entries.size===0)return;let e=[];for(let[s,r]of this.entries)e.push((async()=>{let i=await(0,Fe.stat)(r.filePath).catch(()=>null);return i?i.mtimeMs>r.mtimeMs?this.touchEntry(s,i.mtimeMs,i.mtimeMs):!1:(this.filePathIndex.delete(r.filePath),this.entries.delete(s),!0)})());(await Promise.all(e)).some(Boolean)&&(this.updateGauges(),this.notify())}notify(){for(let e of this.listeners)try{e()}catch(n){kn.warn({error:String(n)},"activity listener failed")}}updateGauges(){_.gauge("session.activity_watcher.entries",this.entries.size)}__injectEntryForTests(e){let n=`${e.agent}:${e.sessionId}`;this.entries.set(n,{...e}),this.filePathIndex.set(e.filePath,n),this.updateGauges(),this.notify()}__resetForTests(){this.started=!1,this.rescanTimer&&(clearInterval(this.rescanTimer),this.rescanTimer=null);for(let e of this.pollTimers)clearInterval(e);this.pollTimers=[],this.watchers=[],this.entries.clear(),this.filePathIndex.clear(),this.metaInFlight.clear(),this.roots.clear(),this.listeners.clear(),this.updateGauges()}},Nt=new Ji;var He=M.child({module:"inventory"}),ad=6e3,Lv=3e4,Nv=1e4;function Ov(t){return{agent:t.agent,cwd:t.cwd,sessionId:t.sessionId,confidence:"high",sessionFilePath:t.filePath,title:t.title,isResponding:t.isResponding}}async function Dv(){return Nt.listActive().map(Ov)}var ld={listScannedSessions:Mn,listWatcherSessions:Dv,scanRunningSessions:Qi,searchSessionContent:md},ue=Bv(),En=null,Gs=0,$s=0,js=0,Xi=0,Zi=new Set;function Bv(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function Fv(t){return JSON.stringify({sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,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,lastUsage:t.lastUsage,interruptReason:t.interruptReason,stallWarning:t.stallWarning})}function Hv(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 sd(t){return JSON.stringify({scannedSessions:t.scannedSessions.map(Fv).sort(),runningSessions:t.runningSessions.map(Hv).sort()})}function cd(){for(let t of Zi)try{t()}catch(e){He.warn({error:String(e)},"session inventory backfill listener failed")}}function Rn(){_.gauge("session.inventory.external_cached_sessions",ue.scannedSessions.length),_.gauge("session.inventory.external_running_sessions",ue.runningSessions.length),_.gauge("session.inventory.backfill_inflight",En?1:0)}function ud(t){return Zi.add(t),()=>{Zi.delete(t)}}function dd(){return{cachedSessions:ue.scannedSessions.length,runningSessions:ue.runningSessions.length,cacheAgeMs:ue.refreshedAt?Math.max(0,Date.now()-ue.refreshedAt):void 0,backfillInFlight:!!En,lastBackfillDurationMs:js||void 0,lastBackfillCompletedAt:$s?new Date($s).toISOString():void 0,lastBackfillAppliedAt:Xi?new Date(Xi).toISOString():void 0}}Rn();function fd(){return Nt.onActivity(()=>{gd(ld,ad)})}var Ot={daemonActive:3,externalRunning:2,idle:1},rd={high:3,medium:2,low:1};function pd(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function Uv(t,e){let n=t.runtime.needsAttention?1:0,s=e.runtime.needsAttention?1:0,r=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return s-n||i-r||Ot[e.runtime.state]-Ot[t.runtime.state]||pd(t,e)}function Wv(t,e){return Ot[e.state]>Ot[t.state]?e:Ot[e.state]<Ot[t.state]?t:rd[e.confidence]>rd[t.confidence]?e:t}function qv(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function Gv(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function jv(t,e){return e?t?!(Mt(e)&&!Mt(t)):!0:!1}function eo(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function $v(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["record"],runtime:{...eo(),...t.interruptReason||t.stallWarning?{needsAttention:!0}:{}},managed:t.managed,approvalMode:t.approvalMode,lastUsage:t.lastUsage,...t.interruptReason?{interruptReason:t.interruptReason}:{},...t.stallWarning?{stallWarning:t.stallWarning}:{}}}function zv(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",...t.pid!==void 0?{pid:t.pid}:{},...t.command!==void 0?{command:t.command}:{},isResponding:t.isResponding},observedApprovalMode:t.approvalMode}}function Vv(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,model:t.model,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["daemon"],runtime:{state:"daemonActive",confidence:"high",resumeMode:"reuseDriver",needsAttention:t.needsAttention||!!t.interruptReason||!!t.stallWarning||void 0,isResponding:t.isResponding||void 0},managed:t.managed,approvalMode:t.approvalMode,lastUsage:t.lastUsage,...t.interruptReason?{interruptReason:t.interruptReason}:{},...t.stallWarning?{stallWarning:t.stallWarning}:{}}}function Qv(t,e){for(let n of e){let s=`${n.agent}:${n.sessionId}`,r=t.get(s);if(!r){t.set(s,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=jv(r.title,n.title)?n.title:r.title,o=n.cwd||r.cwd,a=n.branch??r.branch,l=Wv(r.runtime,n.runtime),u=r.sources.slice();for(let h of n.sources)u.includes(h)||u.push(h);let c=n.sources.includes("process"),d=r.sources.includes("process")&&!r.sources.includes("daemon"),f=c?r.lastActivityAt:d?n.lastActivityAt:Gv(r.lastActivityAt,n.lastActivityAt);t.set(s,{...r,cwd:o,model:n.model??r.model,branch:a,title:i,createdAt:qv(r.createdAt,n.createdAt),lastActivityAt:f,sources:u,runtime:l,managed:r.managed||n.managed,approvalMode:n.approvalMode??r.approvalMode,observedApprovalMode:n.observedApprovalMode??r.observedApprovalMode,lastUsage:n.lastUsage??r.lastUsage,interruptReason:n.interruptReason??r.interruptReason,stallWarning:n.stallWarning??r.stallWarning})}}function Yv(...t){let e=new Map;for(let n of t)Qv(e,n);return[...e.values()]}function Jv(t,e,n,s,r,i,o){let a=s?.toLowerCase(),l=o&&o>0?o:0,u=t.filter(c=>{if(e&&c.agent!==e||n&&c.cwd!==n)return!1;if(l>0&&c.runtime.state==="idle"){let d=Date.parse(c.lastActivityAt);if(Number.isFinite(d)&&d<l)return!1}if(a){let d=(c.title??"").toLowerCase(),f=i?.[c.sessionId]?.toLowerCase()??"",h=d.includes(a)||(f?f.includes(a):!1),g=r?.has(c.sessionId)??!1;if(!h&&!g)return!1}return!0});return(s||l>0)&&He.info({total:t.length,filtered:u.length,search:s,contentMatchIds:r?.size??0,sinceMs:l||void 0},"filter applied"),u}function Kv(t,e){if(!e)return 0;let n=0,s=t.length;for(;n<s;){let r=n+s>>1,i=t[r];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?s=r:n=r+1}if(n>0){let r=t[n-1];if(r.lastActivityAt===e.lastActivityAt&&r.sessionId===e.sessionId)return n}return 0}function id(t,e,n,s,r,i,o,a,l){let u=i?1/0:Math.max(1,e||50),c=Yv(t.sessionRecords.map($v),t.scannedSessions,t.runningSessions.map(I=>zv(I,t.scannedAt)),t.activeSessions.map(Vv)),d=t.deletedSessionIds?.size?c.filter(I=>!t.deletedSessionIds?.has(I.sessionId)):c,f=Jv(d,s,r,i,o,a,l),h=f.filter(I=>I.runtime.state!=="idle"||I.managed).sort(Uv),g=f.filter(I=>I.runtime.state==="idle"&&!I.managed).sort(pd),m=Kv(g,n),p=g.slice(m,m+u),C=m+p.length<g.length&&p.length>0?{lastActivityAt:p[p.length-1].lastActivityAt,sessionId:p[p.length-1].sessionId}:void 0;return{sessions:n?p:[...h,...p],nextCursor:C}}async function od(t){if(t.sessions.length===0)return t;let e=t.sessions.map(o=>o.cwd),[n,s]=await Promise.all([qu(e),Gu(e)]),r=!1,i=t.sessions.map(o=>{let a=n.get(o.cwd),l=s.get(o.cwd);return o.branch===a&&o.diffStat===l?o:(r=!0,{...o,branch:a,diffStat:l})});return r?{...t,sessions:i}:t}function Pn(t,e,n,s,r,i){return new Promise(o=>{let a=Date.now(),l=!1,u=!1,c=null,d=f=>{l||(l=!0,c&&(clearTimeout(c),c=null),o(f))};c=setTimeout(()=>{if(l)return;let f=Array.isArray(r)&&r.length>0;He.warn({source:t,timeoutMs:s,durationMs:Date.now()-a,partial:f?r.length:0},f?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),u=!0,d(f?r:n)},s),typeof c=="object"&&"unref"in c&&c.unref(),e().then(f=>{let h=u;if(d(f),h&&i)try{i(f)}catch(g){He.warn({source:t,error:String(g)},"inventory source late-result handler failed")}}).catch(f=>{l||He.warn({source:t,error:String(f)},"session inventory source failed, using fallback"),d(n)})})}function Xv(t=Date.now()){return ue.refreshedAt===0||t-ue.refreshedAt>=Nv}async function hd(t,e){let[n,s]=await Promise.all([Pn("watcher.running_sessions",()=>t.listWatcherSessions(),[],e),Pn("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return Vi([...n,...s])}async function Zv(t,e){let n=new Date().toISOString(),s=[],[r,i]=await Promise.all([Pn("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,s),[],e,s),hd(t,e)]);return{scannedSessions:r,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function gd(t,e){if(En)return;let n=Gs,s=_.startTimer("session.inventory.backfill_latency_ms");En=Zv(t,e).then(r=>{if(n!==Gs)return;let i=sd(ue);ue=r;let o=sd(r),a=s();js=a,$s=Date.now(),Rn(),i!==o&&(Xi=Date.now(),_.increment("session.inventory.backfill_applied"),He.info({durationMs:a,scanned:r.scannedSessions.length,running:r.runningSessions.length},"session inventory external backfill applied"),cd())}).catch(r=>{n===Gs&&(js=s(),$s=Date.now(),Rn(),He.warn({error:String(r),durationMs:js},"session inventory external backfill failed"))}).finally(()=>{n===Gs&&(En=null,Rn())}),Rn()}async function zs(t){let e={...ld,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??ad),s=t.sourceTimeoutMs!==void 0?n:Lv;if(!t.search){let f=_.startTimer("session.inventory.fast_path_latency_ms");Xv()&&gd(e,n);let h=ue,g=id({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:h.scannedSessions,runningSessions:h.runningSessions,scannedAt:h.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,void 0,void 0,t.customTitles,t.sinceMs);if(t.skipGitMetadata)return f(),g;let m=await od(g);return f(),m}let r=[],i=new Date().toISOString(),o=t.search,a=t.sinceMs,[l,u,c]=await Promise.all([Pn("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),hd(e,n),Pn("scanner.search_content",()=>e.searchSessionContent(o,t.agent,a),void 0,s,void 0,f=>{f&&f.size>0&&cd()})]);He.info({search:t.search,sinceMs:a&&a>0?a:void 0,contentMatches:c?.size??0,scanned:l.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let d=id({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:l,runningSessions:u,scannedAt:i,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,o,c,t.customTitles,a);return t.skipGitMetadata?d:od(d)}var Ae=M.child({module:"scanner"});function lo(t){let e=new Map;return{get(n){let s=e.get(n);if(s){if(Date.now()>s.expiresAt){e.delete(n);return}return s.value}},set(n,s){e.set(n,{value:s,expiresAt:Date.now()+t})},clear(){e.clear()}}}var co=3e4,ro=lo(co),io=lo(co),Qs=lo(co),to=new Map,no=new Map,Vs=null,it=24;function Ks(){ro.clear(),io.clear(),Qs.clear()}function Td(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ot(t,e,n){if(t.length===0)return[];let s=Math.max(1,Math.min(e,t.length)),r=new Array(t.length),i=0;return await Promise.all(Array.from({length:s},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;r[o]=await n(t[o],o)}})),r}async function Ad(t){let e=await ot(t,it,async n=>{let s=await(0,O.stat)(n).catch(()=>null);return{path:n,mtimeMs:s?.mtimeMs??0}});return e.sort((n,s)=>s.mtimeMs-n.mtimeMs),e}async function eS(){let t=(0,F.join)((0,ye.homedir)(),".claude","projects"),e=[],n=await(0,O.readdir)(t,{withFileTypes:!0}).catch(()=>[]);for(let s of n){if(!s.isDirectory())continue;let r=(0,F.join)(t,s.name),i=await(0,O.readdir)(r).catch(()=>[]);for(let o of i)o.endsWith(".jsonl")&&e.push((0,F.join)(r,o))}return e}async function tS(){let t=(0,F.join)((0,ye.homedir)(),".codex","sessions"),e=[],n=await(0,O.readdir)(t).catch(()=>[]);for(let s of n){let r=(0,F.join)(t,s),i=await(0,O.readdir)(r).catch(()=>[]);for(let o of i){let a=(0,F.join)(r,o),l=await(0,O.readdir)(a).catch(()=>[]);for(let u of l){let c=(0,F.join)(a,u),d=await(0,O.readdir)(c).catch(()=>[]);for(let f of d)f.endsWith(".jsonl")&&e.push((0,F.join)(c,f))}}}return e}async function uo(){let t=await tS();return Ad(t)}function nS(t){let e=`codex-latest:${(0,ye.homedir)()}`,n=new Map;for(let s of t)n.has(s.cwd)||n.set(s.cwd,s.match);Qs.set(e,n)}function*Cd(t,e){let n=0,s=0;for(;n<t.length&&s<e;){let r=t.indexOf(`
101
+ `,n);r===-1&&(r=t.length);let i=t.substring(n,r);n=r+1,!(i.length===0||i.trim().length===0)&&(yield i,s+=1)}}var so=512*1024,yd=256*1024;async function kd(t,e){if(e<=so)return(0,O.readFile)(t,"utf-8");let n=await(0,O.open)(t,"r");try{let s=Buffer.alloc(so),{bytesRead:r}=await n.read(s,0,so,0);return s.toString("utf-8",0,r)}finally{await n.close()}}async function xd(t,e){if(e<=yd)return(0,O.readFile)(t,"utf-8");let n=await(0,O.open)(t,"r");try{let s=Math.max(0,e-yd),r=Buffer.alloc(e-s),{bytesRead:i}=await n.read(r,0,r.length,s);return r.toString("utf-8",0,i)}finally{await n.close()}}function vd(t){switch(t){case"plan":return"plan";case"acceptEdits":return"acceptEdits";case"bypassPermissions":return"autoApprove";case"default":return"normal";default:return}}function sS(t){let e=typeof t?.approval_policy=="string"?t.approval_policy:"",n=t?.sandbox_policy,s=typeof n?.type=="string"?n.type:"",r=Array.isArray(n?.writable_roots)?n.writable_roots:null;if(e==="never"&&s==="danger-full-access")return"autoApprove";if(e==="on-request"&&s==="workspace-write")return r?.length?"normal":"plan"}function rS(t){return t?.type==="permission-mode"?vd(t.permissionMode):vd(t?.permissionMode)}function iS(t){if(t?.type==="turn_context")return sS(t.payload)}function oS(t){if(t?.type!=="event_msg"||t.payload?.type!=="token_count")return;let e=t.payload.info;if(!e||typeof e!="object")return;let n=e.last_token_usage;if(!n||typeof n!="object")return;let s=Number(n.input_tokens),r=Number(n.output_tokens);if(!Number.isFinite(s)||!Number.isFinite(r))return;let i=Number(e.model_context_window);return{inputTokens:s,outputTokens:r,...Number.isFinite(i)&&i>0?{contextWindowTokens:i}:{}}}async function aS(t,e){let n,s,r=await xd(t,e);for(let i of r.split(`
102
+ `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=iS(o);a&&(n=a);let l=oS(o);l&&(s=l)}return{approvalMode:n,lastUsage:s}}function Sd(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.input_tokens??e.inputTokens),s=Number(e.output_tokens??e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(s))return;let r=Number(e.cache_creation_input_tokens??e.cacheCreationInputTokens),i=Number(e.cache_read_input_tokens??e.cacheReadInputTokens);return{inputTokens:n,outputTokens:s,...Number.isFinite(r)?{cacheCreationInputTokens:r}:{},...Number.isFinite(i)?{cacheReadInputTokens:i}:{}}}function lS(t){return t?.type==="assistant"?Sd(t.message?.usage??t.usage):Sd(t?.toolUseResult?.usage)}async function Rd(t,e){let n,s,r=await xd(t,e);for(let i of r.split(`
103
+ `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=rS(o);a&&(n=a);let l=lS(o);l&&(s=l)}return{approvalMode:n,lastUsage:s}}function fo(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 Ed(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?fo(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function Xs(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 cS=/^\[Attached image: ([^\n]+)\]$/gm;function uS(t){let e=[],n=new Set;for(let s of t.matchAll(cS)){let r=s[1]?.trim();!r||n.has(r)||(n.add(r),e.push(r))}return e}function dS(t){if(t.role!=="user")return t;let e=[...t.images??[],...uS(t.content)].filter((n,s,r)=>n&&r.indexOf(n)===s);return e.length?{...t,images:e}:t}var fS=["<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 pS(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?fS.some(s=>n.startsWith(s)):!1}function Zs(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=Xs(t.message.content);return pS(t,e)?"":e}function hS(t){return Array.isArray(t)&&t.some(e=>e&&typeof e=="object"&&e.type==="tool_result")}function gS(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(s=>!s||typeof s!="object"?"":typeof s.text=="string"?s.text:typeof s.content=="string"?s.content:"").filter(Boolean).join(`
104
104
  `):""}).filter(Boolean).join(`
105
- `):""}function eS(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(`
106
- `):""}function dd(t){if(typeof t=="string")return t;let e=eS(t);return e||(Array.isArray(t)&&t.length>0&&t.every(s=>s&&typeof s=="object"&&s.type==="tool_reference")?"":JSON.stringify(t))}var tS=/Claude requested permissions to (?:edit|write to) (.+?) which is a sensitive file\.?$/i;function nS(t){let n=t.match(tS)?.[1]?.trim();return n||null}function sS(t){return{role:"assistant",type:"info",historyKey:`claude-sensitive-file:${t}`,content:`Vibelet \u63D0\u793A\uFF1AClaude \u628A ${t} \u89C6\u4E3A\u654F\u611F\u8DEF\u5F84\u3002\u8FD9\u7C7B\u6279\u51C6\u65E0\u6CD5\u4ECE\u5DF2\u6709\u4F1A\u8BDD\u8BB0\u5F55\u91CC\u8865\u56DE\u5230 Vibelet\u3002\u8BF7\u91CD\u65B0\u6267\u884C\u8FD9\u6B21\u4FEE\u6539\u5E76\u5728 Claude \u4E2D\u660E\u786E\u6279\u51C6\uFF1B\u5982\u679C\u5E0C\u671B\u5728 Vibelet \u91CC\u770B\u5230\u5BA1\u6279\u5F39\u7A97\uFF0C\u8BF7\u4ECE Vibelet \u542F\u52A8\u6216\u7EE7\u7EED\u8FD9\u4E2A\u4F1A\u8BDD\u3002`}}function rS(t){let e=Zv(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 wd(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function $s(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,observedApprovalMode:t.approvalMode,lastUsage:t.lastUsage,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:Vi()}}function Lt(t,e){let n=(0,F.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 iS(t,e){let n=await vd(t,e),s=yd(n,64),r="",i="",o,a,l;for(let c of s){let d;try{d=JSON.parse(c)}catch{continue}if(!r&&typeof d.cwd=="string"&&(r=d.cwd),!i&&typeof d.sessionId=="string"&&(i=d.sessionId),o||(o=nt([d.customTitle,d.summary])),!l){let f=Ys(d),h=nt([],f);h&&(a=f,l=h)}if(r&&(o||l))break}if(!r)return null;let u=await _d(t,e);return{sessionId:i||Lt("claude",t)||(0,F.basename)(t,".jsonl"),cwd:r,title:o??l??nt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function oS(t,e){let n=await vd(t,e),s=yd(n,96),r="",i="",o,a,l;for(let c of s){let d;try{d=JSON.parse(c)}catch{continue}if(r||(r=d.payload?.cwd??d.cwd??""),i||(i=d.payload?.id??d.id??""),o||(o=nt([d.payload?.title,d.title])),!l){let f=bd(d),h=f&&!wd(f)?nt([],f):void 0;h&&(a=f,l=h)}if(r&&(o||l))break}if(!r)return null;let u=await $v(t,e);return{sessionId:i||Lt("codex",t)||(0,F.basename)(t,".jsonl"),cwd:r,title:o??l??nt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function rt(t,e){let n=await(0,O.stat)(t).catch(()=>null);if(!n)return null;try{let s=n.size;if(e==="claude"){let i=await iS(t,s);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,approvalMode:i.approvalMode,lastUsage:i.lastUsage,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let r=await oS(t,s);return r?{sessionId:r.sessionId,agent:e,cwd:r.cwd,title:r.title,approvalMode:r.approvalMode,lastUsage:r.lastUsage,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function fd(t,e){let n=(0,F.join)((0,ye.homedir)(),".claude","projects");try{let s;t?s=[gd(t)]:s=(await(0,O.readdir)(n,{withFileTypes:!0})).filter(u=>u.isDirectory()).map(u=>u.name);let r=[];for(let l of s){let u=(0,F.join)(n,l),c=await(0,O.readdir)(u).catch(()=>[]);for(let d of c)d.endsWith(".jsonl")&&r.push((0,F.join)(u,d))}let i=await ot(r,it,async l=>{let u=await(0,O.stat)(l).catch(()=>null);return{path:l,mtimeMs:u?.mtimeMs??0}});return i.sort((l,u)=>u.mtimeMs-l.mtimeMs),(await ot(i,it,async l=>{let u=await rt(l.path,"claude");return u&&e&&e.push($s(u)),u})).filter(l=>l!==null).map(l=>$s(l)).sort((l,u)=>u.lastActivityAt.localeCompare(l.lastActivityAt))}catch(s){return Ae.warn({error:String(s)},"failed to list claude sessions"),[]}}async function pd(t,e){try{let n=await so(),s=await ot(n,it,async i=>{let o=await rt(i.path,"codex");return o&&e&&(!t||o.cwd===t)&&e.push($s(o)),o});return Uv(s.map((i,o)=>i?{cwd:i.cwd,match:{path:n[o].path,mtimeMs:n[o].mtimeMs,sessionId:i.sessionId}}:null).filter(i=>i!==null)),s.filter(i=>i!==null).filter(i=>!t||i.cwd===t).map(i=>$s(i)).sort((i,o)=>o.lastActivityAt.localeCompare(i.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list codex sessions"),[]}}async function ju(t){if(!t)return null;let e=`codex-latest:${(0,ye.homedir)()}`,n=js.get(e);if(n){let i=n.get(t);return i?{sessionId:i.sessionId,filePath:i.path}:null}Gs||(Gs=(async()=>{let i=await so(),o=await ot(i,it,async l=>{let u=await rt(l.path,"codex");return u?{cwd:u.cwd,match:{path:l.path,mtimeMs:l.mtimeMs,sessionId:u.sessionId}}:null}),a=new Map;for(let l of o)!l||a.has(l.cwd)||a.set(l.cwd,l.match);return js.set(e,a),a})().finally(()=>{Gs=null}));let r=(await Gs).get(t);return r?{sessionId:r.sessionId,filePath:r.path}:null}async function Pn(t,e,n){let r=`list:${(0,ye.homedir)()}:${t??"all"}:${e??""}`,i=Ki.get(r);if(i)return i;let o=Qi.get(r);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await fd(e,n);else if(t==="codex")l=await pd(e,n);else{let[u,c]=await Promise.all([fd(e,n),pd(e,n)]);l=[...u,...c].sort((d,f)=>f.lastActivityAt.localeCompare(d.lastActivityAt))}return Ki.set(r,l),l})();return Qi.set(r,a),a.finally(()=>Qi.delete(r)),a}async function ad(t,e,n){let r=`search:${(0,ye.homedir)()}:${t}:${e??"all"}:${n??"all"}`,i=Xi.get(r);if(i)return i;let o=Yi.get(r);if(o)return o;let a=(async()=>{let l=new Set,u=t.toLowerCase(),c=n??0;function d(g){if(c<=0)return g;let p=g.findIndex(m=>m.mtimeMs<c);return p===-1?g:g.slice(0,p)}async function f(){try{let g=await Fv(),p=d(await md(g)),m=await ot(p,it,y=>hd(y.path,u,"claude"));for(let y of m)y&&l.add(y)}catch(g){Ae.warn({error:String(g)},"failed to search claude files")}}async function h(){try{let g=d(await so()),p=await ot(g,it,m=>hd(m.path,u,"codex"));for(let m of p)m&&l.add(m)}catch(g){Ae.warn({error:String(g)},"failed to search codex files")}}return e==="claude"?await f():e==="codex"?await h():await Promise.all([f(),h()]),Xi.set(r,l),l})();return Yi.set(r,a),a.finally(()=>Yi.delete(r)),a}async function hd(t,e,n){let s=(0,Zi.createReadStream)(t,{encoding:"utf-8"}),r=(0,eo.createInterface)({input:s,crlfDelay:1/0}),i=n==="claude"?aS:lS,o="",a=!1;try{for await(let l of r){if(!l.trim())continue;let u;try{u=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof u.sessionId=="string"&&(o=u.sessionId):o=u.payload?.id??u.id??""),!a){let c=i(u);c&&c.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{r.close(),s.destroy()}return a?o||Lt(n,t):null}function aS(t){return t?.type==="user"&&t.message?.role==="user"?Ys(t):t?.type==="assistant"&&t.message?.role==="assistant"?Qs(t.message.content):""}function lS(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return ro(t.payload.content)}let e=bd(t);return e||""}async function zs(t,e){let n=(0,Zi.createReadStream)(t,{encoding:"utf-8"}),s=(0,eo.createInterface)({input:n,crlfDelay:1/0});try{for await(let r of s){if(!r.trim())continue;let i;try{i=JSON.parse(r)}catch{continue}if(e(i))break}}finally{s.close(),n.destroy()}}async function io(t,e){let n=(0,F.join)((0,ye.homedir)(),".claude","projects"),s=e?gd(e):null,r=await(0,O.readdir)(n).catch(()=>[]),i=s?[s,...r.filter(o=>o!==s)]:r;for(let o of i){let a=(0,F.join)(n,o,`${t}.jsonl`);if((await(0,O.stat)(a).catch(()=>null))?.isFile())return a}return null}async function Id(t,e){let n=await io(t,e);if(!n)return;let s=await(0,O.stat)(n).catch(()=>null);return s?.isFile()?(await _d(n,s.size)).lastUsage:void 0}async function oo(t,e,n){if(e==="claude")return io(t,n);let s=(0,F.join)((0,ye.homedir)(),".codex","sessions");return Ad(s,t)}function cS(t){if(t?.type==="user"&&t.message?.role==="user")return Xv(t.message.content)?{kind:"toolResult",...rS(t)?{interrupted:!0}:{}}:Ys(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=Qs(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 uS(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 qi(t,e){if(e!=="claude")return{};let n=null;try{await zs(t,s=>{let r=cS(s);r&&(n=r)})}catch(s){return s.code!=="ENOENT"&&Ae.warn({filePath:t,error:String(s)},"failed to read session runtime hints"),{}}return uS(n)}async function ao(t,e,n){let s=await oo(t,e,n);return s?qi(s,e):{}}function dS(t){if(typeof t?.timestamp!="string")return null;let e=Date.parse(t.timestamp);return Number.isFinite(e)?e:null}async function Td(t,e,n,s){if(e!=="codex"||!s||s<=0)return[];let r=await oo(t,e,n);if(!r)return[];let i=[];try{await zs(r,l=>{let u=dS(l);u!=null&&u<s||i.push(...xi(l,{cwd:n,includePatchCalls:!1}))})}catch(l){return l.code!=="ENOENT"&&Ae.warn({filePath:r,error:String(l)},"failed to read generated file notices"),[]}let o=await uu(i,s),a=Te(o);return a?[a]:[]}async function Mn(t,e,n){let s=[],r=(i,o)=>{let a=Yv(i);if(o?.coalesceConsecutiveAssistant&&a.role==="assistant"){let l=s[s.length-1];if(l?.role==="assistant"&&l.type!=="info"&&a.type!=="info"&&!cu(l.content)){s[s.length-1]=a;return}}s.push(a)};if(e==="claude")try{let i=await io(t,n);if(i){let o=new Map;await zs(i,a=>{if(a.type==="assistant"&&a.message?.role==="assistant"&&Array.isArray(a.message.content))for(let l of a.message.content){if(!l||typeof l!="object"||l.type!=="tool_use"||typeof l.id!="string")continue;let u=As(typeof l.name=="string"?l.name:null,l.input&&typeof l.input=="object"?l.input:null,n);u&&o.set(l.id,u)}if(a.type==="user"&&a.message?.role==="user"){if(Array.isArray(a.message.content))for(let u of a.message.content){if(!u||typeof u!="object"||u.type!=="tool_result")continue;if(u.is_error===!0){let g=dd(u.content),p=nS(g);p&&r(sS(p));continue}let c=typeof u.tool_use_id=="string"?u.tool_use_id:"",d=c?o.get(c):void 0;if(!d)continue;let f=dd(u.content);if(!ks(a.toolUseResult,f))continue;let h=Te([d]);h&&r({role:"assistant",content:h})}let l=Ys(a);l&&r({role:"user",content:l})}else if(a.type==="assistant"&&a.message?.role==="assistant"){let l=Qs(a.message.content);l&&r({role:"assistant",content:l})}})}}catch(i){Ae.warn({error:String(i)},"failed to read claude session history")}else if(e==="codex")try{let i=await oo(t,e,n);i&&await zs(i,o=>{let a=xi(o,{cwd:n,includePatchCalls:!0}),l=Te(a);if(l&&r({role:"assistant",content:l}),o.type!=="response_item"||o.payload?.type!=="message")return;let u=o.payload.role;if(u!=="user"&&u!=="assistant")return;let c=ro(o.payload.content);c&&(u==="user"&&wd(c)||r({role:u,content:c},{coalesceConsecutiveAssistant:!0}))})}catch(i){Ae.warn({error:String(i)},"failed to read codex session history")}return s}async function Ad(t,e){try{let n=await(0,O.readdir)(t,{withFileTypes:!0});for(let s of n){let r=(0,F.join)(t,s.name);if(s.isDirectory()){let i=await Ad(r,e);if(i)return i}else if(s.name.includes(e)&&s.name.endsWith(".jsonl"))return r}}catch(n){Ae.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Bt=require("fs"),Rd=require("path");var fS=500,kd=200;function Cd(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=kd?e:e.slice(-kd)}function pS(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 hS(t){if(!t||typeof t!="object"||Array.isArray(t))return{};let e={};for(let[n,s]of Object.entries(t))typeof n!="string"||n.length===0||typeof s!="string"||s.length===0||n===s||(e[n]=s);return e}function gS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",s=typeof e.toolName=="string"?e.toolName:"",r=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!s||!r)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:s,input:i,description:r,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:s,input:i,description:r}}function mS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(e.kind!=="stall_timeout"&&e.kind!=="driver_crash"||typeof e.at!="string"||!e.at||typeof e.humanText!="string"||!e.humanText)return;let n={kind:e.kind,at:e.at,humanText:e.humanText};return typeof e.lastPrompt=="string"&&e.lastPrompt&&(n.lastPrompt=e.lastPrompt),typeof e.idleMs=="number"&&Number.isFinite(e.idleMs)&&(n.idleMs=e.idleMs),typeof e.exitCode=="number"&&Number.isFinite(e.exitCode)&&(n.exitCode=e.exitCode),n}function yS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(typeof e.content!="string"||typeof e.enqueuedAt!="string"||!e.enqueuedAt)return;let n={content:e.content,enqueuedAt:e.enqueuedAt};if(typeof e.clientMessageId=="string"&&e.clientMessageId&&(n.clientMessageId=e.clientMessageId),typeof e.model=="string"&&e.model&&(n.model=e.model),Array.isArray(e.images)){let s=e.images.filter(r=>typeof r=="string"&&r.length>0);s.length>0&&(n.images=s)}return n}function vS(t){if(!Array.isArray(t))return;let e=[];for(let n of t){let s=yS(n);s&&e.push(s)}return e.length>0?e:void 0}function SS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(typeof e.at!="string"||!e.at||typeof e.humanText!="string"||!e.humanText)return;let n={at:e.at,humanText:e.humanText};return typeof e.idleMs=="number"&&Number.isFinite(e.idleMs)&&(n.idleMs=e.idleMs),typeof e.hardTimeoutMs=="number"&&Number.isFinite(e.hardTimeoutMs)&&(n.hardTimeoutMs=e.hardTimeoutMs),n}function _S(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.inputTokens),s=Number(e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(s))return;let r=Number(e.contextWindowTokens),i=Number(e.cacheCreationInputTokens),o=Number(e.cacheReadInputTokens);return{inputTokens:n,outputTokens:s,...Number.isFinite(i)&&i>=0?{cacheCreationInputTokens:i}:{},...Number.isFinite(o)&&o>=0?{cacheReadInputTokens:o}:{},...Number.isFinite(r)&&r>0?{contextWindowTokens:r}:{}}}function xd(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:Cd(t.acceptedClientMessageIds),interruptedClientMessageIds:Cd(t.interruptedClientMessageIds),pendingApproval:gS(t.pendingApproval),lastUsage:_S(t.lastUsage),interruptReason:mS(t.interruptReason),stallWarning:SS(t.stallWarning),pendingQueue:vS(t.pendingQueue)}}function bS(t){if(Array.isArray(t))return{records:t.map(xd),deletedSessionIds:[],sessionAliases:{}};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(xd):[],deletedSessionIds:pS(e.deletedSessionIds),sessionAliases:hS(e.sessionAliases)}}return{records:[],deletedSessionIds:[],sessionAliases:{}}}var Js=class{records;deletedSessionIds;sessionAliases;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds),this.sessionAliases=new Map(Object.entries(e.sessionAliases))}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}resolveSessionId(e){let n=e,s=new Set;for(;!s.has(n);){s.add(n);let r=this.sessionAliases.get(n);if(!r||r===n)break;n=r}return n}find(e){let n=this.resolveSessionId(e);return this.records.find(s=>s.sessionId===n)}isDeleted(e){let n=this.resolveSessionId(e);return this.deletedSessionIds.has(e)||this.deletedSessionIds.has(n)}upsert(e){this.deletedSessionIds.delete(e.sessionId),this.sessionAliases.delete(e.sessionId);let n=this.records.findIndex(s=>s.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}addAlias(e,n){if(!e||!n)return;let s=this.resolveSessionId(n);if(!s||e===s){this.sessionAliases.delete(e),this.deletedSessionIds.delete(e),this.scheduleSave();return}this.deletedSessionIds.delete(e),this.sessionAliases.set(e,s),this.scheduleSave()}forget(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.delete(e),this.scheduleSave()}remove(e){let n=this.resolveSessionId(e);this.records=this.records.filter(r=>r.sessionId!==e&&r.sessionId!==n);let s=[];for(let[r,i]of this.sessionAliases)(r===e||r===n||i===n)&&(this.sessionAliases.delete(r),s.push(r));this.deletedSessionIds.add(n),e!==n&&this.deletedSessionIds.add(e);for(let r of s)this.deletedSessionIds.add(r);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()},fS)}loadFromDisk(){try{let e=(0,Bt.readFileSync)(gs,"utf-8");return bS(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[],sessionAliases:{}}}saveToDisk(){(0,Bt.mkdirSync)((0,Rd.dirname)(gs),{recursive:!0}),(0,Bt.writeFileSync)(gs,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds],sessionAliases:Object.fromEntries(this.sessionAliases)},null,2))}};var Dt=require("path"),Ed=require("os");function Ks(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Dt.join)((0,Ed.homedir)(),t.slice(2)):t}function wS(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let s=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return s&&(e=s[1]??e),e}function lo(t,e){let n=Ks(wS(t));if(!n||(0,Dt.isAbsolute)(n))return n;let s=Ks(e??"");return s?(0,Dt.resolve)(s,n):n}var Pd={approvalRequestV1:"vibelet.approvalRequest.v1"};var Ft=require("fs"),Md=require("path");function IS(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")&&(typeof t.locale=="string"||typeof t.locale>"u"))}function TS(t){try{let e=(0,Ft.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(IS):[]}catch{return[]}}function Ln(t,e){(0,Ft.mkdirSync)((0,Md.dirname)(t),{recursive:!0}),(0,Ft.writeFileSync)(t,JSON.stringify(e,null,2)+`
107
- `,"utf8")}var Xs=class{constructor(e=Wc){this.pushSubscriptionsPath=e;this.records=TS(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}listRecipients(){return this.records.map(e=>({pushToken:e.pushToken,...e.locale?{locale:e.locale}:{}}))}count(){return this.records.length}register(e,n,s){let r=new Date().toISOString(),i=this.records.find(l=>l.deviceId===e),o=s??i?.locale,a={deviceId:e,pushToken:n,platform:"expo",createdAt:i?.createdAt??r,updatedAt:r,...i?.lastSentAt?{lastSentAt:i.lastSentAt}:{},...o?{locale:o}:{}};this.records=[a,...this.records.filter(l=>l.deviceId!==e&&l.pushToken!==n)],Ln(this.pushSubscriptionsPath,this.records)}unregister(e,n){let s=this.records.filter(r=>!(r.deviceId===e&&r.pushToken===n));return s.length===this.records.length?!1:(this.records=s,Ln(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(s=>s.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,Ln(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),s=new Date().toISOString(),r=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=s,r=!0);r&&Ln(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],Ln(this.pushSubscriptionsPath,this.records)}};var K=N.child({module:"push"}),AS="https://exp.host/--/api/v2/push/send",kS="https://exp.host/--/api/v2/push/getReceipts",CS=[0,1e3,3e3],Nn=new Xs;function xS(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 RS(t){return new Promise(e=>{setTimeout(e,t)})}function Ld(t){return t==="DeviceNotRegistered"}function ES(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],s=[];for(let[r,i]of t.data.entries()){let o=e[r];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}s.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:s}}function PS(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[s,r]of t.data.entries()){let i=e[s];!i||!r||r.status!=="ok"||typeof r.id!="string"||r.id.length===0||n.set(r.id,i)}return n}function MS(t,e){let n=[],s=[],r=t.data;for(let[i,o]of e.entries()){let a=r?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&s.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:s}}async function LS(t,e,n,s){let r=new Map(t);for(let i of CS){if(r.size===0)return;i>0&&await n(i);let o;try{o=await e(kS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...r.keys()]})})}catch(c){K.error({error:String(c),count:r.size},"push receipt request failed");return}if(!o.ok){K.error({status:o.status,statusText:o.statusText,count:r.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){K.error({count:r.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:u}=MS(a,r);for(let{token:c,receipt:d}of u){let f=d.details?.error;if(K.error({token:c,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),Ld(f)){let h=s.unregisterToken(c);K.info({token:c,errorCode:f,removed:h},"push token removed after receipt rejection")}}r=new Map(l.map(c=>[c,r.get(c)]))}r.size>0&&K.warn({pendingReceipts:r.size},"push receipts still pending after polling")}function NS(t){let e=t?.pushStore??Nn,n=t?.fetchImpl??globalThis.fetch,s=t?.sleepImpl??RS;return async function(i,o){let a=e.listRecipients();if(a.length===0)return;let l=typeof i=="function"?i:()=>i,u=a.map(d=>d.pushToken),c=a.map(({pushToken:d,locale:f})=>{let{title:h,body:g}=l(f);return{to:d,sound:"default",title:h,body:g,data:o,badge:1,priority:"high",_contentAvailable:!0,...xS(o)&&o.eventType==="approval_request"?{categoryId:Pd.approvalRequestV1}:{}}});try{let d=await n(AS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!d.ok){K.error({status:d.status,statusText:d.statusText},"push send failed");return}let f=await d.json().catch(()=>null);if(!f){K.error({count:c.length},"push send returned unreadable response");return}let{successfulTokens:h,ticketErrors:g}=ES(f,u),p=PS(f,u);for(let{token:m,ticket:y}of g){let C=y.details?.error;if(K.error({token:m,message:y.message,details:y.details,ticketStatus:y.status},"push ticket rejected"),Ld(C)){let _=e.unregisterToken(m);K.info({token:m,errorCode:C,removed:_},"push token removed after ticket rejection")}}h.length>0&&(K.debug({count:h.length},"push sent"),e.markSent(h)),p.size>0&&await LS(p,n,s,e)}catch(d){K.error({error:String(d)},"push send error")}}}function co(t,e,n){Nn.register(t,e,n),K.info({deviceId:t,token:e,locale:n,total:Nn.count()},"push token registered")}function uo(t,e){let n=Nn.unregister(t,e);K.info({deviceId:t,token:e,total:Nn.count(),removed:n},"push token unregistered")}var Zs=NS();var w=N.child({module:"manager"}),OS="Done.",BS="Approval required",Nd=180,Ut=200,DS=6e4,Od=9e4,FS=new Set([".png",".jpg",".jpeg",".gif",".webp",".heic",".heif",".bmp",".svg"]);function $d(t,e){let n=e?.length?e.map(s=>{let r=s.lastIndexOf("."),i=r>=0?s.slice(r).toLowerCase():"";return`[Attached ${FS.has(i)?"image":"file"}: ${s}]`}).join(`
105
+ `):""}function mS(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(`
106
+ `):""}function _d(t){if(typeof t=="string")return t;let e=mS(t);return e||(Array.isArray(t)&&t.length>0&&t.every(s=>s&&typeof s=="object"&&s.type==="tool_reference")?"":JSON.stringify(t))}var yS=/Claude requested permissions to (?:edit|write to) (.+?) which is a sensitive file\.?$/i;function vS(t){let n=t.match(yS)?.[1]?.trim();return n||null}function SS(t){return{role:"assistant",type:"info",historyKey:`claude-sensitive-file:${t}`,content:`Vibelet \u63D0\u793A\uFF1AClaude \u628A ${t} \u89C6\u4E3A\u654F\u611F\u8DEF\u5F84\u3002\u8FD9\u7C7B\u6279\u51C6\u65E0\u6CD5\u4ECE\u5DF2\u6709\u4F1A\u8BDD\u8BB0\u5F55\u91CC\u8865\u56DE\u5230 Vibelet\u3002\u8BF7\u91CD\u65B0\u6267\u884C\u8FD9\u6B21\u4FEE\u6539\u5E76\u5728 Claude \u4E2D\u660E\u786E\u6279\u51C6\uFF1B\u5982\u679C\u5E0C\u671B\u5728 Vibelet \u91CC\u770B\u5230\u5BA1\u6279\u5F39\u7A97\uFF0C\u8BF7\u4ECE Vibelet \u542F\u52A8\u6216\u7EE7\u7EED\u8FD9\u4E2A\u4F1A\u8BDD\u3002`}}function _S(t){let e=gS(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 Pd(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function Ys(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,observedApprovalMode:t.approvalMode,lastUsage:t.lastUsage,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:eo()}}function Lt(t,e){let n=(0,F.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 bS(t,e){let n=await kd(t,e),s=Cd(n,64),r="",i="",o,a,l;for(let c of s){let d;try{d=JSON.parse(c)}catch{continue}if(!r&&typeof d.cwd=="string"&&(r=d.cwd),!i&&typeof d.sessionId=="string"&&(i=d.sessionId),o||(o=nt([d.customTitle,d.summary])),!l){let f=Zs(d),h=nt([],f);h&&(a=f,l=h)}if(r&&(o||l))break}if(!r)return null;let u=await Rd(t,e);return{sessionId:i||Lt("claude",t)||(0,F.basename)(t,".jsonl"),cwd:r,title:o??l??nt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function wS(t,e){let n=await kd(t,e),s=Cd(n,96),r="",i="",o,a,l;for(let c of s){let d;try{d=JSON.parse(c)}catch{continue}if(r||(r=d.payload?.cwd??d.cwd??""),i||(i=d.payload?.id??d.id??""),o||(o=nt([d.payload?.title,d.title])),!l){let f=Ed(d),h=f&&!Pd(f)?nt([],f):void 0;h&&(a=f,l=h)}if(r&&(o||l))break}if(!r)return null;let u=await aS(t,e);return{sessionId:i||Lt("codex",t)||(0,F.basename)(t,".jsonl"),cwd:r,title:o??l??nt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function rt(t,e){let n=await(0,O.stat)(t).catch(()=>null);if(!n)return null;try{let s=n.size;if(e==="claude"){let i=await bS(t,s);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,approvalMode:i.approvalMode,lastUsage:i.lastUsage,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let r=await wS(t,s);return r?{sessionId:r.sessionId,agent:e,cwd:r.cwd,title:r.title,approvalMode:r.approvalMode,lastUsage:r.lastUsage,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function bd(t,e){let n=(0,F.join)((0,ye.homedir)(),".claude","projects");try{let s;t?s=[Td(t)]:s=(await(0,O.readdir)(n,{withFileTypes:!0})).filter(u=>u.isDirectory()).map(u=>u.name);let r=[];for(let l of s){let u=(0,F.join)(n,l),c=await(0,O.readdir)(u).catch(()=>[]);for(let d of c)d.endsWith(".jsonl")&&r.push((0,F.join)(u,d))}let i=await ot(r,it,async l=>{let u=await(0,O.stat)(l).catch(()=>null);return{path:l,mtimeMs:u?.mtimeMs??0}});return i.sort((l,u)=>u.mtimeMs-l.mtimeMs),(await ot(i,it,async l=>{let u=await rt(l.path,"claude");return u&&e&&e.push(Ys(u)),u})).filter(l=>l!==null).map(l=>Ys(l)).sort((l,u)=>u.lastActivityAt.localeCompare(l.lastActivityAt))}catch(s){return Ae.warn({error:String(s)},"failed to list claude sessions"),[]}}async function wd(t,e){try{let n=await uo(),s=await ot(n,it,async i=>{let o=await rt(i.path,"codex");return o&&e&&(!t||o.cwd===t)&&e.push(Ys(o)),o});return nS(s.map((i,o)=>i?{cwd:i.cwd,match:{path:n[o].path,mtimeMs:n[o].mtimeMs,sessionId:i.sessionId}}:null).filter(i=>i!==null)),s.filter(i=>i!==null).filter(i=>!t||i.cwd===t).map(i=>Ys(i)).sort((i,o)=>o.lastActivityAt.localeCompare(i.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list codex sessions"),[]}}async function Zu(t){if(!t)return null;let e=`codex-latest:${(0,ye.homedir)()}`,n=Qs.get(e);if(n){let i=n.get(t);return i?{sessionId:i.sessionId,filePath:i.path}:null}Vs||(Vs=(async()=>{let i=await uo(),o=await ot(i,it,async l=>{let u=await rt(l.path,"codex");return u?{cwd:u.cwd,match:{path:l.path,mtimeMs:l.mtimeMs,sessionId:u.sessionId}}:null}),a=new Map;for(let l of o)!l||a.has(l.cwd)||a.set(l.cwd,l.match);return Qs.set(e,a),a})().finally(()=>{Vs=null}));let r=(await Vs).get(t);return r?{sessionId:r.sessionId,filePath:r.path}:null}async function Mn(t,e,n){let r=`list:${(0,ye.homedir)()}:${t??"all"}:${e??""}`,i=ro.get(r);if(i)return i;let o=to.get(r);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await bd(e,n);else if(t==="codex")l=await wd(e,n);else{let[u,c]=await Promise.all([bd(e,n),wd(e,n)]);l=[...u,...c].sort((d,f)=>f.lastActivityAt.localeCompare(d.lastActivityAt))}return ro.set(r,l),l})();return to.set(r,a),a.finally(()=>to.delete(r)),a}async function md(t,e,n){let r=`search:${(0,ye.homedir)()}:${t}:${e??"all"}:${n??"all"}`,i=io.get(r);if(i)return i;let o=no.get(r);if(o)return o;let a=(async()=>{let l=new Set,u=t.toLowerCase(),c=n??0;function d(g){if(c<=0)return g;let m=g.findIndex(p=>p.mtimeMs<c);return m===-1?g:g.slice(0,m)}async function f(){try{let g=await eS(),m=d(await Ad(g)),p=await ot(m,it,y=>Id(y.path,u,"claude"));for(let y of p)y&&l.add(y)}catch(g){Ae.warn({error:String(g)},"failed to search claude files")}}async function h(){try{let g=d(await uo()),m=await ot(g,it,p=>Id(p.path,u,"codex"));for(let p of m)p&&l.add(p)}catch(g){Ae.warn({error:String(g)},"failed to search codex files")}}return e==="claude"?await f():e==="codex"?await h():await Promise.all([f(),h()]),io.set(r,l),l})();return no.set(r,a),a.finally(()=>no.delete(r)),a}async function Id(t,e,n){let s=(0,oo.createReadStream)(t,{encoding:"utf-8"}),r=(0,ao.createInterface)({input:s,crlfDelay:1/0}),i=n==="claude"?IS:TS,o="",a=!1;try{for await(let l of r){if(!l.trim())continue;let u;try{u=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof u.sessionId=="string"&&(o=u.sessionId):o=u.payload?.id??u.id??""),!a){let c=i(u);c&&c.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{r.close(),s.destroy()}return a?o||Lt(n,t):null}function IS(t){return t?.type==="user"&&t.message?.role==="user"?Zs(t):t?.type==="assistant"&&t.message?.role==="assistant"?Xs(t.message.content):""}function TS(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return fo(t.payload.content)}let e=Ed(t);return e||""}async function Js(t,e){let n=(0,oo.createReadStream)(t,{encoding:"utf-8"}),s=(0,ao.createInterface)({input:n,crlfDelay:1/0});try{for await(let r of s){if(!r.trim())continue;let i;try{i=JSON.parse(r)}catch{continue}if(e(i))break}}finally{s.close(),n.destroy()}}async function po(t,e){let n=(0,F.join)((0,ye.homedir)(),".claude","projects"),s=e?Td(e):null,r=await(0,O.readdir)(n).catch(()=>[]),i=s?[s,...r.filter(o=>o!==s)]:r;for(let o of i){let a=(0,F.join)(n,o,`${t}.jsonl`);if((await(0,O.stat)(a).catch(()=>null))?.isFile())return a}return null}async function Md(t,e){let n=await po(t,e);if(!n)return;let s=await(0,O.stat)(n).catch(()=>null);return s?.isFile()?(await Rd(n,s.size)).lastUsage:void 0}async function ho(t,e,n){if(e==="claude")return po(t,n);let s=(0,F.join)((0,ye.homedir)(),".codex","sessions");return Nd(s,t)}function AS(t){if(t?.type==="user"&&t.message?.role==="user")return hS(t.message.content)?{kind:"toolResult",..._S(t)?{interrupted:!0}:{}}:Zs(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=Xs(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 CS(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 Yi(t,e){if(e!=="claude")return{};let n=null;try{await Js(t,s=>{let r=AS(s);r&&(n=r)})}catch(s){return s.code!=="ENOENT"&&Ae.warn({filePath:t,error:String(s)},"failed to read session runtime hints"),{}}return CS(n)}async function go(t,e,n){let s=await ho(t,e,n);return s?Yi(s,e):{}}function kS(t){if(typeof t?.timestamp!="string")return null;let e=Date.parse(t.timestamp);return Number.isFinite(e)?e:null}async function Ld(t,e,n,s){if(e!=="codex"||!s||s<=0)return[];let r=await ho(t,e,n);if(!r)return[];let i=[];try{await Js(r,l=>{let u=kS(l);u!=null&&u<s||i.push(...Oi(l,{cwd:n,includePatchCalls:!1}))})}catch(l){return l.code!=="ENOENT"&&Ae.warn({filePath:r,error:String(l)},"failed to read generated file notices"),[]}let o=await Su(i,s),a=Te(o);return a?[a]:[]}async function Ln(t,e,n){let s=[],r=(i,o)=>{let a=dS(i);if(o?.coalesceConsecutiveAssistant&&a.role==="assistant"){let l=s[s.length-1];if(l?.role==="assistant"&&l.type!=="info"&&a.type!=="info"&&!vu(l.content)){s[s.length-1]=a;return}}s.push(a)};if(e==="claude")try{let i=await po(t,n);if(i){let o=new Map;await Js(i,a=>{if(a.type==="assistant"&&a.message?.role==="assistant"&&Array.isArray(a.message.content))for(let l of a.message.content){if(!l||typeof l!="object"||l.type!=="tool_use"||typeof l.id!="string")continue;let u=Rs(typeof l.name=="string"?l.name:null,l.input&&typeof l.input=="object"?l.input:null,n);u&&o.set(l.id,u)}if(a.type==="user"&&a.message?.role==="user"){if(Array.isArray(a.message.content))for(let u of a.message.content){if(!u||typeof u!="object"||u.type!=="tool_result")continue;if(u.is_error===!0){let g=_d(u.content),m=vS(g);m&&r(SS(m));continue}let c=typeof u.tool_use_id=="string"?u.tool_use_id:"",d=c?o.get(c):void 0;if(!d)continue;let f=_d(u.content);if(!Es(a.toolUseResult,f))continue;let h=Te([d]);h&&r({role:"assistant",content:h})}let l=Zs(a);l&&r({role:"user",content:l})}else if(a.type==="assistant"&&a.message?.role==="assistant"){let l=Xs(a.message.content);l&&r({role:"assistant",content:l})}})}}catch(i){Ae.warn({error:String(i)},"failed to read claude session history")}else if(e==="codex")try{let i=await ho(t,e,n);i&&await Js(i,o=>{let a=Oi(o,{cwd:n,includePatchCalls:!0}),l=Te(a);if(l&&r({role:"assistant",content:l}),o.type!=="response_item"||o.payload?.type!=="message")return;let u=o.payload.role;if(u!=="user"&&u!=="assistant")return;let c=fo(o.payload.content);c&&(u==="user"&&Pd(c)||r({role:u,content:c},{coalesceConsecutiveAssistant:!0}))})}catch(i){Ae.warn({error:String(i)},"failed to read codex session history")}return s}async function Nd(t,e){try{let n=await(0,O.readdir)(t,{withFileTypes:!0});for(let s of n){let r=(0,F.join)(t,s.name);if(s.isDirectory()){let i=await Nd(r,e);if(i)return i}else if(s.name.includes(e)&&s.name.endsWith(".jsonl"))return r}}catch(n){Ae.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Dt=require("fs"),Fd=require("path");var xS=500,Od=200;function Dd(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=Od?e:e.slice(-Od)}function RS(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 ES(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 PS(t){if(!t||typeof t!="object"||Array.isArray(t))return{};let e={};for(let[n,s]of Object.entries(t))typeof n!="string"||n.length===0||typeof s!="string"||s.length===0||n===s||(e[n]=s);return e}function MS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",s=typeof e.toolName=="string"?e.toolName:"",r=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!s||!r)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:s,input:i,description:r,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:s,input:i,description:r}}function LS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(e.kind!=="stall_timeout"&&e.kind!=="driver_crash"||typeof e.at!="string"||!e.at||typeof e.humanText!="string"||!e.humanText)return;let n={kind:e.kind,at:e.at,humanText:e.humanText};return typeof e.lastPrompt=="string"&&e.lastPrompt&&(n.lastPrompt=e.lastPrompt),typeof e.idleMs=="number"&&Number.isFinite(e.idleMs)&&(n.idleMs=e.idleMs),typeof e.exitCode=="number"&&Number.isFinite(e.exitCode)&&(n.exitCode=e.exitCode),n}function NS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(typeof e.content!="string"||typeof e.enqueuedAt!="string"||!e.enqueuedAt)return;let n={content:e.content,enqueuedAt:e.enqueuedAt};if(typeof e.clientMessageId=="string"&&e.clientMessageId&&(n.clientMessageId=e.clientMessageId),typeof e.model=="string"&&e.model&&(n.model=e.model),Array.isArray(e.images)){let s=e.images.filter(r=>typeof r=="string"&&r.length>0);s.length>0&&(n.images=s)}return n}function OS(t){if(!Array.isArray(t))return;let e=[];for(let n of t){let s=NS(n);s&&e.push(s)}return e.length>0?e:void 0}function DS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;if(typeof e.at!="string"||!e.at||typeof e.humanText!="string"||!e.humanText)return;let n={at:e.at,humanText:e.humanText};return typeof e.idleMs=="number"&&Number.isFinite(e.idleMs)&&(n.idleMs=e.idleMs),typeof e.hardTimeoutMs=="number"&&Number.isFinite(e.hardTimeoutMs)&&(n.hardTimeoutMs=e.hardTimeoutMs),n}function BS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.inputTokens),s=Number(e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(s))return;let r=Number(e.contextWindowTokens),i=Number(e.cacheCreationInputTokens),o=Number(e.cacheReadInputTokens);return{inputTokens:n,outputTokens:s,...Number.isFinite(i)&&i>=0?{cacheCreationInputTokens:i}:{},...Number.isFinite(o)&&o>=0?{cacheReadInputTokens:o}:{},...Number.isFinite(r)&&r>0?{contextWindowTokens:r}:{}}}function Bd(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:Dd(t.acceptedClientMessageIds),interruptedClientMessageIds:Dd(t.interruptedClientMessageIds),pendingApproval:MS(t.pendingApproval),lastUsage:BS(t.lastUsage),interruptReason:LS(t.interruptReason),stallWarning:DS(t.stallWarning),pendingQueue:OS(t.pendingQueue)}}function FS(t){if(Array.isArray(t))return{records:t.map(Bd),deletedSessionIds:[],sessionAliases:{},archivedSessionIds:[]};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(Bd):[],deletedSessionIds:RS(e.deletedSessionIds),sessionAliases:PS(e.sessionAliases),archivedSessionIds:ES(e.archivedSessionIds)}}return{records:[],deletedSessionIds:[],sessionAliases:{},archivedSessionIds:[]}}var er=class{records;deletedSessionIds;sessionAliases;archivedSessionIds;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds),this.sessionAliases=new Map(Object.entries(e.sessionAliases)),this.archivedSessionIds=new Set(e.archivedSessionIds)}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}resolveSessionId(e){let n=e,s=new Set;for(;!s.has(n);){s.add(n);let r=this.sessionAliases.get(n);if(!r||r===n)break;n=r}return n}find(e){let n=this.resolveSessionId(e);return this.records.find(s=>s.sessionId===n)}isDeleted(e){let n=this.resolveSessionId(e);return this.deletedSessionIds.has(e)||this.deletedSessionIds.has(n)}isArchived(e){let n=this.resolveSessionId(e);return this.archivedSessionIds.has(e)||this.archivedSessionIds.has(n)}getArchivedSessionIds(){return[...this.archivedSessionIds]}setArchived(e,n){let s=this.resolveSessionId(e),r=this.archivedSessionIds.has(e)||this.archivedSessionIds.has(s);return n&&!r?(this.archivedSessionIds.add(s),this.scheduleSave(),!0):!n&&r?(this.archivedSessionIds.delete(e),this.archivedSessionIds.delete(s),this.scheduleSave(),!0):!1}replaceArchivedSessionIds(e){let n=new Set;for(let s of e)typeof s!="string"||s.length===0||n.add(this.resolveSessionId(s));return this.archivedSessionIds=n,this.scheduleSave(),[...this.archivedSessionIds]}mergeArchivedSessionIds(e){for(let n of e)typeof n!="string"||n.length===0||this.archivedSessionIds.add(this.resolveSessionId(n));return this.scheduleSave(),[...this.archivedSessionIds]}upsert(e){this.deletedSessionIds.delete(e.sessionId),this.sessionAliases.delete(e.sessionId);let n=this.records.findIndex(s=>s.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}addAlias(e,n){if(!e||!n)return;let s=this.resolveSessionId(n);if(!s||e===s){this.sessionAliases.delete(e),this.deletedSessionIds.delete(e),this.scheduleSave();return}this.deletedSessionIds.delete(e),this.sessionAliases.set(e,s),this.archivedSessionIds.delete(e)&&this.archivedSessionIds.add(s),this.scheduleSave()}forget(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.delete(e),this.scheduleSave()}remove(e){let n=this.resolveSessionId(e);this.records=this.records.filter(r=>r.sessionId!==e&&r.sessionId!==n);let s=[];for(let[r,i]of this.sessionAliases)(r===e||r===n||i===n)&&(this.sessionAliases.delete(r),s.push(r));this.deletedSessionIds.add(n),e!==n&&this.deletedSessionIds.add(e);for(let r of s)this.deletedSessionIds.add(r);this.archivedSessionIds.delete(e),this.archivedSessionIds.delete(n);for(let r of s)this.archivedSessionIds.delete(r);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()},xS)}loadFromDisk(){try{let e=(0,Dt.readFileSync)(Ss,"utf-8");return FS(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[],sessionAliases:{},archivedSessionIds:[]}}saveToDisk(){(0,Dt.mkdirSync)((0,Fd.dirname)(Ss),{recursive:!0}),(0,Dt.writeFileSync)(Ss,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds],sessionAliases:Object.fromEntries(this.sessionAliases),archivedSessionIds:[...this.archivedSessionIds]},null,2))}};var Bt=require("path"),Hd=require("os");function tr(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Bt.join)((0,Hd.homedir)(),t.slice(2)):t}function HS(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let s=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return s&&(e=s[1]??e),e}function mo(t,e){let n=tr(HS(t));if(!n||(0,Bt.isAbsolute)(n))return n;let s=tr(e??"");return s?(0,Bt.resolve)(s,n):n}var Ud={approvalRequestV1:"vibelet.approvalRequest.v1"};var Ft=require("fs"),Wd=require("path");function US(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")&&(typeof t.locale=="string"||typeof t.locale>"u"))}function WS(t){try{let e=(0,Ft.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(US):[]}catch{return[]}}function Nn(t,e){(0,Ft.mkdirSync)((0,Wd.dirname)(t),{recursive:!0}),(0,Ft.writeFileSync)(t,JSON.stringify(e,null,2)+`
107
+ `,"utf8")}var nr=class{constructor(e=Jc){this.pushSubscriptionsPath=e;this.records=WS(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}listRecipients(){return this.records.map(e=>({pushToken:e.pushToken,...e.locale?{locale:e.locale}:{}}))}count(){return this.records.length}register(e,n,s){let r=new Date().toISOString(),i=this.records.find(l=>l.deviceId===e),o=s??i?.locale,a={deviceId:e,pushToken:n,platform:"expo",createdAt:i?.createdAt??r,updatedAt:r,...i?.lastSentAt?{lastSentAt:i.lastSentAt}:{},...o?{locale:o}:{}};this.records=[a,...this.records.filter(l=>l.deviceId!==e&&l.pushToken!==n)],Nn(this.pushSubscriptionsPath,this.records)}unregister(e,n){let s=this.records.filter(r=>!(r.deviceId===e&&r.pushToken===n));return s.length===this.records.length?!1:(this.records=s,Nn(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(s=>s.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,Nn(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),s=new Date().toISOString(),r=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=s,r=!0);r&&Nn(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],Nn(this.pushSubscriptionsPath,this.records)}};var K=M.child({module:"push"}),qS="https://exp.host/--/api/v2/push/send",GS="https://exp.host/--/api/v2/push/getReceipts",jS=[0,1e3,3e3],On=new nr;function $S(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 zS(t){return new Promise(e=>{setTimeout(e,t)})}function qd(t){return t==="DeviceNotRegistered"}function VS(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],s=[];for(let[r,i]of t.data.entries()){let o=e[r];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}s.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:s}}function QS(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[s,r]of t.data.entries()){let i=e[s];!i||!r||r.status!=="ok"||typeof r.id!="string"||r.id.length===0||n.set(r.id,i)}return n}function YS(t,e){let n=[],s=[],r=t.data;for(let[i,o]of e.entries()){let a=r?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&s.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:s}}async function JS(t,e,n,s){let r=new Map(t);for(let i of jS){if(r.size===0)return;i>0&&await n(i);let o;try{o=await e(GS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...r.keys()]})})}catch(c){K.error({error:String(c),count:r.size},"push receipt request failed");return}if(!o.ok){K.error({status:o.status,statusText:o.statusText,count:r.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){K.error({count:r.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:u}=YS(a,r);for(let{token:c,receipt:d}of u){let f=d.details?.error;if(K.error({token:c,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),qd(f)){let h=s.unregisterToken(c);K.info({token:c,errorCode:f,removed:h},"push token removed after receipt rejection")}}r=new Map(l.map(c=>[c,r.get(c)]))}r.size>0&&K.warn({pendingReceipts:r.size},"push receipts still pending after polling")}function KS(t){let e=t?.pushStore??On,n=t?.fetchImpl??globalThis.fetch,s=t?.sleepImpl??zS;return async function(i,o){let a=e.listRecipients();if(a.length===0)return;let l=typeof i=="function"?i:()=>i,u=a.map(d=>d.pushToken),c=a.map(({pushToken:d,locale:f})=>{let{title:h,body:g}=l(f);return{to:d,sound:"default",title:h,body:g,data:o,badge:1,priority:"high",_contentAvailable:!0,...$S(o)&&o.eventType==="approval_request"?{categoryId:Ud.approvalRequestV1}:{}}});try{let d=await n(qS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!d.ok){K.error({status:d.status,statusText:d.statusText},"push send failed");return}let f=await d.json().catch(()=>null);if(!f){K.error({count:c.length},"push send returned unreadable response");return}let{successfulTokens:h,ticketErrors:g}=VS(f,u),m=QS(f,u);for(let{token:p,ticket:y}of g){let C=y.details?.error;if(K.error({token:p,message:y.message,details:y.details,ticketStatus:y.status},"push ticket rejected"),qd(C)){let I=e.unregisterToken(p);K.info({token:p,errorCode:C,removed:I},"push token removed after ticket rejection")}}h.length>0&&(K.debug({count:h.length},"push sent"),e.markSent(h)),m.size>0&&await JS(m,n,s,e)}catch(d){K.error({error:String(d)},"push send error")}}}function yo(t,e,n){On.register(t,e,n),K.info({deviceId:t,token:e,locale:n,total:On.count()},"push token registered")}function vo(t,e){let n=On.unregister(t,e);K.info({deviceId:t,token:e,total:On.count(),removed:n},"push token unregistered")}var sr=KS();var $d=require("child_process"),Ht=require("fs"),Bn=require("os"),So=require("path"),zd=require("util");var Fn=M.child({module:"usage-limits"}),XS=(0,zd.promisify)($d.execFile),ZS=6e4,Vd=8e3,e_="https://api.anthropic.com/api/oauth/usage",t_="https://chatgpt.com/backend-api/codex/usage",n_="https://chatgpt.com/backend-api/codex/responses",s_="claude-cli/2.1 (vibelet-daemon)",r_="codex_cli_rs/0.20.0 (vibelet-daemon)",rr=new Map,Dn=null;function i_(){let t=(process.env.VIBE_USAGE_LIMITS??"").trim().toLowerCase();return t==="off"||t==="0"||t==="false"||t==="disabled"}async function Qd(t,e={}){if(i_())return{limits:null,reason:"disabled"};let n=Date.now(),s=rr.get(t);if(!e.force&&s&&n-s.at<ZS)return s.payload;if(s?.inflight)return s.inflight;let r=(t==="claude"?a_():d_()).then(i=>(rr.set(t,{at:Date.now(),payload:i}),i)).catch(i=>{let o=i instanceof Error?i.message:String(i);Fn.warn({agent:t,error:o},"usage-limits fetch failed");let a={limits:null,reason:"unknown",detail:o};return rr.set(t,{at:Date.now(),payload:a}),a});return rr.set(t,{at:s?.at??0,payload:s?.payload??{limits:null},inflight:r}),r}async function o_(){if((0,Bn.platform)()==="darwin")try{let{stdout:e}=await XS("security",["find-generic-password","-s","Claude Code-credentials","-w"],{timeout:5e3}),n=e.trim();if(!n)return null;let s=JSON.parse(n);return s.claudeAiOauth??s.oauth??s}catch(e){return Fn.debug({error:e instanceof Error?e.message:String(e)},"keychain read failed"),null}let t=(0,So.join)((0,Bn.homedir)(),".claude",".credentials.json");if(!(0,Ht.existsSync)(t))return null;try{let e=(0,Ht.readFileSync)(t,"utf8"),n=JSON.parse(e);return n.claudeAiOauth??n.oauth??n}catch{return null}}function ir(t){if(!t)return;let e=Number(t.utilization);if(Number.isFinite(e))return t.resets_at?{usedPercent:e,resetsAt:t.resets_at}:{usedPercent:e,resetsAt:""}}async function a_(){let t=await o_(),e=t?.accessToken??t?.access_token;if(!e)return{limits:null,reason:"no_credentials"};let n=new AbortController,s=setTimeout(()=>n.abort(),Vd),r;try{r=await fetch(e_,{method:"GET",headers:{Authorization:`Bearer ${e}`,"anthropic-beta":"oauth-2025-04-20","User-Agent":s_,Accept:"application/json"},signal:n.signal})}finally{clearTimeout(s)}if(!r.ok){let a=await r.text().catch(()=>"");return Fn.warn({agent:"claude",status:r.status,statusText:r.statusText,bodyPreview:a.slice(0,200)},"usage-limits http error"),{limits:null,reason:"http_error",detail:`HTTP ${r.status} ${r.statusText} ${a.slice(0,200)}`}}let i;try{i=await r.json()}catch(a){return{limits:null,reason:"parse_error",detail:a instanceof Error?a.message:String(a)}}return{limits:{agent:"claude",fiveHour:ir(i.five_hour),weekly:ir(i.seven_day),weeklyOpus:ir(i.seven_day_opus),weeklySonnet:ir(i.seven_day_sonnet),planType:t?.subscriptionType??t?.rateLimitTier,fetchedAt:Date.now()}}}function l_(){let t=(0,So.join)((0,Bn.homedir)(),".codex","auth.json");if(!(0,Ht.existsSync)(t))return null;try{return JSON.parse((0,Ht.readFileSync)(t,"utf8"))}catch{return null}}function or(t){if(!t)return;let e=Number(t.used_percent);if(!Number.isFinite(e))return;let n="";return typeof t.reset_at=="number"&&Number.isFinite(t.reset_at)?n=new Date(t.reset_at*1e3).toISOString():typeof t.reset_after_seconds=="number"&&Number.isFinite(t.reset_after_seconds)&&(n=new Date(Date.now()+t.reset_after_seconds*1e3).toISOString()),{usedPercent:e,resetsAt:n}}function c_(t){let e=t.getSetCookie,s=(typeof e=="function"?e.call(t):t.get("set-cookie")?[t.get("set-cookie")]:[]).flatMap(r=>r.split(/,(?=\s*[^;,]+=)/g)).map(r=>r.split(";")[0]?.trim()??"").filter(Boolean);return s.length>0?s.join("; "):null}function u_(t){return Dn?{...t,Cookie:Dn}:t}async function Gd(t,e){try{let n=await fetch(n_,{method:"HEAD",headers:t,signal:e}),s=c_(n.headers);s&&(Dn=s)}catch(n){if(e.aborted)throw n;Fn.debug({error:n instanceof Error?n.message:String(n)},"usage-limits codex cookie warmup failed")}}async function jd(t,e){return fetch(t_,{method:"GET",headers:u_(t),signal:e})}async function d_(){let t=l_();if(!t)return{limits:null,reason:"no_credentials"};if(t.auth_mode!=="chatgpt")return{limits:null,reason:"unsupported_auth"};let e=t.tokens?.access_token,n=t.tokens?.account_id;if(!e)return{limits:null,reason:"no_credentials"};let s=new AbortController,r=setTimeout(()=>s.abort(),Vd),i,o={Authorization:`Bearer ${e}`,"User-Agent":r_,Accept:"application/json","OpenAI-Beta":"responses=experimental",originator:"codex_cli_rs"};n&&(o["chatgpt-account-id"]=n);try{Dn||await Gd(o,s.signal),i=await jd(o,s.signal),i.status===403&&(i.headers.get("content-type")??"").includes("text/html")&&(await i.text().catch(()=>""),Dn=null,await Gd(o,s.signal),i=await jd(o,s.signal))}finally{clearTimeout(r)}if(!i.ok){let c=await i.text().catch(()=>"");return Fn.warn({agent:"codex",status:i.status,statusText:i.statusText,bodyPreview:c.slice(0,200)},"usage-limits http error"),{limits:null,reason:"http_error",detail:`HTTP ${i.status} ${i.statusText} ${c.slice(0,200)}`}}let a;try{a=await i.json()}catch(c){return{limits:null,reason:"parse_error",detail:c instanceof Error?c.message:String(c)}}let l=(a.additional_rate_limits??[]).map(c=>({name:c.limit_name??"",primary:or(c.rate_limit?.primary_window),secondary:or(c.rate_limit?.secondary_window)})).filter(c=>c.name&&(c.primary||c.secondary));return{limits:{agent:"codex",fiveHour:or(a.rate_limit?.primary_window),weekly:or(a.rate_limit?.secondary_window),additional:l.length?l:void 0,planType:a.plan_type,fetchedAt:Date.now()}}}var b=M.child({module:"manager"}),f_="Done.",p_="Approval required",Yd=180,Wt=200,h_=6e4,Jd=9e4,g_=new Set([".png",".jpg",".jpeg",".gif",".webp",".heic",".heif",".bmp",".svg"]);function lf(t,e){let n=e?.length?e.map(s=>{let r=s.lastIndexOf("."),i=r>=0?s.slice(r).toLowerCase():"";return`[Attached ${g_.has(i)?"image":"file"}: ${s}]`}).join(`
108
108
  `):"";return n?t?`${t}
109
109
 
110
- ${n}`:n:t}function Ht(t){return t.map(e=>({...e.clientMessageId?{clientMessageId:e.clientMessageId}:{},content:e.content,...e.images?.length?{images:e.images}:{},...e.model?{model:e.model}:{},enqueuedAt:e.enqueuedAt}))}function Bd(t){return t?.length?t.map(e=>({...e.clientMessageId?{clientMessageId:e.clientMessageId}:{},content:e.content,...e.images?.length?{images:e.images}:{},...e.model?{model:e.model}:{},prompt:$d(e.content,e.images),enqueuedAt:e.enqueuedAt})):[]}var Dd=200;function Fd(t){return t?.replace(/_/g,"-").toLowerCase()?.startsWith("zh")?"zh":"en"}var HS={zh:"Agent \u5361\u4F4F",en:"Agent stalled"},US={zh:"Agent \u5D29\u6E83",en:"Agent crashed"};function Wt(t){let e=Math.round(t/1e3);if(e<60)return`${e} \u79D2`;let n=Math.floor(e/60),s=e%60;return s===0?`${n} \u5206\u949F`:`${n} \u5206 ${s} \u79D2`}function zd(t){if(!t)return;let e=t.trim();if(e)return e.length>Dd?`${e.slice(0,Dd-1)}\u2026`:e}function WS(t,e,n,s){let r=Wt(t),i=Wt(n),o=Wt(e),a=zd(s),l=a?`
111
- \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${a}"\u3002`:"",u=n>e?`Agent \u957F\u65F6\u95F4\u6CA1\u6709\u8F93\u51FA\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${i} \u4ECD\u672A\u6062\u590D\u540E\u88AB\u81EA\u52A8\u505C\u6B62\uFF08${o} \u65F6\u5DF2\u6807\u8BB0\u7591\u4F3C\u5361\u4F4F\uFF09\u3002`:`Agent \u5361\u4F4F\u4E86\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${i} \u9608\u503C\u540E\u88AB\u81EA\u52A8\u505C\u6B62\u3002`;return{kind:"stall_timeout",at:new Date().toISOString(),humanText:`${u}${l}`,...a?{lastPrompt:a}:{},idleMs:t,softThresholdMs:e,stopThresholdMs:n}}function qS(t,e,n){let s=Wt(t),r=Wt(e),i=n>0?Wt(n):void 0;return{at:new Date().toISOString(),humanText:i?`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${s} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${r} \u540E\u88AB\u6807\u8BB0\u4E3A\u7591\u4F3C\u5361\u4F4F\uFF1B\u5982\u679C\u8D85\u8FC7 ${i} \u4ECD\u672A\u6062\u590D\uFF0C\u5C06\u81EA\u52A8\u505C\u6B62\u3002`:`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${s} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${r} \u540E\u88AB\u6807\u8BB0\u4E3A\u7591\u4F3C\u5361\u4F4F\uFF1B\u5F53\u524D\u4E0D\u4F1A\u81EA\u52A8\u505C\u6B62\uFF0C\u4F60\u53EF\u4EE5\u7EE7\u7EED\u7B49\u5F85\u6216\u624B\u52A8\u505C\u6B62\u3002`,idleMs:t,softThresholdMs:e,...n>0?{hardTimeoutMs:n}:{}}}function GS(t,e){let n=zd(e),s=n?`
112
- \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${n}"\u3002`:"";return{kind:"driver_crash",at:new Date().toISOString(),humanText:`Agent \u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF08\u9000\u51FA\u7801 ${t}\uFF09\u3002${s}`,...n?{lastPrompt:n}:{},exitCode:t}}function jS(t,e){return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,...Number.isFinite(e.cacheCreationInputTokens)?{cacheCreationInputTokens:e.cacheCreationInputTokens}:Number.isFinite(t?.cacheCreationInputTokens)?{cacheCreationInputTokens:t?.cacheCreationInputTokens}:{},...Number.isFinite(e.cacheReadInputTokens)?{cacheReadInputTokens:e.cacheReadInputTokens}:Number.isFinite(t?.cacheReadInputTokens)?{cacheReadInputTokens:t?.cacheReadInputTokens}:{},...Number.isFinite(e.contextWindowTokens)?{contextWindowTokens:e.contextWindowTokens}:Number.isFinite(t?.contextWindowTokens)?{contextWindowTokens:t?.contextWindowTokens}:{}}:t}function Hd(t){if(t)return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,...Number.isFinite(t.cacheCreationInputTokens)?{cacheCreationInputTokens:t.cacheCreationInputTokens}:{},...Number.isFinite(t.cacheReadInputTokens)?{cacheReadInputTokens:t.cacheReadInputTokens}:{},...Number.isFinite(t.contextWindowTokens)?{contextWindowTokens:t.contextWindowTokens}:{}}}function $S(t,e){return t?.inputTokens===e?.inputTokens&&t?.outputTokens===e?.outputTokens&&t?.cacheCreationInputTokens===e?.cacheCreationInputTokens&&t?.cacheReadInputTokens===e?.cacheReadInputTokens&&t?.contextWindowTokens===e?.contextWindowTokens}function ke(...t){let e=[];for(let n of t)if(n?.length)for(let s of n)!s||e.includes(s)||(e.push(s),e.length>Ut&&e.splice(0,e.length-Ut));return e}function er(t){return t?.length?{acceptedClientMessageIds:ke(t)}:{}}function j(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,model:t.model,acceptedClientMessageIds:ke(t.acceptedClientMessageIds),interruptedClientMessageIds:ke(t.interruptedClientMessageIds),pendingApproval:t.agent==="codex"?t.pendingApproval:void 0,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,lastUsage:t.lastUsage,managed:t.managed,isResponding:t.isResponding||void 0,interruptReason:t.interruptReason,stallWarning:t.stallWarning,pendingQueue:t.pendingQueue.length>0?Ht(t.pendingQueue):void 0}}function Ud(t){t.managed||(t.managed=!0)}function Wd(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&xs(e)}function qd(t,e,n){return{sessionId:t,agent:e,...n}}function zS(t){return t.startsWith(ki)}function Gd(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 tr=class{constructor(e=Zs,n=Gu){this.pushSender=e;this.externalProcessPresenceCheck=n;this.removeInventoryBackfillListener=td(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.updateGauges(),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new Js;idleSweepInterval=null;watchdogNowMs=Date.now();lastWatchdogWallClockMs=this.watchdogNowMs;globalClients=new Set;inventoryVersion=0;removeInventoryBackfillListener;startIdleSweep(){S.idleTimeoutMs<=0&&S.turnStallTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),DS),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=this.advanceWatchdogClock(Date.now(),"sweep"),n=S.idleTimeoutMs,s=S.turnStallTimeoutMs,r=S.turnStallHardTimeoutMs;if(n<=0&&s<=0)return;let i=3600*1e3;for(let[o,a]of this.sessions){if(!a.active&&!a.driver){if(a.clients.size===0){let u=e-a.lastActivityTs;u>=i&&(w.info({sessionId:a.sessionId,inactiveMs:u},"removing inactive session from memory"),b.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(a),this.sessions.delete(o))}continue}if(!a.active||!a.driver)continue;let l=e-a.lastActivityTs;if(a.isResponding){if(s<=0||a.pendingApproval||l<s)continue;let u=this.getRespondingLivenessHint(a),c=r>0&&l>=r,d=u==="dead";if(!d&&!c){if(!a.stallWarningAt){let p=qS(l,s,r);a.stallWarningAt=e,a.stallWarning=p,this.updateGauges(),w.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:s,turnStallHardTimeoutMs:r,livenessHint:u},"responding session exceeded soft stall threshold; waiting before forced stop"),b.increment("driver.stall_warning",{agent:a.agent}),T.emit("driver.stall_warning",{sessionId:a.sessionId,agent:a.agent,idleMs:l,hardTimeoutMs:r||void 0}),this.broadcast(a.sessionId,{type:"session.stall_warning",sessionId:a.sessionId,warning:p}),this.store.upsert(j(a)),this.noteInventoryChanged("session_updated")}continue}let f=d||r<=0?s:r;w.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:s,turnStallHardTimeoutMs:r,livenessHint:u},"stopping stalled driver"),b.increment("driver.stall_timeout",{agent:a.agent}),T.emit("driver.stall_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l});let h=WS(l,s,f,a.lastUserMessage);a.interruptReason=h,this.clearStallWarning(a),this.resolvePendingClaudeHookApprovals(a),a.driver.stop(),a.active=!1,a.driver=null,a.isResponding=!1,a.currentReplyText="",this.updateGauges(),this.broadcast(a.sessionId,{type:"session.interrupted_notice",sessionId:a.sessionId,reason:h});let g=this.buildPushBody(`${a.title||a.sessionId}: ${h.lastPrompt??""}`.trim());this.pushSender(p=>({title:HS[Fd(p)],body:g}),{sessionId:a.sessionId,agent:a.agent,eventType:"agent_stalled"}),this.touchSession(a.sessionId),this.store.upsert(j(a)),this.noteInventoryChanged("session_updated");continue}a.pendingApproval||n<=0||l<n||(w.info({sessionId:a.sessionId,agent:a.agent,idleMs:l,timeoutMs:n},"stopping idle driver"),b.increment("driver.idle_timeout",{agent:a.agent}),T.emit("driver.idle_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l}),a.driver.stop(),a.active=!1,a.driver=null,this.updateGauges(),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"))}}bindDriverLifecycle(e,n,s,r){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){w.info({agent:n,context:s,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(w.debug({agent:n,context:s,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,r),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,o.type==="session.done"&&(n==="claude"?(e.lastUsage=Hd(o.usage),this.reconcileClaudeSessionUsage(e,o.usage)):o.usage&&(e.lastUsage=jS(e.lastUsage,o.usage))),o.type==="session.interrupted"&&this.markLatestAcceptedClientMessageInterrupted(e),(o.type==="session.interrupted"||!Wd(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){T.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}w.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({title:BS,body: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"&&xs(o.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[o.requestId]={message:e.lastUserMessage,toolName:o.toolName}:w.warn({sessionId:e.sessionId,requestId:o.requestId},"missing lastUserMessage for synthetic approval retry"));let a=this.clearStallWarning(e);this.touchSession(e.sessionId,o.type!=="text.delta"||a),(a||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"&&this.emitGeneratedFileNoticesForCompletedTurn(e),(o.type==="session.done"||o.type==="session.interrupted")&&e.pendingQueue.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){w.info({agent:n,context:s,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}w.info({agent:n,context:s,exitCode:o,sessionId:e.sessionId},"driver exited"),T.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:o});let a=o!==0&&o!==null;b.increment("driver.exit",{agent:n,abnormal:a?"true":"false"});let l=!!(e.pendingApproval&&(e.agent==="codex"||o===0&&Wd(e)));if(this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.clearStallWarning(e),l||(e.pendingApproval=void 0),a){let u=GS(o,e.lastUserMessage);e.interruptReason=u,this.broadcast(e.sessionId,{type:"session.interrupted_notice",sessionId:e.sessionId,reason:u});let c=this.buildPushBody(`${e.title||e.sessionId}: ${u.lastPrompt??""}`.trim());this.pushSender(d=>({title:US[Fd(d)],body:c}),{sessionId:e.sessionId,agent:e.agent,eventType:"agent_crashed"})}this.updateGauges(),this.touchSession(e.sessionId),this.store.upsert(j(e)),this.noteInventoryChanged("session_updated")})}async reconcileClaudeSessionUsage(e,n){let s=await Id(e.sessionId,e.cwd),r=Hd(s??n);!r||$S(e.lastUsage,r)||(e.lastUsage=r,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"))}remapSessionId(e,n,s){if(!n||n===e.sessionId)return;let r=this.sessions.get(n);if(r&&r!==e){w.warn({oldSessionId:e.sessionId,newSessionId:n},"skipping session ID remap because target already exists");return}let i=e.sessionId;w.info({oldSessionId:i,newSessionId:n},"session ID updated"),this.store.forget(i),this.store.addAlias(i,n),this.sessions.delete(i),e.sessionId=n,this.sessions.set(n,e),this.store.upsert(j(e)),this.noteInventoryChanged("session_remapped"),s&&this.reply(s,`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 s=e.pendingQueue.shift();return s?(s.clientMessageId&&this.rememberAcceptedClientMessage(e,s.clientMessageId),s.model!==void 0&&(e.model=s.model||void 0),e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=s.content,e.lastTurnStartedAt=Date.now(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),this.store.upsert(j(e)),this.broadcastPendingQueue(e),e.driver.sendPrompt(s.prompt,e.model),!0):!1}broadcastPendingQueue(e){this.broadcast(e.sessionId,{type:"session.queue",sessionId:e.sessionId,pending:Ht(e.pendingQueue)})}cancelQueuedTurn(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s);if(!o){this.reply(e,n,!1,void 0,"Session not found");return}if(!r){this.reply(e,n,!1,void 0,"clientMessageId required");return}let a=o.pendingQueue.length;o.pendingQueue=o.pendingQueue.filter(u=>u.clientMessageId!==r);let l=a-o.pendingQueue.length;l>0&&(T.emit("session.queue.cancel",{sessionId:s,agent:o.agent,clientMessageId:r,removed:l}),this.store.upsert(j(o)),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),this.broadcastPendingQueue(o)),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:s,removed:l}))}emitGeneratedFileNoticesForCompletedTurn(e){let n=e.lastTurnStartedAt;e.lastTurnStartedAt=void 0,!(e.agent!=="codex"||!n)&&Td(e.sessionId,e.agent,e.cwd,n).then(s=>{for(let r of s)this.broadcast(e.sessionId,{type:"tool.result",sessionId:e.sessionId,toolCallId:`generated-file-${Date.now()}`,output:r})}).catch(s=>{w.warn({sessionId:e.sessionId,error:String(s)},"failed to read generated-file notices")})}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let s=e.driver,r=e.sessionId,i=e.startupToken,o=b.startTimer("driver.spawn");(async()=>{try{let a=await s.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(r)!==e||e.startupToken!==i||e.driver!==s){w.info({pendingSessionId:r,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,w.info({pendingSessionId:r,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==r&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(r)!==e||e.startupToken!==i){w.info({pendingSessionId:r,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1;let u=e.pendingQueue.length>0;e.pendingQueue=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),u&&this.broadcastPendingQueue(e),w.error({sessionId:r,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,s,r){if(e==="codex"&&n instanceof In&&r&&n.setModel(r),e!=="claude"||!(n instanceof wn))return;let i=s??(0,fo.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=_n){for(let s of e.pendingClaudeHookApprovals.values())s.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&zS(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 s=this.resolveClaudeHookSession(e);return s?(this.touchSession(s.sessionId),!0):(w.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let s=this.resolveClaudeHookSession(e);if(!s||s.agent!=="claude"||!s.active)return w.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),_n;if(s.approvalMode==="autoApprove")return Gd(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return _n;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:"",u=`${ki}${l.trim()||(0,fo.randomUUID)()}`,c=s.pendingClaudeHookApprovals.get(u);if(c)return c.promise;let d=`Claude requested permissions to use ${i}.`,f,h=new Promise(g=>{f=g});return s.pendingClaudeHookApprovals.set(u,{requestId:u,promise:h,resolve:g=>{s.pendingClaudeHookApprovals.delete(u),f(g)}}),s.pendingApproval={requestId:u,toolName:i,input:a,description:d},T.emit("approval.request",{agent:"claude",sessionId:s.sessionId,toolName:i}),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(s.sessionId,{type:"approval.request",sessionId:s.sessionId,requestId:u,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,s){if(e=this.resolveSessionRef(e).resolvedSessionId,this.isDeletedSession(e))return;let r=new Date().toISOString(),i=s?.agent,o=s?.cwd??"",a=s?.approvalMode,l=s?.model,u=s?.pendingApproval,c=s?.title??"",d=s?.createdAt??r,f=s?.lastActivityAt??r,h=s?.lastUsage,g=ke(s?.acceptedClientMessageIds),p=ke(s?.interruptedClientMessageIds),m=s?.isResponding,y=s?.interruptReason,C=s?.stallWarning,_=s?[...s.pendingQueue]:[],A=s?"memory":"client",I=this.store.find(e);if(I)i=I.agent,o=I.cwd||o,a=I.approvalMode??a,l=I.model??l,u=I.pendingApproval??u,c=I.title||c,d=I.createdAt||d,f=I.lastActivityAt||f,h=I.lastUsage??h,g=ke(I.acceptedClientMessageIds,g),p=ke(I.interruptedClientMessageIds,p),y=y??I.interruptReason,C=C??I.stallWarning,s||(_=Bd(I.pendingQueue)),A="record";else if(!s){let x=(await Pn(n??i)).find(X=>X.sessionId===e);x&&(i=x.agent,o=x.cwd||o,c=x.title??c,d=x.createdAt,f=x.lastActivityAt,h=x.lastUsage??h,m=x.runtime.isResponding??m,A="scanner")}if(!i&&n&&(i=n,A=s?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,model:l,pendingApproval:u,title:c,createdAt:d,lastActivityAt:f,lastUsage:h,acceptedClientMessageIds:g,interruptedClientMessageIds:p,source:A,managed:s?.managed??I?.managed,isResponding:m||void 0,...y?{interruptReason:y}:{},...C?{stallWarning:C}:{},pendingQueue:_}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let s of this.sessions.values()){if(!s.pendingApproval)continue;let r=`${s.agent}:${s.sessionId}:${s.pendingApproval.requestId}`;n.has(r)||(n.add(r),e.push(qd(s.sessionId,s.agent,s.pendingApproval)))}for(let s of this.store.getAll()){if(!s.pendingApproval)continue;let r=`${s.agent}:${s.sessionId}:${s.pendingApproval.requestId}`;n.has(r)||(n.add(r),e.push(qd(s.sessionId,s.agent,s.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),s=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.pendingQueue=e.pendingQueue??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=s??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(j(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<=Nd?n:`${n.slice(0,Math.max(1,Nd-3)).trimEnd()}...`:OS}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}currentWatchdogTime(){return this.advanceWatchdogClock(Date.now(),"activity")}getRespondingLivenessHint(e){return e.driver?.getRespondingLivenessHint?.()??"unknown"}clearStallWarning(e){return!e.stallWarning&&!e.stallWarningAt?!1:(e.stallWarning=void 0,e.stallWarningAt=void 0,this.updateGauges(),!0)}advanceWatchdogClock(e,n){let s=Math.max(0,e-this.lastWatchdogWallClockMs);return this.lastWatchdogWallClockMs=e,s<=0?this.watchdogNowMs:s>Od?(n==="sweep"&&w.warn({elapsedWallMs:s,toleratedGapMs:Od},"watchdog gap detected; discounting paused wall-clock time"),this.watchdogNowMs):(this.watchdogNowMs+=s,this.watchdogNowMs)}touchSession(e,n=!0){let s=Date.now(),r=new Date(s).toISOString(),i=this.advanceWatchdogClock(s,"activity"),o=this.sessions.get(e);if(o){o.lastActivityAt=r,o.lastActivityTs=i,n&&this.store.upsert(j(o));return}let a=this.store.find(e);a&&this.store.upsert({...a,lastActivityAt:r})}updateGauges(){let e=0,n=0;for(let s of this.sessions.values())s.active&&e++,s.stallWarning&&n++;b.gauge("session.active",e),b.gauge("session.stall_warning_active",n)}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,model:n.model,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,lastUsage:n.lastUsage,...n.pendingApproval||n.stallWarning?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed,...n.interruptReason?{interruptReason:n.interruptReason}:{},...n.stallWarning?{stallWarning:n.stallWarning}:{}});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}resolveSessionRef(e){let n=this.store.resolveSessionId(e);return{requestedSessionId:e,resolvedSessionId:n,remapped:n!==e}}buildResolvedSessionResponseData(e,n){let s=n?{...n}:{};return e.remapped&&(s.sessionId=e.resolvedSessionId,s.oldSessionId=e.requestedSessionId),Object.keys(s).length>0?s:void 0}buildSessionResponseData(e,n,s){let r=s?{...s}:{};return n&&n!==e.requestedSessionId&&(r.sessionId=n,r.oldSessionId=e.requestedSessionId),Object.keys(r).length>0?r:void 0}canResumeDriverSession(e,n){return!(e==="codex"&&n.startsWith("pending_"))}rememberSessionAlias(e,n){!e||!n||e===n||(this.store.forget(e),this.store.addAlias(e,n),this.noteInventoryChanged("session_remapped"))}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return Pn(e,n)}async handle(e,n){switch(w.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.queue.cancel":this.cancelQueuedTurn(e,n.id,n.sessionId,n.clientMessageId);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.clearInterrupt":this.clearInterrupt(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,n.sinceMs);break;case"sessions.list":{let s=typeof n.skipGitMetadata=="boolean"?n.skipGitMetadata:void 0;await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor,n.customTitles,n.sinceMs,s);break}case"sessions.archiveableManaged":this.listArchiveableManagedSessions(e,n.id);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){w.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(){qs({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},s=JSON.stringify(n);for(let r of this.globalClients)r.readyState===1&&r.send(s)}async createSession(e,n,s,r,i,o,a){r=Ks(r),w.info({agent:s,cwd:r,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,jd.stat)(r)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${r}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${r}`);return}if(o)try{let u=(await this.listRecentSessionsForContinue(s,r)).find(c=>!this.isDeletedSession(c.sessionId));if(u)return w.info({sessionId:u.sessionId,cwd:r},"continue mode: resuming last session"),this.resumeSession(e,n,u.sessionId,s,r,i);w.info("continue mode: no previous sessions found, creating new")}catch(l){w.warn({error:String(l)},"continue mode: error finding sessions, creating new")}try{let l=this.createDriver(s),u=this.configureDriverBeforeStart(s,l,void 0,a);if(s==="codex"){let g=`pending_${Date.now()}`;w.info({sessionId:g,agent:s,cwd:r},"session created (pending codex startup)"),b.increment("session.create",{agent:s}),T.emit("session.create",{sessionId:g,agent:s,cwd:r,approvalMode:i});let p={sessionId:g,agent:s,cwd:r,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,pendingQueue:[],startupToken:1,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(g,p),this.registerClaudeHookSession(p),this.store.upsert(j(p)),this.updateGauges(),Vs(),Os(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(p,s,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(p,e);return}let c=b.startTimer("driver.spawn"),d=await l.start(r,void 0,i),f=c();w.info({sessionId:d,agent:s,spawnMs:f},"session created"),b.increment("session.create",{agent:s}),T.emit("session.create",{sessionId:d,agent:s,cwd:r,approvalMode:i});let h={sessionId:d,agent:s,cwd:r,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:[],startupToken:0,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(d,h),this.registerClaudeHookSession(h),this.store.upsert(j(h)),this.updateGauges(),Vs(),Os(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,s,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){w.error({agent:s,cwd:r,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,s,r,i,o){let a=this.resolveSessionRef(s);if(s=a.resolvedSessionId,this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}let l=this.sessions.get(s);if(l&&l.active){l.clients.add(e),this.touchSession(l.sessionId),this.noteInventoryChanged("session_updated");let h=await Mn(s,r,l.cwd),g=this.annotateHistoryMessages(h,l.acceptedClientMessageIds,l.interruptedClientMessageIds),p=this.currentPartialReplyText(l),m=l.pendingQueue.length>0?Ht(l.pendingQueue):void 0;if(h.length>0||p||l.approvalMode||l.pendingApproval||l.stallWarning||m){let y={type:"session.history",sessionId:s,messages:g,...er(l.acceptedClientMessageIds),isResponding:l.isResponding||void 0,partialReplyText:p,approvalMode:l.approvalMode,pendingApproval:l.pendingApproval,stallWarning:l.stallWarning,...m?{pendingQueue:m}:{}};e.readyState===1&&e.send(JSON.stringify(y))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(a,{sessionId:s}));return}let u=this.store.find(s),c=i||u?.cwd||"",d=o??u?.approvalMode,f=u?.title??"Resumed session";try{let h=b.startTimer("driver.spawn"),g=this.createDriver(r),p=this.configureDriverBeforeStart(r,g),m=this.canResumeDriverSession(r,s),y=await g.start(c,m?s:void 0,d),C=h();w.info({sessionId:y,agent:r,spawnMs:C},"session resumed"),b.increment("session.resume",{agent:r}),T.emit("session.resume",{sessionId:y,agent:r,cwd:c});let _={sessionId:y,agent:r,cwd:c,approvalMode:d,model:u?.model,driver:g,clients:new Set([e]),title:f,createdAt:u?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),lastUsage:u?.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:u?.acceptedClientMessageIds??[],interruptedClientMessageIds:u?.interruptedClientMessageIds??[],syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:Bd(u?.pendingQueue),startupToken:0,managed:u?.managed,pendingApproval:u?.pendingApproval,stallWarning:u?.stallWarning,claudeHookSecret:p,pendingClaudeHookApprovals:new Map};this.sessions.set(y,_),this.rememberSessionAlias(s,y),this.registerClaudeHookSession(_),this.store.upsert(j(_)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(_,r," (resumed)",e),this.restoreDriverPendingApproval(g,_.pendingApproval);let I=await Mn(m?s:y,r,c),B=this.annotateHistoryMessages(I,_.acceptedClientMessageIds,_.interruptedClientMessageIds),x=_.pendingQueue.length>0?Ht(_.pendingQueue):void 0;if(I.length>0||_.pendingApproval||_.stallWarning||x){w.info({sessionId:s,historyCount:I.length},"sending history messages");let X={type:"session.history",sessionId:y,messages:B,...er(_.acceptedClientMessageIds),approvalMode:d,pendingApproval:_.pendingApproval,stallWarning:_.stallWarning,...x?{pendingQueue:x}:{}};e.readyState===1&&e.send(JSON.stringify(X))}this.reply(e,n,!0,this.buildSessionResponseData(a,y,{sessionId:y}))}catch(h){this.reply(e,n,!1,void 0,String(h))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>Ut&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Ut))}rememberInterruptedClientMessage(e,n){e.interruptedClientMessageIds.includes(n)||(e.interruptedClientMessageIds.push(n),e.interruptedClientMessageIds.length>Ut&&e.interruptedClientMessageIds.splice(0,e.interruptedClientMessageIds.length-Ut))}markLatestAcceptedClientMessageInterrupted(e){let n=e.acceptedClientMessageIds[e.acceptedClientMessageIds.length-1];n&&this.rememberInterruptedClientMessage(e,n)}annotateHistoryMessages(e,n,s){if(!e.length||!n?.length||!s?.length)return e;let r=new Set(s),i=[];for(let c=0;c<e.length;c+=1)e[c]?.role==="user"&&i.push(c);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,u=i.length-o;for(let c=0;c<o;c+=1){let d=n[l+c];r.has(d)&&a.set(i[u+c],"interrupted")}return a.size===0?e:e.map((c,d)=>c.role==="user"&&a.has(d)?{...c,delivery:"interrupted"}:c)}async sendMessage(e,n,s,r,i,o,a,l){let u=this.resolveSessionRef(s);if(s=u.resolvedSessionId,this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(s);if(!c||!c.driver){let p=await this.resolveReconnectSession(s,i,c);if(!p){w.warn({sessionId:s},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:s,agent:p.agent,source:p.source},"auto-reconnecting session"),b.increment("session.reconnect",{agent:p.agent,source:p.source}),T.emit("session.reconnect",{sessionId:s,agent:p.agent,source:p.source});try{let m=this.createDriver(p.agent),y=this.configureDriverBeforeStart(p.agent,m,c?.claudeHookSecret),C=this.canResumeDriverSession(p.agent,s),_=await m.start(p.cwd,C?s:void 0,p.approvalMode);this.restoreDriverPendingApproval(m,p.pendingApproval),c?(c.approvalMode=p.approvalMode,c.model=p.model,c.pendingApproval=p.pendingApproval,c.driver=m,c.active=!0,c.clients.add(e),c.lastActivityAt=p.lastActivityAt,c.lastUsage=p.lastUsage,c.lastActivityTs=this.currentWatchdogTime(),c.isResponding=!1,c.currentReplyText="",c.acceptedClientMessageIds=ke(c.acceptedClientMessageIds,p.acceptedClientMessageIds),c.interruptedClientMessageIds=ke(c.interruptedClientMessageIds,p.interruptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,(!c.pendingQueue||c.pendingQueue.length===0)&&(c.pendingQueue=p.pendingQueue),c.startupToken=c.startupToken??0,c.claudeHookSecret=y??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map,_&&_!==c.sessionId&&this.remapSessionId(c,_)):(c={sessionId:_,agent:p.agent,cwd:p.cwd,approvalMode:p.approvalMode,model:p.model,driver:m,clients:new Set([e]),title:p.title,createdAt:p.createdAt,lastActivityAt:p.lastActivityAt,lastUsage:p.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:p.acceptedClientMessageIds,interruptedClientMessageIds:p.interruptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:p.pendingQueue,startupToken:0,managed:p.managed,pendingApproval:p.pendingApproval,claudeHookSecret:y,pendingClaudeHookApprovals:new Map,interruptReason:p.interruptReason},this.sessions.set(_,c),this.rememberSessionAlias(s,_)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,p.agent," (reconnected)"),this.store.upsert(j(c)),this.updateGauges(),this.noteInventoryChanged("session_updated"),s=c.sessionId}catch(m){this.reply(e,n,!1,void 0,`Failed to reconnect: ${m}`);return}}if(c.clients.add(e),o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,this.buildResolvedSessionResponseData(u,{sessionId:s,clientMessageId:o,duplicate:!0}));return}w.info({sessionId:s,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),T.emit("session.send",{sessionId:s,agent:c.agent,messagePreview:r.slice(0,100),imageCount:a?.length??0}),Ud(c),c.interruptReason&&(c.interruptReason=void 0,this.store.upsert(j(c)),this.noteInventoryChanged("session_updated"));let d=this.clearStallWarning(c);if(Mt(c.title)){let p=Oi(r,50);p&&p!==c.title&&(c.title=p),this.store.upsert(j(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId),d&&this.noteInventoryChanged("session_updated");let f=$d(r,a),h=l!==void 0&&l||void 0,g=p=>{let m={...o?{clientMessageId:o}:{},content:r,...a?.length?{images:a}:{},...h!==void 0?{model:h}:{},prompt:f,enqueuedAt:new Date().toISOString()};c.pendingQueue.push(m),this.store.upsert(j(c)),this.broadcastPendingQueue(c);let y=o?{sessionId:s,clientMessageId:o,queued:!0}:{sessionId:s,queued:!0};this.reply(e,n,!0,this.buildSessionResponseData(u,s,y)),w.debug({sessionId:s,reason:p,queueLength:c.pendingQueue.length},"message enqueued on daemon")};if(l!==void 0&&(c.model=l||void 0),c.pendingApproval){g("pending_approval");return}if(c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=r,this.noteInventoryChanged("session_updated"),g("startup");return}if(c.isResponding){g("busy");return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=r,c.lastTurnStartedAt=Date.now(),this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(f,c.model),this.reply(e,n,!0,this.buildSessionResponseData(u,s,o?{sessionId:s,clientMessageId:o}:{sessionId:s}))}async sendReconnectSnapshot(e,n,s,r,i,o,a,l,u){try{let c=this.getDeletedSessionIds(),d;try{d=await qs({agent:s,cwd:r,search:i,sinceMs:u,customTitles:l,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:c})}catch(g){w.warn({error:String(g)},"failed to build reconnect snapshot session list"),d={sessions:[],nextCursor:void 0}}d={...d,inventoryVersion:this.inventoryVersion};let f;if(o&&!c.has(o)){let g=o;o=this.resolveSessionRef(o).resolvedSessionId;let p=a??d.sessions.find(C=>C.sessionId===o)?.agent,m=this.sessions.get(o);m&&m.clients.add(e);let y=await this.resolveReconnectSession(o,p,m);if(y){let C=await Mn(o,y.agent,m?.cwd??y.cwd),_=this.annotateHistoryMessages(C,m?.acceptedClientMessageIds??y.acceptedClientMessageIds,m?.interruptedClientMessageIds??y.interruptedClientMessageIds),A=m?{}:await ao(o,y.agent,y.cwd),I=!m&&!!A.isResponding,B=I?await this.externalProcessPresenceCheck(o):!1,x=I&&!B?{}:A,X=m?.interruptReason??y.interruptReason,ct=m?.stallWarning??y.stallWarning,Hn=m?.pendingQueue??y.pendingQueue;f={sessionId:o,agent:y.agent,messages:_,...er(m?.acceptedClientMessageIds??y.acceptedClientMessageIds),isResponding:m?.isResponding??x.isResponding??(I&&!B?void 0:y.isResponding),...B?{externallyResponding:!0}:{},partialReplyText:m?this.currentPartialReplyText(m):x.partialReplyText,approvalMode:m?.approvalMode??y.approvalMode,...m?.pendingApproval?{pendingApproval:m.pendingApproval}:{},...X?{interruptReason:X}:{},...ct?{stallWarning:ct}:{},...Hn.length>0?{pendingQueue:Ht(Hn)}:{}},g!==o&&this.reply(e,`id_update_${Date.now()}`,!0,{sessionId:o,oldSessionId:g})}}let h=this.collectReconnectPendingApprovals();b.increment("reconnect.snapshot",{activeSession:f?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:d.sessions,nextCursor:d.nextCursor,inventoryVersion:d.inventoryVersion,...f?{activeSession:f}:{},...h.length>0?{pendingApprovals:h}:{}}})}catch(c){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(c)}`)}}async approve(e,n,s,r,i){let o=this.resolveSessionRef(s);s=o.resolvedSessionId;let a=this.sessions.get(s),l=a?.pendingApproval,u=a?.pendingClaudeHookApprovals.get(r);if(a&&u){a.pendingApproval=void 0,T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),u.resolve(Gd(i)),a.isResponding=!0,this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s}));return}let c=a?.syntheticApprovalRetries[r];if(a&&c&&xs(r)){delete a.syntheticApprovalRetries[r],a.pendingApproval=void 0,T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s})),i&&await this.retrySyntheticClaudeApproval(a,c);return}if(a&&!a.driver&&l)try{await this.reviveSessionForApproval(a)}catch(f){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(f)}`);return}if(!a?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),!a.driver.respondApproval(r,i)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}a.pendingApproval=void 0,this.touchSession(a.sessionId),a.isResponding=!0,this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s}))}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let s=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",r=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,r,e.claudeHookSecret);await r.start(e.cwd,e.sessionId,s),e.driver=r,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.lastTurnStartedAt=Date.now(),e.startupInProgress=!1,e.pendingQueue=e.pendingQueue??[],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(j(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),w.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:s},"retrying Claude turn after synthetic approval"),r.sendPrompt(n.message,e.model)}catch(s){e.driver=null,e.active=!1,e.isResponding=!1,e.startupInProgress=!1;let r=e.pendingQueue.length>0;e.pendingQueue=[],e.startupToken+=1,r&&this.broadcastPendingQueue(e),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),w.error({sessionId:e.sessionId,error:String(s)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(s)}`})}}async setApprovalMode(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s);if(!o){let l=this.store.find(s);l?(r===null?delete l.approvalMode:l.approvalMode=r,this.store.upsert(l),this.noteInventoryChanged("session_updated"),w.info({sessionId:s,agent:l.agent,newMode:r},"approval mode changed (inactive session)")):w.info({sessionId:s,newMode:r},"approval mode changed (untracked session)"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:r,sessionId:s}));return}if(r===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let a=o.approvalMode;o.approvalMode=r,this.store.upsert(j(o)),this.noteInventoryChanged("session_updated"),w.info({sessionId:s,agent:o.agent,oldMode:a,newMode:r},"approval mode changed"),o.driver&&o.driver.setApprovalMode(r),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:r,sessionId:s}))}interrupt(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);if(!i){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(T.emit("session.interrupt",{sessionId:s,agent:i.agent}),!i.driver){if(i.isResponding||i.pendingQueue.length>0){w.info({sessionId:s,agent:i.agent},"interrupting driverless session with stale responding state");let o=i.pendingQueue.length>0;i.pendingQueue=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,i.pendingApproval=void 0,this.clearStallWarning(i),this.markLatestAcceptedClientMessageInterrupted(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),o&&this.broadcastPendingQueue(i),this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId})}this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}));return}if(i.startupInProgress){let o=i.isResponding||i.pendingQueue.length>0;w.info({sessionId:s,agent:i.agent,hadBufferedTurn:o},"interrupting pending startup session");let a=i.pendingQueue.length>0;i.pendingQueue=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,i.pendingApproval=void 0,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),a&&this.broadcastPendingQueue(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s})),o&&this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId});return}i.driver.interrupt(),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}clearInterrupt(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s),o=this.store.find(s);if(!i&&!o?.interruptReason){this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}));return}let a=!1;i?.interruptReason&&(i.interruptReason=void 0,a=!0),i?this.store.upsert(j(i)):o?.interruptReason&&(this.store.upsert({...o,interruptReason:void 0}),a=!0),a&&this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}stopSession(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);if(!i){this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:s,agent:i.agent},"stopping session"),T.emit("session.stop",{sessionId:s,agent:i.agent}),Ud(i);let o=i.isResponding||i.pendingQueue.length>0||i.startupInProgress,a=i.pendingQueue.length>0;this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.active=!1,i.driver=null,i.isResponding=!1,i.currentReplyText="",i.pendingApproval=void 0,i.startupInProgress=!1,i.pendingQueue=[],i.startupToken+=1,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.updateGauges(),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),a&&this.broadcastPendingQueue(i),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}deleteSession(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);i&&(w.info({sessionId:s,agent:i.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.startupInProgress=!1,i.pendingQueue=[],i.startupToken+=1,this.unregisterClaudeHookSession(i),this.sessions.delete(s)),T.emit("session.delete",{sessionId:s}),this.store.remove(s),this.updateGauges(),Vs(),Os(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}async sendHistory(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s),a=o?.active?o:void 0;if(!o&&this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}o&&o.clients.add(e);let l=a?.cwd??o?.cwd??this.store.find(s)?.cwd??"",u=this.store.find(s),c=await Mn(s,r,l),d=this.annotateHistoryMessages(c,o?.acceptedClientMessageIds??u?.acceptedClientMessageIds,o?.interruptedClientMessageIds??u?.interruptedClientMessageIds),f=a||o?{}:await ao(s,r,l),h=!a&&!!f.isResponding,g=h?await this.externalProcessPresenceCheck(s):!1,p=g?!0:void 0,m=h&&!g?{}:f,y=a?.isResponding??m.isResponding,C=a?this.currentPartialReplyText(a):m.partialReplyText;w.info({sessionId:s,historyCount:c.length,isResponding:y,externallyResponding:p,approvalMode:o?.approvalMode??u?.approvalMode},"sending history");let _=o&&o.pendingQueue.length>0?Ht(o.pendingQueue):u?.pendingQueue&&u.pendingQueue.length>0?u.pendingQueue:void 0,A={type:"session.history",sessionId:s,messages:d,...er(o?.acceptedClientMessageIds??u?.acceptedClientMessageIds),isResponding:y,externallyResponding:p,partialReplyText:C,approvalMode:o?.approvalMode??u?.approvalMode,pendingApproval:o?.pendingApproval??u?.pendingApproval,stallWarning:o?.stallWarning??u?.stallWarning,..._?{pendingQueue:_}:{}};e.readyState===1&&e.send(JSON.stringify(A));let I=o?.interruptReason??u?.interruptReason;if(I&&e.readyState===1){let B={type:"session.interrupted_notice",sessionId:s,reason:I};e.send(JSON.stringify(B))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:s}))}async listSessions(e,n,s,r,i,o=50,a,l,u,c){try{let d=await qs({agent:s,cwd:r,search:i,sinceMs:u,customTitles:l,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds(),skipGitMetadata:c});this.reply(e,n,!0,{...d,inventoryVersion:this.inventoryVersion})}catch(d){this.reply(e,n,!1,void 0,String(d))}}listArchiveableManagedSessions(e,n){let s=this.getDeletedSessionIds(),r=new Set;for(let o of this.sessions.values())o.managed&&(o.sessionId.startsWith("pending_")||s.has(o.sessionId)||r.add(o.sessionId));for(let o of this.store.getAll())o.managed&&(s.has(o.sessionId)||r.add(o.sessionId));let i={count:r.size,ids:[...r]};this.reply(e,n,!0,i)}createDriver(e){if(S.reviewMock)return new Rs;switch(e){case"claude":return new wn;case"codex":return new In;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let s=this.sessions.get(e);if(!s){w.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let r=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:s.clients,o=i.size,a=0,l=0;for(let u of i)u.readyState===1?(u.send(r),a++):l++;if(l>0&&b.increment("broadcast.fail"),n.type!=="text.delta"&&w.debug({sessionId:e,msgType:n.type,sent:a,total:o},"broadcast"),n.type==="text.delta"){s.currentReplyText+=n.content;return}if(n.type==="session.done"){let u=s.title||e,c=this.buildPushBody(s.currentReplyText);s.currentReplyText="",this.pushSender({title:u,body:c},{sessionId:e,agent:s.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(s.currentReplyText="")}reply(e,n,s,r,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:s,data:r,error:i};e.send(JSON.stringify(o))}};function po(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,t.locale):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Vd=require("child_process");function VS(t,e){return(0,Vd.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function QS(t){let e=t.split(`
113
- `).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Qd(t,e=VS){let n;try{n=QS(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(s=>{try{let r=e("ps",["-p",String(s),"-o","command="]);return r?{pid:s,command:r}:{pid:s}}catch{return{pid:s}}})}var qt=require("fs"),ho=require("os"),Jd=require("crypto"),Kd=require("path");function Xd(t){return(0,Jd.randomBytes)(t).toString("base64url")}function YS(){return`d_${Xd(12)}`}function JS(){return(0,ho.hostname)()}function KS(){let t=(0,ho.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function XS(t){return{daemonId:YS(),daemonSecret:Xd(32),displayName:JS(),canonicalHost:KS(),port:t,createdAt:new Date().toISOString()}}function Yd(t,e){(0,qt.mkdirSync)((0,Kd.dirname)(e),{recursive:!0}),(0,qt.writeFileSync)(e,JSON.stringify(t,null,2)+`
114
- `,"utf8")}function Zd(t,e=Hc){try{let s=(0,qt.readFileSync)(e,"utf8"),r=JSON.parse(s);if(typeof r.daemonId=="string"&&typeof r.daemonSecret=="string"&&typeof r.displayName=="string"&&typeof r.canonicalHost=="string"&&typeof r.createdAt=="string"){let i={daemonId:r.daemonId,daemonSecret:r.daemonSecret,displayName:r.displayName,canonicalHost:r.canonicalHost,port:typeof r.port=="number"&&Number.isFinite(r.port)?r.port:t,createdAt:r.createdAt};return i.port!==t&&(i.port=t,Yd(i,e)),i}}catch{}let n=XS(t);return Yd(n,e),n}var Gt=require("crypto"),jt=require("fs"),tf=require("path");function go(t){return(0,Gt.randomBytes)(t).toString("base64url")}function mo(t){return(0,Gt.createHash)("sha256").update(t).digest("hex")}function ef(t,e){let n=Buffer.from(t),s=Buffer.from(e);return n.length!==s.length?!1:(0,Gt.timingSafeEqual)(n,s)}function ZS(t){try{let e=(0,jt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(s=>s&&typeof s.deviceId=="string"&&typeof s.deviceName=="string"&&typeof s.tokenHash=="string"&&typeof s.createdAt=="string"&&typeof s.lastSeenAt=="string"&&(typeof s.revokedAt=="string"||s.revokedAt===null)):[]}catch{return[]}}function On(t,e){(0,jt.mkdirSync)((0,tf.dirname)(t),{recursive:!0}),(0,jt.writeFileSync)(t,JSON.stringify(e,null,2)+`
115
- `,"utf8")}var nr=class{constructor(e=Uc){this.pairingsPath=e;this.records=ZS(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 s=`pair_${go(8)}`,r=go(24),i=new Date(Date.now()+e).toISOString(),o={pairingId:s,pairNonce:r,expiresAt:i,reusable:n};return this.windows.set(r,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 s=new Date().toISOString(),r=go(32),i={deviceId:e,deviceName:n,tokenHash:mo(r),createdAt:s,lastSeenAt:s,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),On(this.pairingsPath,this.records),r}validatePairToken(e,n,s=!0){let r=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!r)return!1;let i=mo(n);return ef(r.tokenHash,i)?(s&&(r.lastSeenAt=new Date().toISOString(),On(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let s=mo(e),r=this.records.find(i=>!i.revokedAt&&ef(i.tokenHash,s));return r?(n&&(r.lastSeenAt=new Date().toISOString(),On(this.pairingsPath,this.records)),r):null}revoke(e){let n=this.records.find(s=>s.deviceId===e&&!s.revokedAt);return n?(n.revokedAt=new Date().toISOString(),On(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),On(this.pairingsPath,this.records)}};function at(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function e_(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function yo(t,e){return e_(t)??e}function sr(t,e){return!!(t&&e&&t===e)}function vo(t,e,n,s=!0){return t?sr(t,e)?!0:!!n(t,s):!1}var rf=require("child_process"),of=require("fs");function rr(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function So(t){if(!rr(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function t_(t){if(!rr(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function n_(t){if(!rr(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function s_(t){if(!rr(t))return!1;let[e,n]=t.split(".").map(Number);return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}function ir(t){return!!t&&!t_(t)&&!n_(t)}function de(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function _o(t){return de(t.replace(/^https?:\/\//,""))??t}function r_(t,e){return(t??[]).map(n=>de(n)).filter(n=>!!n).filter(n=>ir(n)).filter((n,s,r)=>n!==e&&r.indexOf(n)===s)}function i_(t){let e=t.trim().toLowerCase();return e?!(e==="lo"||e==="lo0"||e.startsWith("loopback")||e.startsWith("awdl")||e.startsWith("llw")||e.startsWith("utun")||e.startsWith("tun")||e.startsWith("tap")||e.startsWith("ipsec")||e.startsWith("bridge")||e.startsWith("docker")||e.startsWith("br-")||e.startsWith("veth")||e.startsWith("vmnet")||e.startsWith("vboxnet")||e.startsWith("tailscale")||e.startsWith("wg")||e.startsWith("zt")||e.startsWith("ham")):!1}function o_(t){let e=_o(t);return So(e)||e.endsWith(".ts.net")}function a_(t){let e=_o(t);return s_(e)||e.endsWith(".local")}function l_(t){return _o(t).endsWith(".trycloudflare.com")}function nf(t,e){return o_(t)?"tailscale":a_(t)?"local_network":e?"configured_host":"fallback"}function af(t){let e=new Set,n=[];for(let s of t){let r=`${s.host}:${s.port}:${s.secure===!0?"secure":"plain"}`;e.has(r)||(e.add(r),n.push(s))}return n}function c_(t){let e=t[0];return e?t.slice(1).filter(n=>n.port===e.port).map(n=>n.host).filter((n,s,r)=>n!==e.host&&r.indexOf(n)===s):[]}function u_(t){try{let e=new URL(t),n=de(e.hostname);if(!n)throw new Error("invalid relay hostname");let s=e.port?Number(e.port):e.protocol==="https:"?443:80,r=Number.isFinite(s)&&s>0?Math.floor(s):443,i=l_(n);return{kind:"relay",host:n,port:r,...e.protocol==="https:"?{secure:!0}:{},source:i?"quick_tunnel":"configured_relay",stability:i?"ephemeral":"stable"}}catch{return null}}function d_(t,e,n){let s=de(t)||"localhost",r=r_(e,s);return af([{kind:"direct",host:s,port:n,source:nf(s,!0),stability:"stable"},...r.map(i=>({kind:"direct",host:i,port:n,source:nf(i,!1),stability:"stable"}))])}function lf(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function f_(t){let e=[],n=[];for(let[s,r]of Object.entries(t))if(r&&i_(s))for(let i of r)i.internal||i.family!=="IPv4"||ir(i.address)&&(So(i.address)?e.push(i.address):n.push(i.address));return[...e,...n]}function sf(t){let e=JSON.parse(t),n=de(e.Self?.DNSName),s=(e.Self?.TailscaleIPs??[]).map(o=>de(o)).filter(o=>!!o).filter(o=>So(o)&&ir(o)),r=s[0]??n,i=[...n&&n!==r?[n]:[],...s.filter(o=>o!==r)];return{canonicalHost:r,fallbackHosts:i}}function cf(t=rf.execFileSync,e=of.existsSync){let n=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(s=>typeof s=="string"&&s.length>0).filter(s=>e(s));for(let s of n)try{let r=t("tailscale",["--socket",s,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return sf(r)}catch{}try{let s=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return sf(s)}catch{return{fallbackHosts:[]}}}function uf(t){let e=d_(t.canonicalHost,t.fallbackHosts,t.port),n=t.relayUrl?u_(t.relayUrl):null,s=af([...n?[n]:[],...e]),r=s[0]??{kind:"direct",host:de(t.canonicalHost)||"localhost",port:t.port,source:"configured_host",stability:"stable"};return{canonicalHost:r.host,fallbackHosts:c_(s),port:r.port,connections:s}}function df(t){let e=de(t.canonicalHost),n=de(t.configuredCanonicalHost)||de(t.tailscaleCanonicalHost)||e||"localhost",s=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...f_(t.interfaces)].map(r=>de(r)).filter(r=>!!r).filter(r=>ir(r)).filter((r,i,o)=>r!==n&&o.indexOf(r)===i);return{canonicalHost:n,fallbackHosts:s}}function ff(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 z=N.child({module:"daemon"}),Bn=N.child({module:"ws"});function p_(){try{let t=JSON.parse(require("fs").readFileSync(qc,"utf8"));return typeof t.latestVersion=="string"?t.latestVersion:void 0}catch{return}}var W=Zd(S.port),ee=new tr((t,e)=>Zs(t,{daemonId:W.daemonId,canonicalHost:Dn().canonicalHost,...e??{}})),pe=new nr,ar=new Set,Ue=new WeakMap,pf=!1,yf=Date.now(),$t=null,or=null,h_=1e3;function g_(){let t=cf();return df({canonicalHost:W.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:lf(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,mf.networkInterfaces)()})}function Dn(){let t=Date.now();if(or&&or.expiresAt>t)return or.value;let e=g_(),n=uf({canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts,port:W.port,relayUrl:S.relayUrl});return or={value:n,expiresAt:t+h_},n}function m_(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,n.secure===!0])),e}async function y_(t){let e=JSON.stringify(m_(t));await(0,ae.mkdir)(Ie,{recursive:!0}),await Io.default.toFile(bi,e,{type:"png",errorCorrectionLevel:"M",margin:1,scale:8});let n=await Io.default.toString(e,{type:"terminal",small:!0,errorCorrectionLevel:"M"});Ct(`
110
+ ${n}`:n:t}function Ut(t){return t.map(e=>({...e.clientMessageId?{clientMessageId:e.clientMessageId}:{},content:e.content,...e.images?.length?{images:e.images}:{},...e.model?{model:e.model}:{},enqueuedAt:e.enqueuedAt}))}function Kd(t){return t?.length?t.map(e=>({...e.clientMessageId?{clientMessageId:e.clientMessageId}:{},content:e.content,...e.images?.length?{images:e.images}:{},...e.model?{model:e.model}:{},prompt:lf(e.content,e.images),enqueuedAt:e.enqueuedAt})):[]}function m_(t,e){let n=t?.length?t:void 0,s=e?.length?e:void 0;return!n||!s?n===s:n.length!==s.length?!1:n.every((r,i)=>r===s[i])}function _o(t,e,n){return{content:t,...e?.length?{images:e}:{},...n!==void 0?{model:n}:{}}}function Xd(t,e){return t?t.content===e.content&&m_(t.images,e.images)&&t.model===e.model:!1}var Zd=200;function ef(t){return t?.replace(/_/g,"-").toLowerCase()?.startsWith("zh")?"zh":"en"}var y_={zh:"Agent \u5361\u4F4F",en:"Agent stalled"},v_={zh:"Agent \u5D29\u6E83",en:"Agent crashed"};function qt(t){let e=Math.round(t/1e3);if(e<60)return`${e} \u79D2`;let n=Math.floor(e/60),s=e%60;return s===0?`${n} \u5206\u949F`:`${n} \u5206 ${s} \u79D2`}function cf(t){if(!t)return;let e=t.trim();if(e)return e.length>Zd?`${e.slice(0,Zd-1)}\u2026`:e}function S_(t,e,n,s){let r=qt(t),i=qt(n),o=qt(e),a=cf(s),l=a?`
111
+ \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${a}"\u3002`:"",u=n>e?`Agent \u957F\u65F6\u95F4\u6CA1\u6709\u8F93\u51FA\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${i} \u4ECD\u672A\u6062\u590D\u540E\u88AB\u81EA\u52A8\u505C\u6B62\uFF08${o} \u65F6\u5DF2\u6807\u8BB0\u7591\u4F3C\u5361\u4F4F\uFF09\u3002`:`Agent \u5361\u4F4F\u4E86\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${i} \u9608\u503C\u540E\u88AB\u81EA\u52A8\u505C\u6B62\u3002`;return{kind:"stall_timeout",at:new Date().toISOString(),humanText:`${u}${l}`,...a?{lastPrompt:a}:{},idleMs:t,softThresholdMs:e,stopThresholdMs:n}}function __(t,e,n){let s=qt(t),r=qt(e),i=n>0?qt(n):void 0;return{at:new Date().toISOString(),humanText:i?`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${s} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${r} \u540E\u88AB\u6807\u8BB0\u4E3A\u7591\u4F3C\u5361\u4F4F\uFF1B\u5982\u679C\u8D85\u8FC7 ${i} \u4ECD\u672A\u6062\u590D\uFF0C\u5C06\u81EA\u52A8\u505C\u6B62\u3002`:`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${s} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${r} \u540E\u88AB\u6807\u8BB0\u4E3A\u7591\u4F3C\u5361\u4F4F\uFF1B\u5F53\u524D\u4E0D\u4F1A\u81EA\u52A8\u505C\u6B62\uFF0C\u4F60\u53EF\u4EE5\u7EE7\u7EED\u7B49\u5F85\u6216\u624B\u52A8\u505C\u6B62\u3002`,idleMs:t,softThresholdMs:e,...n>0?{hardTimeoutMs:n}:{}}}function b_(t,e){let n=cf(e),s=n?`
112
+ \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${n}"\u3002`:"";return{kind:"driver_crash",at:new Date().toISOString(),humanText:`Agent \u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF08\u9000\u51FA\u7801 ${t}\uFF09\u3002${s}`,...n?{lastPrompt:n}:{},exitCode:t}}function w_(t,e){return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,...Number.isFinite(e.cacheCreationInputTokens)?{cacheCreationInputTokens:e.cacheCreationInputTokens}:Number.isFinite(t?.cacheCreationInputTokens)?{cacheCreationInputTokens:t?.cacheCreationInputTokens}:{},...Number.isFinite(e.cacheReadInputTokens)?{cacheReadInputTokens:e.cacheReadInputTokens}:Number.isFinite(t?.cacheReadInputTokens)?{cacheReadInputTokens:t?.cacheReadInputTokens}:{},...Number.isFinite(e.contextWindowTokens)?{contextWindowTokens:e.contextWindowTokens}:Number.isFinite(t?.contextWindowTokens)?{contextWindowTokens:t?.contextWindowTokens}:{}}:t}function tf(t){if(t)return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,...Number.isFinite(t.cacheCreationInputTokens)?{cacheCreationInputTokens:t.cacheCreationInputTokens}:{},...Number.isFinite(t.cacheReadInputTokens)?{cacheReadInputTokens:t.cacheReadInputTokens}:{},...Number.isFinite(t.contextWindowTokens)?{contextWindowTokens:t.contextWindowTokens}:{}}}function I_(t,e){return t?.inputTokens===e?.inputTokens&&t?.outputTokens===e?.outputTokens&&t?.cacheCreationInputTokens===e?.cacheCreationInputTokens&&t?.cacheReadInputTokens===e?.cacheReadInputTokens&&t?.contextWindowTokens===e?.contextWindowTokens}function Ce(...t){let e=[];for(let n of t)if(n?.length)for(let s of n)!s||e.includes(s)||(e.push(s),e.length>Wt&&e.splice(0,e.length-Wt));return e}function ar(t){return t?.length?{acceptedClientMessageIds:Ce(t)}:{}}function j(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,model:t.model,acceptedClientMessageIds:Ce(t.acceptedClientMessageIds),interruptedClientMessageIds:Ce(t.interruptedClientMessageIds),pendingApproval:t.agent==="codex"?t.pendingApproval:void 0,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,lastUsage:t.lastUsage,managed:t.managed,isResponding:t.isResponding||void 0,interruptReason:t.interruptReason,stallWarning:t.stallWarning,pendingQueue:t.pendingQueue.length>0?Ut(t.pendingQueue):void 0}}function nf(t){t.managed||(t.managed=!0)}function sf(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&Ms(e)}function rf(t,e,n){return{sessionId:t,agent:e,...n}}function T_(t){return t.startsWith(Li)}function of(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 lr=class{constructor(e=sr,n=Xu){this.pushSender=e;this.externalProcessPresenceCheck=n;this.removeInventoryBackfillListener=ud(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.updateGauges(),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new er;idleSweepInterval=null;watchdogNowMs=Date.now();lastWatchdogWallClockMs=this.watchdogNowMs;globalClients=new Set;inventoryVersion=0;removeInventoryBackfillListener;startIdleSweep(){S.idleTimeoutMs<=0&&S.turnStallTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),h_),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=this.advanceWatchdogClock(Date.now(),"sweep"),n=S.idleTimeoutMs,s=S.turnStallTimeoutMs,r=S.turnStallHardTimeoutMs;if(n<=0&&s<=0)return;let i=3600*1e3;for(let[o,a]of this.sessions){if(!a.active&&!a.driver){if(a.clients.size===0){let u=e-a.lastActivityTs;u>=i&&(b.info({sessionId:a.sessionId,inactiveMs:u},"removing inactive session from memory"),_.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(a),this.sessions.delete(o))}continue}if(!a.active||!a.driver)continue;let l=e-a.lastActivityTs;if(a.isResponding){if(s<=0||a.pendingApproval||l<s)continue;let u=this.getRespondingLivenessHint(a),c=r>0&&l>=r,d=u==="dead";if(!d&&!c){if(!a.stallWarningAt){let m=__(l,s,r);a.stallWarningAt=e,a.stallWarning=m,this.updateGauges(),b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:s,turnStallHardTimeoutMs:r,livenessHint:u},"responding session exceeded soft stall threshold; waiting before forced stop"),_.increment("driver.stall_warning",{agent:a.agent}),T.emit("driver.stall_warning",{sessionId:a.sessionId,agent:a.agent,idleMs:l,hardTimeoutMs:r||void 0}),this.broadcast(a.sessionId,{type:"session.stall_warning",sessionId:a.sessionId,warning:m}),this.store.upsert(j(a)),this.noteInventoryChanged("session_updated")}continue}let f=d||r<=0?s:r;b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:s,turnStallHardTimeoutMs:r,livenessHint:u},"stopping stalled driver"),_.increment("driver.stall_timeout",{agent:a.agent}),T.emit("driver.stall_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l});let h=S_(l,s,f,a.lastUserMessage);a.interruptReason=h,this.clearStallWarning(a),this.resolvePendingClaudeHookApprovals(a),a.driver.stop(),a.active=!1,a.driver=null,a.isResponding=!1,a.currentReplyText="",delete a.currentTurn,this.updateGauges(),this.broadcast(a.sessionId,{type:"session.interrupted_notice",sessionId:a.sessionId,reason:h});let g=this.buildPushBody(`${a.title||a.sessionId}: ${h.lastPrompt??""}`.trim());this.pushSender(m=>({title:y_[ef(m)],body:g}),{sessionId:a.sessionId,agent:a.agent,eventType:"agent_stalled"}),this.touchSession(a.sessionId),this.store.upsert(j(a)),this.noteInventoryChanged("session_updated");continue}a.pendingApproval||n<=0||l<n||(b.info({sessionId:a.sessionId,agent:a.agent,idleMs:l,timeoutMs:n},"stopping idle driver"),_.increment("driver.idle_timeout",{agent:a.agent}),T.emit("driver.idle_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l}),a.driver.stop(),a.active=!1,a.driver=null,this.updateGauges(),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"))}}bindDriverLifecycle(e,n,s,r){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){b.info({agent:n,context:s,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(b.debug({agent:n,context:s,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,r),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,delete e.currentTurn,o.type==="session.done"&&(n==="claude"?(e.lastUsage=tf(o.usage),this.reconcileClaudeSessionUsage(e,o.usage)):o.usage&&(e.lastUsage=w_(e.lastUsage,o.usage))),o.type==="session.interrupted"&&this.markLatestAcceptedClientMessageInterrupted(e),(o.type==="session.interrupted"||!sf(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){T.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}b.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({title:p_,body: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"&&Ms(o.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[o.requestId]={message:e.lastUserMessage,toolName:o.toolName}:b.warn({sessionId:e.sessionId,requestId:o.requestId},"missing lastUserMessage for synthetic approval retry"));let a=this.clearStallWarning(e);this.touchSession(e.sessionId,o.type!=="text.delta"||a),(a||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"&&this.emitGeneratedFileNoticesForCompletedTurn(e),(o.type==="session.done"||o.type==="session.interrupted")&&e.pendingQueue.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){b.info({agent:n,context:s,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}b.info({agent:n,context:s,exitCode:o,sessionId:e.sessionId},"driver exited"),T.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:o});let a=o!==0&&o!==null;_.increment("driver.exit",{agent:n,abnormal:a?"true":"false"});let l=!!(e.pendingApproval&&(e.agent==="codex"||o===0&&sf(e)));if(this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",delete e.currentTurn,this.clearStallWarning(e),l||(e.pendingApproval=void 0),a){let u=b_(o,e.lastUserMessage);e.interruptReason=u,this.broadcast(e.sessionId,{type:"session.interrupted_notice",sessionId:e.sessionId,reason:u});let c=this.buildPushBody(`${e.title||e.sessionId}: ${u.lastPrompt??""}`.trim());this.pushSender(d=>({title:v_[ef(d)],body:c}),{sessionId:e.sessionId,agent:e.agent,eventType:"agent_crashed"})}this.updateGauges(),this.touchSession(e.sessionId),this.store.upsert(j(e)),this.noteInventoryChanged("session_updated")})}async reconcileClaudeSessionUsage(e,n){let s=await Md(e.sessionId,e.cwd),r=tf(s??n);!r||I_(e.lastUsage,r)||(e.lastUsage=r,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"))}remapSessionId(e,n,s){if(!n||n===e.sessionId)return;let r=this.sessions.get(n);if(r&&r!==e){b.warn({oldSessionId:e.sessionId,newSessionId:n},"skipping session ID remap because target already exists");return}let i=e.sessionId;b.info({oldSessionId:i,newSessionId:n},"session ID updated"),this.store.forget(i),this.store.addAlias(i,n),this.sessions.delete(i),e.sessionId=n,this.sessions.set(n,e),this.store.upsert(j(e)),this.noteInventoryChanged("session_remapped"),s&&this.reply(s,`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 s=e.pendingQueue.shift();return s?(s.clientMessageId&&this.rememberAcceptedClientMessage(e,s.clientMessageId),s.model!==void 0&&(e.model=s.model||void 0),e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=s.content,e.currentTurn=_o(s.content,s.images,s.model),e.lastTurnStartedAt=Date.now(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),this.store.upsert(j(e)),this.broadcastPendingQueue(e),e.driver.sendPrompt(s.prompt,e.model),!0):!1}broadcastPendingQueue(e){this.broadcast(e.sessionId,{type:"session.queue",sessionId:e.sessionId,pending:Ut(e.pendingQueue)})}cancelQueuedTurn(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s);if(!o){this.reply(e,n,!1,void 0,"Session not found");return}if(!r){this.reply(e,n,!1,void 0,"clientMessageId required");return}let a=o.pendingQueue.length;o.pendingQueue=o.pendingQueue.filter(u=>u.clientMessageId!==r);let l=a-o.pendingQueue.length;l>0&&(T.emit("session.queue.cancel",{sessionId:s,agent:o.agent,clientMessageId:r,removed:l}),this.store.upsert(j(o)),this.touchSession(o.sessionId),this.noteInventoryChanged("session_updated"),this.broadcastPendingQueue(o)),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:s,removed:l}))}emitGeneratedFileNoticesForCompletedTurn(e){let n=e.lastTurnStartedAt;e.lastTurnStartedAt=void 0,!(e.agent!=="codex"||!n)&&Ld(e.sessionId,e.agent,e.cwd,n).then(s=>{for(let r of s)this.broadcast(e.sessionId,{type:"tool.result",sessionId:e.sessionId,toolCallId:`generated-file-${Date.now()}`,output:r})}).catch(s=>{b.warn({sessionId:e.sessionId,error:String(s)},"failed to read generated-file notices")})}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let s=e.driver,r=e.sessionId,i=e.startupToken,o=_.startTimer("driver.spawn");(async()=>{try{let a=await s.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(r)!==e||e.startupToken!==i||e.driver!==s){b.info({pendingSessionId:r,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,b.info({pendingSessionId:r,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==r&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(r)!==e||e.startupToken!==i){b.info({pendingSessionId:r,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1;let u=e.pendingQueue.length>0;e.pendingQueue=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",delete e.currentTurn,this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),u&&this.broadcastPendingQueue(e),b.error({sessionId:r,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,s,r){if(e==="codex"&&n instanceof Tn&&r&&n.setModel(r),e!=="claude"||!(n instanceof In))return;let i=s??(0,bo.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=bn){for(let s of e.pendingClaudeHookApprovals.values())s.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&T_(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 s=this.resolveClaudeHookSession(e);return s?(this.touchSession(s.sessionId),!0):(b.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let s=this.resolveClaudeHookSession(e);if(!s||s.agent!=="claude"||!s.active)return b.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),bn;if(s.approvalMode==="autoApprove")return of(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return bn;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:"",u=`${Li}${l.trim()||(0,bo.randomUUID)()}`,c=s.pendingClaudeHookApprovals.get(u);if(c)return c.promise;let d=`Claude requested permissions to use ${i}.`,f,h=new Promise(g=>{f=g});return s.pendingClaudeHookApprovals.set(u,{requestId:u,promise:h,resolve:g=>{s.pendingClaudeHookApprovals.delete(u),f(g)}}),s.pendingApproval={requestId:u,toolName:i,input:a,description:d},T.emit("approval.request",{agent:"claude",sessionId:s.sessionId,toolName:i}),this.touchSession(s.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(s.sessionId,{type:"approval.request",sessionId:s.sessionId,requestId:u,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,s){if(e=this.resolveSessionRef(e).resolvedSessionId,this.isDeletedSession(e))return;let r=new Date().toISOString(),i=s?.agent,o=s?.cwd??"",a=s?.approvalMode,l=s?.model,u=s?.pendingApproval,c=s?.title??"",d=s?.createdAt??r,f=s?.lastActivityAt??r,h=s?.lastUsage,g=Ce(s?.acceptedClientMessageIds),m=Ce(s?.interruptedClientMessageIds),p=s?.isResponding,y=s?.interruptReason,C=s?.stallWarning,I=s?[...s.pendingQueue]:[],A=s?"memory":"client",w=this.store.find(e);if(w)i=w.agent,o=w.cwd||o,a=w.approvalMode??a,l=w.model??l,u=w.pendingApproval??u,c=w.title||c,d=w.createdAt||d,f=w.lastActivityAt||f,h=w.lastUsage??h,g=Ce(w.acceptedClientMessageIds,g),m=Ce(w.interruptedClientMessageIds,m),y=y??w.interruptReason,C=C??w.stallWarning,s||(I=Kd(w.pendingQueue)),A="record";else if(!s){let x=(await Mn(n??i)).find(X=>X.sessionId===e);x&&(i=x.agent,o=x.cwd||o,c=x.title??c,d=x.createdAt,f=x.lastActivityAt,h=x.lastUsage??h,p=x.runtime.isResponding??p,A="scanner")}if(!i&&n&&(i=n,A=s?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,model:l,pendingApproval:u,title:c,createdAt:d,lastActivityAt:f,lastUsage:h,acceptedClientMessageIds:g,interruptedClientMessageIds:m,source:A,managed:s?.managed??w?.managed,isResponding:p||void 0,...y?{interruptReason:y}:{},...C?{stallWarning:C}:{},pendingQueue:I}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let s of this.sessions.values()){if(!s.pendingApproval)continue;let r=`${s.agent}:${s.sessionId}:${s.pendingApproval.requestId}`;n.has(r)||(n.add(r),e.push(rf(s.sessionId,s.agent,s.pendingApproval)))}for(let s of this.store.getAll()){if(!s.pendingApproval)continue;let r=`${s.agent}:${s.sessionId}:${s.pendingApproval.requestId}`;n.has(r)||(n.add(r),e.push(rf(s.sessionId,s.agent,s.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),s=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="",delete e.currentTurn,e.startupInProgress=!1,e.pendingQueue=e.pendingQueue??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=s??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(j(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<=Yd?n:`${n.slice(0,Math.max(1,Yd-3)).trimEnd()}...`:f_}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}currentWatchdogTime(){return this.advanceWatchdogClock(Date.now(),"activity")}getRespondingLivenessHint(e){return e.driver?.getRespondingLivenessHint?.()??"unknown"}clearStallWarning(e){return!e.stallWarning&&!e.stallWarningAt?!1:(e.stallWarning=void 0,e.stallWarningAt=void 0,this.updateGauges(),!0)}advanceWatchdogClock(e,n){let s=Math.max(0,e-this.lastWatchdogWallClockMs);return this.lastWatchdogWallClockMs=e,s<=0?this.watchdogNowMs:s>Jd?(n==="sweep"&&b.warn({elapsedWallMs:s,toleratedGapMs:Jd},"watchdog gap detected; discounting paused wall-clock time"),this.watchdogNowMs):(this.watchdogNowMs+=s,this.watchdogNowMs)}touchSession(e,n=!0){let s=Date.now(),r=new Date(s).toISOString(),i=this.advanceWatchdogClock(s,"activity"),o=this.sessions.get(e);if(o){o.lastActivityAt=r,o.lastActivityTs=i,n&&this.store.upsert(j(o));return}let a=this.store.find(e);a&&this.store.upsert({...a,lastActivityAt:r})}updateGauges(){let e=0,n=0;for(let s of this.sessions.values())s.active&&e++,s.stallWarning&&n++;_.gauge("session.active",e),_.gauge("session.stall_warning_active",n)}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,model:n.model,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,lastUsage:n.lastUsage,...n.pendingApproval||n.stallWarning?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed,...n.interruptReason?{interruptReason:n.interruptReason}:{},...n.stallWarning?{stallWarning:n.stallWarning}:{}});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}resolveSessionRef(e){let n=this.store.resolveSessionId(e);return{requestedSessionId:e,resolvedSessionId:n,remapped:n!==e}}buildResolvedSessionResponseData(e,n){let s=n?{...n}:{};return e.remapped&&(s.sessionId=e.resolvedSessionId,s.oldSessionId=e.requestedSessionId),Object.keys(s).length>0?s:void 0}buildSessionResponseData(e,n,s){let r=s?{...s}:{};return n&&n!==e.requestedSessionId&&(r.sessionId=n,r.oldSessionId=e.requestedSessionId),Object.keys(r).length>0?r:void 0}canResumeDriverSession(e,n){return!(e==="codex"&&n.startsWith("pending_"))}rememberSessionAlias(e,n){!e||!n||e===n||(this.store.forget(e),this.store.addAlias(e,n),this.noteInventoryChanged("session_remapped"))}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return Mn(e,n)}async handle(e,n){switch(b.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.queue.cancel":this.cancelQueuedTurn(e,n.id,n.sessionId,n.clientMessageId);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.clearInterrupt":this.clearInterrupt(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,n.sinceMs);break;case"sessions.list":{let s=typeof n.skipGitMetadata=="boolean"?n.skipGitMetadata:void 0;await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor,n.customTitles,n.sinceMs,s);break}case"sessions.archiveableManaged":this.listArchiveableManagedSessions(e,n.id);break;case"session.setArchived":this.setSessionArchived(e,n.id,n.sessionId,n.archived);break;case"sessions.archiveSync":this.archiveSync(e,n.id,n.mode,n.archivedSessionIds);break;case"usage.limits.fetch":await this.handleUsageLimitsFetch(e,n.id,n.agent,n.force);break}}async handleUsageLimitsFetch(e,n,s,r){let i=await Qd(s,{force:!!r});this.reply(e,n,!0,i)}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){b.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(){zs({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},s=JSON.stringify(n);for(let r of this.globalClients)r.readyState===1&&r.send(s)}async createSession(e,n,s,r,i,o,a){r=tr(r),b.info({agent:s,cwd:r,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,af.stat)(r)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${r}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${r}`);return}if(o)try{let u=(await this.listRecentSessionsForContinue(s,r)).find(c=>!this.isDeletedSession(c.sessionId));if(u)return b.info({sessionId:u.sessionId,cwd:r},"continue mode: resuming last session"),this.resumeSession(e,n,u.sessionId,s,r,i);b.info("continue mode: no previous sessions found, creating new")}catch(l){b.warn({error:String(l)},"continue mode: error finding sessions, creating new")}try{let l=this.createDriver(s),u=this.configureDriverBeforeStart(s,l,void 0,a);if(s==="codex"){let g=`pending_${Date.now()}`;b.info({sessionId:g,agent:s,cwd:r},"session created (pending codex startup)"),_.increment("session.create",{agent:s}),T.emit("session.create",{sessionId:g,agent:s,cwd:r,approvalMode:i});let m={sessionId:g,agent:s,cwd:r,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,pendingQueue:[],startupToken:1,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(g,m),this.registerClaudeHookSession(m),this.store.upsert(j(m)),this.updateGauges(),Ks(),Hs(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(m,s,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(m,e);return}let c=_.startTimer("driver.spawn"),d=await l.start(r,void 0,i),f=c();b.info({sessionId:d,agent:s,spawnMs:f},"session created"),_.increment("session.create",{agent:s}),T.emit("session.create",{sessionId:d,agent:s,cwd:r,approvalMode:i});let h={sessionId:d,agent:s,cwd:r,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:[],startupToken:0,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(d,h),this.registerClaudeHookSession(h),this.store.upsert(j(h)),this.updateGauges(),Ks(),Hs(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,s,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){b.error({agent:s,cwd:r,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,s,r,i,o){let a=this.resolveSessionRef(s);if(s=a.resolvedSessionId,this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}let l=this.sessions.get(s);if(l&&l.active){l.clients.add(e),this.touchSession(l.sessionId),this.noteInventoryChanged("session_updated");let h=await Ln(s,r,l.cwd),g=this.annotateHistoryMessages(h,l.acceptedClientMessageIds,l.interruptedClientMessageIds),m=this.currentPartialReplyText(l),p=l.pendingQueue.length>0?Ut(l.pendingQueue):void 0;if(h.length>0||m||l.approvalMode||l.pendingApproval||l.stallWarning||p){let y={type:"session.history",sessionId:s,messages:g,...ar(l.acceptedClientMessageIds),isResponding:l.isResponding||void 0,partialReplyText:m,approvalMode:l.approvalMode,pendingApproval:l.pendingApproval,stallWarning:l.stallWarning,...p?{pendingQueue:p}:{}};e.readyState===1&&e.send(JSON.stringify(y))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(a,{sessionId:s}));return}let u=this.store.find(s),c=i||u?.cwd||"",d=o??u?.approvalMode,f=u?.title??"Resumed session";try{let h=_.startTimer("driver.spawn"),g=this.createDriver(r),m=this.configureDriverBeforeStart(r,g),p=this.canResumeDriverSession(r,s),y=await g.start(c,p?s:void 0,d),C=h();b.info({sessionId:y,agent:r,spawnMs:C},"session resumed"),_.increment("session.resume",{agent:r}),T.emit("session.resume",{sessionId:y,agent:r,cwd:c});let I={sessionId:y,agent:r,cwd:c,approvalMode:d,model:u?.model,driver:g,clients:new Set([e]),title:f,createdAt:u?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),lastUsage:u?.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:u?.acceptedClientMessageIds??[],interruptedClientMessageIds:u?.interruptedClientMessageIds??[],syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:Kd(u?.pendingQueue),startupToken:0,managed:u?.managed,pendingApproval:u?.pendingApproval,stallWarning:u?.stallWarning,claudeHookSecret:m,pendingClaudeHookApprovals:new Map};this.sessions.set(y,I),this.rememberSessionAlias(s,y),this.registerClaudeHookSession(I),this.store.upsert(j(I)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(I,r," (resumed)",e),this.restoreDriverPendingApproval(g,I.pendingApproval);let w=await Ln(p?s:y,r,c),D=this.annotateHistoryMessages(w,I.acceptedClientMessageIds,I.interruptedClientMessageIds),x=I.pendingQueue.length>0?Ut(I.pendingQueue):void 0;if(w.length>0||I.pendingApproval||I.stallWarning||x){b.info({sessionId:s,historyCount:w.length},"sending history messages");let X={type:"session.history",sessionId:y,messages:D,...ar(I.acceptedClientMessageIds),approvalMode:d,pendingApproval:I.pendingApproval,stallWarning:I.stallWarning,...x?{pendingQueue:x}:{}};e.readyState===1&&e.send(JSON.stringify(X))}this.reply(e,n,!0,this.buildSessionResponseData(a,y,{sessionId:y}))}catch(h){this.reply(e,n,!1,void 0,String(h))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>Wt&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Wt))}rememberInterruptedClientMessage(e,n){e.interruptedClientMessageIds.includes(n)||(e.interruptedClientMessageIds.push(n),e.interruptedClientMessageIds.length>Wt&&e.interruptedClientMessageIds.splice(0,e.interruptedClientMessageIds.length-Wt))}markLatestAcceptedClientMessageInterrupted(e){let n=e.acceptedClientMessageIds[e.acceptedClientMessageIds.length-1];n&&this.rememberInterruptedClientMessage(e,n)}annotateHistoryMessages(e,n,s){if(!e.length||!n?.length||!s?.length)return e;let r=new Set(s),i=[];for(let c=0;c<e.length;c+=1)e[c]?.role==="user"&&i.push(c);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,u=i.length-o;for(let c=0;c<o;c+=1){let d=n[l+c];r.has(d)&&a.set(i[u+c],"interrupted")}return a.size===0?e:e.map((c,d)=>c.role==="user"&&a.has(d)?{...c,delivery:"interrupted"}:c)}hasDuplicateInFlightTurn(e,n){return(e.isResponding||e.pendingApproval)&&Xd(e.currentTurn,n)?!0:e.pendingQueue.some(s=>Xd(s,n))}async sendMessage(e,n,s,r,i,o,a,l){let u=this.resolveSessionRef(s);if(s=u.resolvedSessionId,this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(s);if(!c||!c.driver){let p=await this.resolveReconnectSession(s,i,c);if(!p){b.warn({sessionId:s},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:s,agent:p.agent,source:p.source},"auto-reconnecting session"),_.increment("session.reconnect",{agent:p.agent,source:p.source}),T.emit("session.reconnect",{sessionId:s,agent:p.agent,source:p.source});try{let y=this.createDriver(p.agent),C=this.configureDriverBeforeStart(p.agent,y,c?.claudeHookSecret),I=this.canResumeDriverSession(p.agent,s),A=await y.start(p.cwd,I?s:void 0,p.approvalMode);this.restoreDriverPendingApproval(y,p.pendingApproval),c?(c.approvalMode=p.approvalMode,c.model=p.model,c.pendingApproval=p.pendingApproval,c.driver=y,c.active=!0,c.clients.add(e),c.lastActivityAt=p.lastActivityAt,c.lastUsage=p.lastUsage,c.lastActivityTs=this.currentWatchdogTime(),c.isResponding=!1,c.currentReplyText="",delete c.currentTurn,c.acceptedClientMessageIds=Ce(c.acceptedClientMessageIds,p.acceptedClientMessageIds),c.interruptedClientMessageIds=Ce(c.interruptedClientMessageIds,p.interruptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,(!c.pendingQueue||c.pendingQueue.length===0)&&(c.pendingQueue=p.pendingQueue),c.startupToken=c.startupToken??0,c.claudeHookSecret=C??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map,A&&A!==c.sessionId&&this.remapSessionId(c,A)):(c={sessionId:A,agent:p.agent,cwd:p.cwd,approvalMode:p.approvalMode,model:p.model,driver:y,clients:new Set([e]),title:p.title,createdAt:p.createdAt,lastActivityAt:p.lastActivityAt,lastUsage:p.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:p.acceptedClientMessageIds,interruptedClientMessageIds:p.interruptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,pendingQueue:p.pendingQueue,startupToken:0,managed:p.managed,pendingApproval:p.pendingApproval,claudeHookSecret:C,pendingClaudeHookApprovals:new Map,interruptReason:p.interruptReason},this.sessions.set(A,c),this.rememberSessionAlias(s,A)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,p.agent," (reconnected)"),this.store.upsert(j(c)),this.updateGauges(),this.noteInventoryChanged("session_updated"),s=c.sessionId}catch(y){this.reply(e,n,!1,void 0,`Failed to reconnect: ${y}`);return}}if(c.clients.add(e),o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,this.buildResolvedSessionResponseData(u,{sessionId:s,clientMessageId:o,duplicate:!0}));return}let d=lf(r,a),f=l!==void 0&&l||void 0,h=_o(r,a,f);if(this.hasDuplicateInFlightTurn(c,h)){this.reply(e,n,!0,this.buildResolvedSessionResponseData(u,{sessionId:s,...o?{clientMessageId:o}:{},duplicate:!0})),b.debug({sessionId:s,hasClientMessageId:!!o,imageCount:a?.length??0},"duplicate in-flight session.send suppressed");return}b.info({sessionId:s,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),T.emit("session.send",{sessionId:s,agent:c.agent,messagePreview:r.slice(0,100),imageCount:a?.length??0}),nf(c),c.interruptReason&&(c.interruptReason=void 0,this.store.upsert(j(c)),this.noteInventoryChanged("session_updated"));let g=this.clearStallWarning(c);if(Mt(c.title)){let p=qi(r,50);p&&p!==c.title&&(c.title=p),this.store.upsert(j(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId),g&&this.noteInventoryChanged("session_updated");let m=p=>{let y={...o?{clientMessageId:o}:{},content:h.content,...h.images?.length?{images:h.images}:{},...f!==void 0?{model:f}:{},prompt:d,enqueuedAt:new Date().toISOString()};c.pendingQueue.push(y),this.store.upsert(j(c)),this.broadcastPendingQueue(c);let C=o?{sessionId:s,clientMessageId:o,queued:!0}:{sessionId:s,queued:!0};this.reply(e,n,!0,this.buildSessionResponseData(u,s,C)),b.debug({sessionId:s,reason:p,queueLength:c.pendingQueue.length},"message enqueued on daemon")};if(l!==void 0&&(c.model=l||void 0),c.pendingApproval){m("pending_approval");return}if(c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=r,this.noteInventoryChanged("session_updated"),m("startup");return}if(c.isResponding){m("busy");return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=r,c.currentTurn=h,c.lastTurnStartedAt=Date.now(),this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(d,c.model),this.reply(e,n,!0,this.buildSessionResponseData(u,s,o?{sessionId:s,clientMessageId:o}:{sessionId:s}))}async sendReconnectSnapshot(e,n,s,r,i,o,a,l,u){try{let c=this.getDeletedSessionIds(),d;try{d=await zs({agent:s,cwd:r,search:i,sinceMs:u,customTitles:l,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:c})}catch(g){b.warn({error:String(g)},"failed to build reconnect snapshot session list"),d={sessions:[],nextCursor:void 0}}d={...d,sessions:this.decorateSessionsWithArchived(d.sessions),inventoryVersion:this.inventoryVersion};let f;if(o&&!c.has(o)){let g=o;o=this.resolveSessionRef(o).resolvedSessionId;let m=a??d.sessions.find(C=>C.sessionId===o)?.agent,p=this.sessions.get(o);p&&p.clients.add(e);let y=await this.resolveReconnectSession(o,m,p);if(y){let C=await Ln(o,y.agent,p?.cwd??y.cwd),I=this.annotateHistoryMessages(C,p?.acceptedClientMessageIds??y.acceptedClientMessageIds,p?.interruptedClientMessageIds??y.interruptedClientMessageIds),A=p?{}:await go(o,y.agent,y.cwd),w=!p&&!!A.isResponding,D=w?await this.externalProcessPresenceCheck(o):!1,x=w&&!D?{}:A,X=p?.interruptReason??y.interruptReason,ct=p?.stallWarning??y.stallWarning,Gn=p?.pendingQueue??y.pendingQueue;f={sessionId:o,agent:y.agent,messages:I,...ar(p?.acceptedClientMessageIds??y.acceptedClientMessageIds),isResponding:p?.isResponding??x.isResponding??(w&&!D?void 0:y.isResponding),...D?{externallyResponding:!0}:{},partialReplyText:p?this.currentPartialReplyText(p):x.partialReplyText,approvalMode:p?.approvalMode??y.approvalMode,...p?.pendingApproval?{pendingApproval:p.pendingApproval}:{},...X?{interruptReason:X}:{},...ct?{stallWarning:ct}:{},...Gn.length>0?{pendingQueue:Ut(Gn)}:{}},g!==o&&this.reply(e,`id_update_${Date.now()}`,!0,{sessionId:o,oldSessionId:g})}}let h=this.collectReconnectPendingApprovals();_.increment("reconnect.snapshot",{activeSession:f?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:d.sessions,nextCursor:d.nextCursor,inventoryVersion:d.inventoryVersion,...f?{activeSession:f}:{},...h.length>0?{pendingApprovals:h}:{}}})}catch(c){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(c)}`)}}async approve(e,n,s,r,i){let o=this.resolveSessionRef(s);s=o.resolvedSessionId;let a=this.sessions.get(s),l=a?.pendingApproval,u=a?.pendingClaudeHookApprovals.get(r);if(a&&u){a.pendingApproval=void 0,T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),u.resolve(of(i)),a.isResponding=!0,this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s}));return}let c=a?.syntheticApprovalRetries[r];if(a&&c&&Ms(r)){delete a.syntheticApprovalRetries[r],a.pendingApproval=void 0,T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s})),i&&await this.retrySyntheticClaudeApproval(a,c);return}if(a&&!a.driver&&l)try{await this.reviveSessionForApproval(a)}catch(f){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(f)}`);return}if(!a?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(T.emit("approval.response",{sessionId:s,requestId:r,approved:i}),!a.driver.respondApproval(r,i)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}a.pendingApproval=void 0,this.touchSession(a.sessionId),a.isResponding=!0,this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:s}))}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let s=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",r=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,r,e.claudeHookSecret);await r.start(e.cwd,e.sessionId,s),e.driver=r,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.currentTurn=_o(n.message),e.lastTurnStartedAt=Date.now(),e.startupInProgress=!1,e.pendingQueue=e.pendingQueue??[],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(j(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:s},"retrying Claude turn after synthetic approval"),r.sendPrompt(n.message,e.model)}catch(s){e.driver=null,e.active=!1,e.isResponding=!1,delete e.currentTurn,e.startupInProgress=!1;let r=e.pendingQueue.length>0;e.pendingQueue=[],e.startupToken+=1,r&&this.broadcastPendingQueue(e),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.error({sessionId:e.sessionId,error:String(s)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(s)}`})}}async setApprovalMode(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s);if(!o){let l=this.store.find(s);l?(r===null?delete l.approvalMode:l.approvalMode=r,this.store.upsert(l),this.noteInventoryChanged("session_updated"),b.info({sessionId:s,agent:l.agent,newMode:r},"approval mode changed (inactive session)")):b.info({sessionId:s,newMode:r},"approval mode changed (untracked session)"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:r,sessionId:s}));return}if(r===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let a=o.approvalMode;o.approvalMode=r,this.store.upsert(j(o)),this.noteInventoryChanged("session_updated"),b.info({sessionId:s,agent:o.agent,oldMode:a,newMode:r},"approval mode changed"),o.driver&&o.driver.setApprovalMode(r),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:r,sessionId:s}))}interrupt(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);if(!i){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(T.emit("session.interrupt",{sessionId:s,agent:i.agent}),!i.driver){if(i.isResponding||i.pendingQueue.length>0){b.info({sessionId:s,agent:i.agent},"interrupting driverless session with stale responding state");let o=i.pendingQueue.length>0;i.pendingQueue=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,delete i.currentTurn,i.pendingApproval=void 0,this.clearStallWarning(i),this.markLatestAcceptedClientMessageInterrupted(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),o&&this.broadcastPendingQueue(i),this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId})}this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}));return}if(i.startupInProgress){let o=i.isResponding||i.pendingQueue.length>0;b.info({sessionId:s,agent:i.agent,hadBufferedTurn:o},"interrupting pending startup session");let a=i.pendingQueue.length>0;i.pendingQueue=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,delete i.currentTurn,i.pendingApproval=void 0,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),a&&this.broadcastPendingQueue(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s})),o&&this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId});return}i.driver.interrupt(),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}clearInterrupt(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s),o=this.store.find(s);if(!i&&!o?.interruptReason){this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}));return}let a=!1;i?.interruptReason&&(i.interruptReason=void 0,a=!0),i?this.store.upsert(j(i)):o?.interruptReason&&(this.store.upsert({...o,interruptReason:void 0}),a=!0),a&&this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}stopSession(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);if(!i){this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:s,agent:i.agent},"stopping session"),T.emit("session.stop",{sessionId:s,agent:i.agent}),nf(i);let o=i.isResponding||i.pendingQueue.length>0||i.startupInProgress,a=i.pendingQueue.length>0;this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.active=!1,i.driver=null,i.isResponding=!1,i.currentReplyText="",delete i.currentTurn,i.pendingApproval=void 0,i.startupInProgress=!1,i.pendingQueue=[],i.startupToken+=1,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.updateGauges(),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),a&&this.broadcastPendingQueue(i),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}deleteSession(e,n,s){let r=this.resolveSessionRef(s);s=r.resolvedSessionId;let i=this.sessions.get(s);i&&(b.info({sessionId:s,agent:i.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.startupInProgress=!1,i.pendingQueue=[],i.startupToken+=1,this.unregisterClaudeHookSession(i),this.sessions.delete(s)),T.emit("session.delete",{sessionId:s}),this.store.remove(s),this.updateGauges(),Ks(),Hs(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(r,{sessionId:s}))}async sendHistory(e,n,s,r){let i=this.resolveSessionRef(s);s=i.resolvedSessionId;let o=this.sessions.get(s),a=o?.active?o:void 0;if(!o&&this.isDeletedSession(s)){this.reply(e,n,!1,void 0,"Session not found");return}o&&o.clients.add(e);let l=a?.cwd??o?.cwd??this.store.find(s)?.cwd??"",u=this.store.find(s),c=await Ln(s,r,l),d=this.annotateHistoryMessages(c,o?.acceptedClientMessageIds??u?.acceptedClientMessageIds,o?.interruptedClientMessageIds??u?.interruptedClientMessageIds),f=a||o?{}:await go(s,r,l),h=!a&&!!f.isResponding,g=h?await this.externalProcessPresenceCheck(s):!1,m=g?!0:void 0,p=h&&!g?{}:f,y=a?.isResponding??p.isResponding,C=a?this.currentPartialReplyText(a):p.partialReplyText;b.info({sessionId:s,historyCount:c.length,isResponding:y,externallyResponding:m,approvalMode:o?.approvalMode??u?.approvalMode},"sending history");let I=o&&o.pendingQueue.length>0?Ut(o.pendingQueue):u?.pendingQueue&&u.pendingQueue.length>0?u.pendingQueue:void 0,A={type:"session.history",sessionId:s,messages:d,...ar(o?.acceptedClientMessageIds??u?.acceptedClientMessageIds),isResponding:y,externallyResponding:m,partialReplyText:C,approvalMode:o?.approvalMode??u?.approvalMode,pendingApproval:o?.pendingApproval??u?.pendingApproval,stallWarning:o?.stallWarning??u?.stallWarning,...I?{pendingQueue:I}:{}};e.readyState===1&&e.send(JSON.stringify(A));let w=o?.interruptReason??u?.interruptReason;if(w&&e.readyState===1){let D={type:"session.interrupted_notice",sessionId:s,reason:w};e.send(JSON.stringify(D))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:s}))}async listSessions(e,n,s,r,i,o=50,a,l,u,c){try{let d=await zs({agent:s,cwd:r,search:i,sinceMs:u,customTitles:l,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds(),skipGitMetadata:c}),f=this.decorateSessionsWithArchived(d.sessions);this.reply(e,n,!0,{...d,sessions:f,inventoryVersion:this.inventoryVersion})}catch(d){this.reply(e,n,!1,void 0,String(d))}}setSessionArchived(e,n,s,r){if(typeof s!="string"||s.length===0){this.reply(e,n,!1,void 0,"sessionId is required");return}this.store.setArchived(s,r===!0)&&this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,{archived:this.store.isArchived(s)})}archiveSync(e,n,s,r){let i,o=!1;switch(s){case"pushReplace":{let l=Array.isArray(r)?r:[],u=new Set(this.store.getArchivedSessionIds());i=this.store.replaceArchivedSessionIds(l),o=u.size!==i.length||i.some(c=>!u.has(c));break}case"pushMerge":{let l=Array.isArray(r)?r:[],u=new Set(this.store.getArchivedSessionIds());i=this.store.mergeArchivedSessionIds(l),o=i.some(c=>!u.has(c));break}case"pull":{i=this.store.getArchivedSessionIds();break}default:this.reply(e,n,!1,void 0,`unknown archive sync mode: ${String(s)}`);return}o&&this.noteInventoryChanged("session_updated");let a={archivedSessionIds:i};this.reply(e,n,!0,a)}decorateSessionsWithArchived(e){return e.length===0?e:e.map(n=>({...n,archived:this.store.isArchived(n.sessionId)}))}listArchiveableManagedSessions(e,n){let s=this.getDeletedSessionIds(),r=new Set;for(let o of this.sessions.values())o.managed&&(o.sessionId.startsWith("pending_")||s.has(o.sessionId)||r.add(o.sessionId));for(let o of this.store.getAll())o.managed&&(s.has(o.sessionId)||r.add(o.sessionId));let i={count:r.size,ids:[...r]};this.reply(e,n,!0,i)}createDriver(e){if(S.reviewMock)return new Ls;switch(e){case"claude":return new In;case"codex":return new Tn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let s=this.sessions.get(e);if(!s){b.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let r=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:s.clients,o=i.size,a=0,l=0;for(let u of i)u.readyState===1?(u.send(r),a++):l++;if(l>0&&_.increment("broadcast.fail"),n.type!=="text.delta"&&b.debug({sessionId:e,msgType:n.type,sent:a,total:o},"broadcast"),n.type==="text.delta"){s.currentReplyText+=n.content;return}if(n.type==="session.done"){let u=s.title||e,c=this.buildPushBody(s.currentReplyText);s.currentReplyText="",this.pushSender({title:u,body:c},{sessionId:e,agent:s.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(s.currentReplyText="")}reply(e,n,s,r,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:s,data:r,error:i};e.send(JSON.stringify(o))}};function wo(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,t.locale):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var uf=require("child_process");function A_(t,e){return(0,uf.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function C_(t){let e=t.split(`
113
+ `).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function df(t,e=A_){let n;try{n=C_(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(s=>{try{let r=e("ps",["-p",String(s),"-o","command="]);return r?{pid:s,command:r}:{pid:s}}catch{return{pid:s}}})}var Gt=require("fs"),Io=require("os"),pf=require("crypto"),hf=require("path");function gf(t){return(0,pf.randomBytes)(t).toString("base64url")}function k_(){return`d_${gf(12)}`}function x_(){return(0,Io.hostname)()}function R_(){let t=(0,Io.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function E_(t){return{daemonId:k_(),daemonSecret:gf(32),displayName:x_(),canonicalHost:R_(),port:t,createdAt:new Date().toISOString()}}function ff(t,e){(0,Gt.mkdirSync)((0,hf.dirname)(e),{recursive:!0}),(0,Gt.writeFileSync)(e,JSON.stringify(t,null,2)+`
114
+ `,"utf8")}function mf(t,e=Qc){try{let s=(0,Gt.readFileSync)(e,"utf8"),r=JSON.parse(s);if(typeof r.daemonId=="string"&&typeof r.daemonSecret=="string"&&typeof r.displayName=="string"&&typeof r.canonicalHost=="string"&&typeof r.createdAt=="string"){let i={daemonId:r.daemonId,daemonSecret:r.daemonSecret,displayName:r.displayName,canonicalHost:r.canonicalHost,port:typeof r.port=="number"&&Number.isFinite(r.port)?r.port:t,createdAt:r.createdAt};return i.port!==t&&(i.port=t,ff(i,e)),i}}catch{}let n=E_(t);return ff(n,e),n}var jt=require("crypto"),$t=require("fs"),vf=require("path");function To(t){return(0,jt.randomBytes)(t).toString("base64url")}function Ao(t){return(0,jt.createHash)("sha256").update(t).digest("hex")}function yf(t,e){let n=Buffer.from(t),s=Buffer.from(e);return n.length!==s.length?!1:(0,jt.timingSafeEqual)(n,s)}function P_(t){try{let e=(0,$t.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(s=>s&&typeof s.deviceId=="string"&&typeof s.deviceName=="string"&&typeof s.tokenHash=="string"&&typeof s.createdAt=="string"&&typeof s.lastSeenAt=="string"&&(typeof s.revokedAt=="string"||s.revokedAt===null)):[]}catch{return[]}}function Hn(t,e){(0,$t.mkdirSync)((0,vf.dirname)(t),{recursive:!0}),(0,$t.writeFileSync)(t,JSON.stringify(e,null,2)+`
115
+ `,"utf8")}var cr=class{constructor(e=Yc){this.pairingsPath=e;this.records=P_(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 s=`pair_${To(8)}`,r=To(24),i=new Date(Date.now()+e).toISOString(),o={pairingId:s,pairNonce:r,expiresAt:i,reusable:n};return this.windows.set(r,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 s=new Date().toISOString(),r=To(32),i={deviceId:e,deviceName:n,tokenHash:Ao(r),createdAt:s,lastSeenAt:s,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),Hn(this.pairingsPath,this.records),r}validatePairToken(e,n,s=!0){let r=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!r)return!1;let i=Ao(n);return yf(r.tokenHash,i)?(s&&(r.lastSeenAt=new Date().toISOString(),Hn(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let s=Ao(e),r=this.records.find(i=>!i.revokedAt&&yf(i.tokenHash,s));return r?(n&&(r.lastSeenAt=new Date().toISOString(),Hn(this.pairingsPath,this.records)),r):null}revoke(e){let n=this.records.find(s=>s.deviceId===e&&!s.revokedAt);return n?(n.revokedAt=new Date().toISOString(),Hn(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),Hn(this.pairingsPath,this.records)}};function at(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function M_(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function Co(t,e){return M_(t)??e}function ur(t,e){return!!(t&&e&&t===e)}function ko(t,e,n,s=!0){return t?ur(t,e)?!0:!!n(t,s):!1}var bf=require("child_process"),wf=require("fs");function dr(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function xo(t){if(!dr(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function L_(t){if(!dr(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function N_(t){if(!dr(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function O_(t){if(!dr(t))return!1;let[e,n]=t.split(".").map(Number);return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}function fr(t){return!!t&&!L_(t)&&!N_(t)}function de(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function Ro(t){return de(t.replace(/^https?:\/\//,""))??t}function D_(t,e){return(t??[]).map(n=>de(n)).filter(n=>!!n).filter(n=>fr(n)).filter((n,s,r)=>n!==e&&r.indexOf(n)===s)}function B_(t){let e=t.trim().toLowerCase();return e?!(e==="lo"||e==="lo0"||e.startsWith("loopback")||e.startsWith("awdl")||e.startsWith("llw")||e.startsWith("utun")||e.startsWith("tun")||e.startsWith("tap")||e.startsWith("ipsec")||e.startsWith("bridge")||e.startsWith("docker")||e.startsWith("br-")||e.startsWith("veth")||e.startsWith("vmnet")||e.startsWith("vboxnet")||e.startsWith("tailscale")||e.startsWith("wg")||e.startsWith("zt")||e.startsWith("ham")):!1}function F_(t){let e=Ro(t);return xo(e)||e.endsWith(".ts.net")}function H_(t){let e=Ro(t);return O_(e)||e.endsWith(".local")}function U_(t){return Ro(t).endsWith(".trycloudflare.com")}function Sf(t,e){return F_(t)?"tailscale":H_(t)?"local_network":e?"configured_host":"fallback"}function If(t){let e=new Set,n=[];for(let s of t){let r=`${s.host}:${s.port}:${s.secure===!0?"secure":"plain"}`;e.has(r)||(e.add(r),n.push(s))}return n}function W_(t){let e=t[0];return e?t.slice(1).filter(n=>n.port===e.port).map(n=>n.host).filter((n,s,r)=>n!==e.host&&r.indexOf(n)===s):[]}function q_(t){try{let e=new URL(t),n=de(e.hostname);if(!n)throw new Error("invalid relay hostname");let s=e.port?Number(e.port):e.protocol==="https:"?443:80,r=Number.isFinite(s)&&s>0?Math.floor(s):443,i=U_(n);return{kind:"relay",host:n,port:r,...e.protocol==="https:"?{secure:!0}:{},source:i?"quick_tunnel":"configured_relay",stability:i?"ephemeral":"stable"}}catch{return null}}function G_(t,e,n){let s=de(t)||"localhost",r=D_(e,s);return If([{kind:"direct",host:s,port:n,source:Sf(s,!0),stability:"stable"},...r.map(i=>({kind:"direct",host:i,port:n,source:Sf(i,!1),stability:"stable"}))])}function Tf(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function j_(t){let e=[],n=[];for(let[s,r]of Object.entries(t))if(r&&B_(s))for(let i of r)i.internal||i.family!=="IPv4"||fr(i.address)&&(xo(i.address)?e.push(i.address):n.push(i.address));return[...e,...n]}function _f(t){let e=JSON.parse(t),n=de(e.Self?.DNSName),s=(e.Self?.TailscaleIPs??[]).map(o=>de(o)).filter(o=>!!o).filter(o=>xo(o)&&fr(o)),r=s[0]??n,i=[...n&&n!==r?[n]:[],...s.filter(o=>o!==r)];return{canonicalHost:r,fallbackHosts:i}}function Af(t=bf.execFileSync,e=wf.existsSync){let n=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(s=>typeof s=="string"&&s.length>0).filter(s=>e(s));for(let s of n)try{let r=t("tailscale",["--socket",s,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return _f(r)}catch{}try{let s=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return _f(s)}catch{return{fallbackHosts:[]}}}function Cf(t){let e=G_(t.canonicalHost,t.fallbackHosts,t.port),n=t.relayUrl?q_(t.relayUrl):null,s=If([...n?[n]:[],...e]),r=s[0]??{kind:"direct",host:de(t.canonicalHost)||"localhost",port:t.port,source:"configured_host",stability:"stable"};return{canonicalHost:r.host,fallbackHosts:W_(s),port:r.port,connections:s}}function kf(t){let e=de(t.canonicalHost),n=de(t.configuredCanonicalHost)||de(t.tailscaleCanonicalHost)||e||"localhost",s=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...j_(t.interfaces)].map(r=>de(r)).filter(r=>!!r).filter(r=>fr(r)).filter((r,i,o)=>r!==n&&o.indexOf(r)===i);return{canonicalHost:n,fallbackHosts:s}}function xf(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 z=M.child({module:"daemon"}),Un=M.child({module:"ws"});function $_(){try{let t=JSON.parse(require("fs").readFileSync(Kc,"utf8"));return typeof t.latestVersion=="string"?t.latestVersion:void 0}catch{return}}var W=mf(S.port),ee=new lr((t,e)=>sr(t,{daemonId:W.daemonId,canonicalHost:Wn().canonicalHost,...e??{}})),pe=new cr,hr=new Set,Ue=new WeakMap,Rf=!1,Lf=Date.now(),zt=null,pr=null,z_=1e3;function V_(){let t=Af();return kf({canonicalHost:W.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:Tf(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,Mf.networkInterfaces)()})}function Wn(){let t=Date.now();if(pr&&pr.expiresAt>t)return pr.value;let e=V_(),n=Cf({canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts,port:W.port,relayUrl:S.relayUrl});return pr={value:n,expiresAt:t+z_},n}function Q_(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,n.secure===!0])),e}async function Y_(t){let e=JSON.stringify(Q_(t));await(0,ae.mkdir)(Ie,{recursive:!0}),await Mo.default.toFile(xi,e,{type:"png",errorCorrectionLevel:"M",margin:1,scale:8});let n=await Mo.default.toString(e,{type:"terminal",small:!0,errorCorrectionLevel:"M"});kt(`
116
116
  Scan this QR code with Vibelet app:
117
117
 
118
118
  ${n}
119
- `),Ct(`If Vibelet app can't scan the terminal QR, open this PNG instead:
120
- ${bi}
121
- `)}async function bo(t){let e=[];for await(let s of t)e.push(Buffer.isBuffer(s)?s:Buffer.from(s));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function H(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function v_(t){let e=(0,zt.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 vf(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function S_(t,e){if(at(t.socket.remoteAddress))return!0;let n=yo(t.headers.authorization,e.searchParams.get("token"));return vo(n,S.legacyToken,(s,r)=>pe.validateAnyPairToken(s,r),!1)}function __(){let t=pe.openWindow(vf(),S.pairReusable),e=Dn();return{type:"vibelet-pair",daemonId:W.daemonId,displayName:W.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 b_(t,e){let n=lo(t,e),s=await(0,ae.readdir)(n),r=[];for(let i of s){if(i.startsWith("."))continue;let o=await(0,ae.stat)((0,zt.join)(n,i)).catch(()=>null);o&&r.push({name:i,isDirectory:o.isDirectory()})}return r.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:r}}var Fn=(0,hf.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let r=Dn(),i=p_(),o={status:"ok",version:Pt,...i?{latestVersion:i}:{}};if(!S_(t,n)){H(e,200,o);return}let a={...o,status:"ok",daemonId:W.daemonId,displayName:W.displayName,canonicalHost:r.canonicalHost,uptimeSeconds:Math.round((Date.now()-yf)/1e3),activeSessions:ee.getActiveSessionCount(),pairedDevices:pe.pairedCount(),wsClients:fe.clients.size,drivers:ee.getDriverCounts(),sessionInventory:nd(),metrics:b.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),H(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}H(e,200,__());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}pe.reset(),H(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}H(e,200,{status:"stopping"}),setTimeout(()=>lt("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}try{let r=await bo(t),i=t.headers[Sn],o=Array.isArray(i)?i[0]:i;ee.handleClaudeSessionStartHook(o,r),H(e,200,{ok:!0})}catch(r){H(e,400,{error:String(r)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}try{let r=await bo(t),i=t.headers[Sn],o=Array.isArray(i)?i[0]:i,a=await ee.handleClaudePermissionHook(o,r);H(e,200,a)}catch(r){H(e,400,{error:String(r)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let r=await bo(t);if(r.daemonId!==W.daemonId||typeof r.pairNonce!="string"||typeof r.deviceId!="string"||typeof r.deviceName!="string"){H(e,400,{error:"invalid_pair_request"});return}if(!pe.consumeWindow(r.pairNonce)){H(e,401,{error:"pair_window_expired"});return}let o=pe.issuePairToken(r.deviceId,r.deviceName),a=Dn();H(e,200,{daemonId:W.daemonId,displayName:W.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:r.deviceId,pairToken:o})}catch(r){H(e,400,{error:String(r)})}return}let s=yo(t.headers.authorization,n.searchParams.get("token"));if(!vo(s,S.legacyToken,(r,i)=>pe.validateAnyPairToken(r,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let r={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif","application/pdf":".pdf","text/plain":".txt","text/markdown":".md","application/json":".json","application/zip":".zip"},i=(t.headers["content-type"]??"").split(";")[0].trim(),o=n.searchParams.get("name")??"",l=(0,zt.extname)(o).toLowerCase()||r[i]||".bin",u=50*1024*1024,c=[],d=0;for await(let f of t){let h=Buffer.isBuffer(f)?f:Buffer.from(f);if(d+=h.length,d>u){e.writeHead(413),e.end("File too large");return}c.push(h)}try{await(0,ae.mkdir)(_i,{recursive:!0});let f=`${Date.now()}_${(0,gf.randomBytes)(8).toString("hex")}${l}`,h=(0,zt.join)(_i,f);await(0,ae.writeFile)(h,Buffer.concat(c)),z.info({filePath:h,size:d,contentType:i,providedName:o||void 0},"file uploaded"),H(e,200,{path:h})}catch(f){z.error({error:String(f)},"upload failed"),H(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let r=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!r){e.writeHead(400),e.end("Missing path parameter");return}try{let o=lo(r,i);if(!(await(0,ae.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=v_(o),u=await(0,ae.readFile)(o);e.writeHead(200,{"Content-Type":l,"Content-Length":u.length}),e.end(u)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${Pt}`)}),fe=new Rr.default({server:Fn});Fn.on("connection",t=>{ar.add(t),t.on("close",()=>{ar.delete(t)})});fe.on("connection",(t,e)=>{let s=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(s&&sr(s,S.legacyToken))Ue.set(t,{authMode:"query_token"}),b.increment("ws.auth.success",{mode:"query_token"}),ee.addGlobalClient(t),ee.prewarmCaches();else if(s){let r=pe.validateAnyPairToken(s);if(r)Ue.set(t,{authMode:"query_token",deviceId:r.deviceId}),b.increment("ws.auth.success",{mode:"query_token"}),ee.addGlobalClient(t),ee.prewarmCaches();else{b.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}Bn.info({clients:fe.clients.size},"client connected"),b.increment("ws.connect"),b.gauge("ws.clients",fe.clients.size),T.emit("ws.connect",{clients:fe.clients.size,authMode:Ue.get(t)?.authMode??"pending",deviceId:Ue.get(t)?.deviceId}),t.on("message",async r=>{try{let i=JSON.parse(ff(r));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(!Ue.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(sr(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===W.daemonId&&pe.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===W.daemonId){let l=pe.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){Ue.set(t,{authMode:"auth_hello",deviceId:a.deviceId,...o.locale?{locale:o.locale}:{}}),b.increment("ws.auth.success",{mode:"auth_hello"}),ee.addGlobalClient(t),ee.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:W.daemonId,...a.deviceId?{deviceId:a.deviceId}:{},displayName:W.displayName}}));return}b.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}b.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)T.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?z.error:a.level==="warn"?z.warn:z.info).call(z,{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 b_(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=Ue.get(t),l=i.locale?i:{...i,locale:a?.locale};po(l,{deviceId:a?.deviceId,registerToken:co,unregisterToken:uo,respond:u=>t.send(JSON.stringify(u))});return}if(i.action==="push.unregister"){let a=Ue.get(t);po(i,{deviceId:a?.deviceId,registerToken:co,unregisterToken:uo,respond:l=>t.send(JSON.stringify(l))});return}await ee.handle(t,o)}catch(i){Bn.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",r=>{Bn.info({clients:fe.clients.size,code:r},"client disconnected"),b.increment("ws.disconnect"),b.increment("ws.disconnect.code",{code:String(r)}),b.gauge("ws.clients",fe.clients.size),T.emit("ws.disconnect",{clients:fe.clients.size,code:r}),ee.removeClient(t)}),t.on("error",r=>{Bn.error({error:r.message},"websocket error")})});function wo(){for(let t of ar)try{t.destroy()}catch{}ar.clear()}function Sf(){let t=Zc({auditPath:kt,stdoutLogPath:ms,stderrLogPath:ys,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&z.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 w_(){$t||($t=setInterval(Sf,S.storageHousekeepingIntervalMs),$t.unref())}function I_(){$t&&(clearInterval($t),$t=null)}function lt(t,e=0){if(!pf){pf=!0,z.info({reason:t,exitCode:e},"shutting down"),T.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-yf)/1e3)}),b.stopPeriodicLog(),I_(),Nt.stop().catch(()=>{}),ee.shutdown();for(let n of fe.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}fe.close(n=>{n&&z.error({error:String(n)},"websocket close error")}),Fn.close(n=>{if(n){z.error({error:String(n)},"http close error"),wo(),process.exit(1);return}wo(),process.exit(e)}),setTimeout(()=>{z.error("force exiting after shutdown timeout"),wo(),process.exit(e||1)},3e3).unref()}}fe.on("error",t=>{Bn.error({error:t.message},"wss error")});Fn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Qd(S.port).filter(n=>n.pid!==process.pid);z.error({port:S.port,occupants:e},"port is already in use. Stop the existing process or start Vibelet with --port <port> (or VIBE_PORT=<port>)")}else z.error({error:String(t)},"server error");lt(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>lt("SIGINT"));process.once("SIGTERM",()=>lt("SIGTERM"));process.once("SIGHUP",()=>lt("SIGHUP"));process.once("SIGTTIN",()=>lt("SIGTTIN"));process.once("SIGTSTP",()=>lt("SIGTSTP"));process.on("uncaughtException",t=>{z.error({error:String(t),stack:t.stack},"uncaughtException"),T.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{z.error({reason:String(t)},"unhandledRejection"),T.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});Fn.listen(S.port,async()=>{Sf(),T.emit("daemon.start",{port:S.port}),b.startPeriodicLog(),w_(),sd(),Nt.start().catch(s=>{z.warn({error:String(s)},"session activity watcher failed to start")});let t=Dn();z.info({port:S.port,pairingPort:t.port,daemonId:W.daemonId,displayName:W.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,turnStallHardTimeoutMs:S.turnStallHardTimeoutMs},"daemon started");let e=pe.openWindow(vf(),S.pairReusable),n={type:"vibelet-pair",daemonId:W.daemonId,displayName:W.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};Ct(`
119
+ `),kt(`If Vibelet app can't scan the terminal QR, open this PNG instead:
120
+ ${xi}
121
+ `)}async function Eo(t){let e=[];for await(let s of t)e.push(Buffer.isBuffer(s)?s:Buffer.from(s));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function H(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function J_(t){let e=(0,Vt.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 Nf(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function K_(t,e){if(at(t.socket.remoteAddress))return!0;let n=Co(t.headers.authorization,e.searchParams.get("token"));return ko(n,S.legacyToken,(s,r)=>pe.validateAnyPairToken(s,r),!1)}function X_(){let t=pe.openWindow(Nf(),S.pairReusable),e=Wn();return{type:"vibelet-pair",daemonId:W.daemonId,displayName:W.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 Z_(t,e){let n=mo(t,e),s=await(0,ae.readdir)(n),r=[];for(let i of s){if(i.startsWith("."))continue;let o=await(0,ae.stat)((0,Vt.join)(n,i)).catch(()=>null);o&&r.push({name:i,isDirectory:o.isDirectory()})}return r.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:r}}var qn=(0,Ef.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let r=Wn(),i=$_(),o={status:"ok",version:Pt,...i?{latestVersion:i}:{}};if(!K_(t,n)){H(e,200,o);return}let a={...o,status:"ok",daemonId:W.daemonId,displayName:W.displayName,canonicalHost:r.canonicalHost,uptimeSeconds:Math.round((Date.now()-Lf)/1e3),activeSessions:ee.getActiveSessionCount(),pairedDevices:pe.pairedCount(),wsClients:fe.clients.size,drivers:ee.getDriverCounts(),sessionInventory:dd(),metrics:_.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),H(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}H(e,200,X_());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}pe.reset(),H(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}H(e,200,{status:"stopping"}),setTimeout(()=>lt("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}try{let r=await Eo(t),i=t.headers[_n],o=Array.isArray(i)?i[0]:i;ee.handleClaudeSessionStartHook(o,r),H(e,200,{ok:!0})}catch(r){H(e,400,{error:String(r)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!at(t.socket.remoteAddress)){H(e,403,{error:"forbidden"});return}try{let r=await Eo(t),i=t.headers[_n],o=Array.isArray(i)?i[0]:i,a=await ee.handleClaudePermissionHook(o,r);H(e,200,a)}catch(r){H(e,400,{error:String(r)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let r=await Eo(t);if(r.daemonId!==W.daemonId||typeof r.pairNonce!="string"||typeof r.deviceId!="string"||typeof r.deviceName!="string"){H(e,400,{error:"invalid_pair_request"});return}if(!pe.consumeWindow(r.pairNonce)){H(e,401,{error:"pair_window_expired"});return}let o=pe.issuePairToken(r.deviceId,r.deviceName),a=Wn();H(e,200,{daemonId:W.daemonId,displayName:W.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:r.deviceId,pairToken:o})}catch(r){H(e,400,{error:String(r)})}return}let s=Co(t.headers.authorization,n.searchParams.get("token"));if(!ko(s,S.legacyToken,(r,i)=>pe.validateAnyPairToken(r,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let r={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif","application/pdf":".pdf","text/plain":".txt","text/markdown":".md","application/json":".json","application/zip":".zip"},i=(t.headers["content-type"]??"").split(";")[0].trim(),o=n.searchParams.get("name")??"",l=(0,Vt.extname)(o).toLowerCase()||r[i]||".bin",u=50*1024*1024,c=[],d=0;for await(let f of t){let h=Buffer.isBuffer(f)?f:Buffer.from(f);if(d+=h.length,d>u){e.writeHead(413),e.end("File too large");return}c.push(h)}try{await(0,ae.mkdir)(ki,{recursive:!0});let f=`${Date.now()}_${(0,Pf.randomBytes)(8).toString("hex")}${l}`,h=(0,Vt.join)(ki,f);await(0,ae.writeFile)(h,Buffer.concat(c)),z.info({filePath:h,size:d,contentType:i,providedName:o||void 0},"file uploaded"),H(e,200,{path:h})}catch(f){z.error({error:String(f)},"upload failed"),H(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let r=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!r){e.writeHead(400),e.end("Missing path parameter");return}try{let o=mo(r,i);if(!(await(0,ae.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=J_(o),u=await(0,ae.readFile)(o);e.writeHead(200,{"Content-Type":l,"Content-Length":u.length}),e.end(u)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${Pt}`)}),fe=new Dr.default({server:qn});qn.on("connection",t=>{hr.add(t),t.on("close",()=>{hr.delete(t)})});fe.on("connection",(t,e)=>{let s=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(s&&ur(s,S.legacyToken))Ue.set(t,{authMode:"query_token"}),_.increment("ws.auth.success",{mode:"query_token"}),ee.addGlobalClient(t),ee.prewarmCaches();else if(s){let r=pe.validateAnyPairToken(s);if(r)Ue.set(t,{authMode:"query_token",deviceId:r.deviceId}),_.increment("ws.auth.success",{mode:"query_token"}),ee.addGlobalClient(t),ee.prewarmCaches();else{_.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}Un.info({clients:fe.clients.size},"client connected"),_.increment("ws.connect"),_.gauge("ws.clients",fe.clients.size),T.emit("ws.connect",{clients:fe.clients.size,authMode:Ue.get(t)?.authMode??"pending",deviceId:Ue.get(t)?.deviceId}),t.on("message",async r=>{try{let i=JSON.parse(xf(r));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(!Ue.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(ur(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===W.daemonId&&pe.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===W.daemonId){let l=pe.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){Ue.set(t,{authMode:"auth_hello",deviceId:a.deviceId,...o.locale?{locale:o.locale}:{}}),_.increment("ws.auth.success",{mode:"auth_hello"}),ee.addGlobalClient(t),ee.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:W.daemonId,...a.deviceId?{deviceId:a.deviceId}:{},displayName:W.displayName}}));return}_.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}_.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)T.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?z.error:a.level==="warn"?z.warn:z.info).call(z,{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 Z_(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=Ue.get(t),l=i.locale?i:{...i,locale:a?.locale};wo(l,{deviceId:a?.deviceId,registerToken:yo,unregisterToken:vo,respond:u=>t.send(JSON.stringify(u))});return}if(i.action==="push.unregister"){let a=Ue.get(t);wo(i,{deviceId:a?.deviceId,registerToken:yo,unregisterToken:vo,respond:l=>t.send(JSON.stringify(l))});return}await ee.handle(t,o)}catch(i){Un.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",r=>{Un.info({clients:fe.clients.size,code:r},"client disconnected"),_.increment("ws.disconnect"),_.increment("ws.disconnect.code",{code:String(r)}),_.gauge("ws.clients",fe.clients.size),T.emit("ws.disconnect",{clients:fe.clients.size,code:r}),ee.removeClient(t)}),t.on("error",r=>{Un.error({error:r.message},"websocket error")})});function Po(){for(let t of hr)try{t.destroy()}catch{}hr.clear()}function Of(){let t=lu({auditPath:Ct,stdoutLogPath:_s,stderrLogPath:bs,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&z.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 eb(){zt||(zt=setInterval(Of,S.storageHousekeepingIntervalMs),zt.unref())}function tb(){zt&&(clearInterval(zt),zt=null)}function lt(t,e=0){if(!Rf){Rf=!0,z.info({reason:t,exitCode:e},"shutting down"),T.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-Lf)/1e3)}),_.stopPeriodicLog(),tb(),Nt.stop().catch(()=>{}),ee.shutdown();for(let n of fe.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}fe.close(n=>{n&&z.error({error:String(n)},"websocket close error")}),qn.close(n=>{if(n){z.error({error:String(n)},"http close error"),Po(),process.exit(1);return}Po(),process.exit(e)}),setTimeout(()=>{z.error("force exiting after shutdown timeout"),Po(),process.exit(e||1)},3e3).unref()}}fe.on("error",t=>{Un.error({error:t.message},"wss error")});qn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=df(S.port).filter(n=>n.pid!==process.pid);z.error({port:S.port,occupants:e},"port is already in use. Stop the existing process or start Vibelet with --port <port> (or VIBE_PORT=<port>)")}else z.error({error:String(t)},"server error");lt(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>lt("SIGINT"));process.once("SIGTERM",()=>lt("SIGTERM"));process.once("SIGHUP",()=>lt("SIGHUP"));process.once("SIGTTIN",()=>lt("SIGTTIN"));process.once("SIGTSTP",()=>lt("SIGTSTP"));process.on("uncaughtException",t=>{z.error({error:String(t),stack:t.stack},"uncaughtException"),T.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{z.error({reason:String(t)},"unhandledRejection"),T.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});qn.listen(S.port,async()=>{Of(),T.emit("daemon.start",{port:S.port}),_.startPeriodicLog(),eb(),fd(),Nt.start().catch(s=>{z.warn({error:String(s)},"session activity watcher failed to start")});let t=Wn();z.info({port:S.port,pairingPort:t.port,daemonId:W.daemonId,displayName:W.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,turnStallHardTimeoutMs:S.turnStallHardTimeoutMs},"daemon started");let e=pe.openWindow(Nf(),S.pairReusable),n={type:"vibelet-pair",daemonId:W.daemonId,displayName:W.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};kt(`
122
122
  \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
123
123
  \u2551 Vibelet Daemon v${Pt} \u2551
124
124
  \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
@@ -133,4 +133,4 @@ Fallbacks: ${n.fallbackHosts?.join(", ")||"(none)"}
133
133
 
134
134
  Claude: ${S.claudePath}
135
135
  Codex: ${S.codexPath}
136
- `);try{await y_(n)}catch{}});
136
+ `);try{await Y_(n)}catch{}});