@vibelet/cli 1.0.24 → 1.0.25

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 hf=Object.create;var bo=Object.defineProperty;var gf=Object.getOwnPropertyDescriptor;var mf=Object.getOwnPropertyNames;var yf=Object.getPrototypeOf,vf=Object.prototype.hasOwnProperty;var v=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Sf=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of mf(e))!vf.call(t,s)&&s!==n&&bo(t,s,{get:()=>e[s],enumerable:!(r=gf(e,s))||r.enumerable});return t};var ct=(t,e,n)=>(n=t!=null?hf(yf(t)):{},Sf(e||!t||!t.__esModule?bo(n,"default",{value:t,enumerable:!0}):n,t));var ve=v((a_,To)=>{"use strict";var wo=["nodebuffer","arraybuffer","fragments"],Io=typeof Blob<"u";Io&&wo.push("blob");To.exports={BINARY_TYPES:wo,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Io,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var $t=v((l_,Dn)=>{"use strict";var{EMPTY_BUFFER:_f}=ve(),is=Buffer[Symbol.species];function bf(t,e){if(t.length===0)return _f;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new is(n.buffer,n.byteOffset,r):n}function Ao(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function ko(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function wf(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function os(t){if(os.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new is(t):ArrayBuffer.isView(t)?e=new is(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),os.readOnly=!1),e}Dn.exports={concat:bf,mask:Ao,toArrayBuffer:wf,toBuffer:os,unmask:ko};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Dn.exports.mask=function(e,n,r,s,i){i<48?Ao(e,n,r,s,i):t.mask(e,n,r,s,i)},Dn.exports.unmask=function(e,n){e.length<32?ko(e,n):t.unmask(e,n)}}catch{}});var Ro=v((c_,xo)=>{"use strict";var Co=Symbol("kDone"),as=Symbol("kRun"),ls=class{constructor(e){this[Co]=()=>{this.pending--,this[as]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[as]()}[as](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Co])}}};xo.exports=ls});var Vt=v((u_,Lo)=>{"use strict";var zt=require("zlib"),Eo=$t(),If=Ro(),{kStatusCode:Po}=ve(),Tf=Buffer[Symbol.species],Af=Buffer.from([0,0,255,255]),Hn=Symbol("permessage-deflate"),Se=Symbol("total-length"),ut=Symbol("callback"),Ce=Symbol("buffers"),dt=Symbol("error"),Fn,cs=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!Fn){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Fn=new If(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[ut];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){Fn.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){Fn.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?zt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=zt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Hn]=this,this._inflate[Se]=0,this._inflate[Ce]=[],this._inflate.on("error",Cf),this._inflate.on("data",Mo)}this._inflate[ut]=r,this._inflate.write(e),n&&this._inflate.write(Af),this._inflate.flush(()=>{let i=this._inflate[dt];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=Eo.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[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?zt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=zt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Se]=0,this._deflate[Ce]=[],this._deflate.on("data",kf)}this._deflate[ut]=r,this._deflate.write(e),this._deflate.flush(zt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Eo.concat(this._deflate[Ce],this._deflate[Se]);n&&(i=new Tf(i.buffer,i.byteOffset,i.length-4)),this._deflate[ut]=null,this._deflate[Se]=0,this._deflate[Ce]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};Lo.exports=cs;function kf(t){this[Ce].push(t),this[Se]+=t.length}function Mo(t){if(this[Se]+=t.length,this[Hn]._maxPayload<1||this[Se]<=this[Hn]._maxPayload){this[Ce].push(t);return}this[dt]=new RangeError("Max payload size exceeded"),this[dt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[dt][Po]=1009,this.removeListener("data",Mo),this.reset()}function Cf(t){if(this[Hn]._inflate=null,this[dt]){this[ut](this[dt]);return}t[Po]=1007,this[ut](t)}});var ft=v((d_,Un)=>{"use strict";var{isUtf8:No}=require("buffer"),{hasBlob:xf}=ve(),Rf=[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 Ef(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function us(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 Pf(t){return xf&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Un.exports={isBlob:Pf,isValidStatusCode:Ef,isValidUTF8:us,tokenChars:Rf};if(No)Un.exports.isValidUTF8=function(t){return t.length<24?us(t):No(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Un.exports.isValidUTF8=function(e){return e.length<32?us(e):t(e)}}catch{}});var gs=v((f_,Wo)=>{"use strict";var{Writable:Mf}=require("stream"),Oo=Vt(),{BINARY_TYPES:Lf,EMPTY_BUFFER:Bo,kStatusCode:Nf,kWebSocket:Of}=ve(),{concat:ds,toArrayBuffer:Bf,unmask:Df}=$t(),{isValidStatusCode:Ff,isValidUTF8:Do}=ft(),Wn=Buffer[Symbol.species],ee=0,Fo=1,Ho=2,Uo=3,fs=4,ps=5,qn=6,hs=class extends Mf{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Lf[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Of]=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=ee}_write(e,n,r){if(this._opcode===8&&this._state==ee)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Wn(r.buffer,r.byteOffset+e,r.length-e),new Wn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Wn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case ee:this.getInfo(e);break;case Fo:this.getPayloadLength16(e);break;case Ho:this.getPayloadLength64(e);break;case Uo:this.getMask();break;case fs:this.getData(e);break;case ps:case qn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let r=(n[0]&64)===64;if(r&&!this._extensions[Oo.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=Fo:this._payloadLength===127?this._state=Ho:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=r*Math.pow(2,32)+n.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=Uo:this._state=fs}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=fs}getData(e){let n=Bo;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&&Df(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=ps,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[Oo.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===ee&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=ee;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ds(r,n):this._binaryType==="arraybuffer"?s=Bf(ds(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit("message",s,!0),this._state=ee,this.startLoop(e)}))}else{let s=ds(r,n);if(!this._skipUTF8Validation&&!Do(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ps||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit("message",s,!1),this._state=ee,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Bo),this.end();else{let r=e.readUInt16BE(0);if(!Ff(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Wn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Do(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=ee;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=ee,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[Nf]=s,o}};Wo.exports=hs});var vs=v((h_,jo)=>{"use strict";var{Duplex:p_}=require("stream"),{randomFillSync:Hf}=require("crypto"),qo=Vt(),{EMPTY_BUFFER:Uf,kWebSocket:Wf,NOOP:qf}=ve(),{isBlob:pt,isValidStatusCode:Gf}=ft(),{mask:Go,toBuffer:Ue}=$t(),te=Symbol("kByteLength"),jf=Buffer.alloc(4),Gn=8*1024,We,ht=Gn,ae=0,$f=1,zf=2,ms=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ae,this.onerror=qf,this[Wf]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||jf,n.generateMask?n.generateMask(r):(ht===Gn&&(We===void 0&&(We=Buffer.alloc(Gn)),Hf(We,0,Gn),ht=0),r[0]=We[ht++],r[1]=We[ht++],r[2]=We[ht++],r[3]=We[ht++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[te]!==void 0?a=n[te]:(e=Buffer.from(e),a=e.length):(a=e.length,s=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let u=Buffer.allocUnsafe(s?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]=r[0],u[i-3]=r[1],u[i-2]=r[2],u[i-1]=r[3],o?[u,e]:s?(Go(e,r,u,i,a),[u]):(Go(e,r,e,0,a),[u,e])):[u,e]}close(e,n,r,s){let i;if(e===void 0)i=Uf;else{if(typeof e!="number"||!Gf(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={[te]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ae?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pt(e)?(s=e.size,i=!1):(e=Ue(e),s=e.length,i=Ue.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[te]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ae?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pt(e)?(s=e.size,i=!1):(e=Ue(e),s=e.length,i=Ue.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[te]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ae?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[qo.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):pt(e)?(a=e.size,l=!1):(e=Ue(e),a=e.length,l=Ue.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[te]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,this._compress,u,r]):this.getBlobData(e,this._compress,u,r):this._state!==ae?this.enqueue([this.dispatch,e,this._compress,u,r]):this.dispatch(e,this._compress,u,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[te],this._state=zf,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(ys,this,a,s);return}this._bufferedBytes-=r[te];let o=Ue(i);n?this.dispatch(o,n,r,s):(this._state=ae,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(Vf,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[qo.extensionName];this._bufferedBytes+=r[te],this._state=$f,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");ys(this,l,s);return}this._bufferedBytes-=r[te],this._state=ae,r.readOnly=!1,this.sendFrame(t.frame(a,r),s),this.dequeue()})}dequeue(){for(;this._state===ae&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][te],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][te],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)}};jo.exports=ms;function ys(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function Vf(t,e,n){ys(t,e,n),t.onerror(e)}});var Zo=v((g_,Qo)=>{"use strict";var{kForOnEventAttribute:Yt,kListener:Ss}=ve(),$o=Symbol("kCode"),zo=Symbol("kData"),Vo=Symbol("kError"),Yo=Symbol("kMessage"),Jo=Symbol("kReason"),gt=Symbol("kTarget"),Ko=Symbol("kType"),Xo=Symbol("kWasClean"),_e=class{constructor(e){this[gt]=null,this[Ko]=e}get target(){return this[gt]}get type(){return this[Ko]}};Object.defineProperty(_e.prototype,"target",{enumerable:!0});Object.defineProperty(_e.prototype,"type",{enumerable:!0});var qe=class extends _e{constructor(e,n={}){super(e),this[$o]=n.code===void 0?0:n.code,this[Jo]=n.reason===void 0?"":n.reason,this[Xo]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[$o]}get reason(){return this[Jo]}get wasClean(){return this[Xo]}};Object.defineProperty(qe.prototype,"code",{enumerable:!0});Object.defineProperty(qe.prototype,"reason",{enumerable:!0});Object.defineProperty(qe.prototype,"wasClean",{enumerable:!0});var mt=class extends _e{constructor(e,n={}){super(e),this[Vo]=n.error===void 0?null:n.error,this[Yo]=n.message===void 0?"":n.message}get error(){return this[Vo]}get message(){return this[Yo]}};Object.defineProperty(mt.prototype,"error",{enumerable:!0});Object.defineProperty(mt.prototype,"message",{enumerable:!0});var Jt=class extends _e{constructor(e,n={}){super(e),this[zo]=n.data===void 0?null:n.data}get data(){return this[zo]}};Object.defineProperty(Jt.prototype,"data",{enumerable:!0});var Yf={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Yt]&&s[Ss]===e&&!s[Yt])return;let r;if(t==="message")r=function(i,o){let a=new Jt("message",{data:o?i:i.toString()});a[gt]=this,jn(e,this,a)};else if(t==="close")r=function(i,o){let a=new qe("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[gt]=this,jn(e,this,a)};else if(t==="error")r=function(i){let o=new mt("error",{error:i,message:i.message});o[gt]=this,jn(e,this,o)};else if(t==="open")r=function(){let i=new _e("open");i[gt]=this,jn(e,this,i)};else return;r[Yt]=!!n[Yt],r[Ss]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Ss]===e&&!n[Yt]){this.removeListener(t,n);break}}};Qo.exports={CloseEvent:qe,ErrorEvent:mt,Event:_e,EventTarget:Yf,MessageEvent:Jt};function jn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var _s=v((m_,ea)=>{"use strict";var{tokenChars:Kt}=ft();function he(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Jf(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!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&&Kt[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&&Kt[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(s){if(Kt[u]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),s=!1}else if(i)if(Kt[u]===1)l===-1&&(l=d);else if(u===34&&l!==-1)i=!1,c=d;else if(u===92)s=!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&&Kt[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);r&&(h=h.replace(/\\/g,""),r=!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 p=t.slice(l,c);return o===void 0?he(e,p,n):(a===void 0?he(n,p,!0):r?he(n,a,p.replace(/\\/g,"")):he(n,a,p),he(e,o,n)),e}function Kf(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}ea.exports={format:Kf,parse:Jf}});var Yn=v((S_,fa)=>{"use strict";var Xf=require("events"),Qf=require("https"),Zf=require("http"),ra=require("net"),ep=require("tls"),{randomBytes:tp,createHash:np}=require("crypto"),{Duplex:y_,Readable:v_}=require("stream"),{URL:bs}=require("url"),xe=Vt(),rp=gs(),sp=vs(),{isBlob:ip}=ft(),{BINARY_TYPES:ta,CLOSE_TIMEOUT:op,EMPTY_BUFFER:$n,GUID:ap,kForOnEventAttribute:ws,kListener:lp,kStatusCode:cp,kWebSocket:W,NOOP:sa}=ve(),{EventTarget:{addEventListener:up,removeEventListener:dp}}=Zo(),{format:fp,parse:pp}=_s(),{toBuffer:hp}=$t(),ia=Symbol("kAborted"),Is=[8,13],be=["CONNECTING","OPEN","CLOSING","CLOSED"],gp=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,L=class t extends Xf{constructor(e,n,r){super(),this._binaryType=ta[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=$n,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),oa(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){ta.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,n,r){let s=new rp({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new sp(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[W]=this,i[W]=this,e[W]=this,s.on("conclude",vp),s.on("drain",Sp),s.on("error",_p),s.on("message",bp),s.on("ping",wp),s.on("pong",Ip),i.onerror=Tp,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",ca),e.on("data",Vn),e.on("end",ua),e.on("error",da),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){Q(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),la(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||$n,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||$n,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[xe.extensionName]||(s.compress=!1),this._sender.send(e||$n,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Q(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[ws])return e[lp];return null},set(e){for(let n of this.listeners(t))if(n[ws]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[ws]:!0})}})});L.prototype.addEventListener=up;L.prototype.removeEventListener=dp;fa.exports=L;function oa(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:op,protocolVersion:Is[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!Is.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Is.join(", ")})`);let i;if(e instanceof bs)i=e;else try{i=new bs(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 f=new SyntaxError(l);if(t._redirects===0)throw f;zn(t,f);return}let u=o?443:80,c=tp(16).toString("base64"),d=o?Qf.request:Zf.request,p=new Set,h;if(s.createConnection=s.createConnection||(o?yp:mp),s.defaultPort=s.defaultPort||u,s.port=i.port||u,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":c,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new xe(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=fp({[xe.extensionName]:h.offer()})),n.length){for(let f of n){if(typeof f!="string"||!gp.test(f)||p.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");p.add(f)}s.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let g;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let f=r&&r.headers;if(r={...r,headers:{}},f)for(let[m,y]of Object.entries(f))r.headers[m.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let f=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!f||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=t._req=d(s),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(s);s.timeout&&g.on("timeout",()=>{Q(t,g,"Opening handshake has timed out")}),g.on("error",f=>{g===null||g[ia]||(g=t._req=null,zn(t,f))}),g.on("response",f=>{let m=f.headers.location,y=f.statusCode;if(m&&s.followRedirects&&y>=300&&y<400){if(++t._redirects>s.maxRedirects){Q(t,g,"Maximum redirects exceeded");return}g.abort();let T;try{T=new bs(m,e)}catch{let w=new SyntaxError(`Invalid URL: ${m}`);zn(t,w);return}oa(t,T,n,r)}else t.emit("unexpected-response",g,f)||Q(t,g,`Unexpected server response: ${f.statusCode}`)}),g.on("upgrade",(f,m,y)=>{if(t.emit("upgrade",f),t.readyState!==L.CONNECTING)return;g=t._req=null;let T=f.headers.upgrade;if(T===void 0||T.toLowerCase()!=="websocket"){Q(t,m,"Invalid Upgrade header");return}let A=np("sha1").update(c+ap).digest("base64");if(f.headers["sec-websocket-accept"]!==A){Q(t,m,"Invalid Sec-WebSocket-Accept header");return}let w=f.headers["sec-websocket-protocol"],C;if(w!==void 0?p.size?p.has(w)||(C="Server sent an invalid subprotocol"):C="Server sent a subprotocol but none was requested":p.size&&(C="Server sent no subprotocol"),C){Q(t,m,C);return}w&&(t._protocol=w);let P=f.headers["sec-websocket-extensions"];if(P!==void 0){if(!h){Q(t,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let G;try{G=pp(P)}catch{Q(t,m,"Invalid Sec-WebSocket-Extensions header");return}let ye=Object.keys(G);if(ye.length!==1||ye[0]!==xe.extensionName){Q(t,m,"Server indicated an extension that was not requested");return}try{h.accept(G[xe.extensionName])}catch{Q(t,m,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[xe.extensionName]=h}t.setSocket(m,y,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,t):g.end()}function zn(t,e){t._readyState=L.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function mp(t){return t.path=t.socketPath,ra.connect(t)}function yp(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=ra.isIP(t.host)?"":t.host),ep.connect(t)}function Q(t,e,n){t._readyState=L.CLOSING;let r=new Error(n);Error.captureStackTrace(r,Q),e.setHeader?(e[ia]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(zn,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Ts(t,e,n){if(e){let r=ip(e)?e.size:hp(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${be[t.readyState]})`);process.nextTick(n,r)}}function vp(t,e){let n=this[W];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[W]!==void 0&&(n._socket.removeListener("data",Vn),process.nextTick(aa,n._socket),t===1005?n.close():n.close(t,e))}function Sp(){let t=this[W];t.isPaused||t._socket.resume()}function _p(t){let e=this[W];e._socket[W]!==void 0&&(e._socket.removeListener("data",Vn),process.nextTick(aa,e._socket),e.close(t[cp])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function na(){this[W].emitClose()}function bp(t,e){this[W].emit("message",t,e)}function wp(t){let e=this[W];e._autoPong&&e.pong(t,!this._isServer,sa),e.emit("ping",t)}function Ip(t){this[W].emit("pong",t)}function aa(t){t.resume()}function Tp(t){let e=this[W];e.readyState!==L.CLOSED&&(e.readyState===L.OPEN&&(e._readyState=L.CLOSING,la(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function la(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function ca(){let t=this[W];if(this.removeListener("close",ca),this.removeListener("data",Vn),this.removeListener("end",ua),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[W]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",na),t._receiver.on("finish",na))}function Vn(t){this[W]._receiver.write(t)||this.pause()}function ua(){let t=this[W];t._readyState=L.CLOSING,t._receiver.end(),this.end()}function da(){let t=this[W];this.removeListener("error",da),this.on("error",sa),t&&(t._readyState=L.CLOSING,this.destroy())}});var ma=v((b_,ga)=>{"use strict";var __=Yn(),{Duplex:Ap}=require("stream");function pa(t){t.emit("close")}function kp(){!this.destroyed&&this._writableState.finished&&this.destroy()}function ha(t){this.removeListener("error",ha),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Cp(t,e){let n=!0,r=new Ap({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(pa,r);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(s),process.nextTick(pa,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",kp),r.on("error",ha),r}ga.exports=Cp});var va=v((w_,ya)=>{"use strict";var{tokenChars:xp}=ft();function Rp(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&xp[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ya.exports={parse:Rp}});var Aa=v((T_,Ta)=>{"use strict";var Ep=require("events"),Jn=require("http"),{Duplex:I_}=require("stream"),{createHash:Pp}=require("crypto"),Sa=_s(),Ge=Vt(),Mp=va(),Lp=Yn(),{CLOSE_TIMEOUT:Np,GUID:Op,kWebSocket:Bp}=ve(),Dp=/^[+/0-9A-Za-z]{22}==$/,_a=0,ba=1,Ia=2,As=class extends Ep{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Np,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Lp,...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=Jn.createServer((r,s)=>{let i=Jn.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Fp(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=_a}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===Ia){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xt,this);return}if(e&&this.once("close",e),this._state!==ba)if(this._state=ba,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(Xt,this):process.nextTick(Xt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Xt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",wa);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){je(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){je(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!Dp.test(i)){je(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){je(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Qt(n,400);return}let l=e.headers["sec-websocket-protocol"],u=new Set;if(l!==void 0)try{u=Mp.parse(l)}catch{je(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 p=new Ge(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=Sa.parse(c);h[Ge.extensionName]&&(p.accept(h[Ge.extensionName]),d[Ge.extensionName]=p)}catch{je(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={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(p,(h,g,f,m)=>{if(!h)return Qt(n,g||401,f,m);this.completeUpgrade(d,i,u,e,n,r,s)});return}if(!this.options.verifyClient(p))return Qt(n,401)}this.completeUpgrade(d,i,u,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Bp])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>_a)return Qt(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Pp("sha1").update(n+Op).digest("base64")}`],c=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;d&&(u.push(`Sec-WebSocket-Protocol: ${d}`),c._protocol=d)}if(e[Ge.extensionName]){let d=e[Ge.extensionName].params,p=Sa.format({[Ge.extensionName]:[d]});u.push(`Sec-WebSocket-Extensions: ${p}`),c._extensions=e}this.emit("headers",u,s),i.write(u.concat(`\r
1
+ "use strict";var df=Object.create;var _o=Object.defineProperty;var ff=Object.getOwnPropertyDescriptor;var pf=Object.getOwnPropertyNames;var hf=Object.getPrototypeOf,gf=Object.prototype.hasOwnProperty;var v=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var mf=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of pf(e))!gf.call(t,s)&&s!==n&&_o(t,s,{get:()=>e[s],enumerable:!(r=ff(e,s))||r.enumerable});return t};var ct=(t,e,n)=>(n=t!=null?df(hf(t)):{},mf(e||!t||!t.__esModule?_o(n,"default",{value:t,enumerable:!0}):n,t));var ve=v((a_,Io)=>{"use strict";var bo=["nodebuffer","arraybuffer","fragments"],wo=typeof Blob<"u";wo&&bo.push("blob");Io.exports={BINARY_TYPES:bo,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:wo,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var $t=v((l_,Dn)=>{"use strict";var{EMPTY_BUFFER:yf}=ve(),is=Buffer[Symbol.species];function vf(t,e){if(t.length===0)return yf;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new is(n.buffer,n.byteOffset,r):n}function To(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function Ao(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function Sf(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function os(t){if(os.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new is(t):ArrayBuffer.isView(t)?e=new is(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),os.readOnly=!1),e}Dn.exports={concat:vf,mask:To,toArrayBuffer:Sf,toBuffer:os,unmask:Ao};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");Dn.exports.mask=function(e,n,r,s,i){i<48?To(e,n,r,s,i):t.mask(e,n,r,s,i)},Dn.exports.unmask=function(e,n){e.length<32?Ao(e,n):t.unmask(e,n)}}catch{}});var xo=v((c_,Co)=>{"use strict";var ko=Symbol("kDone"),as=Symbol("kRun"),ls=class{constructor(e){this[ko]=()=>{this.pending--,this[as]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[as]()}[as](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[ko])}}};Co.exports=ls});var Vt=v((u_,Mo)=>{"use strict";var zt=require("zlib"),Ro=$t(),_f=xo(),{kStatusCode:Eo}=ve(),bf=Buffer[Symbol.species],wf=Buffer.from([0,0,255,255]),Hn=Symbol("permessage-deflate"),Se=Symbol("total-length"),ut=Symbol("callback"),Ce=Symbol("buffers"),dt=Symbol("error"),Fn,cs=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!Fn){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Fn=new _f(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[ut];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){Fn.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){Fn.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?zt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=zt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Hn]=this,this._inflate[Se]=0,this._inflate[Ce]=[],this._inflate.on("error",Tf),this._inflate.on("data",Po)}this._inflate[ut]=r,this._inflate.write(e),n&&this._inflate.write(wf),this._inflate.flush(()=>{let i=this._inflate[dt];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=Ro.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[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?zt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=zt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Se]=0,this._deflate[Ce]=[],this._deflate.on("data",If)}this._deflate[ut]=r,this._deflate.write(e),this._deflate.flush(zt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Ro.concat(this._deflate[Ce],this._deflate[Se]);n&&(i=new bf(i.buffer,i.byteOffset,i.length-4)),this._deflate[ut]=null,this._deflate[Se]=0,this._deflate[Ce]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};Mo.exports=cs;function If(t){this[Ce].push(t),this[Se]+=t.length}function Po(t){if(this[Se]+=t.length,this[Hn]._maxPayload<1||this[Se]<=this[Hn]._maxPayload){this[Ce].push(t);return}this[dt]=new RangeError("Max payload size exceeded"),this[dt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[dt][Eo]=1009,this.removeListener("data",Po),this.reset()}function Tf(t){if(this[Hn]._inflate=null,this[dt]){this[ut](this[dt]);return}t[Eo]=1007,this[ut](t)}});var ft=v((d_,Un)=>{"use strict";var{isUtf8:Lo}=require("buffer"),{hasBlob:Af}=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 Cf(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function us(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 xf(t){return Af&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}Un.exports={isBlob:xf,isValidStatusCode:Cf,isValidUTF8:us,tokenChars:kf};if(Lo)Un.exports.isValidUTF8=function(t){return t.length<24?us(t):Lo(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");Un.exports.isValidUTF8=function(e){return e.length<32?us(e):t(e)}}catch{}});var gs=v((f_,Uo)=>{"use strict";var{Writable:Rf}=require("stream"),No=Vt(),{BINARY_TYPES:Ef,EMPTY_BUFFER:Oo,kStatusCode:Pf,kWebSocket:Mf}=ve(),{concat:ds,toArrayBuffer:Lf,unmask:Nf}=$t(),{isValidStatusCode:Of,isValidUTF8:Bo}=ft(),Wn=Buffer[Symbol.species],ee=0,Do=1,Fo=2,Ho=3,fs=4,ps=5,qn=6,hs=class extends Rf{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ef[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Mf]=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=ee}_write(e,n,r){if(this._opcode===8&&this._state==ee)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new Wn(r.buffer,r.byteOffset+e,r.length-e),new Wn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new Wn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case ee:this.getInfo(e);break;case Do:this.getPayloadLength16(e);break;case Fo:this.getPayloadLength64(e);break;case Ho:this.getMask();break;case fs:this.getData(e);break;case ps:case qn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let r=(n[0]&64)===64;if(r&&!this._extensions[No.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=Do:this._payloadLength===127?this._state=Fo:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=r*Math.pow(2,32)+n.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=Ho:this._state=fs}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=fs}getData(e){let n=Oo;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&&Nf(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=ps,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[No.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===ee&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=ee;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ds(r,n):this._binaryType==="arraybuffer"?s=Lf(ds(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit("message",s,!0),this._state=ee,this.startLoop(e)}))}else{let s=ds(r,n);if(!this._skipUTF8Validation&&!Bo(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ps||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit("message",s,!1),this._state=ee,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Oo),this.end();else{let r=e.readUInt16BE(0);if(!Of(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new Wn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Bo(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=ee;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=ee):(this._state=qn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=ee,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[Pf]=s,o}};Uo.exports=hs});var vs=v((h_,Go)=>{"use strict";var{Duplex:p_}=require("stream"),{randomFillSync:Bf}=require("crypto"),Wo=Vt(),{EMPTY_BUFFER:Df,kWebSocket:Ff,NOOP:Hf}=ve(),{isBlob:pt,isValidStatusCode:Uf}=ft(),{mask:qo,toBuffer:Ue}=$t(),te=Symbol("kByteLength"),Wf=Buffer.alloc(4),Gn=8*1024,We,ht=Gn,ae=0,qf=1,Gf=2,ms=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ae,this.onerror=Hf,this[Ff]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Wf,n.generateMask?n.generateMask(r):(ht===Gn&&(We===void 0&&(We=Buffer.alloc(Gn)),Bf(We,0,Gn),ht=0),r[0]=We[ht++],r[1]=We[ht++],r[2]=We[ht++],r[3]=We[ht++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[te]!==void 0?a=n[te]:(e=Buffer.from(e),a=e.length):(a=e.length,s=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let u=Buffer.allocUnsafe(s?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]=r[0],u[i-3]=r[1],u[i-2]=r[2],u[i-1]=r[3],o?[u,e]:s?(qo(e,r,u,i,a),[u]):(qo(e,r,e,0,a),[u,e])):[u,e]}close(e,n,r,s){let i;if(e===void 0)i=Df;else{if(typeof e!="number"||!Uf(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={[te]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ae?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pt(e)?(s=e.size,i=!1):(e=Ue(e),s=e.length,i=Ue.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[te]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ae?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):pt(e)?(s=e.size,i=!1):(e=Ue(e),s=e.length,i=Ue.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[te]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ae?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[Wo.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):pt(e)?(a=e.size,l=!1):(e=Ue(e),a=e.length,l=Ue.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let u={[te]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};pt(e)?this._state!==ae?this.enqueue([this.getBlobData,e,this._compress,u,r]):this.getBlobData(e,this._compress,u,r):this._state!==ae?this.enqueue([this.dispatch,e,this._compress,u,r]):this.dispatch(e,this._compress,u,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[te],this._state=Gf,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(ys,this,a,s);return}this._bufferedBytes-=r[te];let o=Ue(i);n?this.dispatch(o,n,r,s):(this._state=ae,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(jf,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[Wo.extensionName];this._bufferedBytes+=r[te],this._state=qf,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");ys(this,l,s);return}this._bufferedBytes-=r[te],this._state=ae,r.readOnly=!1,this.sendFrame(t.frame(a,r),s),this.dequeue()})}dequeue(){for(;this._state===ae&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][te],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][te],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)}};Go.exports=ms;function ys(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function jf(t,e,n){ys(t,e,n),t.onerror(e)}});var Qo=v((g_,Xo)=>{"use strict";var{kForOnEventAttribute:Yt,kListener:Ss}=ve(),jo=Symbol("kCode"),$o=Symbol("kData"),zo=Symbol("kError"),Vo=Symbol("kMessage"),Yo=Symbol("kReason"),gt=Symbol("kTarget"),Jo=Symbol("kType"),Ko=Symbol("kWasClean"),_e=class{constructor(e){this[gt]=null,this[Jo]=e}get target(){return this[gt]}get type(){return this[Jo]}};Object.defineProperty(_e.prototype,"target",{enumerable:!0});Object.defineProperty(_e.prototype,"type",{enumerable:!0});var qe=class extends _e{constructor(e,n={}){super(e),this[jo]=n.code===void 0?0:n.code,this[Yo]=n.reason===void 0?"":n.reason,this[Ko]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[jo]}get reason(){return this[Yo]}get wasClean(){return this[Ko]}};Object.defineProperty(qe.prototype,"code",{enumerable:!0});Object.defineProperty(qe.prototype,"reason",{enumerable:!0});Object.defineProperty(qe.prototype,"wasClean",{enumerable:!0});var mt=class extends _e{constructor(e,n={}){super(e),this[zo]=n.error===void 0?null:n.error,this[Vo]=n.message===void 0?"":n.message}get error(){return this[zo]}get message(){return this[Vo]}};Object.defineProperty(mt.prototype,"error",{enumerable:!0});Object.defineProperty(mt.prototype,"message",{enumerable:!0});var Jt=class extends _e{constructor(e,n={}){super(e),this[$o]=n.data===void 0?null:n.data}get data(){return this[$o]}};Object.defineProperty(Jt.prototype,"data",{enumerable:!0});var $f={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Yt]&&s[Ss]===e&&!s[Yt])return;let r;if(t==="message")r=function(i,o){let a=new Jt("message",{data:o?i:i.toString()});a[gt]=this,jn(e,this,a)};else if(t==="close")r=function(i,o){let a=new qe("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[gt]=this,jn(e,this,a)};else if(t==="error")r=function(i){let o=new mt("error",{error:i,message:i.message});o[gt]=this,jn(e,this,o)};else if(t==="open")r=function(){let i=new _e("open");i[gt]=this,jn(e,this,i)};else return;r[Yt]=!!n[Yt],r[Ss]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Ss]===e&&!n[Yt]){this.removeListener(t,n);break}}};Xo.exports={CloseEvent:qe,ErrorEvent:mt,Event:_e,EventTarget:$f,MessageEvent:Jt};function jn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var _s=v((m_,Zo)=>{"use strict";var{tokenChars:Kt}=ft();function he(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function zf(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!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&&Kt[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&&Kt[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(s){if(Kt[u]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),s=!1}else if(i)if(Kt[u]===1)l===-1&&(l=d);else if(u===34&&l!==-1)i=!1,c=d;else if(u===92)s=!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&&Kt[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);r&&(h=h.replace(/\\/g,""),r=!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 p=t.slice(l,c);return o===void 0?he(e,p,n):(a===void 0?he(n,p,!0):r?he(n,a,p.replace(/\\/g,"")):he(n,a,p),he(e,o,n)),e}function Vf(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Zo.exports={format:Vf,parse:zf}});var Yn=v((S_,da)=>{"use strict";var Yf=require("events"),Jf=require("https"),Kf=require("http"),na=require("net"),Xf=require("tls"),{randomBytes:Qf,createHash:Zf}=require("crypto"),{Duplex:y_,Readable:v_}=require("stream"),{URL:bs}=require("url"),xe=Vt(),ep=gs(),tp=vs(),{isBlob:np}=ft(),{BINARY_TYPES:ea,CLOSE_TIMEOUT:rp,EMPTY_BUFFER:$n,GUID:sp,kForOnEventAttribute:ws,kListener:ip,kStatusCode:op,kWebSocket:W,NOOP:ra}=ve(),{EventTarget:{addEventListener:ap,removeEventListener:lp}}=Qo(),{format:cp,parse:up}=_s(),{toBuffer:dp}=$t(),sa=Symbol("kAborted"),Is=[8,13],be=["CONNECTING","OPEN","CLOSING","CLOSED"],fp=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,L=class t extends Yf{constructor(e,n,r){super(),this._binaryType=ea[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=$n,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),ia(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){ea.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,n,r){let s=new ep({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new tp(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[W]=this,i[W]=this,e[W]=this,s.on("conclude",gp),s.on("drain",mp),s.on("error",yp),s.on("message",vp),s.on("ping",Sp),s.on("pong",_p),i.onerror=bp,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",la),e.on("data",Vn),e.on("end",ca),e.on("error",ua),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){Q(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),aa(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||$n,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||$n,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ts(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[xe.extensionName]||(s.compress=!1),this._sender.send(e||$n,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){Q(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[ws])return e[ip];return null},set(e){for(let n of this.listeners(t))if(n[ws]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[ws]:!0})}})});L.prototype.addEventListener=ap;L.prototype.removeEventListener=lp;da.exports=L;function ia(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:rp,protocolVersion:Is[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!Is.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Is.join(", ")})`);let i;if(e instanceof bs)i=e;else try{i=new bs(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 f=new SyntaxError(l);if(t._redirects===0)throw f;zn(t,f);return}let u=o?443:80,c=Qf(16).toString("base64"),d=o?Jf.request:Kf.request,p=new Set,h;if(s.createConnection=s.createConnection||(o?hp:pp),s.defaultPort=s.defaultPort||u,s.port=i.port||u,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":c,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new xe(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=cp({[xe.extensionName]:h.offer()})),n.length){for(let f of n){if(typeof f!="string"||!fp.test(f)||p.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");p.add(f)}s.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let g;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let f=r&&r.headers;if(r={...r,headers:{}},f)for(let[m,y]of Object.entries(f))r.headers[m.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let f=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!f||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=t._req=d(s),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(s);s.timeout&&g.on("timeout",()=>{Q(t,g,"Opening handshake has timed out")}),g.on("error",f=>{g===null||g[sa]||(g=t._req=null,zn(t,f))}),g.on("response",f=>{let m=f.headers.location,y=f.statusCode;if(m&&s.followRedirects&&y>=300&&y<400){if(++t._redirects>s.maxRedirects){Q(t,g,"Maximum redirects exceeded");return}g.abort();let T;try{T=new bs(m,e)}catch{let w=new SyntaxError(`Invalid URL: ${m}`);zn(t,w);return}ia(t,T,n,r)}else t.emit("unexpected-response",g,f)||Q(t,g,`Unexpected server response: ${f.statusCode}`)}),g.on("upgrade",(f,m,y)=>{if(t.emit("upgrade",f),t.readyState!==L.CONNECTING)return;g=t._req=null;let T=f.headers.upgrade;if(T===void 0||T.toLowerCase()!=="websocket"){Q(t,m,"Invalid Upgrade header");return}let A=Zf("sha1").update(c+sp).digest("base64");if(f.headers["sec-websocket-accept"]!==A){Q(t,m,"Invalid Sec-WebSocket-Accept header");return}let w=f.headers["sec-websocket-protocol"],C;if(w!==void 0?p.size?p.has(w)||(C="Server sent an invalid subprotocol"):C="Server sent a subprotocol but none was requested":p.size&&(C="Server sent no subprotocol"),C){Q(t,m,C);return}w&&(t._protocol=w);let x=f.headers["sec-websocket-extensions"];if(x!==void 0){if(!h){Q(t,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let G;try{G=up(x)}catch{Q(t,m,"Invalid Sec-WebSocket-Extensions header");return}let ye=Object.keys(G);if(ye.length!==1||ye[0]!==xe.extensionName){Q(t,m,"Server indicated an extension that was not requested");return}try{h.accept(G[xe.extensionName])}catch{Q(t,m,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[xe.extensionName]=h}t.setSocket(m,y,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,t):g.end()}function zn(t,e){t._readyState=L.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function pp(t){return t.path=t.socketPath,na.connect(t)}function hp(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=na.isIP(t.host)?"":t.host),Xf.connect(t)}function Q(t,e,n){t._readyState=L.CLOSING;let r=new Error(n);Error.captureStackTrace(r,Q),e.setHeader?(e[sa]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(zn,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Ts(t,e,n){if(e){let r=np(e)?e.size:dp(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${be[t.readyState]})`);process.nextTick(n,r)}}function gp(t,e){let n=this[W];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[W]!==void 0&&(n._socket.removeListener("data",Vn),process.nextTick(oa,n._socket),t===1005?n.close():n.close(t,e))}function mp(){let t=this[W];t.isPaused||t._socket.resume()}function yp(t){let e=this[W];e._socket[W]!==void 0&&(e._socket.removeListener("data",Vn),process.nextTick(oa,e._socket),e.close(t[op])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function ta(){this[W].emitClose()}function vp(t,e){this[W].emit("message",t,e)}function Sp(t){let e=this[W];e._autoPong&&e.pong(t,!this._isServer,ra),e.emit("ping",t)}function _p(t){this[W].emit("pong",t)}function oa(t){t.resume()}function bp(t){let e=this[W];e.readyState!==L.CLOSED&&(e.readyState===L.OPEN&&(e._readyState=L.CLOSING,aa(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function aa(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function la(){let t=this[W];if(this.removeListener("close",la),this.removeListener("data",Vn),this.removeListener("end",ca),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[W]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",ta),t._receiver.on("finish",ta))}function Vn(t){this[W]._receiver.write(t)||this.pause()}function ca(){let t=this[W];t._readyState=L.CLOSING,t._receiver.end(),this.end()}function ua(){let t=this[W];this.removeListener("error",ua),this.on("error",ra),t&&(t._readyState=L.CLOSING,this.destroy())}});var ga=v((b_,ha)=>{"use strict";var __=Yn(),{Duplex:wp}=require("stream");function fa(t){t.emit("close")}function Ip(){!this.destroyed&&this._writableState.finished&&this.destroy()}function pa(t){this.removeListener("error",pa),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Tp(t,e){let n=!0,r=new wp({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(fa,r);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(s),process.nextTick(fa,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",Ip),r.on("error",pa),r}ha.exports=Tp});var ya=v((w_,ma)=>{"use strict";var{tokenChars:Ap}=ft();function kp(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&Ap[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ma.exports={parse:kp}});var Ta=v((T_,Ia)=>{"use strict";var Cp=require("events"),Jn=require("http"),{Duplex:I_}=require("stream"),{createHash:xp}=require("crypto"),va=_s(),Ge=Vt(),Rp=ya(),Ep=Yn(),{CLOSE_TIMEOUT:Pp,GUID:Mp,kWebSocket:Lp}=ve(),Np=/^[+/0-9A-Za-z]{22}==$/,Sa=0,_a=1,wa=2,As=class extends Cp{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Pp,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Ep,...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=Jn.createServer((r,s)=>{let i=Jn.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Op(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Sa}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===wa){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xt,this);return}if(e&&this.once("close",e),this._state!==_a)if(this._state=_a,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(Xt,this):process.nextTick(Xt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Xt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",ba);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){je(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){je(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!Np.test(i)){je(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){je(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Qt(n,400);return}let l=e.headers["sec-websocket-protocol"],u=new Set;if(l!==void 0)try{u=Rp.parse(l)}catch{je(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 p=new Ge(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=va.parse(c);h[Ge.extensionName]&&(p.accept(h[Ge.extensionName]),d[Ge.extensionName]=p)}catch{je(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={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(p,(h,g,f,m)=>{if(!h)return Qt(n,g||401,f,m);this.completeUpgrade(d,i,u,e,n,r,s)});return}if(!this.options.verifyClient(p))return Qt(n,401)}this.completeUpgrade(d,i,u,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Lp])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Sa)return Qt(i,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${xp("sha1").update(n+Mp).digest("base64")}`],c=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;d&&(u.push(`Sec-WebSocket-Protocol: ${d}`),c._protocol=d)}if(e[Ge.extensionName]){let d=e[Ge.extensionName].params,p=va.format({[Ge.extensionName]:[d]});u.push(`Sec-WebSocket-Extensions: ${p}`),c._extensions=e}this.emit("headers",u,s),i.write(u.concat(`\r
2
2
  `).join(`\r
3
- `)),i.removeListener("error",wa),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(Xt,this)})),a(c,s)}};Ta.exports=As;function Fp(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let r of Object.keys(e))t.removeListener(r,e[r])}}function Xt(t){t._state=Ia,t.emit("close")}function wa(){this.destroy()}function Qt(t,e,n,r){n=n||Jn.STATUS_CODES[e],r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...r},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${Jn.STATUS_CODES[e]}\r
3
+ `)),i.removeListener("error",ba),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(Xt,this)})),a(c,s)}};Ia.exports=As;function Op(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let r of Object.keys(e))t.removeListener(r,e[r])}}function Xt(t){t._state=wa,t.emit("close")}function ba(){this.destroy()}function Qt(t,e,n,r){n=n||Jn.STATUS_CODES[e],r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...r},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${Jn.STATUS_CODES[e]}\r
4
4
  `+Object.keys(r).map(s=>`${s}: ${r[s]}`).join(`\r
5
5
  `)+`\r
6
6
  \r
7
- `+n)}function je(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,je),t.emit("wsClientError",o,n,e)}else Qt(n,r,s,i)}});var Cs=v((k_,ka)=>{ka.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var Re=v($e=>{var xs,Gp=[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];$e.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};$e.getSymbolTotalCodewords=function(e){return Gp[e]};$e.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};$e.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');xs=e};$e.isKanjiModeEnabled=function(){return typeof xs<"u"};$e.toSJIS=function(e){return xs(e)}});var Kn=v(ne=>{ne.L={bit:1};ne.M={bit:0};ne.Q={bit:3};ne.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 ne.L;case"m":case"medium":return ne.M;case"q":case"quartile":return ne.Q;case"h":case"high":return ne.H;default:throw new Error("Unknown EC Level: "+t)}}ne.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};ne.from=function(e,n){if(ne.isValid(e))return e;try{return jp(e)}catch{return n}}});var Ra=v((R_,xa)=>{function Ca(){this.buffer=[],this.length=0}Ca.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++}};xa.exports=Ca});var Pa=v((E_,Ea)=>{function Zt(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)}Zt.prototype.set=function(t,e,n,r){let s=t*this.size+e;this.data[s]=n,r&&(this.reservedBit[s]=!0)};Zt.prototype.get=function(t,e){return this.data[t*this.size+e]};Zt.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};Zt.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};Ea.exports=Zt});var Ma=v(Xn=>{var $p=Re().getSymbolSize;Xn.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=$p(e),s=r===145?26:Math.ceil((r-13)/(2*n-2))*2,i=[r-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-s;return i.push(6),i.reverse()};Xn.getPositions=function(e){let n=[],r=Xn.getRowColCoords(e),s=r.length;for(let i=0;i<s;i++)for(let o=0;o<s;o++)i===0&&o===0||i===0&&o===s-1||i===s-1&&o===0||n.push([r[i],r[o]]);return n}});var Oa=v(Na=>{var zp=Re().getSymbolSize,La=7;Na.getPositions=function(e){let n=zp(e);return[[0,0],[n-La,0],[0,n-La]]}});var Ba=v(x=>{x.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var ze={N1:3,N2:3,N3:40,N4:10};x.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7};x.from=function(e){return x.isValid(e)?parseInt(e,10):void 0};x.getPenaltyN1=function(e){let n=e.size,r=0,s=0,i=0,o=null,a=null;for(let l=0;l<n;l++){s=i=0,o=a=null;for(let u=0;u<n;u++){let c=e.get(l,u);c===o?s++:(s>=5&&(r+=ze.N1+(s-5)),o=c,s=1),c=e.get(u,l),c===a?i++:(i>=5&&(r+=ze.N1+(i-5)),a=c,i=1)}s>=5&&(r+=ze.N1+(s-5)),i>=5&&(r+=ze.N1+(i-5))}return r};x.getPenaltyN2=function(e){let n=e.size,r=0;for(let s=0;s<n-1;s++)for(let i=0;i<n-1;i++){let o=e.get(s,i)+e.get(s,i+1)+e.get(s+1,i)+e.get(s+1,i+1);(o===4||o===0)&&r++}return r*ze.N2};x.getPenaltyN3=function(e){let n=e.size,r=0,s=0,i=0;for(let o=0;o<n;o++){s=i=0;for(let a=0;a<n;a++)s=s<<1&2047|e.get(o,a),a>=10&&(s===1488||s===93)&&r++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&r++}return r*ze.N3};x.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let i=0;i<r;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/r/5)-10)*ze.N4};function Vp(t,e,n){switch(t){case x.Patterns.PATTERN000:return(e+n)%2===0;case x.Patterns.PATTERN001:return e%2===0;case x.Patterns.PATTERN010:return n%3===0;case x.Patterns.PATTERN011:return(e+n)%3===0;case x.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2===0;case x.Patterns.PATTERN101:return e*n%2+e*n%3===0;case x.Patterns.PATTERN110:return(e*n%2+e*n%3)%2===0;case x.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}x.applyMask=function(e,n){let r=n.size;for(let s=0;s<r;s++)for(let i=0;i<r;i++)n.isReserved(i,s)||n.xor(i,s,Vp(e,i,s))};x.getBestMask=function(e,n){let r=Object.keys(x.Patterns).length,s=0,i=1/0;for(let o=0;o<r;o++){n(o),x.applyMask(o,e);let a=x.getPenaltyN1(e)+x.getPenaltyN2(e)+x.getPenaltyN3(e)+x.getPenaltyN4(e);x.applyMask(o,e),a<i&&(i=a,s=o)}return s}});var Es=v(Rs=>{var Ee=Kn(),Qn=[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],Zn=[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];Rs.getBlocksCount=function(e,n){switch(n){case Ee.L:return Qn[(e-1)*4+0];case Ee.M:return Qn[(e-1)*4+1];case Ee.Q:return Qn[(e-1)*4+2];case Ee.H:return Qn[(e-1)*4+3];default:return}};Rs.getTotalCodewordsCount=function(e,n){switch(n){case Ee.L:return Zn[(e-1)*4+0];case Ee.M:return Zn[(e-1)*4+1];case Ee.Q:return Zn[(e-1)*4+2];case Ee.H:return Zn[(e-1)*4+3];default:return}}});var Da=v(tr=>{var en=new Uint8Array(512),er=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)en[n]=e,er[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)en[n]=en[n-255]})();tr.log=function(e){if(e<1)throw new Error("log("+e+")");return er[e]};tr.exp=function(e){return en[e]};tr.mul=function(e,n){return e===0||n===0?0:en[er[e]+er[n]]}});var Fa=v(tn=>{var Ps=Da();tn.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let s=0;s<e.length;s++)for(let i=0;i<n.length;i++)r[s+i]^=Ps.mul(e[s],n[i]);return r};tn.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let s=r[0];for(let o=0;o<n.length;o++)r[o]^=Ps.mul(n[o],s);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r};tn.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let r=0;r<e;r++)n=tn.mul(n,new Uint8Array([1,Ps.exp(r)]));return n}});var Wa=v((D_,Ua)=>{var Ha=Fa();function Ms(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}Ms.prototype.initialize=function(e){this.degree=e,this.genPoly=Ha.generateECPolynomial(this.degree)};Ms.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");let n=new Uint8Array(e.length+this.degree);n.set(e);let r=Ha.mod(n,this.genPoly),s=this.degree-r.length;if(s>0){let i=new Uint8Array(this.degree);return i.set(r,s),i}return r};Ua.exports=Ms});var Ls=v(qa=>{qa.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var Ns=v(we=>{var Ga="[0-9]+",Yp="[A-Z $%*+\\-./:]+",nn="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";nn=nn.replace(/u/g,"\\u");var Jp="(?:(?![A-Z0-9 $%*+\\-./:]|"+nn+`)(?:.|[\r
8
- ]))+`;we.KANJI=new RegExp(nn,"g");we.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");we.BYTE=new RegExp(Jp,"g");we.NUMERIC=new RegExp(Ga,"g");we.ALPHANUMERIC=new RegExp(Yp,"g");var Kp=new RegExp("^"+nn+"$"),Xp=new RegExp("^"+Ga+"$"),Qp=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");we.testKanji=function(e){return Kp.test(e)};we.testNumeric=function(e){return Xp.test(e)};we.testAlphanumeric=function(e){return Qp.test(e)}});var Pe=v(D=>{var Zp=Ls(),Os=Ns();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(!Zp.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 Os.testNumeric(e)?D.NUMERIC:Os.testAlphanumeric(e)?D.ALPHANUMERIC:Os.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 eh(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 eh(e)}catch{return n}}});var Ya=v(Ve=>{var nr=Re(),th=Es(),ja=Kn(),Me=Pe(),Bs=Ls(),za=7973,$a=nr.getBCHDigit(za);function nh(t,e,n){for(let r=1;r<=40;r++)if(e<=Ve.getCapacity(r,n,t))return r}function Va(t,e){return Me.getCharCountIndicator(t,e)+4}function rh(t,e){let n=0;return t.forEach(function(r){let s=Va(r.mode,e);n+=s+r.getBitsLength()}),n}function sh(t,e){for(let n=1;n<=40;n++)if(rh(t,n)<=Ve.getCapacity(n,e,Me.MIXED))return n}Ve.from=function(e,n){return Bs.isValid(e)?parseInt(e,10):n};Ve.getCapacity=function(e,n,r){if(!Bs.isValid(e))throw new Error("Invalid QR Code version");typeof r>"u"&&(r=Me.BYTE);let s=nr.getSymbolTotalCodewords(e),i=th.getTotalCodewordsCount(e,n),o=(s-i)*8;if(r===Me.MIXED)return o;let a=o-Va(r,e);switch(r){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)}};Ve.getBestVersionForData=function(e,n){let r,s=ja.from(n,ja.M);if(Array.isArray(e)){if(e.length>1)return sh(e,s);if(e.length===0)return 1;r=e[0]}else r=e;return nh(r.mode,r.getLength(),s)};Ve.getEncodedBits=function(e){if(!Bs.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;nr.getBCHDigit(n)-$a>=0;)n^=za<<nr.getBCHDigit(n)-$a;return e<<12|n}});var Qa=v(Xa=>{var Ds=Re(),Ka=1335,ih=21522,Ja=Ds.getBCHDigit(Ka);Xa.getEncodedBits=function(e,n){let r=e.bit<<3|n,s=r<<10;for(;Ds.getBCHDigit(s)-Ja>=0;)s^=Ka<<Ds.getBCHDigit(s)-Ja;return(r<<10|s)^ih}});var el=v((G_,Za)=>{var oh=Pe();function yt(t){this.mode=oh.NUMERIC,this.data=t.toString()}yt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};yt.prototype.getLength=function(){return this.data.length};yt.prototype.getBitsLength=function(){return yt.getBitsLength(this.data.length)};yt.prototype.write=function(e){let n,r,s;for(n=0;n+3<=this.data.length;n+=3)r=this.data.substr(n,3),s=parseInt(r,10),e.put(s,10);let i=this.data.length-n;i>0&&(r=this.data.substr(n),s=parseInt(r,10),e.put(s,i*3+1))};Za.exports=yt});var nl=v((j_,tl)=>{var ah=Pe(),Fs=["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 vt(t){this.mode=ah.ALPHANUMERIC,this.data=t}vt.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};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;for(n=0;n+2<=this.data.length;n+=2){let r=Fs.indexOf(this.data[n])*45;r+=Fs.indexOf(this.data[n+1]),e.put(r,11)}this.data.length%2&&e.put(Fs.indexOf(this.data[n]),6)};tl.exports=vt});var sl=v(($_,rl)=>{var lh=Pe();function St(t){this.mode=lh.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}St.getBitsLength=function(e){return e*8};St.prototype.getLength=function(){return this.data.length};St.prototype.getBitsLength=function(){return St.getBitsLength(this.data.length)};St.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};rl.exports=St});var ol=v((z_,il)=>{var ch=Pe(),uh=Re();function _t(t){this.mode=ch.KANJI,this.data=t}_t.getBitsLength=function(e){return e*13};_t.prototype.getLength=function(){return this.data.length};_t.prototype.getBitsLength=function(){return _t.getBitsLength(this.data.length)};_t.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=uh.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)}};il.exports=_t});var al=v((V_,Hs)=>{"use strict";var rn={single_source_shortest_paths:function(t,e,n){var r={},s={};s[e]=0;var i=rn.PriorityQueue.make();i.push(e,0);for(var o,a,l,u,c,d,p,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],p=u+d,h=s[l],g=typeof s[l]>"u",(g||h>p)&&(s[l]=p,i.push(l,p),r[l]=a))}if(typeof n<"u"&&typeof s[n]>"u"){var f=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(f)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],r=e,s;r;)n.push(r),s=t[r],r=t[r];return n.reverse(),n},find_path:function(t,e,n){var r=rn.single_source_shortest_paths(t,e,n);return rn.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var e=rn.PriorityQueue,n={},r;t=t||{};for(r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);return n.queue=[],n.sorter=t.sorter||e.default_sorter,n},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var n={value:t,cost:e};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof Hs<"u"&&(Hs.exports=rn)});var gl=v(bt=>{var k=Pe(),ul=el(),dl=nl(),fl=sl(),pl=ol(),sn=Ns(),rr=Re(),dh=al();function ll(t){return unescape(encodeURIComponent(t)).length}function on(t,e,n){let r=[],s;for(;(s=t.exec(n))!==null;)r.push({data:s[0],index:s.index,mode:e,length:s[0].length});return r}function hl(t){let e=on(sn.NUMERIC,k.NUMERIC,t),n=on(sn.ALPHANUMERIC,k.ALPHANUMERIC,t),r,s;return rr.isKanjiModeEnabled()?(r=on(sn.BYTE,k.BYTE,t),s=on(sn.KANJI,k.KANJI,t)):(r=on(sn.BYTE_KANJI,k.BYTE,t),s=[]),e.concat(n,r,s).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function Us(t,e){switch(e){case k.NUMERIC:return ul.getBitsLength(t);case k.ALPHANUMERIC:return dl.getBitsLength(t);case k.KANJI:return pl.getBitsLength(t);case k.BYTE:return fl.getBitsLength(t)}}function fh(t){return t.reduce(function(e,n){let r=e.length-1>=0?e[e.length-1]:null;return r&&r.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function ph(t){let e=[];for(let n=0;n<t.length;n++){let r=t[n];switch(r.mode){case k.NUMERIC:e.push([r,{data:r.data,mode:k.ALPHANUMERIC,length:r.length},{data:r.data,mode:k.BYTE,length:r.length}]);break;case k.ALPHANUMERIC:e.push([r,{data:r.data,mode:k.BYTE,length:r.length}]);break;case k.KANJI:e.push([r,{data:r.data,mode:k.BYTE,length:ll(r.data)}]);break;case k.BYTE:e.push([{data:r.data,mode:k.BYTE,length:ll(r.data)}])}}return e}function hh(t,e){let n={},r={start:{}},s=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let u=o[l],c=""+i+l;a.push(c),n[c]={node:u,lastCount:0},r[c]={};for(let d=0;d<s.length;d++){let p=s[d];n[p]&&n[p].node.mode===u.mode?(r[p][c]=Us(n[p].lastCount+u.length,u.mode)-Us(n[p].lastCount,u.mode),n[p].lastCount+=u.length):(n[p]&&(n[p].lastCount=u.length),r[p][c]=Us(u.length,u.mode)+4+k.getCharCountIndicator(u.mode,e))}}s=a}for(let i=0;i<s.length;i++)r[s[i]].end=0;return{map:r,table:n}}function cl(t,e){let n,r=k.getBestModeForData(t);if(n=k.from(e,r),n!==k.BYTE&&n.bit<r.bit)throw new Error('"'+t+'" cannot be encoded with mode '+k.toString(n)+`.
10
- Suggested mode is: `+k.toString(r));switch(n===k.KANJI&&!rr.isKanjiModeEnabled()&&(n=k.BYTE),n){case k.NUMERIC:return new ul(t);case k.ALPHANUMERIC:return new dl(t);case k.KANJI:return new pl(t);case k.BYTE:return new fl(t)}}bt.fromArray=function(e){return e.reduce(function(n,r){return typeof r=="string"?n.push(cl(r,null)):r.data&&n.push(cl(r.data,r.mode)),n},[])};bt.fromString=function(e,n){let r=hl(e,rr.isKanjiModeEnabled()),s=ph(r),i=hh(s,n),o=dh.find_path(i.map,"start","end"),a=[];for(let l=1;l<o.length-1;l++)a.push(i.table[o[l]].node);return bt.fromArray(fh(a))};bt.rawSplit=function(e){return bt.fromArray(hl(e,rr.isKanjiModeEnabled()))}});var zs=v(ml=>{var ir=Re(),Ws=Kn(),gh=Ra(),mh=Pa(),yh=Ma(),vh=Oa(),js=Ba(),$s=Es(),Sh=Wa(),sr=Ya(),_h=Qa(),bh=Pe(),qs=gl();function wh(t,e){let n=t.size,r=vh.getPositions(e);for(let s=0;s<r.length;s++){let i=r[s][0],o=r[s][1];for(let a=-1;a<=7;a++)if(!(i+a<=-1||n<=i+a))for(let l=-1;l<=7;l++)o+l<=-1||n<=o+l||(a>=0&&a<=6&&(l===0||l===6)||l>=0&&l<=6&&(a===0||a===6)||a>=2&&a<=4&&l>=2&&l<=4?t.set(i+a,o+l,!0,!0):t.set(i+a,o+l,!1,!0))}}function Ih(t){let e=t.size;for(let n=8;n<e-8;n++){let r=n%2===0;t.set(n,6,r,!0),t.set(6,n,r,!0)}}function Th(t,e){let n=yh.getPositions(e);for(let r=0;r<n.length;r++){let s=n[r][0],i=n[r][1];for(let o=-2;o<=2;o++)for(let a=-2;a<=2;a++)o===-2||o===2||a===-2||a===2||o===0&&a===0?t.set(s+o,i+a,!0,!0):t.set(s+o,i+a,!1,!0)}}function Ah(t,e){let n=t.size,r=sr.getEncodedBits(e),s,i,o;for(let a=0;a<18;a++)s=Math.floor(a/3),i=a%3+n-8-3,o=(r>>a&1)===1,t.set(s,i,o,!0),t.set(i,s,o,!0)}function Gs(t,e,n){let r=t.size,s=_h.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(s>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(r-15+i,8,o,!0),i<8?t.set(8,r-i-1,o,!0):i<9?t.set(8,15-i-1+1,o,!0):t.set(8,15-i-1,o,!0);t.set(r-8,8,1,!0)}function kh(t,e){let n=t.size,r=-1,s=n-1,i=7,o=0;for(let a=n-1;a>0;a-=2)for(a===6&&a--;;){for(let l=0;l<2;l++)if(!t.isReserved(s,a-l)){let u=!1;o<e.length&&(u=(e[o]>>>i&1)===1),t.set(s,a-l,u),i--,i===-1&&(o++,i=7)}if(s+=r,s<0||n<=s){s-=r,r=-r;break}}}function Ch(t,e,n){let r=new gh;n.forEach(function(l){r.put(l.mode.bit,4),r.put(l.getLength(),bh.getCharCountIndicator(l.mode,t)),l.write(r)});let s=ir.getSymbolTotalCodewords(t),i=$s.getTotalCodewordsCount(t,e),o=(s-i)*8;for(r.getLengthInBits()+4<=o&&r.put(0,4);r.getLengthInBits()%8!==0;)r.putBit(0);let a=(o-r.getLengthInBits())/8;for(let l=0;l<a;l++)r.put(l%2?17:236,8);return xh(r,t,e)}function xh(t,e,n){let r=ir.getSymbolTotalCodewords(e),s=$s.getTotalCodewordsCount(e,n),i=r-s,o=$s.getBlocksCount(e,n),a=r%o,l=o-a,u=Math.floor(r/o),c=Math.floor(i/o),d=c+1,p=u-c,h=new Sh(p),g=0,f=new Array(o),m=new Array(o),y=0,T=new Uint8Array(t.buffer);for(let G=0;G<o;G++){let ye=G<l?c:d;f[G]=T.slice(g,g+ye),m[G]=h.encode(f[G]),g+=ye,y=Math.max(y,ye)}let A=new Uint8Array(r),w=0,C,P;for(C=0;C<y;C++)for(P=0;P<o;P++)C<f[P].length&&(A[w++]=f[P][C]);for(C=0;C<p;C++)for(P=0;P<o;P++)A[w++]=m[P][C];return A}function Rh(t,e,n,r){let s;if(Array.isArray(t))s=qs.fromArray(t);else if(typeof t=="string"){let u=e;if(!u){let c=qs.rawSplit(t);u=sr.getBestVersionForData(c,n)}s=qs.fromString(t,u||40)}else throw new Error("Invalid data");let i=sr.getBestVersionForData(s,n);if(!i)throw new Error("The amount of data is too big to be stored in a QR Code");if(!e)e=i;else if(e<i)throw new Error(`
7
+ `+n)}function je(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,je),t.emit("wsClientError",o,n,e)}else Qt(n,r,s,i)}});var Cs=v((k_,Aa)=>{Aa.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var Re=v($e=>{var xs,Up=[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];$e.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};$e.getSymbolTotalCodewords=function(e){return Up[e]};$e.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};$e.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');xs=e};$e.isKanjiModeEnabled=function(){return typeof xs<"u"};$e.toSJIS=function(e){return xs(e)}});var Kn=v(ne=>{ne.L={bit:1};ne.M={bit:0};ne.Q={bit:3};ne.H={bit:2};function Wp(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return ne.L;case"m":case"medium":return ne.M;case"q":case"quartile":return ne.Q;case"h":case"high":return ne.H;default:throw new Error("Unknown EC Level: "+t)}}ne.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};ne.from=function(e,n){if(ne.isValid(e))return e;try{return Wp(e)}catch{return n}}});var xa=v((R_,Ca)=>{function ka(){this.buffer=[],this.length=0}ka.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++}};Ca.exports=ka});var Ea=v((E_,Ra)=>{function Zt(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)}Zt.prototype.set=function(t,e,n,r){let s=t*this.size+e;this.data[s]=n,r&&(this.reservedBit[s]=!0)};Zt.prototype.get=function(t,e){return this.data[t*this.size+e]};Zt.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};Zt.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};Ra.exports=Zt});var Pa=v(Xn=>{var qp=Re().getSymbolSize;Xn.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=qp(e),s=r===145?26:Math.ceil((r-13)/(2*n-2))*2,i=[r-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-s;return i.push(6),i.reverse()};Xn.getPositions=function(e){let n=[],r=Xn.getRowColCoords(e),s=r.length;for(let i=0;i<s;i++)for(let o=0;o<s;o++)i===0&&o===0||i===0&&o===s-1||i===s-1&&o===0||n.push([r[i],r[o]]);return n}});var Na=v(La=>{var Gp=Re().getSymbolSize,Ma=7;La.getPositions=function(e){let n=Gp(e);return[[0,0],[n-Ma,0],[0,n-Ma]]}});var Oa=v(R=>{R.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var ze={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,r=0,s=0,i=0,o=null,a=null;for(let l=0;l<n;l++){s=i=0,o=a=null;for(let u=0;u<n;u++){let c=e.get(l,u);c===o?s++:(s>=5&&(r+=ze.N1+(s-5)),o=c,s=1),c=e.get(u,l),c===a?i++:(i>=5&&(r+=ze.N1+(i-5)),a=c,i=1)}s>=5&&(r+=ze.N1+(s-5)),i>=5&&(r+=ze.N1+(i-5))}return r};R.getPenaltyN2=function(e){let n=e.size,r=0;for(let s=0;s<n-1;s++)for(let i=0;i<n-1;i++){let o=e.get(s,i)+e.get(s,i+1)+e.get(s+1,i)+e.get(s+1,i+1);(o===4||o===0)&&r++}return r*ze.N2};R.getPenaltyN3=function(e){let n=e.size,r=0,s=0,i=0;for(let o=0;o<n;o++){s=i=0;for(let a=0;a<n;a++)s=s<<1&2047|e.get(o,a),a>=10&&(s===1488||s===93)&&r++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&r++}return r*ze.N3};R.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let i=0;i<r;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/r/5)-10)*ze.N4};function jp(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 r=n.size;for(let s=0;s<r;s++)for(let i=0;i<r;i++)n.isReserved(i,s)||n.xor(i,s,jp(e,i,s))};R.getBestMask=function(e,n){let r=Object.keys(R.Patterns).length,s=0,i=1/0;for(let o=0;o<r;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,s=o)}return s}});var Es=v(Rs=>{var Ee=Kn(),Qn=[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],Zn=[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];Rs.getBlocksCount=function(e,n){switch(n){case Ee.L:return Qn[(e-1)*4+0];case Ee.M:return Qn[(e-1)*4+1];case Ee.Q:return Qn[(e-1)*4+2];case Ee.H:return Qn[(e-1)*4+3];default:return}};Rs.getTotalCodewordsCount=function(e,n){switch(n){case Ee.L:return Zn[(e-1)*4+0];case Ee.M:return Zn[(e-1)*4+1];case Ee.Q:return Zn[(e-1)*4+2];case Ee.H:return Zn[(e-1)*4+3];default:return}}});var Ba=v(tr=>{var en=new Uint8Array(512),er=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)en[n]=e,er[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)en[n]=en[n-255]})();tr.log=function(e){if(e<1)throw new Error("log("+e+")");return er[e]};tr.exp=function(e){return en[e]};tr.mul=function(e,n){return e===0||n===0?0:en[er[e]+er[n]]}});var Da=v(tn=>{var Ps=Ba();tn.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let s=0;s<e.length;s++)for(let i=0;i<n.length;i++)r[s+i]^=Ps.mul(e[s],n[i]);return r};tn.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let s=r[0];for(let o=0;o<n.length;o++)r[o]^=Ps.mul(n[o],s);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r};tn.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let r=0;r<e;r++)n=tn.mul(n,new Uint8Array([1,Ps.exp(r)]));return n}});var Ua=v((D_,Ha)=>{var Fa=Da();function Ms(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}Ms.prototype.initialize=function(e){this.degree=e,this.genPoly=Fa.generateECPolynomial(this.degree)};Ms.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");let n=new Uint8Array(e.length+this.degree);n.set(e);let r=Fa.mod(n,this.genPoly),s=this.degree-r.length;if(s>0){let i=new Uint8Array(this.degree);return i.set(r,s),i}return r};Ha.exports=Ms});var Ls=v(Wa=>{Wa.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var Ns=v(we=>{var qa="[0-9]+",$p="[A-Z $%*+\\-./:]+",nn="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";nn=nn.replace(/u/g,"\\u");var zp="(?:(?![A-Z0-9 $%*+\\-./:]|"+nn+`)(?:.|[\r
8
+ ]))+`;we.KANJI=new RegExp(nn,"g");we.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");we.BYTE=new RegExp(zp,"g");we.NUMERIC=new RegExp(qa,"g");we.ALPHANUMERIC=new RegExp($p,"g");var Vp=new RegExp("^"+nn+"$"),Yp=new RegExp("^"+qa+"$"),Jp=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");we.testKanji=function(e){return Vp.test(e)};we.testNumeric=function(e){return Yp.test(e)};we.testAlphanumeric=function(e){return Jp.test(e)}});var Pe=v(D=>{var Kp=Ls(),Os=Ns();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(!Kp.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 Os.testNumeric(e)?D.NUMERIC:Os.testAlphanumeric(e)?D.ALPHANUMERIC:Os.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 Xp(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 Xp(e)}catch{return n}}});var Va=v(Ve=>{var nr=Re(),Qp=Es(),Ga=Kn(),Me=Pe(),Bs=Ls(),$a=7973,ja=nr.getBCHDigit($a);function Zp(t,e,n){for(let r=1;r<=40;r++)if(e<=Ve.getCapacity(r,n,t))return r}function za(t,e){return Me.getCharCountIndicator(t,e)+4}function eh(t,e){let n=0;return t.forEach(function(r){let s=za(r.mode,e);n+=s+r.getBitsLength()}),n}function th(t,e){for(let n=1;n<=40;n++)if(eh(t,n)<=Ve.getCapacity(n,e,Me.MIXED))return n}Ve.from=function(e,n){return Bs.isValid(e)?parseInt(e,10):n};Ve.getCapacity=function(e,n,r){if(!Bs.isValid(e))throw new Error("Invalid QR Code version");typeof r>"u"&&(r=Me.BYTE);let s=nr.getSymbolTotalCodewords(e),i=Qp.getTotalCodewordsCount(e,n),o=(s-i)*8;if(r===Me.MIXED)return o;let a=o-za(r,e);switch(r){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)}};Ve.getBestVersionForData=function(e,n){let r,s=Ga.from(n,Ga.M);if(Array.isArray(e)){if(e.length>1)return th(e,s);if(e.length===0)return 1;r=e[0]}else r=e;return Zp(r.mode,r.getLength(),s)};Ve.getEncodedBits=function(e){if(!Bs.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;nr.getBCHDigit(n)-ja>=0;)n^=$a<<nr.getBCHDigit(n)-ja;return e<<12|n}});var Xa=v(Ka=>{var Ds=Re(),Ja=1335,nh=21522,Ya=Ds.getBCHDigit(Ja);Ka.getEncodedBits=function(e,n){let r=e.bit<<3|n,s=r<<10;for(;Ds.getBCHDigit(s)-Ya>=0;)s^=Ja<<Ds.getBCHDigit(s)-Ya;return(r<<10|s)^nh}});var Za=v((G_,Qa)=>{var rh=Pe();function yt(t){this.mode=rh.NUMERIC,this.data=t.toString()}yt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};yt.prototype.getLength=function(){return this.data.length};yt.prototype.getBitsLength=function(){return yt.getBitsLength(this.data.length)};yt.prototype.write=function(e){let n,r,s;for(n=0;n+3<=this.data.length;n+=3)r=this.data.substr(n,3),s=parseInt(r,10),e.put(s,10);let i=this.data.length-n;i>0&&(r=this.data.substr(n),s=parseInt(r,10),e.put(s,i*3+1))};Qa.exports=yt});var tl=v((j_,el)=>{var sh=Pe(),Fs=["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 vt(t){this.mode=sh.ALPHANUMERIC,this.data=t}vt.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};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;for(n=0;n+2<=this.data.length;n+=2){let r=Fs.indexOf(this.data[n])*45;r+=Fs.indexOf(this.data[n+1]),e.put(r,11)}this.data.length%2&&e.put(Fs.indexOf(this.data[n]),6)};el.exports=vt});var rl=v(($_,nl)=>{var ih=Pe();function St(t){this.mode=ih.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}St.getBitsLength=function(e){return e*8};St.prototype.getLength=function(){return this.data.length};St.prototype.getBitsLength=function(){return St.getBitsLength(this.data.length)};St.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};nl.exports=St});var il=v((z_,sl)=>{var oh=Pe(),ah=Re();function _t(t){this.mode=oh.KANJI,this.data=t}_t.getBitsLength=function(e){return e*13};_t.prototype.getLength=function(){return this.data.length};_t.prototype.getBitsLength=function(){return _t.getBitsLength(this.data.length)};_t.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=ah.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)}};sl.exports=_t});var ol=v((V_,Hs)=>{"use strict";var rn={single_source_shortest_paths:function(t,e,n){var r={},s={};s[e]=0;var i=rn.PriorityQueue.make();i.push(e,0);for(var o,a,l,u,c,d,p,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],p=u+d,h=s[l],g=typeof s[l]>"u",(g||h>p)&&(s[l]=p,i.push(l,p),r[l]=a))}if(typeof n<"u"&&typeof s[n]>"u"){var f=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(f)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],r=e,s;r;)n.push(r),s=t[r],r=t[r];return n.reverse(),n},find_path:function(t,e,n){var r=rn.single_source_shortest_paths(t,e,n);return rn.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var e=rn.PriorityQueue,n={},r;t=t||{};for(r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);return n.queue=[],n.sorter=t.sorter||e.default_sorter,n},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var n={value:t,cost:e};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof Hs<"u"&&(Hs.exports=rn)});var hl=v(bt=>{var k=Pe(),cl=Za(),ul=tl(),dl=rl(),fl=il(),sn=Ns(),rr=Re(),lh=ol();function al(t){return unescape(encodeURIComponent(t)).length}function on(t,e,n){let r=[],s;for(;(s=t.exec(n))!==null;)r.push({data:s[0],index:s.index,mode:e,length:s[0].length});return r}function pl(t){let e=on(sn.NUMERIC,k.NUMERIC,t),n=on(sn.ALPHANUMERIC,k.ALPHANUMERIC,t),r,s;return rr.isKanjiModeEnabled()?(r=on(sn.BYTE,k.BYTE,t),s=on(sn.KANJI,k.KANJI,t)):(r=on(sn.BYTE_KANJI,k.BYTE,t),s=[]),e.concat(n,r,s).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function Us(t,e){switch(e){case k.NUMERIC:return cl.getBitsLength(t);case k.ALPHANUMERIC:return ul.getBitsLength(t);case k.KANJI:return fl.getBitsLength(t);case k.BYTE:return dl.getBitsLength(t)}}function ch(t){return t.reduce(function(e,n){let r=e.length-1>=0?e[e.length-1]:null;return r&&r.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function uh(t){let e=[];for(let n=0;n<t.length;n++){let r=t[n];switch(r.mode){case k.NUMERIC:e.push([r,{data:r.data,mode:k.ALPHANUMERIC,length:r.length},{data:r.data,mode:k.BYTE,length:r.length}]);break;case k.ALPHANUMERIC:e.push([r,{data:r.data,mode:k.BYTE,length:r.length}]);break;case k.KANJI:e.push([r,{data:r.data,mode:k.BYTE,length:al(r.data)}]);break;case k.BYTE:e.push([{data:r.data,mode:k.BYTE,length:al(r.data)}])}}return e}function dh(t,e){let n={},r={start:{}},s=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let u=o[l],c=""+i+l;a.push(c),n[c]={node:u,lastCount:0},r[c]={};for(let d=0;d<s.length;d++){let p=s[d];n[p]&&n[p].node.mode===u.mode?(r[p][c]=Us(n[p].lastCount+u.length,u.mode)-Us(n[p].lastCount,u.mode),n[p].lastCount+=u.length):(n[p]&&(n[p].lastCount=u.length),r[p][c]=Us(u.length,u.mode)+4+k.getCharCountIndicator(u.mode,e))}}s=a}for(let i=0;i<s.length;i++)r[s[i]].end=0;return{map:r,table:n}}function ll(t,e){let n,r=k.getBestModeForData(t);if(n=k.from(e,r),n!==k.BYTE&&n.bit<r.bit)throw new Error('"'+t+'" cannot be encoded with mode '+k.toString(n)+`.
10
+ Suggested mode is: `+k.toString(r));switch(n===k.KANJI&&!rr.isKanjiModeEnabled()&&(n=k.BYTE),n){case k.NUMERIC:return new cl(t);case k.ALPHANUMERIC:return new ul(t);case k.KANJI:return new fl(t);case k.BYTE:return new dl(t)}}bt.fromArray=function(e){return e.reduce(function(n,r){return typeof r=="string"?n.push(ll(r,null)):r.data&&n.push(ll(r.data,r.mode)),n},[])};bt.fromString=function(e,n){let r=pl(e,rr.isKanjiModeEnabled()),s=uh(r),i=dh(s,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 bt.fromArray(ch(a))};bt.rawSplit=function(e){return bt.fromArray(pl(e,rr.isKanjiModeEnabled()))}});var zs=v(gl=>{var ir=Re(),Ws=Kn(),fh=xa(),ph=Ea(),hh=Pa(),gh=Na(),js=Oa(),$s=Es(),mh=Ua(),sr=Va(),yh=Xa(),vh=Pe(),qs=hl();function Sh(t,e){let n=t.size,r=gh.getPositions(e);for(let s=0;s<r.length;s++){let i=r[s][0],o=r[s][1];for(let a=-1;a<=7;a++)if(!(i+a<=-1||n<=i+a))for(let l=-1;l<=7;l++)o+l<=-1||n<=o+l||(a>=0&&a<=6&&(l===0||l===6)||l>=0&&l<=6&&(a===0||a===6)||a>=2&&a<=4&&l>=2&&l<=4?t.set(i+a,o+l,!0,!0):t.set(i+a,o+l,!1,!0))}}function _h(t){let e=t.size;for(let n=8;n<e-8;n++){let r=n%2===0;t.set(n,6,r,!0),t.set(6,n,r,!0)}}function bh(t,e){let n=hh.getPositions(e);for(let r=0;r<n.length;r++){let s=n[r][0],i=n[r][1];for(let o=-2;o<=2;o++)for(let a=-2;a<=2;a++)o===-2||o===2||a===-2||a===2||o===0&&a===0?t.set(s+o,i+a,!0,!0):t.set(s+o,i+a,!1,!0)}}function wh(t,e){let n=t.size,r=sr.getEncodedBits(e),s,i,o;for(let a=0;a<18;a++)s=Math.floor(a/3),i=a%3+n-8-3,o=(r>>a&1)===1,t.set(s,i,o,!0),t.set(i,s,o,!0)}function Gs(t,e,n){let r=t.size,s=yh.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(s>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(r-15+i,8,o,!0),i<8?t.set(8,r-i-1,o,!0):i<9?t.set(8,15-i-1+1,o,!0):t.set(8,15-i-1,o,!0);t.set(r-8,8,1,!0)}function Ih(t,e){let n=t.size,r=-1,s=n-1,i=7,o=0;for(let a=n-1;a>0;a-=2)for(a===6&&a--;;){for(let l=0;l<2;l++)if(!t.isReserved(s,a-l)){let u=!1;o<e.length&&(u=(e[o]>>>i&1)===1),t.set(s,a-l,u),i--,i===-1&&(o++,i=7)}if(s+=r,s<0||n<=s){s-=r,r=-r;break}}}function Th(t,e,n){let r=new fh;n.forEach(function(l){r.put(l.mode.bit,4),r.put(l.getLength(),vh.getCharCountIndicator(l.mode,t)),l.write(r)});let s=ir.getSymbolTotalCodewords(t),i=$s.getTotalCodewordsCount(t,e),o=(s-i)*8;for(r.getLengthInBits()+4<=o&&r.put(0,4);r.getLengthInBits()%8!==0;)r.putBit(0);let a=(o-r.getLengthInBits())/8;for(let l=0;l<a;l++)r.put(l%2?17:236,8);return Ah(r,t,e)}function Ah(t,e,n){let r=ir.getSymbolTotalCodewords(e),s=$s.getTotalCodewordsCount(e,n),i=r-s,o=$s.getBlocksCount(e,n),a=r%o,l=o-a,u=Math.floor(r/o),c=Math.floor(i/o),d=c+1,p=u-c,h=new mh(p),g=0,f=new Array(o),m=new Array(o),y=0,T=new Uint8Array(t.buffer);for(let G=0;G<o;G++){let ye=G<l?c:d;f[G]=T.slice(g,g+ye),m[G]=h.encode(f[G]),g+=ye,y=Math.max(y,ye)}let A=new Uint8Array(r),w=0,C,x;for(C=0;C<y;C++)for(x=0;x<o;x++)C<f[x].length&&(A[w++]=f[x][C]);for(C=0;C<p;C++)for(x=0;x<o;x++)A[w++]=m[x][C];return A}function kh(t,e,n,r){let s;if(Array.isArray(t))s=qs.fromArray(t);else if(typeof t=="string"){let u=e;if(!u){let c=qs.rawSplit(t);u=sr.getBestVersionForData(c,n)}s=qs.fromString(t,u||40)}else throw new Error("Invalid data");let i=sr.getBestVersionForData(s,n);if(!i)throw new Error("The amount of data is too big to be stored in a QR Code");if(!e)e=i;else if(e<i)throw new Error(`
11
11
  The chosen QR Code version cannot contain this amount of data.
12
12
  Minimum version required to store current data is: `+i+`.
13
- `);let o=Ch(e,n,s),a=ir.getSymbolSize(e),l=new mh(a);return wh(l,e),Ih(l),Th(l,e),Gs(l,n,0),e>=7&&Ah(l,e),kh(l,o),isNaN(r)&&(r=js.getBestMask(l,Gs.bind(null,l,n))),js.applyMask(r,l),Gs(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:s}}ml.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=Ws.M,s,i;return typeof n<"u"&&(r=Ws.from(n.errorCorrectionLevel,Ws.M),s=sr.from(n.version),i=js.from(n.maskPattern),n.toSJISFunc&&ir.setToSJISFunction(n.toSJISFunc)),Rh(e,s,r,i)}});var Vs=v((K_,vl)=>{"use strict";var Eh=require("util"),yl=require("stream"),le=vl.exports=function(){yl.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Eh.inherits(le,yl);le.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))};le.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};le.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()))};le.prototype.destroySoon=le.prototype.end;le.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};le.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};le.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))};le.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let s=this._buffers[n++],i=Math.min(s.length,t.length-e);s.copy(r,e,0,i),e+=i,i!==s.length&&(this._buffers[--n]=s.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};le.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 Js=v(Ys=>{"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]}];Ys.getImagePasses=function(t,e){let n=[],r=t%8,s=e%8,i=(t-r)/8,o=(e-s)/8;for(let a=0;a<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]<r;d++)u++;for(let d=0;d<l.y.length&&l.y[d]<s;d++)c++;u>0&&c>0&&n.push({width:u,height:c,index:a})}return n};Ys.getInterlaceIterator=function(t){return function(e,n,r){let s=e%Le[r].x.length,i=(e-s)/Le[r].x.length*8+Le[r].x[s],o=n%Le[r].y.length,a=(n-o)/Le[r].y.length*8+Le[r].y[o];return i*4+a*t*4}}});var Ks=v((Q_,Sl)=>{"use strict";Sl.exports=function(e,n,r){let s=e+n-r,i=Math.abs(s-e),o=Math.abs(s-n),a=Math.abs(s-r);return i<=o&&i<=a?e:o<=a?n:r}});var Xs=v((Z_,bl)=>{"use strict";var Ph=Js(),Mh=Ks();function _l(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var wt=bl.exports=function(t,e){let n=t.width,r=t.height,s=t.interlace,i=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],s){let a=Ph.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:_l(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:_l(n,i,o),height:r,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};wt.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};wt.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,s=r-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>s?e[i-r]:0;e[i]=o+a}};wt.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let s=0;s<n;s++){let i=t[1+s],o=r?r[s]:0;e[s]=i+o}};wt.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>s?e[o-r]:0,c=Math.floor((u+l)/2);e[o]=a+c}};wt.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>s?e[o-r]:0,c=o>s&&i?i[o-r]:0,d=Mh(u,l,c);e[o]=a+d}};wt.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],s=r.byteWidth;if(e===0)n=t.slice(1,s+1);else switch(n=Buffer.alloc(s),e){case 1:this._unFilterType1(t,n,s);break;case 2:this._unFilterType2(t,n,s);break;case 3:this._unFilterType3(t,n,s);break;case 4:this._unFilterType4(t,n,s);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Tl=v((eb,Il)=>{"use strict";var Lh=require("util"),wl=Vs(),Nh=Xs(),Oh=Il.exports=function(t){wl.call(this);let e=[],n=this;this._filter=new Nh(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Lh.inherits(Oh,wl)});var It=v((tb,Al)=>{"use strict";Al.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 ei=v((nb,kl)=>{"use strict";var Qs=[];(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;Qs[t]=e}})();var Zs=kl.exports=function(){this._crc=-1};Zs.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Qs[(this._crc^t[e])&255]^this._crc>>>8;return!0};Zs.prototype.crc32=function(){return this._crc^-1};Zs.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Qs[(e^t[n])&255]^e>>>8;return e^-1}});var ti=v((rb,Cl)=>{"use strict";var H=It(),Bh=ei(),q=Cl.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[H.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[H.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[H.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[H.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[H.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[H.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(){}};q.prototype.start=function(){this.read(H.PNG_SIGNATURE.length,this._parseSignature.bind(this))};q.prototype._parseSignature=function(t){let e=H.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))};q.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let i=4;i<8;i++)r+=String.fromCharCode(t[i]);let s=!!(t[4]&32);if(!this._hasIHDR&&n!==H.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Bh,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!s){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};q.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};q.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};q.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))};q.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};q.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],s=t[9],i=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(s in H.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(i!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=s;let l=H.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(s&H.COLORTYPE_PALETTE),color:!!(s&H.COLORTYPE_COLOR),alpha:!!(s&H.COLORTYPE_ALPHA),bpp:l,colorType:s}),this._handleChunkEnd()};q.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};q.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()};q.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};q.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===H.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===H.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===H.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};q.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};q.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/H.GAMMA_DIVISION),this._handleChunkEnd()};q.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};q.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===H.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()};q.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};q.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ni=v(Rl=>{"use strict";var xl=Js(),Dh=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Fh=[function(){},function(t,e,n,r){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Hh(t,e){let n=[],r=0;function s(){if(r===t.length)throw new Error("Ran out of data");let i=t[r];r++;let o,a,l,u,c,d,p,h;switch(e){default:throw new Error("unrecognised depth");case 16:p=t[r],r++,n.push((i<<8)+p);break;case 4:p=i&15,h=i>>4,n.push(h,p);break;case 2:c=i&3,d=i>>2&3,p=i>>4&3,h=i>>6&3,n.push(h,p,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,p=i>>6&1,h=i>>7&1,n.push(h,p,d,c,u,l,a,o);break}}return{get:function(i){for(;n.length<i;)s();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function Uh(t,e,n,r,s,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);Dh[r](e,s,d,i),i+=r}return i}function Wh(t,e,n,r,s,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=s.get(r),p=n(c,u,l);Fh[r](e,d,p,i)}s.resetAfterLine()}}Rl.dataToBitMap=function(t,e){let n=e.width,r=e.height,s=e.depth,i=e.bpp,o=e.interlace,a;s!==8&&(a=Hh(t,s));let l;s<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let u=Math.pow(2,s)-1,c=0,d,p;if(o)d=xl.getImagePasses(n,r),p=xl.getInterlaceIterator(n,r);else{let h=0;p=function(){let g=h;return h+=4,g},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)s===8?c=Uh(d[h],l,p,i,t,c):Wh(d[h],l,p,i,a,u);if(s===8){if(c!==t.length)throw new Error("extra data found")}else a.end();return l}});var ri=v((ib,El)=>{"use strict";function qh(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=s[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let u=0;u<4;u++)e[i+u]=l[u];i+=4}}function Gh(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(s.length===1?s[0]===t[i]&&(l=!0):s[0]===t[i]&&s[1]===t[i+1]&&s[2]===t[i+2]&&(l=!0),l)for(let u=0;u<4;u++)e[i+u]=0;i+=4}}function jh(t,e,n,r,s){let i=255,o=Math.pow(2,s)-1,a=0;for(let l=0;l<r;l++)for(let 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}}El.exports=function(t,e){let n=e.depth,r=e.width,s=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?qh(t,l,r,s,a):(o&&Gh(t,l,r,s,o),n!==8&&(n===16&&(l=Buffer.alloc(r*s*4)),jh(t,l,r,s,n))),l}});var Ll=v((ob,Ml)=>{"use strict";var $h=require("util"),si=require("zlib"),Pl=Vs(),zh=Tl(),Vh=ti(),Yh=ni(),Jh=ri(),ge=Ml.exports=function(t){Pl.call(this),this._parser=new Vh(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()};$h.inherits(ge,Pl);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=si.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,si.Z_MIN_CHUNK);this._inflate=si.createInflate({chunkSize:r});let s=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){s&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){s&&(a.length>s&&(a=a.slice(0,s)),s-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};ge.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new zh(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=Yh.dataToBitMap(t,this._bitmapInfo);e=Jh(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var Ol=v((ab,Nl)=>{"use strict";var re=It();Nl.exports=function(t,e,n,r){let s=[re.COLORTYPE_COLOR_ALPHA,re.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let f=new ArrayBuffer(2);return new DataView(f).setInt16(0,256,!0),new Int16Array(f)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let i=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=re.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=re.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let u=Buffer.alloc(e*n*l),c=0,d=0,p=r.bgColor||{};p.red===void 0&&(p.red=o),p.green===void 0&&(p.green=o),p.blue===void 0&&(p.blue=o);function h(){let g,f,m,y=o;switch(r.inputColorType){case re.COLORTYPE_COLOR_ALPHA:y=i[c+3],g=i[c],f=i[c+1],m=i[c+2];break;case re.COLORTYPE_COLOR:g=i[c],f=i[c+1],m=i[c+2];break;case re.COLORTYPE_ALPHA:y=i[c+1],g=i[c],f=g,m=g;break;case re.COLORTYPE_GRAYSCALE:g=i[c],f=g,m=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(s||(y/=o,g=Math.min(Math.max(Math.round((1-y)*p.red+y*g),0),o),f=Math.min(Math.max(Math.round((1-y)*p.green+y*f),0),o),m=Math.min(Math.max(Math.round((1-y)*p.blue+y*m),0),o))),{red:g,green:f,blue:m,alpha:y}}for(let g=0;g<n;g++)for(let f=0;f<e;f++){let m=h(i,c);switch(r.colorType){case re.COLORTYPE_COLOR_ALPHA:case re.COLORTYPE_COLOR:r.bitDepth===8?(u[d]=m.red,u[d+1]=m.green,u[d+2]=m.blue,s&&(u[d+3]=m.alpha)):(u.writeUInt16BE(m.red,d),u.writeUInt16BE(m.green,d+2),u.writeUInt16BE(m.blue,d+4),s&&u.writeUInt16BE(m.alpha,d+6));break;case re.COLORTYPE_ALPHA:case re.COLORTYPE_GRAYSCALE:{let y=(m.red+m.green+m.blue)/3;r.bitDepth===8?(u[d]=y,s&&(u[d+1]=m.alpha)):(u.writeUInt16BE(y,d),s&&u.writeUInt16BE(m.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}c+=a,d+=l}return u}});var Fl=v((lb,Dl)=>{"use strict";var Bl=Ks();function Kh(t,e,n,r,s){for(let i=0;i<n;i++)r[s+i]=t[e+i]}function Xh(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++)r+=Math.abs(t[i]);return r}function Qh(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;r[s+o]=l}}function Zh(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=t[e+i]-o;s+=Math.abs(a)}return s}function eg(t,e,n,r,s){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;r[s+i]=a}}function tg(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++){let o=e>0?t[i-n]:0,a=t[i]-o;r+=Math.abs(a)}return r}function ng(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,u=t[e+o]-(a+l>>1);r[s+o]=u}}function rg(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);s+=Math.abs(l)}return s}function sg(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,u=e>0&&o>=i?t[e+o-(n+i)]:0,c=t[e+o]-Bl(a,l,u);r[s+o]=c}}function ig(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=r?t[e+i-(n+r)]:0,u=t[e+i]-Bl(o,a,l);s+=Math.abs(u)}return s}var og={0:Kh,1:Qh,2:eg,3:ng,4:sg},ag={0:Xh,1:Zh,2:tg,3:rg,4:ig};Dl.exports=function(t,e,n,r,s){let i;if(!("filterType"in r)||r.filterType===-1)i=[0,1,2,3,4];else if(typeof r.filterType=="number")i=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(s*=2);let o=e*s,a=0,l=0,u=Buffer.alloc((o+1)*n),c=i[0];for(let d=0;d<n;d++){if(i.length>1){let p=1/0;for(let h=0;h<i.length;h++){let g=ag[i[h]](t,l,o,s);g<p&&(c=i[h],p=g)}}u[a]=c,a++,og[c](t,l,o,u,a,s),a+=o,l+=o}return u}});var ii=v((cb,Hl)=>{"use strict";var z=It(),lg=ei(),cg=Ol(),ug=Fl(),dg=require("zlib"),Ne=Hl.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||dg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:z.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:z.COLORTYPE_COLOR_ALPHA,[z.COLORTYPE_GRAYSCALE,z.COLORTYPE_COLOR,z.COLORTYPE_COLOR_ALPHA,z.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([z.COLORTYPE_GRAYSCALE,z.COLORTYPE_COLOR,z.COLORTYPE_COLOR_ALPHA,z.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 r=cg(t,e,n,this._options),s=z.COLORTYPE_TO_BPP_MAP[this._options.colorType];return ug(r,e,n,this._options,s)};Ne.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(lg.crc32(r.slice(4,r.length-4)),r.length-4),r};Ne.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*z.GAMMA_DIVISION),0),this._packChunk(z.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(z.TYPE_IHDR,n)};Ne.prototype.packIDAT=function(t){return this._packChunk(z.TYPE_IDAT,t)};Ne.prototype.packIEND=function(){return this._packChunk(z.TYPE_IEND,null)}});var Gl=v((ub,ql)=>{"use strict";var fg=require("util"),Ul=require("stream"),pg=It(),hg=ii(),Wl=ql.exports=function(t){Ul.call(this);let e=t||{};this._packer=new hg(e),this._deflate=this._packer.createDeflate(),this.readable=!0};fg.inherits(Wl,Ul);Wl.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(pg.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let s=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(i){this.emit("data",this._packer.packIDAT(i))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(s)}});var Jl=v((an,Yl)=>{"use strict";var jl=require("assert").ok,Tt=require("zlib"),gg=require("util"),$l=require("buffer").kMaxLength;function Ye(t){if(!(this instanceof Ye))return new Ye(t);t&&t.chunkSize<Tt.Z_MIN_CHUNK&&(t.chunkSize=Tt.Z_MIN_CHUNK),Tt.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 mg(t){return new Ye(t)}function zl(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 Tt.Inflate._processChunk.call(this,t,e,n);let r=this,s=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],u=0,c;this.on("error",function(g){c=g});function d(g,f){if(r._hadError)return;let m=i-f;if(jl(m>=0,"have should not go down"),m>0){let y=r._buffer.slice(r._offset,r._offset+m);if(r._offset+=m,y.length>o&&(y=y.slice(0,o)),l.push(y),u+=y.length,o-=y.length,o===0)return!1}return(f===0||r._offset>=r._chunkSize)&&(i=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),f===0?(a+=s-g,s=g,!0):!1}jl(this._handle,"zlib binding closed");let p;do p=this._handle.writeSync(e,t,a,s,this._buffer,this._offset,i),p=p||this._writeState;while(!this._hadError&&d(p[0],p[1]));if(this._hadError)throw c;if(u>=$l)throw zl(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+$l.toString(16)+" bytes");let h=Buffer.concat(l,u);return zl(this),h};gg.inherits(Ye,Tt.Inflate);function yg(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=Tt.Z_FINISH),t._processChunk(e,n)}function Vl(t,e){return yg(new Ye(e),t)}Yl.exports=an=Vl;an.Inflate=Ye;an.createInflate=mg;an.inflateSync=Vl});var oi=v((db,Xl)=>{"use strict";var Kl=Xl.exports=function(t){this._buffer=t,this._reads=[]};Kl.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Kl.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 Zl=v(Ql=>{"use strict";var vg=oi(),Sg=Xs();Ql.process=function(t,e){let n=[],r=new vg(t);return new Sg(e,{read:r.read.bind(r),write:function(i){n.push(i)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var rc=v((pb,nc)=>{"use strict";var ec=!0,tc=require("zlib"),_g=Jl();tc.deflateSync||(ec=!1);var bg=oi(),wg=Zl(),Ig=ti(),Tg=ni(),Ag=ri();nc.exports=function(t,e){if(!ec)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(w){n=w}let s;function i(w){s=w}function o(w){s.transColor=w}function a(w){s.palette=w}function l(){s.alpha=!0}let u;function c(w){u=w}let d=[];function p(w){d.push(w)}let h=new bg(t);if(new Ig(e,{read:h.read.bind(h),error:r,metadata:i,gamma:c,palette:a,transColor:o,inflateData:p,simpleTransparency:l}).start(),h.process(),n)throw n;let f=Buffer.concat(d);d.length=0;let m;if(s.interlace)m=tc.inflateSync(f);else{let C=((s.width*s.bpp*s.depth+7>>3)+1)*s.height;m=_g(f,{chunkSize:C,maxLength:C})}if(f=null,!m||!m.length)throw new Error("bad png - invalid inflate data response");let y=wg.process(m,s);f=null;let T=Tg.dataToBitMap(y,s);y=null;let A=Ag(T,s);return s.data=A,s.gamma=u||0,s}});var ac=v((hb,oc)=>{"use strict";var sc=!0,ic=require("zlib");ic.deflateSync||(sc=!1);var kg=It(),Cg=ii();oc.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=e||{},r=new Cg(n),s=[];s.push(Buffer.from(kg.PNG_SIGNATURE)),s.push(r.packIHDR(t.width,t.height)),t.gamma&&s.push(r.packGAMA(t.gamma));let i=r.filterData(t.data,t.width,t.height),o=ic.deflateSync(i,r.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return s.push(r.packIDAT(o)),s.push(r.packIEND()),Buffer.concat(s)}});var lc=v(ai=>{"use strict";var xg=rc(),Rg=ac();ai.read=function(t,e){return xg(t,e||{})};ai.write=function(t,e){return Rg(t,e)}});var dc=v(uc=>{"use strict";var Eg=require("util"),cc=require("stream"),Pg=Ll(),Mg=Gl(),Lg=lc(),Y=uc.PNG=function(t){cc.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 Pg(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 Mg(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"))};Eg.inherits(Y,cc);Y.sync=Lg;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,r;n=function(s){this.removeListener("error",r),this.data=s,e(null,this)}.bind(this),r=function(s){this.removeListener("parsed",n),e(s,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};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,r,s,i,o,a){if(n|=0,r|=0,s|=0,i|=0,o|=0,a|=0,n>t.width||r>t.height||n+s>t.width||r+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+s>e.width||a+i>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<i;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+s<<2)};Y.prototype.bitblt=function(t,e,n,r,s,i,o){return Y.bitblt(this,t,e,n,r,s,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 r=t.width*e+n<<2;for(let s=0;s<3;s++){let i=t.data[r+s]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[r+s]=Math.round(i*255)}}t.gamma=0}};Y.prototype.adjustGamma=function(){Y.adjustGamma(this)}});var ln=v(Je=>{function fc(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}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,r=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:r,scale:r?4:s,margin:n,color:{dark:fc(e.color.dark||"#000000ff"),light:fc(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 r=Je.getScale(e,n);return Math.floor((e+n.margin*2)*r)};Je.qrToImageData=function(e,n,r){let s=n.modules.size,i=n.modules.data,o=Je.getScale(s,r),a=Math.floor((s+r.margin*2)*o),l=r.margin*o,u=[r.color.light,r.color.dark];for(let c=0;c<a;c++)for(let d=0;d<a;d++){let p=(c*a+d)*4,h=r.color.light;if(c>=l&&d>=l&&c<a-l&&d<a-l){let g=Math.floor((c-l)/o),f=Math.floor((d-l)/o);h=u[i[g*s+f]?1:0]}e[p++]=h.r,e[p++]=h.g,e[p++]=h.b,e[p]=h.a}}});var pc=v(me=>{var Ng=require("fs"),Og=dc().PNG,li=ln();me.render=function(e,n){let r=li.getOptions(n),s=r.rendererOpts,i=li.getImageWidth(e.modules.size,r);s.width=i,s.height=i;let o=new Og(s);return li.qrToImageData(o.data,e,r),o};me.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),me.renderToBuffer(e,n,function(s,i){s&&r(s);let o="data:image/png;base64,";o+=i.toString("base64"),r(null,o)})};me.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let s=me.render(e,n),i=[];s.on("error",r),s.on("data",function(o){i.push(o)}),s.on("end",function(){r(null,Buffer.concat(i))}),s.pack()};me.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=!1,o=(...l)=>{i||(i=!0,s.apply(null,l))},a=Ng.createWriteStream(e);a.on("error",o),a.on("close",o),me.renderToFileStream(a,n,r)};me.renderToFileStream=function(e,n,r){me.render(n,r).pack().pipe(e)}});var hc=v(or=>{var Bg=ln(),Dg={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},Fg={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function Hg(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}or.render=function(t,e,n){let r=Bg.getOptions(e),s=Dg;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(s=Fg);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+r.margin*2+1).join(s.WW);l=Array(r.margin/2+1).join(l+`
14
- `);let u=Array(r.margin+1).join(s.WW);a+=l;for(let c=0;c<i;c+=2){a+=u;for(let d=0;d<i;d++){let p=o[c*i+d],h=o[(c+1)*i+d];a+=Hg(p,h,s)}a+=u+`
15
- `}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};or.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),o=or.render(n,r);i.writeFile(e,o,s)}});var mc=v(gc=>{gc.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(r+3).join(o),u=Array(2).join(o);a+=l+`
13
+ `);let o=Th(e,n,s),a=ir.getSymbolSize(e),l=new ph(a);return Sh(l,e),_h(l),bh(l,e),Gs(l,n,0),e>=7&&wh(l,e),Ih(l,o),isNaN(r)&&(r=js.getBestMask(l,Gs.bind(null,l,n))),js.applyMask(r,l),Gs(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:s}}gl.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=Ws.M,s,i;return typeof n<"u"&&(r=Ws.from(n.errorCorrectionLevel,Ws.M),s=sr.from(n.version),i=js.from(n.maskPattern),n.toSJISFunc&&ir.setToSJISFunction(n.toSJISFunc)),kh(e,s,r,i)}});var Vs=v((K_,yl)=>{"use strict";var Ch=require("util"),ml=require("stream"),le=yl.exports=function(){ml.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Ch.inherits(le,ml);le.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))};le.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};le.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()))};le.prototype.destroySoon=le.prototype.end;le.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};le.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};le.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))};le.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let s=this._buffers[n++],i=Math.min(s.length,t.length-e);s.copy(r,e,0,i),e+=i,i!==s.length&&(this._buffers[--n]=s.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};le.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 Js=v(Ys=>{"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]}];Ys.getImagePasses=function(t,e){let n=[],r=t%8,s=e%8,i=(t-r)/8,o=(e-s)/8;for(let a=0;a<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]<r;d++)u++;for(let d=0;d<l.y.length&&l.y[d]<s;d++)c++;u>0&&c>0&&n.push({width:u,height:c,index:a})}return n};Ys.getInterlaceIterator=function(t){return function(e,n,r){let s=e%Le[r].x.length,i=(e-s)/Le[r].x.length*8+Le[r].x[s],o=n%Le[r].y.length,a=(n-o)/Le[r].y.length*8+Le[r].y[o];return i*4+a*t*4}}});var Ks=v((Q_,vl)=>{"use strict";vl.exports=function(e,n,r){let s=e+n-r,i=Math.abs(s-e),o=Math.abs(s-n),a=Math.abs(s-r);return i<=o&&i<=a?e:o<=a?n:r}});var Xs=v((Z_,_l)=>{"use strict";var xh=Js(),Rh=Ks();function Sl(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var wt=_l.exports=function(t,e){let n=t.width,r=t.height,s=t.interlace,i=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],s){let a=xh.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Sl(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Sl(n,i,o),height:r,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};wt.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};wt.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,s=r-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>s?e[i-r]:0;e[i]=o+a}};wt.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let s=0;s<n;s++){let i=t[1+s],o=r?r[s]:0;e[s]=i+o}};wt.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>s?e[o-r]:0,c=Math.floor((u+l)/2);e[o]=a+c}};wt.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,u=o>s?e[o-r]:0,c=o>s&&i?i[o-r]:0,d=Rh(u,l,c);e[o]=a+d}};wt.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],s=r.byteWidth;if(e===0)n=t.slice(1,s+1);else switch(n=Buffer.alloc(s),e){case 1:this._unFilterType1(t,n,s);break;case 2:this._unFilterType2(t,n,s);break;case 3:this._unFilterType3(t,n,s);break;case 4:this._unFilterType4(t,n,s);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Il=v((eb,wl)=>{"use strict";var Eh=require("util"),bl=Vs(),Ph=Xs(),Mh=wl.exports=function(t){bl.call(this);let e=[],n=this;this._filter=new Ph(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Eh.inherits(Mh,bl)});var It=v((tb,Tl)=>{"use strict";Tl.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 ei=v((nb,Al)=>{"use strict";var Qs=[];(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;Qs[t]=e}})();var Zs=Al.exports=function(){this._crc=-1};Zs.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Qs[(this._crc^t[e])&255]^this._crc>>>8;return!0};Zs.prototype.crc32=function(){return this._crc^-1};Zs.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Qs[(e^t[n])&255]^e>>>8;return e^-1}});var ti=v((rb,kl)=>{"use strict";var H=It(),Lh=ei(),q=kl.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[H.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[H.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[H.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[H.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[H.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[H.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(){}};q.prototype.start=function(){this.read(H.PNG_SIGNATURE.length,this._parseSignature.bind(this))};q.prototype._parseSignature=function(t){let e=H.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))};q.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let i=4;i<8;i++)r+=String.fromCharCode(t[i]);let s=!!(t[4]&32);if(!this._hasIHDR&&n!==H.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Lh,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!s){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};q.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};q.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};q.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))};q.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};q.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],s=t[9],i=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(s in H.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(i!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=s;let l=H.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(s&H.COLORTYPE_PALETTE),color:!!(s&H.COLORTYPE_COLOR),alpha:!!(s&H.COLORTYPE_ALPHA),bpp:l,colorType:s}),this._handleChunkEnd()};q.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};q.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()};q.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};q.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===H.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===H.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===H.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};q.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};q.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/H.GAMMA_DIVISION),this._handleChunkEnd()};q.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};q.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===H.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()};q.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};q.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ni=v(xl=>{"use strict";var Cl=Js(),Nh=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Oh=[function(){},function(t,e,n,r){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Bh(t,e){let n=[],r=0;function s(){if(r===t.length)throw new Error("Ran out of data");let i=t[r];r++;let o,a,l,u,c,d,p,h;switch(e){default:throw new Error("unrecognised depth");case 16:p=t[r],r++,n.push((i<<8)+p);break;case 4:p=i&15,h=i>>4,n.push(h,p);break;case 2:c=i&3,d=i>>2&3,p=i>>4&3,h=i>>6&3,n.push(h,p,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,p=i>>6&1,h=i>>7&1,n.push(h,p,d,c,u,l,a,o);break}}return{get:function(i){for(;n.length<i;)s();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function Dh(t,e,n,r,s,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);Nh[r](e,s,d,i),i+=r}return i}function Fh(t,e,n,r,s,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=s.get(r),p=n(c,u,l);Oh[r](e,d,p,i)}s.resetAfterLine()}}xl.dataToBitMap=function(t,e){let n=e.width,r=e.height,s=e.depth,i=e.bpp,o=e.interlace,a;s!==8&&(a=Bh(t,s));let l;s<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let u=Math.pow(2,s)-1,c=0,d,p;if(o)d=Cl.getImagePasses(n,r),p=Cl.getInterlaceIterator(n,r);else{let h=0;p=function(){let g=h;return h+=4,g},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)s===8?c=Dh(d[h],l,p,i,t,c):Fh(d[h],l,p,i,a,u);if(s===8){if(c!==t.length)throw new Error("extra data found")}else a.end();return l}});var ri=v((ib,Rl)=>{"use strict";function Hh(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=s[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let u=0;u<4;u++)e[i+u]=l[u];i+=4}}function Uh(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(s.length===1?s[0]===t[i]&&(l=!0):s[0]===t[i]&&s[1]===t[i+1]&&s[2]===t[i+2]&&(l=!0),l)for(let u=0;u<4;u++)e[i+u]=0;i+=4}}function Wh(t,e,n,r,s){let i=255,o=Math.pow(2,s)-1,a=0;for(let l=0;l<r;l++)for(let 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}}Rl.exports=function(t,e){let n=e.depth,r=e.width,s=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?Hh(t,l,r,s,a):(o&&Uh(t,l,r,s,o),n!==8&&(n===16&&(l=Buffer.alloc(r*s*4)),Wh(t,l,r,s,n))),l}});var Ml=v((ob,Pl)=>{"use strict";var qh=require("util"),si=require("zlib"),El=Vs(),Gh=Il(),jh=ti(),$h=ni(),zh=ri(),ge=Pl.exports=function(t){El.call(this),this._parser=new jh(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()};qh.inherits(ge,El);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=si.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,si.Z_MIN_CHUNK);this._inflate=si.createInflate({chunkSize:r});let s=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){s&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){s&&(a.length>s&&(a=a.slice(0,s)),s-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};ge.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Gh(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=$h.dataToBitMap(t,this._bitmapInfo);e=zh(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var Nl=v((ab,Ll)=>{"use strict";var re=It();Ll.exports=function(t,e,n,r){let s=[re.COLORTYPE_COLOR_ALPHA,re.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let f=new ArrayBuffer(2);return new DataView(f).setInt16(0,256,!0),new Int16Array(f)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let i=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=re.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=re.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let u=Buffer.alloc(e*n*l),c=0,d=0,p=r.bgColor||{};p.red===void 0&&(p.red=o),p.green===void 0&&(p.green=o),p.blue===void 0&&(p.blue=o);function h(){let g,f,m,y=o;switch(r.inputColorType){case re.COLORTYPE_COLOR_ALPHA:y=i[c+3],g=i[c],f=i[c+1],m=i[c+2];break;case re.COLORTYPE_COLOR:g=i[c],f=i[c+1],m=i[c+2];break;case re.COLORTYPE_ALPHA:y=i[c+1],g=i[c],f=g,m=g;break;case re.COLORTYPE_GRAYSCALE:g=i[c],f=g,m=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(s||(y/=o,g=Math.min(Math.max(Math.round((1-y)*p.red+y*g),0),o),f=Math.min(Math.max(Math.round((1-y)*p.green+y*f),0),o),m=Math.min(Math.max(Math.round((1-y)*p.blue+y*m),0),o))),{red:g,green:f,blue:m,alpha:y}}for(let g=0;g<n;g++)for(let f=0;f<e;f++){let m=h(i,c);switch(r.colorType){case re.COLORTYPE_COLOR_ALPHA:case re.COLORTYPE_COLOR:r.bitDepth===8?(u[d]=m.red,u[d+1]=m.green,u[d+2]=m.blue,s&&(u[d+3]=m.alpha)):(u.writeUInt16BE(m.red,d),u.writeUInt16BE(m.green,d+2),u.writeUInt16BE(m.blue,d+4),s&&u.writeUInt16BE(m.alpha,d+6));break;case re.COLORTYPE_ALPHA:case re.COLORTYPE_GRAYSCALE:{let y=(m.red+m.green+m.blue)/3;r.bitDepth===8?(u[d]=y,s&&(u[d+1]=m.alpha)):(u.writeUInt16BE(y,d),s&&u.writeUInt16BE(m.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}c+=a,d+=l}return u}});var Dl=v((lb,Bl)=>{"use strict";var Ol=Ks();function Vh(t,e,n,r,s){for(let i=0;i<n;i++)r[s+i]=t[e+i]}function Yh(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++)r+=Math.abs(t[i]);return r}function Jh(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;r[s+o]=l}}function Kh(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=t[e+i]-o;s+=Math.abs(a)}return s}function Xh(t,e,n,r,s){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;r[s+i]=a}}function Qh(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++){let o=e>0?t[i-n]:0,a=t[i]-o;r+=Math.abs(a)}return r}function Zh(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,u=t[e+o]-(a+l>>1);r[s+o]=u}}function eg(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);s+=Math.abs(l)}return s}function tg(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,u=e>0&&o>=i?t[e+o-(n+i)]:0,c=t[e+o]-Ol(a,l,u);r[s+o]=c}}function ng(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=r?t[e+i-(n+r)]:0,u=t[e+i]-Ol(o,a,l);s+=Math.abs(u)}return s}var rg={0:Vh,1:Jh,2:Xh,3:Zh,4:tg},sg={0:Yh,1:Kh,2:Qh,3:eg,4:ng};Bl.exports=function(t,e,n,r,s){let i;if(!("filterType"in r)||r.filterType===-1)i=[0,1,2,3,4];else if(typeof r.filterType=="number")i=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(s*=2);let o=e*s,a=0,l=0,u=Buffer.alloc((o+1)*n),c=i[0];for(let d=0;d<n;d++){if(i.length>1){let p=1/0;for(let h=0;h<i.length;h++){let g=sg[i[h]](t,l,o,s);g<p&&(c=i[h],p=g)}}u[a]=c,a++,rg[c](t,l,o,u,a,s),a+=o,l+=o}return u}});var ii=v((cb,Fl)=>{"use strict";var z=It(),ig=ei(),og=Nl(),ag=Dl(),lg=require("zlib"),Ne=Fl.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:z.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:z.COLORTYPE_COLOR_ALPHA,[z.COLORTYPE_GRAYSCALE,z.COLORTYPE_COLOR,z.COLORTYPE_COLOR_ALPHA,z.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([z.COLORTYPE_GRAYSCALE,z.COLORTYPE_COLOR,z.COLORTYPE_COLOR_ALPHA,z.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 r=og(t,e,n,this._options),s=z.COLORTYPE_TO_BPP_MAP[this._options.colorType];return ag(r,e,n,this._options,s)};Ne.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(ig.crc32(r.slice(4,r.length-4)),r.length-4),r};Ne.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*z.GAMMA_DIVISION),0),this._packChunk(z.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(z.TYPE_IHDR,n)};Ne.prototype.packIDAT=function(t){return this._packChunk(z.TYPE_IDAT,t)};Ne.prototype.packIEND=function(){return this._packChunk(z.TYPE_IEND,null)}});var ql=v((ub,Wl)=>{"use strict";var cg=require("util"),Hl=require("stream"),ug=It(),dg=ii(),Ul=Wl.exports=function(t){Hl.call(this);let e=t||{};this._packer=new dg(e),this._deflate=this._packer.createDeflate(),this.readable=!0};cg.inherits(Ul,Hl);Ul.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(ug.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let s=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(i){this.emit("data",this._packer.packIDAT(i))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(s)}});var Yl=v((an,Vl)=>{"use strict";var Gl=require("assert").ok,Tt=require("zlib"),fg=require("util"),jl=require("buffer").kMaxLength;function Ye(t){if(!(this instanceof Ye))return new Ye(t);t&&t.chunkSize<Tt.Z_MIN_CHUNK&&(t.chunkSize=Tt.Z_MIN_CHUNK),Tt.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 pg(t){return new Ye(t)}function $l(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 Tt.Inflate._processChunk.call(this,t,e,n);let r=this,s=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],u=0,c;this.on("error",function(g){c=g});function d(g,f){if(r._hadError)return;let m=i-f;if(Gl(m>=0,"have should not go down"),m>0){let y=r._buffer.slice(r._offset,r._offset+m);if(r._offset+=m,y.length>o&&(y=y.slice(0,o)),l.push(y),u+=y.length,o-=y.length,o===0)return!1}return(f===0||r._offset>=r._chunkSize)&&(i=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),f===0?(a+=s-g,s=g,!0):!1}Gl(this._handle,"zlib binding closed");let p;do p=this._handle.writeSync(e,t,a,s,this._buffer,this._offset,i),p=p||this._writeState;while(!this._hadError&&d(p[0],p[1]));if(this._hadError)throw c;if(u>=jl)throw $l(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+jl.toString(16)+" bytes");let h=Buffer.concat(l,u);return $l(this),h};fg.inherits(Ye,Tt.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=Tt.Z_FINISH),t._processChunk(e,n)}function zl(t,e){return hg(new Ye(e),t)}Vl.exports=an=zl;an.Inflate=Ye;an.createInflate=pg;an.inflateSync=zl});var oi=v((db,Kl)=>{"use strict";var Jl=Kl.exports=function(t){this._buffer=t,this._reads=[]};Jl.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Jl.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 Ql=v(Xl=>{"use strict";var gg=oi(),mg=Xs();Xl.process=function(t,e){let n=[],r=new gg(t);return new mg(e,{read:r.read.bind(r),write:function(i){n.push(i)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var nc=v((pb,tc)=>{"use strict";var Zl=!0,ec=require("zlib"),yg=Yl();ec.deflateSync||(Zl=!1);var vg=oi(),Sg=Ql(),_g=ti(),bg=ni(),wg=ri();tc.exports=function(t,e){if(!Zl)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(w){n=w}let s;function i(w){s=w}function o(w){s.transColor=w}function a(w){s.palette=w}function l(){s.alpha=!0}let u;function c(w){u=w}let d=[];function p(w){d.push(w)}let h=new vg(t);if(new _g(e,{read:h.read.bind(h),error:r,metadata:i,gamma:c,palette:a,transColor:o,inflateData:p,simpleTransparency:l}).start(),h.process(),n)throw n;let f=Buffer.concat(d);d.length=0;let m;if(s.interlace)m=ec.inflateSync(f);else{let C=((s.width*s.bpp*s.depth+7>>3)+1)*s.height;m=yg(f,{chunkSize:C,maxLength:C})}if(f=null,!m||!m.length)throw new Error("bad png - invalid inflate data response");let y=Sg.process(m,s);f=null;let T=bg.dataToBitMap(y,s);y=null;let A=wg(T,s);return s.data=A,s.gamma=u||0,s}});var oc=v((hb,ic)=>{"use strict";var rc=!0,sc=require("zlib");sc.deflateSync||(rc=!1);var Ig=It(),Tg=ii();ic.exports=function(t,e){if(!rc)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n=e||{},r=new Tg(n),s=[];s.push(Buffer.from(Ig.PNG_SIGNATURE)),s.push(r.packIHDR(t.width,t.height)),t.gamma&&s.push(r.packGAMA(t.gamma));let i=r.filterData(t.data,t.width,t.height),o=sc.deflateSync(i,r.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return s.push(r.packIDAT(o)),s.push(r.packIEND()),Buffer.concat(s)}});var ac=v(ai=>{"use strict";var Ag=nc(),kg=oc();ai.read=function(t,e){return Ag(t,e||{})};ai.write=function(t,e){return kg(t,e)}});var uc=v(cc=>{"use strict";var Cg=require("util"),lc=require("stream"),xg=Ml(),Rg=ql(),Eg=ac(),Y=cc.PNG=function(t){lc.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 xg(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 Rg(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"))};Cg.inherits(Y,lc);Y.sync=Eg;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,r;n=function(s){this.removeListener("error",r),this.data=s,e(null,this)}.bind(this),r=function(s){this.removeListener("parsed",n),e(s,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};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,r,s,i,o,a){if(n|=0,r|=0,s|=0,i|=0,o|=0,a|=0,n>t.width||r>t.height||n+s>t.width||r+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+s>e.width||a+i>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<i;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+s<<2)};Y.prototype.bitblt=function(t,e,n,r,s,i,o){return Y.bitblt(this,t,e,n,r,s,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 r=t.width*e+n<<2;for(let s=0;s<3;s++){let i=t.data[r+s]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[r+s]=Math.round(i*255)}}t.gamma=0}};Y.prototype.adjustGamma=function(){Y.adjustGamma(this)}});var ln=v(Je=>{function dc(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}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,r=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:r,scale:r?4:s,margin:n,color:{dark:dc(e.color.dark||"#000000ff"),light:dc(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 r=Je.getScale(e,n);return Math.floor((e+n.margin*2)*r)};Je.qrToImageData=function(e,n,r){let s=n.modules.size,i=n.modules.data,o=Je.getScale(s,r),a=Math.floor((s+r.margin*2)*o),l=r.margin*o,u=[r.color.light,r.color.dark];for(let c=0;c<a;c++)for(let d=0;d<a;d++){let p=(c*a+d)*4,h=r.color.light;if(c>=l&&d>=l&&c<a-l&&d<a-l){let g=Math.floor((c-l)/o),f=Math.floor((d-l)/o);h=u[i[g*s+f]?1:0]}e[p++]=h.r,e[p++]=h.g,e[p++]=h.b,e[p]=h.a}}});var fc=v(me=>{var Pg=require("fs"),Mg=uc().PNG,li=ln();me.render=function(e,n){let r=li.getOptions(n),s=r.rendererOpts,i=li.getImageWidth(e.modules.size,r);s.width=i,s.height=i;let o=new Mg(s);return li.qrToImageData(o.data,e,r),o};me.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),me.renderToBuffer(e,n,function(s,i){s&&r(s);let o="data:image/png;base64,";o+=i.toString("base64"),r(null,o)})};me.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let s=me.render(e,n),i=[];s.on("error",r),s.on("data",function(o){i.push(o)}),s.on("end",function(){r(null,Buffer.concat(i))}),s.pack()};me.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=!1,o=(...l)=>{i||(i=!0,s.apply(null,l))},a=Pg.createWriteStream(e);a.on("error",o),a.on("close",o),me.renderToFileStream(a,n,r)};me.renderToFileStream=function(e,n,r){me.render(n,r).pack().pipe(e)}});var pc=v(or=>{var Lg=ln(),Ng={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},Og={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function Bg(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}or.render=function(t,e,n){let r=Lg.getOptions(e),s=Ng;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(s=Og);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+r.margin*2+1).join(s.WW);l=Array(r.margin/2+1).join(l+`
14
+ `);let u=Array(r.margin+1).join(s.WW);a+=l;for(let c=0;c<i;c+=2){a+=u;for(let d=0;d<i;d++){let p=o[c*i+d],h=o[(c+1)*i+d];a+=Bg(p,h,s)}a+=u+`
15
+ `}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};or.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),o=or.render(n,r);i.writeFile(e,o,s)}});var gc=v(hc=>{hc.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(r+3).join(o),u=Array(2).join(o);a+=l+`
16
16
  `;for(let c=0;c<r;++c){a+=o;for(let d=0;d<r;d++)a+=s[c*r+d]?i:o;a+=u+`
17
17
  `}return a+=l+`
18
- `,typeof n=="function"&&n(null,a),a}});var _c=v(Sc=>{var Ug="\x1B[47m",Wg="\x1B[40m",ci="\x1B[37m",ui="\x1B[30m",Ke="\x1B[0m",qg=Ug+ui,Gg=Wg+ci,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"}},yc=function(t,e,n,r){let s=e+1;if(n>=s||r>=s||r<-1||n<-1)return"0";if(n>=e||r>=e||r<0||n<0)return"1";let i=r*e+n;return t[i]?"2":"1"},vc=function(t,e,n,r){return yc(t,e,n,r)+yc(t,e,n,r+1)};Sc.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?Gg:qg,u=jg(o,i?ui:ci,i?ci:ui),c=Ke+`
19
- `+o,d=o;for(let p=-1;p<r+1;p+=2){for(let h=-1;h<r;h++)d+=u[vc(s,r,h,p)];d+=u[vc(s,r,r,p)]+c}return d+=Ke,typeof n=="function"&&n(null,d),d}});var wc=v(bc=>{var $g=mc(),zg=_c();bc.render=function(t,e,n){return e&&e.small?zg.render(t,e,n):$g.render(t,e,n)}});var fi=v(Tc=>{var Vg=ln();function Ic(t,e){let n=t.a/255,r=e+'="'+t.hex+'"';return n<1?r+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':r}function di(t,e,n){let r=t+e;return typeof n<"u"&&(r+=" "+n),r}function Yg(t,e,n){let r="",s=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),u=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(r+=i?di("M",l+n,.5+u+n):di("m",s,0),s=0,i=!1),l+1<e&&t[a+1]||(r+=di("h",o),o=0)):s++}return r}Tc.render=function(e,n,r){let s=Vg.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+s.margin*2,l=s.color.light.a?"<path "+Ic(s.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",u="<path "+Ic(s.color.dark,"stroke")+' d="'+Yg(o,i,s.margin)+'"/>',c='viewBox="0 0 '+a+" "+a+'"',p='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+c+' shape-rendering="crispEdges">'+l+u+`</svg>
20
- `;return typeof r=="function"&&r(null,p),p}});var Ac=v(ar=>{var Jg=fi();ar.render=Jg.render;ar.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),a='<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+ar.render(n,r);i.writeFile(e,a,s)}});var kc=v(lr=>{var pi=ln();function Kg(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 Xg(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}lr.render=function(e,n,r){let s=r,i=n;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),n||(i=Xg()),s=pi.getOptions(s);let o=pi.getImageWidth(e.modules.size,s),a=i.getContext("2d"),l=a.createImageData(o,o);return pi.qrToImageData(l.data,e,s),Kg(a,i,o),a.putImageData(l,0,0),i};lr.renderToDataURL=function(e,n,r){let s=r;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),s||(s={});let i=lr.render(e,n,s),o=s.type||"image/png",a=s.rendererOpts||{};return i.toDataURL(o,a.quality)}});var xc=v(cn=>{var Qg=Cs(),hi=zs(),Cc=kc(),Zg=fi();function gi(t,e,n,r,s){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!Qg())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(s=n,n=e,e=r=void 0):o===3&&(e.getContext&&typeof s>"u"?(s=r,r=void 0):(s=r,r=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=r=void 0):o===2&&!e.getContext&&(r=n,n=e,e=void 0),new Promise(function(l,u){try{let c=hi.create(n,r);l(t(c,e,r))}catch(c){u(c)}})}try{let l=hi.create(n,r);s(null,t(l,e,r))}catch(l){s(l)}}cn.create=hi.create;cn.toCanvas=gi.bind(null,Cc.render);cn.toDataURL=gi.bind(null,Cc.renderToDataURL);cn.toString=gi.bind(null,function(t,e,n){return Zg.render(t,n)})});var Mc=v(Oe=>{var Rc=Cs(),mi=zs(),em=pc(),Ec=hc(),tm=wc(),Pc=Ac();function un(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(Rc())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function nm(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function cr(t){switch(t){case"svg":return Pc;case"txt":case"utf8":return Ec;case"png":case"image/png":default:return em}}function rm(t){switch(t){case"svg":return Pc;case"terminal":return tm;case"utf8":default:return Ec}}function dn(t,e,n){if(!n.cb)return new Promise(function(r,s){try{let i=mi.create(e,n.opts);return t(i,n.opts,function(o,a){return o?s(o):r(a)})}catch(i){s(i)}});try{let r=mi.create(e,n.opts);return t(r,n.opts,n.cb)}catch(r){n.cb(r)}}Oe.create=mi.create;Oe.toCanvas=xc().toCanvas;Oe.toString=function(e,n,r){let s=un(e,n,r),i=s.opts?s.opts.type:void 0,o=rm(i);return dn(o.render,e,s)};Oe.toDataURL=function(e,n,r){let s=un(e,n,r),i=cr(s.opts.type);return dn(i.renderToDataURL,e,s)};Oe.toBuffer=function(e,n,r){let s=un(e,n,r),i=cr(s.opts.type);return dn(i.renderToBuffer,e,s)};Oe.toFile=function(e,n,r,s){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!Rc())throw new Error("Too few arguments provided");let i=un(n,r,s),o=i.opts.type||nm(e),l=cr(o).renderToFile.bind(null,e);return dn(l,n,i)};Oe.toFileStream=function(e,n,r){if(arguments.length<2)throw new Error("Too few arguments provided");let s=un(n,r,e.emit.bind(e,"error")),o=cr("png").renderToFileStream.bind(null,e);dn(o,n,s)}});var Nc=v((xb,Lc)=>{Lc.exports=Mc()});var af=require("http");var Hp=ct(ma(),1),Up=ct(gs(),1),Wp=ct(vs(),1),qp=ct(Yn(),1),ks=ct(Aa(),1);var oe=require("fs/promises"),lf=require("crypto"),jt=require("path"),cf=require("os"),_o=ct(Nc(),1);var Xe=require("child_process"),Ct=require("fs"),R=require("path"),hn=require("os");var yr=require("fs");var Oc=require("os"),V=require("path"),Ie=(0,V.join)((0,Oc.homedir)(),".vibelet"),ur=(0,V.join)(Ie,"logs"),dr=(0,V.join)(Ie,"data"),sm=(0,V.join)(Ie,"runtime"),Rb=(0,V.join)(sm,"current"),Bc=(0,V.join)(Ie,"identity.json"),Dc=(0,V.join)(Ie,"pairings.json"),Fc=(0,V.join)(dr,"push-subscriptions.json"),fr=(0,V.join)(dr,"sessions.json"),At=(0,V.join)(dr,"audit.jsonl"),yi=(0,V.join)(dr,"uploads"),pr=(0,V.join)(ur,"daemon.stdout.log"),hr=(0,V.join)(ur,"daemon.stderr.log"),Hc=(0,V.join)(Ie,"update-check.json"),vi=(0,V.join)(Ie,"pairing-qr.png");var gr={stdout:!1,stderr:!1};function Uc(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function im(t){return!t.destroyed&&t.writable!==!1}function Wc(t,e){if(gr[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!im(n))return gr[t]=!0,!1;try{return n.write(e,r=>{Uc(r)&&(gr[t]=!0)}),!0}catch(r){return Uc(r)&&(gr[t]=!0),!1}}function kt(t){return Wc("stdout",t)}function mr(t){return Wc("stderr",t)}var qc={debug:10,info:20,warn:30,error:40},om=process.env.VIBE_LOG_LEVEL||"info";function am(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function lm(){try{let{fstatSync:t}=require("fs");return t(1).isFile()}catch{return!1}}var jc=!am()&&!lm();if(jc)try{(0,yr.mkdirSync)(ur,{recursive:!0})}catch{}function Gc(t,e,n){if(qc[t]<qc[om])return;let r={level:t,ts:new Date().toISOString(),msg:n,...e},s=JSON.stringify(r);if(t==="error"||t==="warn"?mr(s+`
18
+ `,typeof n=="function"&&n(null,a),a}});var Sc=v(vc=>{var Dg="\x1B[47m",Fg="\x1B[40m",ci="\x1B[37m",ui="\x1B[30m",Ke="\x1B[0m",Hg=Dg+ui,Ug=Fg+ci,Wg=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"}},mc=function(t,e,n,r){let s=e+1;if(n>=s||r>=s||r<-1||n<-1)return"0";if(n>=e||r>=e||r<0||n<0)return"1";let i=r*e+n;return t[i]?"2":"1"},yc=function(t,e,n,r){return mc(t,e,n,r)+mc(t,e,n,r+1)};vc.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?Ug:Hg,u=Wg(o,i?ui:ci,i?ci:ui),c=Ke+`
19
+ `+o,d=o;for(let p=-1;p<r+1;p+=2){for(let h=-1;h<r;h++)d+=u[yc(s,r,h,p)];d+=u[yc(s,r,r,p)]+c}return d+=Ke,typeof n=="function"&&n(null,d),d}});var bc=v(_c=>{var qg=gc(),Gg=Sc();_c.render=function(t,e,n){return e&&e.small?Gg.render(t,e,n):qg.render(t,e,n)}});var fi=v(Ic=>{var jg=ln();function wc(t,e){let n=t.a/255,r=e+'="'+t.hex+'"';return n<1?r+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':r}function di(t,e,n){let r=t+e;return typeof n<"u"&&(r+=" "+n),r}function $g(t,e,n){let r="",s=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),u=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(r+=i?di("M",l+n,.5+u+n):di("m",s,0),s=0,i=!1),l+1<e&&t[a+1]||(r+=di("h",o),o=0)):s++}return r}Ic.render=function(e,n,r){let s=jg.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+s.margin*2,l=s.color.light.a?"<path "+wc(s.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",u="<path "+wc(s.color.dark,"stroke")+' d="'+$g(o,i,s.margin)+'"/>',c='viewBox="0 0 '+a+" "+a+'"',p='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+c+' shape-rendering="crispEdges">'+l+u+`</svg>
20
+ `;return typeof r=="function"&&r(null,p),p}});var Tc=v(ar=>{var zg=fi();ar.render=zg.render;ar.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),a='<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+ar.render(n,r);i.writeFile(e,a,s)}});var Ac=v(lr=>{var pi=ln();function Vg(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 Yg(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}lr.render=function(e,n,r){let s=r,i=n;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),n||(i=Yg()),s=pi.getOptions(s);let o=pi.getImageWidth(e.modules.size,s),a=i.getContext("2d"),l=a.createImageData(o,o);return pi.qrToImageData(l.data,e,s),Vg(a,i,o),a.putImageData(l,0,0),i};lr.renderToDataURL=function(e,n,r){let s=r;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),s||(s={});let i=lr.render(e,n,s),o=s.type||"image/png",a=s.rendererOpts||{};return i.toDataURL(o,a.quality)}});var Cc=v(cn=>{var Jg=Cs(),hi=zs(),kc=Ac(),Kg=fi();function gi(t,e,n,r,s){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!Jg())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(s=n,n=e,e=r=void 0):o===3&&(e.getContext&&typeof s>"u"?(s=r,r=void 0):(s=r,r=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=r=void 0):o===2&&!e.getContext&&(r=n,n=e,e=void 0),new Promise(function(l,u){try{let c=hi.create(n,r);l(t(c,e,r))}catch(c){u(c)}})}try{let l=hi.create(n,r);s(null,t(l,e,r))}catch(l){s(l)}}cn.create=hi.create;cn.toCanvas=gi.bind(null,kc.render);cn.toDataURL=gi.bind(null,kc.renderToDataURL);cn.toString=gi.bind(null,function(t,e,n){return Kg.render(t,n)})});var Pc=v(Oe=>{var xc=Cs(),mi=zs(),Xg=fc(),Rc=pc(),Qg=bc(),Ec=Tc();function un(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(xc())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function Zg(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function cr(t){switch(t){case"svg":return Ec;case"txt":case"utf8":return Rc;case"png":case"image/png":default:return Xg}}function em(t){switch(t){case"svg":return Ec;case"terminal":return Qg;case"utf8":default:return Rc}}function dn(t,e,n){if(!n.cb)return new Promise(function(r,s){try{let i=mi.create(e,n.opts);return t(i,n.opts,function(o,a){return o?s(o):r(a)})}catch(i){s(i)}});try{let r=mi.create(e,n.opts);return t(r,n.opts,n.cb)}catch(r){n.cb(r)}}Oe.create=mi.create;Oe.toCanvas=Cc().toCanvas;Oe.toString=function(e,n,r){let s=un(e,n,r),i=s.opts?s.opts.type:void 0,o=em(i);return dn(o.render,e,s)};Oe.toDataURL=function(e,n,r){let s=un(e,n,r),i=cr(s.opts.type);return dn(i.renderToDataURL,e,s)};Oe.toBuffer=function(e,n,r){let s=un(e,n,r),i=cr(s.opts.type);return dn(i.renderToBuffer,e,s)};Oe.toFile=function(e,n,r,s){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!xc())throw new Error("Too few arguments provided");let i=un(n,r,s),o=i.opts.type||Zg(e),l=cr(o).renderToFile.bind(null,e);return dn(l,n,i)};Oe.toFileStream=function(e,n,r){if(arguments.length<2)throw new Error("Too few arguments provided");let s=un(n,r,e.emit.bind(e,"error")),o=cr("png").renderToFileStream.bind(null,e);dn(o,n,s)}});var Lc=v((xb,Mc)=>{Mc.exports=Pc()});var rf=require("http");var Bp=ct(ga(),1),Dp=ct(gs(),1),Fp=ct(vs(),1),Hp=ct(Yn(),1),ks=ct(Ta(),1);var oe=require("fs/promises"),sf=require("crypto"),jt=require("path"),of=require("os"),So=ct(Lc(),1);var Xe=require("child_process"),Ct=require("fs"),E=require("path"),hn=require("os");var yr=require("fs");var Nc=require("os"),V=require("path"),Ie=(0,V.join)((0,Nc.homedir)(),".vibelet"),ur=(0,V.join)(Ie,"logs"),dr=(0,V.join)(Ie,"data"),tm=(0,V.join)(Ie,"runtime"),Rb=(0,V.join)(tm,"current"),Oc=(0,V.join)(Ie,"identity.json"),Bc=(0,V.join)(Ie,"pairings.json"),Dc=(0,V.join)(dr,"push-subscriptions.json"),fr=(0,V.join)(dr,"sessions.json"),At=(0,V.join)(dr,"audit.jsonl"),yi=(0,V.join)(dr,"uploads"),pr=(0,V.join)(ur,"daemon.stdout.log"),hr=(0,V.join)(ur,"daemon.stderr.log"),Fc=(0,V.join)(Ie,"update-check.json"),vi=(0,V.join)(Ie,"pairing-qr.png");var gr={stdout:!1,stderr:!1};function Hc(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function nm(t){return!t.destroyed&&t.writable!==!1}function Uc(t,e){if(gr[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!nm(n))return gr[t]=!0,!1;try{return n.write(e,r=>{Hc(r)&&(gr[t]=!0)}),!0}catch(r){return Hc(r)&&(gr[t]=!0),!1}}function kt(t){return Uc("stdout",t)}function mr(t){return Uc("stderr",t)}var Wc={debug:10,info:20,warn:30,error:40},rm=process.env.VIBE_LOG_LEVEL||"info";function sm(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function im(){try{let{fstatSync:t}=require("fs");return t(1).isFile()}catch{return!1}}var Gc=!sm()&&!im();if(Gc)try{(0,yr.mkdirSync)(ur,{recursive:!0})}catch{}function qc(t,e,n){if(Wc[t]<Wc[rm])return;let r={level:t,ts:new Date().toISOString(),msg:n,...e},s=JSON.stringify(r);if(t==="error"||t==="warn"?mr(s+`
21
21
  `):kt(s+`
22
- `),jc){let i=t==="error"||t==="warn"?hr:pr;try{(0,yr.appendFileSync)(i,s+`
23
- `)}catch{}}}function $c(t={}){function e(n,r,s){typeof r=="string"?Gc(n,t,r):Gc(n,{...t,...r},s)}return{debug:(n,r)=>e("debug",n,r),info:(n,r)=>e("info",n,r),warn:(n,r)=>e("warn",n,r),error:(n,r)=>e("error",n,r),child:n=>$c({...t,...n})}}var O=$c({module:"daemon"});var cm=["fnm_multishells"],um=6e4,Be=process.platform==="win32",dm=300*1e3,fm=900*1e3,pm=O.child({module:"config"});function se(t){return cm.some(e=>t.includes(e))}function hm(t){if(!t||!se(t))return t;try{let e=(0,R.join)((0,Ct.realpathSync)((0,R.dirname)(t)),(0,R.basename)(t));if((0,Ct.existsSync)(e)&&!se(e))return e}catch{}return t}function gm(t){if(!t||!se(t))return t;try{let e=(0,Ct.realpathSync)(t);if(e&&!se(e))return e}catch{}return t}function _i(){return Be?[]:[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var fn=null;function Yc(){if(fn&&fn.PATH&&!se(fn.PATH))return fn;for(let t of _i())try{let e=(0,Xe.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let r of e.split(`
24
- `)){let s=r.indexOf("=");s>0&&(n[r.slice(0,s)]=r.slice(s+1))}return n.PATH&&!se(n.PATH)&&(fn=n),n}catch{}return{}}function mm(t=Yc()){let e=(0,hn.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(Be?(0,R.join)(e,"pnpm"):(0,R.join)(e,"Library","pnpm")),r=t.PATH||process.env.PATH||"",s=Be?[(0,R.join)(e,".npm-global","bin"),(0,R.join)(e,".local","bin"),(0,R.join)(e,".claude","bin"),n,(0,R.join)(e,"AppData","Roaming","npm"),(0,R.join)(e,"AppData","Local","Programs","node")]:["/usr/local/bin","/opt/homebrew/bin","/usr/bin","/bin",(0,R.join)(e,".npm-global","bin"),(0,R.join)(e,".local","bin"),(0,R.join)(e,".claude","bin"),n],i=r.split(R.delimiter).filter(Boolean).map(gm),o=new Set(i);for(let a of s)o.has(a)||(i.push(a),o.add(a));return i.join(R.delimiter)}function Si(t,e){let n=process.env[t];if(!n)return e;let r=Number(n);return Number.isFinite(r)&&r>0?Math.floor(r):e}function vr(t,e){let n=process.env[t];if(n==null||n==="")return e;let r=Number(n);return Number.isFinite(r)&&r>=0?Math.floor(r):e}function Qe(){let t=Yc(),e={};for(let[n,r]of Object.entries(process.env))typeof r=="string"&&(e[n]=r);for(let[n,r]of Object.entries(t))typeof r=="string"&&(e[n]=r);return e.PATH=mm(t),e.HOME||(e.HOME=(0,hn.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function bi(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(s=>s.endsWith(".exe"))??n[0]}catch{return}}function pn(t,e=3e3){try{return(0,Xe.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Qe(),...Be?{shell:!0}:{}}).trim()||null}catch{return null}}function ym(t){for(let e of _i())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 vm(){let t=(0,hn.homedir)();return[(0,R.join)(t,".local","bin","claude"),(0,R.join)(t,".claude","bin","claude"),"/usr/local/bin/claude","/opt/homebrew/bin/claude",(0,R.join)(t,".npm-global","bin","claude")]}function Sm(){if(Be){let t=bi("claude");return t&&pn(t)?t:void 0}for(let t of vm())if(pn(t))return t;try{let t=(0,Xe.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim();if(t&&!t.includes("cmux")&&pn(t))return t}catch{}}function _m(){let t=(0,hn.homedir)(),e=[process.env.PNPM_HOME,(0,R.join)(t,"Library","pnpm")].filter(n=>!!n);return["/usr/local/bin/codex","/opt/homebrew/bin/codex",(0,R.join)(t,".npm-global","bin","codex"),(0,R.join)(t,".local","bin","codex"),...e.map(n=>(0,R.join)(n,"codex"))]}function bm(){if(Be){let s=bi("codex");return s&&pn(s)?s:void 0}let t=s=>{let i=hm(s);return pn(i)?i:void 0},e;for(let s of _m()){let i=t(s);if(i){if(!se(i))return i;e=i}}try{let s=(0,Xe.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim(),i=s?t(s):void 0;if(i){if(!se(i))return i;e=e??i}}catch{}let n=ym("codex"),r=n?t(n):void 0;if(r){if(!se(r))return r;e=e??r}return e}function Jc(t,e){let n=null,r=0;return()=>{let s=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[s])return process.env[s];let i=Date.now();if(!n||i-r>um||!(0,Ct.existsSync)(n)||se(n)){let o=t();n=o??e,r=i,pm.info({name:e,path:n,transient:se(n),isBare:o==null},"binary resolved")}return n}}var wm=Jc(Sm,"claude"),Im=Jc(bm,"codex");function Tm(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith("--")&&n+1<e.length){let s=r.slice(2);t[s]=e[++n]}}return t}var zc=Tm(),Sr=vr("VIBE_TURN_STALL_TIMEOUT_MS",dm),Vc=vr("VIBE_TURN_STALL_HARD_TIMEOUT_MS",Math.max(fm,Sr*3)),Am=Sr<=0||Vc===0?0:Math.max(Vc,Sr);function km(t,e){if(Be)return{command:bi(t)??t,args:e};let n=_i()[0]??"/bin/zsh",r=`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",r,"--",...e]}}var S={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:zc.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:zc["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:vr("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:Sr,turnStallHardTimeoutMs:Am,auditMaxBytes:Si("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:Si("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:Si("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),pairWindowMs:vr("VIBE_PAIR_WINDOW_MS",300*1e3),pairReusable:process.env.VIBE_PAIR_REUSABLE==="1",get claudePath(){return wm()},get codexPath(){return Im()},isTransientPath:se,execViaLoginShell:km,buildSanitizedEnv:Qe};var lo=require("crypto"),Fd=require("fs/promises");var uu=require("child_process"),Tr=require("fs");var _r=require("fs"),Qc=require("path");var K=require("fs");function Cm(t,e,n,r){let s=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,s,r??i))}function gn(t,e){if(!(0,K.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let r=(0,K.statSync)(t).size,s=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||r+s<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:r,afterBytes:r,reclaimedBytes:0};let i=Cm(r,e.maxBytes,s,e.retainBytes),o=(0,K.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,K.readSync)(o,l,0,i,r-i);let u=0;if(r>i){let c=l.indexOf(10);c>=0&&c+1<l.length&&(u=c+1)}a=l.subarray(u)}return(0,K.ftruncateSync)(o,0),a.length>0&&(0,K.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:r,afterBytes:a.length,reclaimedBytes:r-a.length}}finally{(0,K.closeSync)(o)}}function Kc(t){let e=[gn(t.auditPath,{maxBytes:t.auditMaxBytes}),gn(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),gn(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,r)=>n+r.reclaimedBytes,0)}}var Xc=!1,xm=new Set(["ts","event","source","appEvent","level"]);function Rm(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Em(t={}){let e={};for(let[n,r]of Object.entries(t))xm.has(n)||(e[n]=r);return e}function Pm(t,e,n={},r){return{ts:r??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...Em(n)}}function Mm(){Xc||((0,_r.mkdirSync)((0,Qc.dirname)(At),{recursive:!0}),Xc=!0)}var wi=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,r={},s){this.write(Pm(e,n,r,s))}write(e){if(!Rm()){Mm();try{let n=JSON.stringify(e)+`
25
- `;gn(At,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,_r.appendFileSync)(At,n)}catch{}}}},I=new wi;var De=require("fs"),Zc=require("os"),mn=require("path"),eu=require("crypto"),Ii="claude-hook:",yn="x-vibelet-claude-hook-secret",vn={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function Lm(t,e){return`#!/usr/bin/env node
22
+ `),Gc){let i=t==="error"||t==="warn"?hr:pr;try{(0,yr.appendFileSync)(i,s+`
23
+ `)}catch{}}}function jc(t={}){function e(n,r,s){typeof r=="string"?qc(n,t,r):qc(n,{...t,...r},s)}return{debug:(n,r)=>e("debug",n,r),info:(n,r)=>e("info",n,r),warn:(n,r)=>e("warn",n,r),error:(n,r)=>e("error",n,r),child:n=>jc({...t,...n})}}var O=jc({module:"daemon"});var om=["fnm_multishells"],am=6e4,Be=process.platform==="win32",lm=300*1e3,cm=900*1e3,um=O.child({module:"config"});function se(t){return om.some(e=>t.includes(e))}function dm(t){if(!t||!se(t))return t;try{let e=(0,E.join)((0,Ct.realpathSync)((0,E.dirname)(t)),(0,E.basename)(t));if((0,Ct.existsSync)(e)&&!se(e))return e}catch{}return t}function fm(t){if(!t||!se(t))return t;try{let e=(0,Ct.realpathSync)(t);if(e&&!se(e))return e}catch{}return t}function _i(){return Be?[]:[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var fn=null;function Vc(){if(fn&&fn.PATH&&!se(fn.PATH))return fn;for(let t of _i())try{let e=(0,Xe.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let r of e.split(`
24
+ `)){let s=r.indexOf("=");s>0&&(n[r.slice(0,s)]=r.slice(s+1))}return n.PATH&&!se(n.PATH)&&(fn=n),n}catch{}return{}}function pm(t=Vc()){let e=(0,hn.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(Be?(0,E.join)(e,"pnpm"):(0,E.join)(e,"Library","pnpm")),r=t.PATH||process.env.PATH||"",s=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=r.split(E.delimiter).filter(Boolean).map(fm),o=new Set(i);for(let a of s)o.has(a)||(i.push(a),o.add(a));return i.join(E.delimiter)}function Si(t,e){let n=process.env[t];if(!n)return e;let r=Number(n);return Number.isFinite(r)&&r>0?Math.floor(r):e}function vr(t,e){let n=process.env[t];if(n==null||n==="")return e;let r=Number(n);return Number.isFinite(r)&&r>=0?Math.floor(r):e}function Qe(){let t=Vc(),e={};for(let[n,r]of Object.entries(process.env))typeof r=="string"&&(e[n]=r);for(let[n,r]of Object.entries(t))typeof r=="string"&&(e[n]=r);return e.PATH=pm(t),e.HOME||(e.HOME=(0,hn.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function bi(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(s=>s.endsWith(".exe"))??n[0]}catch{return}}function pn(t,e=3e3){try{return(0,Xe.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Qe(),...Be?{shell:!0}:{}}).trim()||null}catch{return null}}function hm(t){for(let e of _i())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 gm(){let t=(0,hn.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 mm(){if(Be){let t=bi("claude");return t&&pn(t)?t:void 0}for(let t of gm())if(pn(t))return t;try{let t=(0,Xe.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim();if(t&&!t.includes("cmux")&&pn(t))return t}catch{}}function ym(){let t=(0,hn.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 vm(){if(Be){let s=bi("codex");return s&&pn(s)?s:void 0}let t=s=>{let i=dm(s);return pn(i)?i:void 0},e;for(let s of ym()){let i=t(s);if(i){if(!se(i))return i;e=i}}try{let s=(0,Xe.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Qe()}).trim(),i=s?t(s):void 0;if(i){if(!se(i))return i;e=e??i}}catch{}let n=hm("codex"),r=n?t(n):void 0;if(r){if(!se(r))return r;e=e??r}return e}function Yc(t,e){let n=null,r=0;return()=>{let s=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[s])return process.env[s];let i=Date.now();if(!n||i-r>am||!(0,Ct.existsSync)(n)||se(n)){let o=t();n=o??e,r=i,um.info({name:e,path:n,transient:se(n),isBare:o==null},"binary resolved")}return n}}var Sm=Yc(mm,"claude"),_m=Yc(vm,"codex");function bm(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith("--")&&n+1<e.length){let s=r.slice(2);t[s]=e[++n]}}return t}var $c=bm(),Sr=vr("VIBE_TURN_STALL_TIMEOUT_MS",lm),zc=vr("VIBE_TURN_STALL_HARD_TIMEOUT_MS",Math.max(cm,Sr*3)),wm=Sr<=0||zc===0?0:Math.max(zc,Sr);function Im(t,e){if(Be)return{command:bi(t)??t,args:e};let n=_i()[0]??"/bin/zsh",r=`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",r,"--",...e]}}var S={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:$c.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:$c["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:vr("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:Sr,turnStallHardTimeoutMs:wm,auditMaxBytes:Si("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:Si("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:Si("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),pairWindowMs:vr("VIBE_PAIR_WINDOW_MS",300*1e3),pairReusable:process.env.VIBE_PAIR_REUSABLE==="1",get claudePath(){return Sm()},get codexPath(){return _m()},isTransientPath:se,execViaLoginShell:Im,buildSanitizedEnv:Qe};var ao=require("crypto"),Od=require("fs/promises");var cu=require("child_process"),Tr=require("fs");var _r=require("fs"),Xc=require("path");var K=require("fs");function Tm(t,e,n,r){let s=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,s,r??i))}function gn(t,e){if(!(0,K.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let r=(0,K.statSync)(t).size,s=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||r+s<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:r,afterBytes:r,reclaimedBytes:0};let i=Tm(r,e.maxBytes,s,e.retainBytes),o=(0,K.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,K.readSync)(o,l,0,i,r-i);let u=0;if(r>i){let c=l.indexOf(10);c>=0&&c+1<l.length&&(u=c+1)}a=l.subarray(u)}return(0,K.ftruncateSync)(o,0),a.length>0&&(0,K.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:r,afterBytes:a.length,reclaimedBytes:r-a.length}}finally{(0,K.closeSync)(o)}}function Jc(t){let e=[gn(t.auditPath,{maxBytes:t.auditMaxBytes}),gn(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),gn(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,r)=>n+r.reclaimedBytes,0)}}var Kc=!1,Am=new Set(["ts","event","source","appEvent","level"]);function km(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function Cm(t={}){let e={};for(let[n,r]of Object.entries(t))Am.has(n)||(e[n]=r);return e}function xm(t,e,n={},r){return{ts:r??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...Cm(n)}}function Rm(){Kc||((0,_r.mkdirSync)((0,Xc.dirname)(At),{recursive:!0}),Kc=!0)}var wi=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,r={},s){this.write(xm(e,n,r,s))}write(e){if(!km()){Rm();try{let n=JSON.stringify(e)+`
25
+ `;gn(At,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,_r.appendFileSync)(At,n)}catch{}}}},I=new wi;var De=require("fs"),Qc=require("os"),mn=require("path"),Zc=require("crypto"),Ii="claude-hook:",yn="x-vibelet-claude-hook-secret",vn={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function Em(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));
@@ -43,7 +43,7 @@ process.stdin.on('end', () => {
43
43
  req.end(body);
44
44
  });
45
45
  process.stdin.resume();
46
- `}function Nm(t,e){return`#!/usr/bin/env node
46
+ `}function Pm(t,e){return`#!/usr/bin/env node
47
47
  const http = require('http');
48
48
  const fallback = ${JSON.stringify(JSON.stringify(vn))};
49
49
  const chunks = [];
@@ -79,44 +79,44 @@ process.stdin.on('end', () => {
79
79
  req.end(body);
80
80
  });
81
81
  process.stdin.resume();
82
- `}function tu(t,e){let n=(0,mn.join)((0,Zc.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,eu.randomUUID)()}`);(0,De.mkdirSync)(n,{recursive:!0});let r=(0,mn.join)(n,"settings.json"),s=(0,mn.join)(n,"session_hook_forwarder.cjs"),i=(0,mn.join)(n,"permission_hook_forwarder.cjs");return(0,De.writeFileSync)(s,Lm(t,e),"utf8"),(0,De.writeFileSync)(i,Nm(t,e),"utf8"),(0,De.writeFileSync)(r,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(s)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:r,sessionScriptPath:s,permissionScriptPath:i}}function br(t){if(t)try{(0,De.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var nu=require("os"),Ze=require("path"),ru=require("fs/promises"),Om=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"]),Bm=5e3,su="Generated file: ",iu=`Generated files:
83
- `;function xt(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function Sn(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function Ti(t){let e=t.trim().replace(/[.,!?;:,。!?;:、]+$/u,""),n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r?.[1]&&(e=r[1]),e}function et(t,e){let n=Ti(t);return n?n.startsWith("~/")?(0,Ze.resolve)((0,nu.homedir)(),n.slice(2)):(0,Ze.isAbsolute)(n)?n:e?(0,Ze.resolve)(e,n):n:""}function Dm(t){return Om.has((0,Ze.extname)(Ti(t)).toLowerCase())}function Rt(t){let e=Ti(t);return e?!Dm(e):!1}function Te(t){let e=[...new Set(t.map(n=>et(n)).filter(Boolean))];return e.length===0?"":e.length===1?`${su}${e[0]}`:`${iu}${e.join(`
84
- `)}`}function ou(t){return typeof t!="string"?!1:t.startsWith(su)||t.startsWith(iu)}function Fm(t,e){let n=t.matchAll(/^\*\*\* Add File: (.+)$/gm),r=new Set;for(let s of n){let i=xt(s[1]);if(!i)continue;let o=et(i,e);!o||!Rt(o)||r.add(o)}return[...r]}function Hm(t){let e=xt(t);return e?e.toLowerCase():""}function Um(t,e){let n=xt(t?.file_path)??xt(t?.path);if(!n)return null;let r=et(n,e);return r&&Rt(r)?r:null}function wr(t,e,n){return Hm(t)!=="write"?null:Um(e,n)}function Wm(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 Ir(t,e){let n=typeof e=="string"?e.trim():"";if(n&&Wm(n))return!1;let r=Sn(t);if(r?.type==="update"||r?.type==="replace"||r&&(Object.hasOwn(r,"oldString")||Object.hasOwn(r,"structuredPatch")||Object.hasOwn(r,"originalFile")||Object.hasOwn(r,"replaceAll")))return!1;if(typeof Sn(r?.file)?.filePath=="string"||typeof r?.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 Ai(t,e){let n=Sn(t);if(!n)return[];let r=new Set;if(n.type==="event_msg"){let s=Sn(n.payload);if(s?.type==="image_generation_end"){let i=xt(s.saved_path);if(i){let o=et(i,e?.cwd);o&&Rt(o)&&r.add(o)}}}if(e?.includePatchCalls&&n.type==="response_item"){let s=Sn(n.payload);if(s?.type==="function_call"&&s.name==="apply_patch"){let i=xt(s.arguments);if(i)for(let o of Fm(i,e?.cwd))r.add(o)}}return[...r]}async function au(t,e){let n=[...new Set(t.map(s=>et(s)).filter(Boolean))],r=[];for(let s of n)if(Rt(s))try{let i=await(0,ru.stat)(s);if(Math.max(i.birthtimeMs||0,i.ctimeMs||0,i.mtimeMs||0)+Bm<e)continue;r.push(s)}catch{}return r}var ie=O.child({module:"claude"}),du="claude-permission-denial:",Gm=/\u001B\[[0-?]*[ -/]*[@-~]/g;function jm(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function ki(t){jm()&&mr(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
85
- `)}function $m(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 zm(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function Vm(t){if(typeof t=="string")return t;let e=$m(t);return e||(zm(t)?"":JSON.stringify(t))}function Ym(t){return/requested permissions|haven't granted/i.test(t)}function lu(t){return t.replace(Gm,"").replace(/\s+/g," ").trim()}function Jm(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function Km(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 Xm(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function cu(t){let e=lu(t.resultText??""),n=(t.stderrLines??[]).map(lu).filter(Boolean).slice(-3),r=[e,...n].find(i=>!!i&&Km(i));if(r)return Xm(r);let s=[e,...n].find(i=>!!i&&!Jm(i));return s?t.exitCode!=null&&s!==e?`Claude exited with code ${t.exitCode}: ${s}`:s:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function Ar(t){return t.startsWith(du)}var _n=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,r){return this.cwd=e,this.approvalMode=r,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),ie.info({sessionId:this.sessionId,cwd:e},"session initialized"),I.emit("driver.spawn",{agent:"claude",sessionId:this.sessionId,cwd:e}),this.sessionId}configureHookBridge(e,n){this.hookPort=e,this.hookSecret=n}sendPrompt(e,n){let r=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];n&&r.push("--model",n),this.sessionId&&!this.sessionId.startsWith("pending_")&&r.push("--resume",this.sessionId),br(this.hookFiles),this.hookFiles=null,this.approvalMode!=="plan"&&this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=tu(this.hookPort,this.hookSecret),r.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="plan"&&r.push("--permission-mode","plan"),this.approvalMode==="acceptEdits"&&r.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&r.push("--dangerously-skip-permissions");let s=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;ie.info({sessionId:this.sessionId,label:s,promptPreview:e.slice(0,50)},"running claude"),ki(`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=r;if(S.isTransientPath(i)||i==="claude"){let u=S.execViaLoginShell("claude",r);o=u.command,a=u.args}else o=i;this.proc=(0,uu.spawn)(o,a,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",u=>{let c=u.message;u.code==="ENOENT"&&this.cwd&&!(0,Tr.existsSync)(this.cwd)&&(c=`Working directory does not exist: ${this.cwd}`),ie.error({sessionId:this.sessionId,error:c,cwd:this.cwd},"spawn error"),I.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{ie.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&&(ie.debug({sessionId:this.sessionId,stderr:c},"stderr"),this.lastStderr.push(c),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(u,c)=>{ie.info({sessionId:this.sessionId,exitCode:u,signal:c},"process exited");let d=this.interrupted;this.proc=null,br(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&&(ie.error({sessionId:this.sessionId,exitCode:u,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:cu({stderrLines:this.lastStderr,exitCode:u})})),this.exitHandler?.(u)})}respondApproval(e,n){if(ie.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return ie.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let r=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(r+`
88
- `),!0}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}setApprovalMode(e){this.approvalMode=e,ie.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),ie.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,br(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 r=e.session_id??"";r&&r!==this.sessionId&&(ie.info({oldSessionId:this.sessionId,newSessionId:r},"session ID resolved"),I.emit("driver.init",{agent:"claude",sessionId:r}),this.sessionId=r);return}if(this.handler)switch(n){case"assistant":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_use"&&!this.emittedToolCallIds.has(s.id)){this.emittedToolCallIds.add(s.id);let i=s.input??{},o=wr(s.name,i,this.cwd);this.toolCallContext.set(s.id,{toolName:s.name,...o?{generatedFilePath:o,fileExistedAtStart:(0,Tr.existsSync)(o)}:{}}),this.handler({type:"tool.call",sessionId:this.sessionId,toolName:s.name,input:i,toolCallId:s.id})}break}case"user":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_result"){let i=typeof s.tool_use_id=="string"?s.tool_use_id:"",o=i?this.toolCallContext.get(i):void 0,a=Vm(s.content);if(!s.is_error&&o?.generatedFilePath&&o.fileExistedAtStart===!1&&(0,Tr.existsSync)(o.generatedFilePath)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}else if(!s.is_error&&o?.generatedFilePath&&o.fileExistedAtStart==null&&Ir(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(s.is_error===!0&&i&&Ym(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 r=e.request;r?.subtype==="can_use_tool"&&(I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:r.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:r.tool_name??"unknown",input:r.input??{},description:r.description??r.title??""}));break}case"stream_event":{this.replayPhase=!1;let r=e.event;r?.type==="content_block_delta"&&r?.delta?.type==="text_delta"&&r?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:r.delta.text});break}case"result":{this.replayPhase=!1,this.sawFinalResult=!0;let r=typeof e.result=="string"?e.result:"";if(e.is_error){ki("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:cu({resultText:r,stderrLines:this.lastStderr})});break}let s=Array.isArray(e.permission_denials)?e.permission_denials:[];if(s.length>0){let a=s[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,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}.`;I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:u}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${du}${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;ki("Claude finished. Run `claude --continue` to continue on desktop."),I.emit("session.done",{agent:"claude",sessionId:this.sessionId,cost:i,usage:o}),this.handler({type:"session.done",sessionId:this.sessionId,cost:i,usage:o});break}}}};var mu=require("child_process"),yu=require("fs");var Ci=class{counters=new Map;timers=new Map;gauges=new Map;startTime=Date.now();logInterval=null;increment(e,n={}){this.counters.has(e)||this.counters.set(e,[]);let r=this.counters.get(e),s=JSON.stringify(n),i=r.find(o=>JSON.stringify(o.labels)===s);i?i.value++:r.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let r=Math.round(performance.now()-n),s=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return s.count++,s.totalMs+=r,s.minMs=Math.min(s.minMs,r),s.maxMs=Math.max(s.maxMs,r),s.lastMs=r,this.timers.set(e,s),r}}snapshot(){let e={};for(let[s,i]of this.counters)e[s]=i.map(o=>({...o}));let n={};for(let[s,i]of this.timers)n[s]={...i,minMs:i.minMs===1/0?0:i.minMs};let r={};for(let[s,i]of this.gauges)r[s]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:r}}startPeriodicLog(e=6e4){this.logInterval||(this.logInterval=setInterval(()=>{let n=this.snapshot();O.info({metrics:n},"periodic metrics snapshot")},e),this.logInterval.unref())}stopPeriodicLog(){this.logInterval&&(clearInterval(this.logInterval),this.logInterval=null)}},_=new Ci;var fu=require("node:fs"),xi=require("node:path"),Qm="@vibelet/cli";function Zm(t){try{let e=JSON.parse((0,fu.readFileSync)(t,"utf8"));if(e.name===Qm&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function ey(){return"1.0.24"}var Et=ey();var E=O.child({module:"codex"});function ty(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 ny(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 j(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 Ri(t){let e=Number(t);return!Number.isFinite(e)||e<=0?null:Math.trunc(e)}var ry=new Set(["aborted","interrupted","cancelled","canceled"]);function sy(t){let e=M(t);return e?e.toLowerCase():null}function iy(t){let e=M(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function Ei(t){return t?M(t.itemId)??M(t.id)??M(t.callId)??M(t.call_id):null}function Mi(t,e){let n={};for(let[r,s]of Object.entries(t))e.includes(r)||(n[r]=s);return n}function vu(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function Su(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function oy(t){if(!Array.isArray(t))return null;for(let e of t){let n=j(e);if(!n)continue;let r=M(n.id),s=Array.isArray(n.options)?n.options.map(l=>j(l)).filter(l=>!!l):[];if(!r||s.length===0)continue;let i=s.map(l=>M(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>vu(l))??i[0],a=i.find(l=>Su(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:r,approveLabel:o,denyLabel:a}}return null}function ay(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(s=>j(s)).filter(s=>!!s).flatMap(s=>(Array.isArray(s.options)?s.options:[]).map(o=>j(o)).filter(o=>!!o).map(o=>M(o.label)).filter(o=>!!o)),n=e.some(s=>vu(s)),r=e.some(s=>Su(s));return n&&r}function pu(t){let e=iy(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:Mi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:Mi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=M(t.server),r=M(t.tool)??M(t.name);return r?{toolName:n?`mcp__${n}__${r}`:r,input:j(t.arguments)??j(t.input)??{}}:null}return null}function ly(t,e){let n=M(t.path);if(!n||!(Array.isArray(t.changes)?t.changes:[]).some(o=>j(o)?.kind==="create"))return null;let i=et(n,e);return Rt(i)?i:null}function cy(t){if(!Array.isArray(t))return"";for(let e of t){let n=j(e);if(!n)continue;let r=M(n.question)??M(n.header);if(r)return r}return""}function Pi(t){let e=j(t);if(!e)return;let n=Ri(e.input_tokens??e.inputTokens)??0,r=Ri(e.output_tokens??e.outputTokens)??0,s=Ri(e.modelContextWindow??e.model_context_window??e.contextWindowTokens);if(!(n<=0&&r<=0&&!s))return{inputTokens:n,outputTokens:r,...s?{contextWindowTokens:s}:{}}}function hu(t,e){return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,...Number.isFinite(e.contextWindowTokens)?{contextWindowTokens:e.contextWindowTokens}:Number.isFinite(t?.contextWindowTokens)?{contextWindowTokens:t?.contextWindowTokens}:{}}:t}function gu(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 bn=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,r){this.approvalMode=r,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let s=S.codexPath,i,o=this.buildSpawnArgs();if(S.isTransientPath(s)||s==="codex"){let c=S.execViaLoginShell("codex",o);i=c.command,o=c.args,E.info({spawnCmd:i,argsPreview:o.slice(0,2)},"spawning via login shell")}else i=s,E.info({spawnCmd:i,args:o},"spawning");I.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,mu.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:S.buildSanitizedEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",c=>{let d=c.message;c.code==="ENOENT"&&e&&!(0,yu.existsSync)(e)&&(d=`Working directory does not exist: ${e}`),E.error({error:d,cwd:e},"spawn error"),I.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 p of d)if(p.trim())try{this.handleRaw(JSON.parse(p))}catch{E.warn({linePreview:p.slice(0,200)},"failed to parse stdout line")}}),this.proc.stderr.on("data",c=>{let d=c.toString().trim();d&&(E.debug({stderr:d},"stderr"),this.lastStderr.push(d),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",c=>{E.info({threadId:this.threadId,exitCode:c},"process exited"),c&&c!==0&&E.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:Et},capabilities:{experimentalApi:!0}}),l(),this.rpcNotify("initialized",{});let u=gu(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,E.info({threadId:this.threadId},"thread resumed"),I.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??"",E.info({threadId:this.threadId},"thread created"),I.emit("driver.init",{agent:"codex",sessionId:this.threadId})}return this.threadId}setModel(e){this.model=e}buildSpawnArgs(){let e=["app-server","--listen","stdio://"];return this.model&&e.push("-m",this.model),e}sendPrompt(e,n){let r=gu(this.approvalMode,this.cwd||process.cwd());this.latestTurnUsage=void 0,this.turnStartInFlight=!0,this.interruptRequestedDuringTurnStart=!1,E.info({threadId:this.threadId,promptPreview:e.slice(0,50)},"turn/start"),this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}],approvalPolicy:r.approvalPolicy,sandboxPolicy:r.sandboxPolicy,...n?{model:n}:{}}).then(s=>{E.debug({resultPreview:JSON.stringify(s).slice(0,200)},"turn/start result"),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart&&(this.interruptRequestedDuringTurnStart=!1,this.requestTurnInterrupt())}).catch(s=>{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,E.error({threadId:this.threadId,error:s.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:s.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let r=this.approvalRequests.get(e),s=r?.rpcId??Number(e);if(!Number.isFinite(s))return!1;let i;if(!r)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(r.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[r.questionId]:{answers:[n?r.approveLabel:r.denyLabel]}}};break;case"exec-command-legacy":case"apply-patch-legacy":i={decision:n?"approved":"denied"};break;default:i={decision:n?"accept":"decline"};break}this.approvalRequests.delete(e)}return E.info({threadId:this.threadId,rpcId:s,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:s,result:i})+`
90
- `),!0}restorePendingApproval(e){let n=ny(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,E.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 r=++this.rpcId,s=_.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(r,{resolve:a=>{s(),i(a)},reject:a=>{s(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(r),s(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:r,params:n})+`
91
- `),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),E.error({method:e,rpcId:r,threadId:this.threadId},"RPC timeout"),s(),o(new Error(`RPC timeout: ${e}`)))},3e4).unref()})}requestTurnInterrupt(){this.rpc("turn/interrupt",{threadId:this.threadId}).catch(()=>{})}rpcNotify(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,params:n})+`
82
+ `}function eu(t,e){let n=(0,mn.join)((0,Qc.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,Zc.randomUUID)()}`);(0,De.mkdirSync)(n,{recursive:!0});let r=(0,mn.join)(n,"settings.json"),s=(0,mn.join)(n,"session_hook_forwarder.cjs"),i=(0,mn.join)(n,"permission_hook_forwarder.cjs");return(0,De.writeFileSync)(s,Em(t,e),"utf8"),(0,De.writeFileSync)(i,Pm(t,e),"utf8"),(0,De.writeFileSync)(r,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(s)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:r,sessionScriptPath:s,permissionScriptPath:i}}function br(t){if(t)try{(0,De.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var tu=require("os"),Ze=require("path"),nu=require("fs/promises"),Mm=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"]),Lm=5e3,ru="Generated file: ",su=`Generated files:
83
+ `;function xt(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function Sn(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function Ti(t){let e=t.trim().replace(/[.,!?;:,。!?;:、]+$/u,""),n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r?.[1]&&(e=r[1]),e}function et(t,e){let n=Ti(t);return n?n.startsWith("~/")?(0,Ze.resolve)((0,tu.homedir)(),n.slice(2)):(0,Ze.isAbsolute)(n)?n:e?(0,Ze.resolve)(e,n):n:""}function Nm(t){return Mm.has((0,Ze.extname)(Ti(t)).toLowerCase())}function Rt(t){let e=Ti(t);return e?!Nm(e):!1}function Te(t){let e=[...new Set(t.map(n=>et(n)).filter(Boolean))];return e.length===0?"":e.length===1?`${ru}${e[0]}`:`${su}${e.join(`
84
+ `)}`}function iu(t){return typeof t!="string"?!1:t.startsWith(ru)||t.startsWith(su)}function Om(t,e){let n=t.matchAll(/^\*\*\* Add File: (.+)$/gm),r=new Set;for(let s of n){let i=xt(s[1]);if(!i)continue;let o=et(i,e);!o||!Rt(o)||r.add(o)}return[...r]}function Bm(t){let e=xt(t);return e?e.toLowerCase():""}function Dm(t,e){let n=xt(t?.file_path)??xt(t?.path);if(!n)return null;let r=et(n,e);return r&&Rt(r)?r:null}function wr(t,e,n){return Bm(t)!=="write"?null:Dm(e,n)}function Fm(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 Hm(t){return/^\d+\t/m.test(t)}function Ir(t,e){let n=typeof e=="string"?e.trim():"";if(n&&Fm(n))return!1;let r=Sn(t);if(r?.type==="update"||r?.type==="replace"||r&&(Object.hasOwn(r,"oldString")||Object.hasOwn(r,"structuredPatch")||Object.hasOwn(r,"originalFile")||Object.hasOwn(r,"replaceAll")))return!1;if(typeof Sn(r?.file)?.filePath=="string"||typeof r?.filePath=="string")return!0;if(n){let i=n.toLowerCase();if(i.includes("created successfully")||i.includes("has been created")||Hm(n))return!0}return!1}function Ai(t,e){let n=Sn(t);if(!n)return[];let r=new Set;if(n.type==="event_msg"){let s=Sn(n.payload);if(s?.type==="image_generation_end"){let i=xt(s.saved_path);if(i){let o=et(i,e?.cwd);o&&Rt(o)&&r.add(o)}}}if(e?.includePatchCalls&&n.type==="response_item"){let s=Sn(n.payload);if(s?.type==="function_call"&&s.name==="apply_patch"){let i=xt(s.arguments);if(i)for(let o of Om(i,e?.cwd))r.add(o)}}return[...r]}async function ou(t,e){let n=[...new Set(t.map(s=>et(s)).filter(Boolean))],r=[];for(let s of n)if(Rt(s))try{let i=await(0,nu.stat)(s);if(Math.max(i.birthtimeMs||0,i.ctimeMs||0,i.mtimeMs||0)+Lm<e)continue;r.push(s)}catch{}return r}var ie=O.child({module:"claude"}),uu="claude-permission-denial:",Um=/\u001B\[[0-?]*[ -/]*[@-~]/g;function Wm(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function ki(t){Wm()&&mr(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
85
+ `)}function qm(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 Gm(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function jm(t){if(typeof t=="string")return t;let e=qm(t);return e||(Gm(t)?"":JSON.stringify(t))}function $m(t){return/requested permissions|haven't granted/i.test(t)}function au(t){return t.replace(Um,"").replace(/\s+/g," ").trim()}function zm(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function Vm(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 Ym(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function lu(t){let e=au(t.resultText??""),n=(t.stderrLines??[]).map(au).filter(Boolean).slice(-3),r=[e,...n].find(i=>!!i&&Vm(i));if(r)return Ym(r);let s=[e,...n].find(i=>!!i&&!zm(i));return s?t.exitCode!=null&&s!==e?`Claude exited with code ${t.exitCode}: ${s}`:s:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function Ar(t){return t.startsWith(uu)}var _n=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,r){return this.cwd=e,this.approvalMode=r,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),ie.info({sessionId:this.sessionId,cwd:e},"session initialized"),I.emit("driver.spawn",{agent:"claude",sessionId:this.sessionId,cwd:e}),this.sessionId}configureHookBridge(e,n){this.hookPort=e,this.hookSecret=n}sendPrompt(e,n){let r=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];n&&r.push("--model",n),this.sessionId&&!this.sessionId.startsWith("pending_")&&r.push("--resume",this.sessionId),br(this.hookFiles),this.hookFiles=null,this.approvalMode!=="plan"&&this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=eu(this.hookPort,this.hookSecret),r.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="plan"&&r.push("--permission-mode","plan"),this.approvalMode==="acceptEdits"&&r.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&r.push("--dangerously-skip-permissions");let s=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;ie.info({sessionId:this.sessionId,label:s,promptPreview:e.slice(0,50)},"running claude"),ki(`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=r;if(S.isTransientPath(i)||i==="claude"){let u=S.execViaLoginShell("claude",r);o=u.command,a=u.args}else o=i;this.proc=(0,cu.spawn)(o,a,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",u=>{let c=u.message;u.code==="ENOENT"&&this.cwd&&!(0,Tr.existsSync)(this.cwd)&&(c=`Working directory does not exist: ${this.cwd}`),ie.error({sessionId:this.sessionId,error:c,cwd:this.cwd},"spawn error"),I.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{ie.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&&(ie.debug({sessionId:this.sessionId,stderr:c},"stderr"),this.lastStderr.push(c),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(u,c)=>{ie.info({sessionId:this.sessionId,exitCode:u,signal:c},"process exited");let d=this.interrupted;this.proc=null,br(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&&(ie.error({sessionId:this.sessionId,exitCode:u,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:lu({stderrLines:this.lastStderr,exitCode:u})})),this.exitHandler?.(u)})}respondApproval(e,n){if(ie.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return ie.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let r=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(r+`
88
+ `),!0}getRespondingLivenessHint(){return!this.proc||this.proc.exitCode!==null||this.proc.signalCode!==null||this.proc.killed?"dead":"alive"}setApprovalMode(e){this.approvalMode=e,ie.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),ie.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,br(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 r=e.session_id??"";r&&r!==this.sessionId&&(ie.info({oldSessionId:this.sessionId,newSessionId:r},"session ID resolved"),I.emit("driver.init",{agent:"claude",sessionId:r}),this.sessionId=r);return}if(this.handler)switch(n){case"assistant":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_use"&&!this.emittedToolCallIds.has(s.id)){this.emittedToolCallIds.add(s.id);let i=s.input??{},o=wr(s.name,i,this.cwd);this.toolCallContext.set(s.id,{toolName:s.name,...o?{generatedFilePath:o,fileExistedAtStart:(0,Tr.existsSync)(o)}:{}}),this.handler({type:"tool.call",sessionId:this.sessionId,toolName:s.name,input:i,toolCallId:s.id})}break}case"user":{if(this.replayPhase)break;let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_result"){let i=typeof s.tool_use_id=="string"?s.tool_use_id:"",o=i?this.toolCallContext.get(i):void 0,a=jm(s.content);if(!s.is_error&&o?.generatedFilePath&&o.fileExistedAtStart===!1&&(0,Tr.existsSync)(o.generatedFilePath)){let l=Te([o.generatedFilePath]);l&&this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:i,output:l})}else if(!s.is_error&&o?.generatedFilePath&&o.fileExistedAtStart==null&&Ir(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(s.is_error===!0&&i&&$m(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 r=e.request;r?.subtype==="can_use_tool"&&(I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:r.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:r.tool_name??"unknown",input:r.input??{},description:r.description??r.title??""}));break}case"stream_event":{this.replayPhase=!1;let r=e.event;r?.type==="content_block_delta"&&r?.delta?.type==="text_delta"&&r?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:r.delta.text});break}case"result":{this.replayPhase=!1,this.sawFinalResult=!0;let r=typeof e.result=="string"?e.result:"";if(e.is_error){ki("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:lu({resultText:r,stderrLines:this.lastStderr})});break}let s=Array.isArray(e.permission_denials)?e.permission_denials:[];if(s.length>0){let a=s[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,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}.`;I.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:u}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${uu}${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;ki("Claude finished. Run `claude --continue` to continue on desktop."),I.emit("session.done",{agent:"claude",sessionId:this.sessionId,cost:i,usage:o}),this.handler({type:"session.done",sessionId:this.sessionId,cost:i,usage:o});break}}}};var hu=require("child_process"),gu=require("fs");var Ci=class{counters=new Map;timers=new Map;gauges=new Map;startTime=Date.now();logInterval=null;increment(e,n={}){this.counters.has(e)||this.counters.set(e,[]);let r=this.counters.get(e),s=JSON.stringify(n),i=r.find(o=>JSON.stringify(o.labels)===s);i?i.value++:r.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let r=Math.round(performance.now()-n),s=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return s.count++,s.totalMs+=r,s.minMs=Math.min(s.minMs,r),s.maxMs=Math.max(s.maxMs,r),s.lastMs=r,this.timers.set(e,s),r}}snapshot(){let e={};for(let[s,i]of this.counters)e[s]=i.map(o=>({...o}));let n={};for(let[s,i]of this.timers)n[s]={...i,minMs:i.minMs===1/0?0:i.minMs};let r={};for(let[s,i]of this.gauges)r[s]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:r}}startPeriodicLog(e=6e4){this.logInterval||(this.logInterval=setInterval(()=>{let n=this.snapshot();O.info({metrics:n},"periodic metrics snapshot")},e),this.logInterval.unref())}stopPeriodicLog(){this.logInterval&&(clearInterval(this.logInterval),this.logInterval=null)}},_=new Ci;var du=require("node:fs"),xi=require("node:path"),Jm="@vibelet/cli";function Km(t){try{let e=JSON.parse((0,du.readFileSync)(t,"utf8"));if(e.name===Jm&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function Xm(){return"1.0.25"}var Et=Xm();var P=O.child({module:"codex"});function Qm(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 Zm(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 j(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 Ri(t){let e=Number(t);return!Number.isFinite(e)||e<=0?null:Math.trunc(e)}var ey=new Set(["aborted","interrupted","cancelled","canceled"]);function ty(t){let e=M(t);return e?e.toLowerCase():null}function ny(t){let e=M(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function Ei(t){return t?M(t.itemId)??M(t.id)??M(t.callId)??M(t.call_id):null}function Pi(t,e){let n={};for(let[r,s]of Object.entries(t))e.includes(r)||(n[r]=s);return n}function mu(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function yu(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function ry(t){if(!Array.isArray(t))return null;for(let e of t){let n=j(e);if(!n)continue;let r=M(n.id),s=Array.isArray(n.options)?n.options.map(l=>j(l)).filter(l=>!!l):[];if(!r||s.length===0)continue;let i=s.map(l=>M(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>mu(l))??i[0],a=i.find(l=>yu(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:r,approveLabel:o,denyLabel:a}}return null}function sy(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(s=>j(s)).filter(s=>!!s).flatMap(s=>(Array.isArray(s.options)?s.options:[]).map(o=>j(o)).filter(o=>!!o).map(o=>M(o.label)).filter(o=>!!o)),n=e.some(s=>mu(s)),r=e.some(s=>yu(s));return n&&r}function fu(t){let e=ny(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:Pi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:Pi(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=M(t.server),r=M(t.tool)??M(t.name);return r?{toolName:n?`mcp__${n}__${r}`:r,input:j(t.arguments)??j(t.input)??{}}:null}return null}function iy(t,e){let n=M(t.path);if(!n||!(Array.isArray(t.changes)?t.changes:[]).some(o=>j(o)?.kind==="create"))return null;let i=et(n,e);return Rt(i)?i:null}function oy(t){if(!Array.isArray(t))return"";for(let e of t){let n=j(e);if(!n)continue;let r=M(n.question)??M(n.header);if(r)return r}return""}function ay(t){let e=j(t);if(!e)return;let n=Ri(e.input_tokens??e.inputTokens)??0,r=Ri(e.output_tokens??e.outputTokens)??0,s=Ri(e.modelContextWindow??e.model_context_window??e.contextWindowTokens);if(!(n<=0&&r<=0&&!s))return{inputTokens:n,outputTokens:r,...s?{contextWindowTokens:s}:{}}}function pu(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 bn=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,r){this.approvalMode=r,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear(),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let s=S.codexPath,i,o=this.buildSpawnArgs();if(S.isTransientPath(s)||s==="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=s,P.info({spawnCmd:i,args:o},"spawning");I.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,hu.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:S.buildSanitizedEnv(),...process.platform==="win32"?{shell:!0}:{}}),this.proc.on("error",c=>{let d=c.message;c.code==="ENOENT"&&e&&!(0,gu.existsSync)(e)&&(d=`Working directory does not exist: ${e}`),P.error({error:d,cwd:e},"spawn error"),I.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 p of d)if(p.trim())try{this.handleRaw(JSON.parse(p))}catch{P.warn({linePreview:p.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:Et},capabilities:{experimentalApi:!0}}),l(),this.rpcNotify("initialized",{});let u=pu(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"),I.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"),I.emit("driver.init",{agent:"codex",sessionId:this.threadId})}return this.threadId}setModel(e){this.model=e}buildSpawnArgs(){let e=["app-server","--listen","stdio://"];return this.model&&e.push("-m",this.model),e}sendPrompt(e,n){let r=pu(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:r.approvalPolicy,sandboxPolicy:r.sandboxPolicy,...n?{model:n}:{}}).then(s=>{P.debug({resultPreview:JSON.stringify(s).slice(0,200)},"turn/start result"),this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart&&(this.interruptRequestedDuringTurnStart=!1,this.requestTurnInterrupt())}).catch(s=>{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,P.error({threadId:this.threadId,error:s.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:s.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let r=this.approvalRequests.get(e),s=r?.rpcId??Number(e);if(!Number.isFinite(s))return!1;let i;if(!r)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(r.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[r.questionId]:{answers:[n?r.approveLabel:r.denyLabel]}}};break;case"exec-command-legacy":case"apply-patch-legacy":i={decision:n?"approved":"denied"};break;default:i={decision:n?"accept":"decline"};break}this.approvalRequests.delete(e)}return P.info({threadId:this.threadId,rpcId:s,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:s,result:i})+`
90
+ `),!0}restorePendingApproval(e){let n=Zm(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 r=++this.rpcId,s=_.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(r,{resolve:a=>{s(),i(a)},reject:a=>{s(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(r),s(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:r,params:n})+`
91
+ `),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),P.error({method:e,rpcId:r,threadId:this.threadId},"RPC timeout"),s(),o(new Error(`RPC timeout: ${e}`)))},3e4).unref()})}requestTurnInterrupt(){this.rpc("turn/interrupt",{threadId:this.threadId}).catch(()=>{})}rpcNotify(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,params:n})+`
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=j(e?.item)??e??null,r=Ei(n);if(!r)return null;let s=n?pu(n):null;if(s)return this.toolContextByCallId.set(r,s),{callId:r,toolContext:s};let i=this.toolContextByCallId.get(r);return i?{callId:r,toolContext:i}:null}createFallbackInput(e,n){return e?Mi(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,r){if(this.approvalRequests.set(e,n),I.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){E.warn({threadId:this.threadId,requestId:e,toolName:n.toolName},"approval request received without handler"),this.respondApproval(e,!1)||this.writeServerRequestError(n.rpcId,"Approval handler unavailable");return}this.handler({type:"approval.request",sessionId:this.threadId,requestId:e,toolName:n.toolName,input:n.input,description:r,approvalContext:ty(n)})}handleServerRequest(e,n,r){let s=String(n),i=this.resolveToolContext(r);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(s,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},M(r?.reason)??M(r?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(s,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},M(r?.reason)??M(r?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=r?.questions;if(!ay(o)){E.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=oy(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(s,{kind:"request-user-input-approval",rpcId:n,questionId:a.questionId,approveLabel:a.approveLabel,denyLabel:a.denyLabel,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","questions"])},cy(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(s,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,[])},M(r?.reason)??M(r?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(s,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,[])},M(r?.reason)??M(r?.description)??"");return}if(e==="item/permissions/requestApproval"){E.warn({threadId:this.threadId,rpcId:n},"unsupported permissions approval request"),this.writeServerRequestError(n,"Unsupported permissions approval request");return}E.warn({threadId:this.threadId,rpcId:n,method:e},"unsupported server request"),this.writeServerRequestError(n,`Unsupported server request: ${e}`)}handleRaw(e){if(E.debug({method:e.method??"(response)",rpcId:e.id??"-"},"handleRaw"),e.id!=null&&!e.method&&this.pending.has(e.id)){let s=this.pending.get(e.id);this.pending.delete(e.id),e.error?s.reject(new Error(e.error.message??"RPC error")):s.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,r=j(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,r??void 0);return}switch(n&&E.debug({method:n,paramsPreview:JSON.stringify(r??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let s=r?.text??r?.delta??r?.content??"";s&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:s}):s||E.debug({paramsKeys:Object.keys(r??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":r?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:r.itemId??"",output:String(r.output)});break;case"item/started":{let s=j(r?.item),i=Ei(s),o=s?pu(s):null;i&&o&&(this.toolContextByCallId.set(i,o),this.handler&&this.handler({type:"tool.call",sessionId:this.threadId,toolName:o.toolName,input:o.input,toolCallId:i}));break}case"item/completed":{let s=j(r?.item)??r,i=Ei(s),o=i?this.toolContextByCallId.get(i):null;if(i&&o?.toolName==="Patch"&&this.handler){let a=ly(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/tokenUsageUpdated":{let s=j(r?.tokenUsage);this.latestTurnUsage=hu(Pi(s?.last),Pi({...j(s?.last)??{},modelContextWindow:s?.modelContextWindow}));break}case"turn/aborted":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let s=M(r?.reason)??M(j(r?.turn)?.reason);E.info({threadId:this.threadId,reason:s},"turn interrupted"),I.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,...s?{reason:s}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}case"turn/completed":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let s=j(r?.turn),i=sy(s?.status),o=hu(this.latestTurnUsage,Pi(r?.usage));if(this.latestTurnUsage=void 0,i&&ry.has(i)){E.info({threadId:this.threadId,status:i},"turn interrupted"),I.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,status:i,...o?{usage:o}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}E.info({threadId:this.threadId,status:i??"completed"},"turn completed"),I.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&&E.debug({method:n},"unhandled notification");break}}};var N=require("fs/promises"),Xi=require("fs"),Qi=require("readline"),B=require("path"),ue=require("os");var uy=new Set(["New session","Resumed session","Untitled session"]),dy=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function fy(t){return t.replace(/\s+/g," ").trim()}function kr(t){return typeof t!="string"?void 0:fy(t)||void 0}function _u(t){let e=kr(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 Pt(t){let e=kr(t);return!e||uy.has(e)||_u(e)}function py(t){for(let e of t.replace(/\r/g,"").split(`
94
- `)){let n=kr(e);if(n&&!hy(n)&&!gy(n))return n}}function hy(t){return dy.some(e=>t.startsWith(e))}function gy(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function my(t){for(let e=0;e<t.length;e+=1){let n=t[e];if(n==="\u3002"||n==="\uFF01"||n==="\uFF1F"||n==="\uFF1B")return e+1;if(n==="."||n==="!"||n==="?"||n===";"){let r=t[e+1];if(!r||/\s/.test(r))return e+1}}return-1}function Li(t,e=80){if(typeof t!="string")return;let n=py(t);if(!n)return;let r=my(n),i=(r>0?n.slice(0,r):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||_u(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function tt(t,e){for(let n of t){let r=kr(n);if(!(!r||Pt(r)))return r}return Li(e)}var Iu=require("child_process"),Tu=require("util");var Au=(0,Tu.promisify)(Iu.execFile),ku=5e3,yy=2500,vy=3e3,Cu=8,Cr=new Map,Ni=new Map,bu=null;function Sy(t){let e=Cr.get(t);return e?Date.now()>e.expiresAt?(Cr.delete(t),null):e.value??void 0:null}function _y(t,e){if(e===void 0){Cr.delete(t);return}Cr.set(t,{value:e,expiresAt:Date.now()+ku})}async function by(t){if(!t)return;if(bu)return bu(t);let e=[["branch","--show-current"],["rev-parse","--abbrev-ref","HEAD"]];for(let n of e)try{let{stdout:r}=await Au("git",["-C",t,...n],{env:Qe(),timeout:yy,maxBuffer:65536}),s=r.trim();if(s&&s!=="HEAD")return s}catch{}}async function wy(t){let e=Sy(t);if(e!==null)return e;let n=Ni.get(t);if(n)return n;let r=by(t).then(s=>(_y(t,s),s)).finally(()=>{Ni.delete(t)});return Ni.set(t,r),r}async function xu(t,e,n){if(t.length===0)return;let r=Math.max(1,Math.min(e,t.length)),s=0;await Promise.all(Array.from({length:r},async()=>{for(;;){let i=s;if(s+=1,i>=t.length)return;await n(t[i])}}))}async function Ru(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await xu(e,Cu,async r=>{n.set(r,await wy(r))}),n}var Bi=new Map,Oi=new Map,wu=null;function Iy(t,e){if(e===void 0){Bi.delete(t);return}Bi.set(t,{value:e,expiresAt:Date.now()+ku})}async function Ty(t){if(t){if(wu)return wu(t);for(let e=0;e<2;e+=1)try{let{stdout:n}=await Au("git",["-C",t,"diff","HEAD","--shortstat"],{env:Qe(),timeout:vy,maxBuffer:65536}),r=n.trim();if(!r)return;let s=r.match(/(\d+) insertion/),i=r.match(/(\d+) deletion/),o=s?Number(s[1]):0,a=i?Number(i[1]):0;return o===0&&a===0?void 0:{additions:o,deletions:a}}catch{if(e===1)return}}}async function Ay(t){let e=Bi.get(t);if(e&&Date.now()<=e.expiresAt)return e.value;let n=Oi.get(t);if(n)return n;let r=Ty(t).then(s=>(Iy(t,s),s)).finally(()=>{Oi.delete(t)});return Oi.set(t,r),r}async function Eu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await xu(e,Cu,async r=>{n.set(r,await Ay(r))}),n}var Mu=require("child_process"),Er=require("fs/promises"),nt=require("path"),Lu=require("os"),Nu=require("util");var ky=(0,Nu.promisify)(Mu.execFile),Rr=O.child({module:"process-scanner"}),Ou=5e3,Cy=1500,xy=/(^|[^A-Za-z0-9_.-])(claude|codex)([^A-Za-z0-9_.-]|$)/,Ry=500,Ey=15e3,In=null,wn=null;function Pr(){In=null}var Py=new Set(["sh","bash","zsh","fish"]),My=new Set(["env","nohup","timeout","gtimeout"]),Ly=new Set(["node","nodejs","bun","tsx"]),Ny=new Set(["-e","--eval","-p","--print"]),Oy=new Set(["-r","--require","--import","--loader","--experimental-loader","--env-file","--input-type"]);function By(t){return t.replace(/^['"]|['"]$/g,"")}function Bu(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(By)}function Pu(t){let e=(0,nt.basename)(t);return e==="claude"||e==="codex"?e:null}function Dy(t){for(let e of t.split(/&&|\|\||;|\n/)){let n=Du(Bu(e.trim()),!0);if(n)return n}return null}function Du(t,e=!1){let n=0;for(;n<t.length;){let r=t[n],s=(0,nt.basename)(r);if(My.has(s)){if(n+=1,s==="env")for(;n<t.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(t[n]);)n+=1;else if(s==="timeout"||s==="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(Py.has(s)){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?Dy(l):null}}return null}if(Ly.has(s)){let o=n+1;for(;o<t.length;){let l=t[o];if(Ny.has(l))return null;if(l==="--"){o+=1;break}if(!l.startsWith("-"))break;o+=1,Oy.has(l)&&o<t.length&&(o+=1)}if(o>=t.length)return null;let a=Pu(t[o]);return a?{agent:a,args:t.slice(o+1),viaWrapper:!0}:null}let i=Pu(r);return i?{agent:i,args:t.slice(n+1),viaWrapper:e}:null}return null}function Di(t,e=!1){return Du(Bu(t),e)}function Mr(t){let e=Di(t);return e?{agent:e.agent,args:e.args}:null}function Fu(t){return xy.test(t)&&Di(t)!==null}function Fy(t,e){let n=Mr(e);if(!n||n.agent!==t)return null;let{args:r}=n;if(t==="claude"){for(let s=0;s<r.length;s+=1){let i=r[s];if((i==="--resume"||i==="--session-id")&&r[s+1]&&!r[s+1].startsWith("-"))return r[s+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(r[0]!=="resume")return null;for(let s=1;s<r.length;s+=1){let i=r[s];if(!i.startsWith("-"))return i}return null}function Hy(t){if(t.includes("--dangerously-skip-permissions"))return"autoApprove";for(let e=0;e<t.length;e+=1){let n=t[e],r=t[e+1],s=n==="--permission-mode"?r:n.startsWith("--permission-mode=")?n.slice(18):void 0;if(s==="plan")return"plan";if(s==="acceptEdits")return"acceptEdits";if(s==="default")return"normal"}}function Uy(t){if(t.includes("--dangerously-bypass-approvals-and-sandbox"))return"autoApprove"}function Wy(t,e){let n=Mr(e);if(!(!n||n.agent!==t))return t==="claude"?Hy(n.args):Uy(n.args)}function xr(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function qy(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function Gy(t,e){let n=Di(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(r=>r.startsWith("--listen=")))}function jy(t){let e=[...new Set(t.sessionFiles)].filter(i=>qy(t.agent,i)),n=Fy(t.agent,t.command),r=Wy(t.agent,t.command);if(n)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:n,confidence:"high",...r?{approvalMode:r}:{},...e.length===1?{sessionFilePath:e[0]}:{}};if(e.length!==1)return null;let s=Mt(t.agent,e[0]);return s?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:s,confidence:"medium",...r?{approvalMode:r}:{},sessionFilePath:e[0]}:null}function $y(t,e){let n=t,r=e;(xr(e.confidence)>xr(t.confidence)||xr(e.confidence)===xr(t.confidence)&&e.pid!==void 0&&t.pid!==void 0&&e.pid<t.pid)&&(n=e,r=t);let s=n.approvalMode??r.approvalMode;return{...n,cwd:n.cwd||r.cwd,...s?{approvalMode:s}:{},title:n.title??r.title,sessionFilePath:n.sessionFilePath??r.sessionFilePath,isResponding:n.isResponding??r.isResponding}}function Fi(t){let e=new Map;for(let n of t){let r=`${n.agent}:${n.sessionId}`,s=e.get(r);e.set(r,s?$y(s,n):n)}return[...e.values()]}function zy(t){try{return process.kill(t,0),!0}catch{return!1}}async function Lr(t,e,n=Cy){try{let{stdout:r}=await ky(t,e,{maxBuffer:8388608,timeout:n});return r}catch(r){let s=typeof r=="object"&&r!==null?{code:"code"in r?r.code:void 0,signal:"signal"in r?r.signal:void 0,killed:"killed"in r?r.killed:void 0}:{},i=String(r);return i.includes("ESRCH")||i.includes("No such process")?Rr.debug({file:t,args:e,timeoutMs:n,error:i,...s},"process scan command skipped \u2014 process exited"):Rr.warn({file:t,args:e,timeoutMs:n,error:i,...s},"process scan command failed"),""}}async function Vy(t){if(!t.sessionFilePath)return t;let e=await rt(t.sessionFilePath,t.agent);if(!e)return null;let n=await Ui(t.sessionFilePath,t.agent),r=e.approvalMode??t.approvalMode;return{...t,cwd:t.cwd||e.cwd,...r?{approvalMode:r}:{},title:t.title??e.title,isResponding:n.isResponding}}async function Yy(t){return process.platform==="win32"?"":(await Lr("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
95
- `).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function Jy(t){if(process.platform==="win32")return[];let n=(await Lr("lsof",["-p",String(t),"-Fn"])).split(`
96
- `).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}function Ky(t){return t.split(`
97
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),s=n[2];if(!Fu(s))return null;let i=Mr(s);return!Number.isFinite(r)||!i?null:{pid:r,command:s,agent:i.agent}}).filter(e=>!!e)}async function Xy(){let t=await Lr("ps",["-axo","pid=,command="],Ou);return Ky(t)}async function Qy(){return(await Lr("wmic",["process","get","ProcessId,CommandLine","/FORMAT:CSV"],Ou)).split(`
98
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let r=Number(n[n.length-1]),s=n.slice(1,n.length-1).join(",");if(!Number.isFinite(r)||r===0||!Fu(s))return null;let i=Mr(s);return i?{pid:r,command:s,agent:i.agent}:null}).filter(e=>!!e)}async function Zy(){return process.platform==="win32"?Qy():Xy()}async function ev(t){let e=_.startTimer("process.scan.pgrep_ms"),n=await Zy();t&&(t.pgrepMs+=e()),t&&(t.matchedProcesses=n.length);let r=n.filter(o=>zy(o.pid));t&&(t.aliveProcesses=r.length);let s=_.startTimer("process.scan.lsof_ms"),i=await Promise.all(r.map(async o=>({pid:o.pid,agent:o.agent,command:o.command,cwd:await Yy(o.pid),sessionFiles:await Jy(o.pid)})));return t&&(t.lsofMs+=s()),t&&(t.snapshots=i.length),i}function tv(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function nv(t,e){if(!e)return null;try{if(t==="claude"){let n=(0,nt.join)((0,Lu.homedir)(),".claude","projects",tv(e)),s=(await(0,Er.readdir)(n).catch(()=>[])).filter(l=>l.endsWith(".jsonl"));if(s.length===0)return null;let i=null;if(await Promise.all(s.map(async l=>{let u=await(0,Er.stat)((0,nt.join)(n,l)).catch(()=>null);u&&(!i||u.mtimeMs>i.mtimeMs)&&(i={name:l,mtimeMs:u.mtimeMs})})),!i)return null;let o=(0,nt.join)(n,i.name),a=Mt(t,o);return a?{sessionId:a,filePath:o}:null}return Uu(e)}catch{return null}}async function rv(){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 ev(t),r=[],s=[];for(let c of n){let d=jy(c);if(d){r.push(d);continue}Gy(c.agent,c.command)&&s.push(c)}t.directCandidates=r.length,t.fallbackLookups=s.length;let i=_.startTimer("process.scan.fallback_ms"),o=await Promise.all(s.map(async c=>{let d=await nv(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([...r,...o.filter(c=>c!==null)].map(c=>Vy(c)));t.hydrateMs=a(),t.hydratedCandidates=l.filter(c=>c!==null).length;let u=Fi(l.filter(c=>c!==null));return t.totalMs=e(),(t.totalMs>=Ry||t.fallbackLookups>0)&&Rr.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"),In={value:u,expiresAt:Date.now()+Ey},u}async function Hi(){return In&&Date.now()<In.expiresAt?In.value:wn||(wn=rv().finally(()=>{wn=null}),wn)}async function Hu(t){try{return(await Hi()).some(n=>n.sessionId===t)}catch(e){return Rr.warn({sessionId:t,error:String(e)},"isSessionProcessAlive failed, treating as not alive"),!1}}var Gu=require("fs"),Fe=require("fs/promises"),qi=require("os"),An=require("path");var Tn=O.child({module:"activity-watcher"}),sv=12e4,iv=5e3,ov=6e4,Wu=5;function av(){return(0,An.join)((0,qi.homedir)(),".claude","projects")}function lv(){return(0,An.join)((0,qi.homedir)(),".codex","sessions")}async function qu(t){try{return await(0,Fe.realpath)(t)}catch{return t}}function Nr(t,e){return!(!t.endsWith(".jsonl")||e==="claude"&&t.includes("/subagents/"))}var Wi=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 qu(e?.claudeDir??av()),r=await qu(e?.codexDir??lv());if(this.roots.set(n,"claude"),this.roots.set(r,"codex"),await Promise.all([this.bootstrap("claude",n),this.bootstrap("codex",r)]),this.updateGauges(),e?.usePolling){let s=e.pollingIntervalMs??100;for(let[i,o]of this.roots){let a=setInterval(()=>{this.pollScan(o,i)},s);a.unref?.(),this.pollTimers.push(a)}}else for(let[s,i]of this.roots)this.startNativeWatch(s,i);this.rescanTimer=setInterval(()=>{this.safetyRescan().catch(s=>{Tn.warn({error:String(s)},"activity watcher rescan failed")})},ov),this.rescanTimer.unref?.(),Tn.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 r=(0,Gu.watch)(e,{recursive:!0,persistent:!0},(s,i)=>{if(!i)return;let o=(0,An.join)(e,i.toString());Nr(o,n)&&this.resolveFsEvent(n,o)});r.on("error",s=>{Tn.warn({error:String(s),root:e},"activity watcher error")}),this.watchers.push(r)}catch(r){Tn.warn({error:String(r),root:e},"failed to start native recursive watch")}}async resolveFsEvent(e,n){let r=await(0,Fe.stat)(n).catch(()=>null);if(!r){this.handleUnlink(n);return}r.isFile()&&await this.handleFsChange(n,r.mtimeMs)}async pollScan(e,n){let r=await this.walkSessionFiles(n,Wu),s=new Set,i=!1;for(let{filePath:o,mtimeMs:a}of r){if(!Nr(o,e))continue;s.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&&(s.has(o)||(this.handleUnlink(o),i=!0));i&&(this.updateGauges(),this.notify())}identifyAgent(e){for(let[n,r]of this.roots)if(e===n||e.startsWith(`${n}/`))return r;return null}listActive(e=sv){let n=Date.now(),r=n-e,s=n-iv,i=[];for(let o of this.entries.values())o.lastActivityMs<r||i.push({...o,isResponding:o.lastActivityMs>=s});return i}onActivity(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async bootstrap(e,n){let r=await this.walkSessionFiles(n,Wu);await Promise.all(r.map(async({filePath:s,mtimeMs:i})=>{Nr(s,e)&&await this.ingestPath(e,s,i,i)}))}async walkSessionFiles(e,n){let r=[],s=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,An.join)(i,l.name);if(l.isDirectory()){await s(u,o+1);return}if(!l.isFile()||!l.name.endsWith(".jsonl"))return;let c=await(0,Fe.stat)(u).catch(()=>null);c&&r.push({filePath:u,mtimeMs:c.mtimeMs})}))};return await s(e,0),r}async handleFsChange(e,n){let r=this.identifyAgent(e);if(!r||!Nr(e,r))return;let s=Date.now(),i=n??s;await this.ingestPath(r,e,s,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,r,s){let i=this.filePathIndex.get(n);if(i)return this.touchEntry(i,r,s);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,r),c.mtimeMs=Math.max(c.mtimeMs,s),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:r,mtimeMs:s}),this.filePathIndex.set(n,u)}finally{this.metaInFlight.delete(o)}})(),this.metaInFlight.set(o,a)),await a,this.filePathIndex.has(n)}touchEntry(e,n,r){let s=this.entries.get(e);if(!s)return!1;let i=Math.max(s.lastActivityMs,n),o=Math.max(s.mtimeMs,r);return i===s.lastActivityMs&&o===s.mtimeMs?!1:(s.lastActivityMs=i,s.mtimeMs=o,!0)}async safetyRescan(){if(this.entries.size===0)return;let e=[];for(let[r,s]of this.entries)e.push((async()=>{let i=await(0,Fe.stat)(s.filePath).catch(()=>null);return i?i.mtimeMs>s.mtimeMs?this.touchEntry(r,i.mtimeMs,i.mtimeMs):!1:(this.filePathIndex.delete(s.filePath),this.entries.delete(r),!0)})());(await Promise.all(e)).some(Boolean)&&(this.updateGauges(),this.notify())}notify(){for(let e of this.listeners)try{e()}catch(n){Tn.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()}},Lt=new Wi;var st=O.child({module:"inventory"}),Yu=6e3,cv=1e4;function uv(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 Lt.listActive().map(uv)}var Ju={listScannedSessions:Rn,listWatcherSessions:dv,scanRunningSessions:Hi,searchSessionContent:nd},ce=fv(),Cn=null,Or=0,Dr=0,Br=0,Gi=0,ji=new Set;function fv(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function pv(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 ju(t){return JSON.stringify({scannedSessions:t.scannedSessions.map(pv).sort(),runningSessions:t.runningSessions.map(hv).sort()})}function gv(){for(let t of ji)try{t()}catch(e){st.warn({error:String(e)},"session inventory backfill listener failed")}}function kn(){_.gauge("session.inventory.external_cached_sessions",ce.scannedSessions.length),_.gauge("session.inventory.external_running_sessions",ce.runningSessions.length),_.gauge("session.inventory.backfill_inflight",Cn?1:0)}function Ku(t){return ji.add(t),()=>{ji.delete(t)}}function Xu(){return{cachedSessions:ce.scannedSessions.length,runningSessions:ce.runningSessions.length,cacheAgeMs:ce.refreshedAt?Math.max(0,Date.now()-ce.refreshedAt):void 0,backfillInFlight:!!Cn,lastBackfillDurationMs:Br||void 0,lastBackfillCompletedAt:Dr?new Date(Dr).toISOString():void 0,lastBackfillAppliedAt:Gi?new Date(Gi).toISOString():void 0}}kn();function Qu(){return Lt.onActivity(()=>{td(Ju,Yu)})}var Nt={daemonActive:3,externalRunning:2,idle:1},$u={high:3,medium:2,low:1};function Zu(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function mv(t,e){let n=t.runtime.needsAttention?1:0,r=e.runtime.needsAttention?1:0,s=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return r-n||i-s||Nt[e.runtime.state]-Nt[t.runtime.state]||Zu(t,e)}function yv(t,e){return Nt[e.state]>Nt[t.state]?e:Nt[e.state]<Nt[t.state]?t:$u[e.confidence]>$u[t.confidence]?e:t}function vv(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function Sv(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function _v(t,e){return e?t?!(Pt(e)&&!Pt(t)):!0:!1}function $i(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function bv(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:{...$i(),...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 wv(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 Iv(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 Tv(t,e){for(let n of e){let r=`${n.agent}:${n.sessionId}`,s=t.get(r);if(!s){t.set(r,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=_v(s.title,n.title)?n.title:s.title,o=n.cwd||s.cwd,a=n.branch??s.branch,l=yv(s.runtime,n.runtime),u=s.sources.slice();for(let h of n.sources)u.includes(h)||u.push(h);let c=n.sources.includes("process"),d=s.sources.includes("process")&&!s.sources.includes("daemon"),p=c?s.lastActivityAt:d?n.lastActivityAt:Sv(s.lastActivityAt,n.lastActivityAt);t.set(r,{...s,cwd:o,model:n.model??s.model,branch:a,title:i,createdAt:vv(s.createdAt,n.createdAt),lastActivityAt:p,sources:u,runtime:l,managed:s.managed||n.managed,approvalMode:n.approvalMode??s.approvalMode,observedApprovalMode:n.observedApprovalMode??s.observedApprovalMode,lastUsage:n.lastUsage??s.lastUsage,interruptReason:n.interruptReason??s.interruptReason,stallWarning:n.stallWarning??s.stallWarning})}}function Av(...t){let e=new Map;for(let n of t)Tv(e,n);return[...e.values()]}function kv(t,e,n,r,s,i){let o=r?.toLowerCase(),a=t.filter(l=>{if(e&&l.agent!==e||n&&l.cwd!==n)return!1;if(o){let u=(l.title??"").toLowerCase(),c=(l.cwd??"").toLowerCase(),d=i?.[l.sessionId]?.toLowerCase()??"",p=u.includes(o)||c.includes(o)||(d?d.includes(o):!1),h=s?.has(l.sessionId)??!1;if(!p&&!h)return!1}return!0});return r&&st.info({total:t.length,filtered:a.length,search:r,contentMatchIds:s?.size??0},"filter applied"),a}function Cv(t,e){if(!e)return 0;let n=0,r=t.length;for(;n<r;){let s=n+r>>1,i=t[s];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?r=s:n=s+1}if(n>0){let s=t[n-1];if(s.lastActivityAt===e.lastActivityAt&&s.sessionId===e.sessionId)return n}return 0}function zu(t,e,n,r,s,i,o,a){let l=i?1/0:Math.max(1,e||50),u=Av(t.sessionRecords.map(bv),t.scannedSessions,t.runningSessions.map(T=>wv(T,t.scannedAt)),t.activeSessions.map(Iv)),c=t.deletedSessionIds?.size?u.filter(T=>!t.deletedSessionIds?.has(T.sessionId)):u,d=kv(c,r,s,i,o,a),p=d.filter(T=>T.runtime.state!=="idle"||T.managed).sort(mv),h=d.filter(T=>T.runtime.state==="idle"&&!T.managed).sort(Zu),g=Cv(h,n),f=h.slice(g,g+l),y=g+f.length<h.length&&f.length>0?{lastActivityAt:f[f.length-1].lastActivityAt,sessionId:f[f.length-1].sessionId}:void 0;return{sessions:n?f:[...p,...f],nextCursor:y}}async function Vu(t){if(t.sessions.length===0)return t;let e=t.sessions.map(o=>o.cwd),[n,r]=await Promise.all([Ru(e),Eu(e)]),s=!1,i=t.sessions.map(o=>{let a=n.get(o.cwd),l=r.get(o.cwd);return o.branch===a&&o.diffStat===l?o:(s=!0,{...o,branch:a,diffStat:l})});return s?{...t,sessions:i}:t}function xn(t,e,n,r,s){return new Promise(i=>{let o=Date.now(),a=!1,l=null,u=c=>{a||(a=!0,l&&(clearTimeout(l),l=null),i(c))};l=setTimeout(()=>{if(a)return;let c=Array.isArray(s)&&s.length>0;st.warn({source:t,timeoutMs:r,durationMs:Date.now()-o,partial:c?s.length:0},c?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),u(c?s:n)},r),typeof l=="object"&&"unref"in l&&l.unref(),e().then(c=>{u(c)}).catch(c=>{a||st.warn({source:t,error:String(c)},"session inventory source failed, using fallback"),u(n)})})}function xv(t=Date.now()){return ce.refreshedAt===0||t-ce.refreshedAt>=cv}async function ed(t,e){let[n,r]=await Promise.all([xn("watcher.running_sessions",()=>t.listWatcherSessions(),[],e),xn("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return Fi([...n,...r])}async function Rv(t,e){let n=new Date().toISOString(),r=[],[s,i]=await Promise.all([xn("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,r),[],e,r),ed(t,e)]);return{scannedSessions:s,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function td(t,e){if(Cn)return;let n=Or,r=_.startTimer("session.inventory.backfill_latency_ms");Cn=Rv(t,e).then(s=>{if(n!==Or)return;let i=ju(ce);ce=s;let o=ju(s),a=r();Br=a,Dr=Date.now(),kn(),i!==o&&(Gi=Date.now(),_.increment("session.inventory.backfill_applied"),st.info({durationMs:a,scanned:s.scannedSessions.length,running:s.runningSessions.length},"session inventory external backfill applied"),gv())}).catch(s=>{n===Or&&(Br=r(),Dr=Date.now(),kn(),st.warn({error:String(s),durationMs:Br},"session inventory external backfill failed"))}).finally(()=>{n===Or&&(Cn=null,kn())}),kn()}async function Fr(t){let e={...Ju,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??Yu);if(!t.search){let c=_.startTimer("session.inventory.fast_path_latency_ms");xv()&&td(e,n);let d=ce,p=zu({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:d.scannedSessions,runningSessions:d.runningSessions,scannedAt:d.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,void 0,void 0,t.customTitles);if(t.skipGitMetadata)return c(),p;let h=await Vu(p);return c(),h}let r=[],s=new Date().toISOString(),i=t.search,[o,a,l]=await Promise.all([xn("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),ed(e,n),xn("scanner.search_content",()=>e.searchSessionContent(i,t.agent),void 0,n)]);st.info({search:t.search,contentMatches:l?.size??0,scanned:o.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let u=zu({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:o,runningSessions:a,scannedAt:s,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,i,l,t.customTitles);return t.skipGitMetadata?u:Vu(u)}var Ae=O.child({module:"scanner"});function Zi(t){let e=new Map;return{get(n){let r=e.get(n);if(r){if(Date.now()>r.expiresAt){e.delete(n);return}return r.value}},set(n,r){e.set(n,{value:r,expiresAt:Date.now()+t})},clear(){e.clear()}}}var eo=3e4,Ji=Zi(eo),Ki=Zi(eo),Ur=Zi(eo),zi=new Map,Vi=new Map,Hr=null,it=24;function Gr(){Ji.clear(),Ki.clear(),Ur.clear()}function ud(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ot(t,e,n){if(t.length===0)return[];let r=Math.max(1,Math.min(e,t.length)),s=new Array(t.length),i=0;return await Promise.all(Array.from({length:r},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;s[o]=await n(t[o],o)}})),s}async function dd(){let t=(0,B.join)((0,ue.homedir)(),".codex","sessions"),e=await(0,N.readdir)(t).catch(()=>[]),n=[];for(let s of e){let i=(0,B.join)(t,s),o=await(0,N.readdir)(i).catch(()=>[]);for(let a of o){let l=(0,B.join)(i,a),u=await(0,N.readdir)(l).catch(()=>[]);for(let c of u){let d=(0,B.join)(l,c),p=await(0,N.readdir)(d).catch(()=>[]);for(let h of p)h.endsWith(".jsonl")&&n.push((0,B.join)(d,h))}}}let r=await ot(n,it,async s=>{let i=await(0,N.stat)(s).catch(()=>null);return{path:s,mtimeMs:i?.mtimeMs??0}});return r.sort((s,i)=>i.mtimeMs-s.mtimeMs),r}function Ev(t){let e=`codex-latest:${(0,ue.homedir)()}`,n=new Map;for(let r of t)n.has(r.cwd)||n.set(r.cwd,r.match);Ur.set(e,n)}function*fd(t,e){let n=0,r=0;for(;n<t.length&&r<e;){let s=t.indexOf(`
99
- `,n);s===-1&&(s=t.length);let i=t.substring(n,s);n=s+1,!(i.length===0||i.trim().length===0)&&(yield i,r+=1)}}var Yi=512*1024,rd=256*1024;async function pd(t,e){if(e<=Yi)return(0,N.readFile)(t,"utf-8");let n=await(0,N.open)(t,"r");try{let r=Buffer.alloc(Yi),{bytesRead:s}=await n.read(r,0,Yi,0);return r.toString("utf-8",0,s)}finally{await n.close()}}async function hd(t,e){if(e<=rd)return(0,N.readFile)(t,"utf-8");let n=await(0,N.open)(t,"r");try{let r=Math.max(0,e-rd),s=Buffer.alloc(e-r),{bytesRead:i}=await n.read(s,0,s.length,r);return s.toString("utf-8",0,i)}finally{await n.close()}}function sd(t){switch(t){case"plan":return"plan";case"acceptEdits":return"acceptEdits";case"bypassPermissions":return"autoApprove";case"default":return"normal";default:return}}function Pv(t){let e=typeof t?.approval_policy=="string"?t.approval_policy:"",n=t?.sandbox_policy,r=typeof n?.type=="string"?n.type:"",s=Array.isArray(n?.writable_roots)?n.writable_roots:null;if(e==="never"&&r==="danger-full-access")return"autoApprove";if(e==="on-request"&&r==="workspace-write")return s?.length?"normal":"plan"}function gd(t){return t?.type==="permission-mode"?sd(t.permissionMode):sd(t?.permissionMode)}function Mv(t){if(t?.type==="turn_context")return Pv(t.payload)}async function Lv(t,e,n){let r,s=await hd(t,n);for(let i of s.split(`
100
- `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=e==="claude"?gd(o):Mv(o);a&&(r=a)}return r}function id(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.input_tokens??e.inputTokens),r=Number(e.output_tokens??e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(r))return;let s=Number(e.cache_creation_input_tokens??e.cacheCreationInputTokens),i=Number(e.cache_read_input_tokens??e.cacheReadInputTokens);return{inputTokens:n,outputTokens:r,...Number.isFinite(s)?{cacheCreationInputTokens:s}:{},...Number.isFinite(i)?{cacheReadInputTokens:i}:{}}}function Nv(t){return t?.type==="assistant"?id(t.message?.usage??t.usage):id(t?.toolUseResult?.usage)}async function md(t,e){let n,r,s=await hd(t,e);for(let i of s.split(`
101
- `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=gd(o);a&&(n=a);let l=Nv(o);l&&(r=l)}return{approvalMode:n,lastUsage:r}}function to(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 yd(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?to(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function jr(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 Ov=["<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 Bv(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?Ov.some(r=>n.startsWith(r)):!1}function $r(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=jr(t.message.content);return Bv(t,e)?"":e}function Dv(t){return Array.isArray(t)&&t.some(e=>e&&typeof e=="object"&&e.type==="tool_result")}function Fv(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object"||e.type!=="tool_result")return"";let n=e.content;return typeof n=="string"?n:Array.isArray(n)?n.map(r=>!r||typeof r!="object"?"":typeof r.text=="string"?r.text:typeof r.content=="string"?r.content:"").filter(Boolean).join(`
93
+ `)}resolveToolContext(e){let n=j(e?.item)??e??null,r=Ei(n);if(!r)return null;let s=n?fu(n):null;if(s)return this.toolContextByCallId.set(r,s),{callId:r,toolContext:s};let i=this.toolContextByCallId.get(r);return i?{callId:r,toolContext:i}:null}createFallbackInput(e,n){return e?Pi(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,r){if(this.approvalRequests.set(e,n),I.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){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:r,approvalContext:Qm(n)})}handleServerRequest(e,n,r){let s=String(n),i=this.resolveToolContext(r);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(s,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},M(r?.reason)??M(r?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(s,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},M(r?.reason)??M(r?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=r?.questions;if(!sy(o)){P.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=ry(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(s,{kind:"request-user-input-approval",rpcId:n,questionId:a.questionId,approveLabel:a.approveLabel,denyLabel:a.denyLabel,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","questions"])},oy(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(s,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,[])},M(r?.reason)??M(r?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(s,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,[])},M(r?.reason)??M(r?.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 s=this.pending.get(e.id);this.pending.delete(e.id),e.error?s.reject(new Error(e.error.message??"RPC error")):s.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,r=j(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,r??void 0);return}switch(n&&P.debug({method:n,paramsPreview:JSON.stringify(r??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let s=r?.text??r?.delta??r?.content??"";s&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:s}):s||P.debug({paramsKeys:Object.keys(r??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":r?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:r.itemId??"",output:String(r.output)});break;case"item/started":{let s=j(r?.item),i=Ei(s),o=s?fu(s):null;i&&o&&(this.toolContextByCallId.set(i,o),this.handler&&this.handler({type:"tool.call",sessionId:this.threadId,toolName:o.toolName,input:o.input,toolCallId:i}));break}case"item/completed":{let s=j(r?.item)??r,i=Ei(s),o=i?this.toolContextByCallId.get(i):null;if(i&&o?.toolName==="Patch"&&this.handler){let a=iy(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 s=j(r?.tokenUsage),i=j(s?.last);if(!i)break;this.latestTurnUsage=ay({...i,modelContextWindow:s?.modelContextWindow});break}case"turn/aborted":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1,this.latestTurnUsage=void 0;let s=M(r?.reason)??M(j(r?.turn)?.reason);P.info({threadId:this.threadId,reason:s},"turn interrupted"),I.emit("session.interrupted",{agent:"codex",sessionId:this.threadId,...s?{reason:s}:{}}),this.handler&&this.handler({type:"session.interrupted",sessionId:this.threadId});break}case"turn/completed":{this.turnStartInFlight=!1,this.interruptRequestedDuringTurnStart=!1;let s=j(r?.turn),i=ty(s?.status),o=this.latestTurnUsage;if(this.latestTurnUsage=void 0,i&&ey.has(i)){P.info({threadId:this.threadId,status:i},"turn interrupted"),I.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"),I.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 N=require("fs/promises"),Ki=require("fs"),Xi=require("readline"),B=require("path"),ue=require("os");var ly=new Set(["New session","Resumed session","Untitled session"]),cy=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function uy(t){return t.replace(/\s+/g," ").trim()}function kr(t){return typeof t!="string"?void 0:uy(t)||void 0}function vu(t){let e=kr(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 Pt(t){let e=kr(t);return!e||ly.has(e)||vu(e)}function dy(t){for(let e of t.replace(/\r/g,"").split(`
94
+ `)){let n=kr(e);if(n&&!fy(n)&&!py(n))return n}}function fy(t){return cy.some(e=>t.startsWith(e))}function py(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function hy(t){for(let e=0;e<t.length;e+=1){let n=t[e];if(n==="\u3002"||n==="\uFF01"||n==="\uFF1F"||n==="\uFF1B")return e+1;if(n==="."||n==="!"||n==="?"||n===";"){let r=t[e+1];if(!r||/\s/.test(r))return e+1}}return-1}function Mi(t,e=80){if(typeof t!="string")return;let n=dy(t);if(!n)return;let r=hy(n),i=(r>0?n.slice(0,r):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||vu(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function tt(t,e){for(let n of t){let r=kr(n);if(!(!r||Pt(r)))return r}return Mi(e)}var bu=require("child_process"),wu=require("util");var Iu=(0,wu.promisify)(bu.execFile),Tu=5e3,gy=2500,my=3e3,Au=8,Cr=new Map,Li=new Map,Su=null;function yy(t){let e=Cr.get(t);return e?Date.now()>e.expiresAt?(Cr.delete(t),null):e.value??void 0:null}function vy(t,e){if(e===void 0){Cr.delete(t);return}Cr.set(t,{value:e,expiresAt:Date.now()+Tu})}async function Sy(t){if(!t)return;if(Su)return Su(t);let e=[["branch","--show-current"],["rev-parse","--abbrev-ref","HEAD"]];for(let n of e)try{let{stdout:r}=await Iu("git",["-C",t,...n],{env:Qe(),timeout:gy,maxBuffer:65536}),s=r.trim();if(s&&s!=="HEAD")return s}catch{}}async function _y(t){let e=yy(t);if(e!==null)return e;let n=Li.get(t);if(n)return n;let r=Sy(t).then(s=>(vy(t,s),s)).finally(()=>{Li.delete(t)});return Li.set(t,r),r}async function ku(t,e,n){if(t.length===0)return;let r=Math.max(1,Math.min(e,t.length)),s=0;await Promise.all(Array.from({length:r},async()=>{for(;;){let i=s;if(s+=1,i>=t.length)return;await n(t[i])}}))}async function Cu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await ku(e,Au,async r=>{n.set(r,await _y(r))}),n}var Oi=new Map,Ni=new Map,_u=null;function by(t,e){if(e===void 0){Oi.delete(t);return}Oi.set(t,{value:e,expiresAt:Date.now()+Tu})}async function wy(t){if(t){if(_u)return _u(t);for(let e=0;e<2;e+=1)try{let{stdout:n}=await Iu("git",["-C",t,"diff","HEAD","--shortstat"],{env:Qe(),timeout:my,maxBuffer:65536}),r=n.trim();if(!r)return;let s=r.match(/(\d+) insertion/),i=r.match(/(\d+) deletion/),o=s?Number(s[1]):0,a=i?Number(i[1]):0;return o===0&&a===0?void 0:{additions:o,deletions:a}}catch{if(e===1)return}}}async function Iy(t){let e=Oi.get(t);if(e&&Date.now()<=e.expiresAt)return e.value;let n=Ni.get(t);if(n)return n;let r=wy(t).then(s=>(by(t,s),s)).finally(()=>{Ni.delete(t)});return Ni.set(t,r),r}async function xu(t){let e=[...new Set(t.filter(Boolean))],n=new Map;return await ku(e,Au,async r=>{n.set(r,await Iy(r))}),n}var Eu=require("child_process"),Er=require("fs/promises"),nt=require("path"),Pu=require("os"),Mu=require("util");var Ty=(0,Mu.promisify)(Eu.execFile),Rr=O.child({module:"process-scanner"}),Lu=5e3,Ay=1500,ky=/(^|[^A-Za-z0-9_.-])(claude|codex)([^A-Za-z0-9_.-]|$)/,Cy=500,xy=15e3,In=null,wn=null;function Pr(){In=null}var Ry=new Set(["sh","bash","zsh","fish"]),Ey=new Set(["env","nohup","timeout","gtimeout"]),Py=new Set(["node","nodejs","bun","tsx"]),My=new Set(["-e","--eval","-p","--print"]),Ly=new Set(["-r","--require","--import","--loader","--experimental-loader","--env-file","--input-type"]);function Ny(t){return t.replace(/^['"]|['"]$/g,"")}function Nu(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(Ny)}function Ru(t){let e=(0,nt.basename)(t);return e==="claude"||e==="codex"?e:null}function Oy(t){for(let e of t.split(/&&|\|\||;|\n/)){let n=Ou(Nu(e.trim()),!0);if(n)return n}return null}function Ou(t,e=!1){let n=0;for(;n<t.length;){let r=t[n],s=(0,nt.basename)(r);if(Ey.has(s)){if(n+=1,s==="env")for(;n<t.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(t[n]);)n+=1;else if(s==="timeout"||s==="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(Ry.has(s)){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?Oy(l):null}}return null}if(Py.has(s)){let o=n+1;for(;o<t.length;){let l=t[o];if(My.has(l))return null;if(l==="--"){o+=1;break}if(!l.startsWith("-"))break;o+=1,Ly.has(l)&&o<t.length&&(o+=1)}if(o>=t.length)return null;let a=Ru(t[o]);return a?{agent:a,args:t.slice(o+1),viaWrapper:!0}:null}let i=Ru(r);return i?{agent:i,args:t.slice(n+1),viaWrapper:e}:null}return null}function Bi(t,e=!1){return Ou(Nu(t),e)}function Mr(t){let e=Bi(t);return e?{agent:e.agent,args:e.args}:null}function Bu(t){return ky.test(t)&&Bi(t)!==null}function By(t,e){let n=Mr(e);if(!n||n.agent!==t)return null;let{args:r}=n;if(t==="claude"){for(let s=0;s<r.length;s+=1){let i=r[s];if((i==="--resume"||i==="--session-id")&&r[s+1]&&!r[s+1].startsWith("-"))return r[s+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(r[0]!=="resume")return null;for(let s=1;s<r.length;s+=1){let i=r[s];if(!i.startsWith("-"))return i}return null}function Dy(t){if(t.includes("--dangerously-skip-permissions"))return"autoApprove";for(let e=0;e<t.length;e+=1){let n=t[e],r=t[e+1],s=n==="--permission-mode"?r:n.startsWith("--permission-mode=")?n.slice(18):void 0;if(s==="plan")return"plan";if(s==="acceptEdits")return"acceptEdits";if(s==="default")return"normal"}}function Fy(t){if(t.includes("--dangerously-bypass-approvals-and-sandbox"))return"autoApprove"}function Hy(t,e){let n=Mr(e);if(!(!n||n.agent!==t))return t==="claude"?Dy(n.args):Fy(n.args)}function xr(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function Uy(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function Wy(t,e){let n=Bi(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(r=>r.startsWith("--listen=")))}function qy(t){let e=[...new Set(t.sessionFiles)].filter(i=>Uy(t.agent,i)),n=By(t.agent,t.command),r=Hy(t.agent,t.command);if(n)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:n,confidence:"high",...r?{approvalMode:r}:{},...e.length===1?{sessionFilePath:e[0]}:{}};if(e.length!==1)return null;let s=Mt(t.agent,e[0]);return s?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:s,confidence:"medium",...r?{approvalMode:r}:{},sessionFilePath:e[0]}:null}function Gy(t,e){let n=t,r=e;(xr(e.confidence)>xr(t.confidence)||xr(e.confidence)===xr(t.confidence)&&e.pid!==void 0&&t.pid!==void 0&&e.pid<t.pid)&&(n=e,r=t);let s=n.approvalMode??r.approvalMode;return{...n,cwd:n.cwd||r.cwd,...s?{approvalMode:s}:{},title:n.title??r.title,sessionFilePath:n.sessionFilePath??r.sessionFilePath,isResponding:n.isResponding??r.isResponding}}function Di(t){let e=new Map;for(let n of t){let r=`${n.agent}:${n.sessionId}`,s=e.get(r);e.set(r,s?Gy(s,n):n)}return[...e.values()]}function jy(t){try{return process.kill(t,0),!0}catch{return!1}}async function Lr(t,e,n=Ay){try{let{stdout:r}=await Ty(t,e,{maxBuffer:8388608,timeout:n});return r}catch(r){let s=typeof r=="object"&&r!==null?{code:"code"in r?r.code:void 0,signal:"signal"in r?r.signal:void 0,killed:"killed"in r?r.killed:void 0}:{},i=String(r);return i.includes("ESRCH")||i.includes("No such process")?Rr.debug({file:t,args:e,timeoutMs:n,error:i,...s},"process scan command skipped \u2014 process exited"):Rr.warn({file:t,args:e,timeoutMs:n,error:i,...s},"process scan command failed"),""}}async function $y(t){if(!t.sessionFilePath)return t;let e=await rt(t.sessionFilePath,t.agent);if(!e)return null;let n=await Hi(t.sessionFilePath,t.agent),r=e.approvalMode??t.approvalMode;return{...t,cwd:t.cwd||e.cwd,...r?{approvalMode:r}:{},title:t.title??e.title,isResponding:n.isResponding}}async function zy(t){return process.platform==="win32"?"":(await Lr("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
95
+ `).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function Vy(t){if(process.platform==="win32")return[];let n=(await Lr("lsof",["-p",String(t),"-Fn"])).split(`
96
+ `).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}function Yy(t){return t.split(`
97
+ `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),s=n[2];if(!Bu(s))return null;let i=Mr(s);return!Number.isFinite(r)||!i?null:{pid:r,command:s,agent:i.agent}}).filter(e=>!!e)}async function Jy(){let t=await Lr("ps",["-axo","pid=,command="],Lu);return Yy(t)}async function Ky(){return(await Lr("wmic",["process","get","ProcessId,CommandLine","/FORMAT:CSV"],Lu)).split(`
98
+ `).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.split(",");if(n.length<3)return null;let r=Number(n[n.length-1]),s=n.slice(1,n.length-1).join(",");if(!Number.isFinite(r)||r===0||!Bu(s))return null;let i=Mr(s);return i?{pid:r,command:s,agent:i.agent}:null}).filter(e=>!!e)}async function Xy(){return process.platform==="win32"?Ky():Jy()}async function Qy(t){let e=_.startTimer("process.scan.pgrep_ms"),n=await Xy();t&&(t.pgrepMs+=e()),t&&(t.matchedProcesses=n.length);let r=n.filter(o=>jy(o.pid));t&&(t.aliveProcesses=r.length);let s=_.startTimer("process.scan.lsof_ms"),i=await Promise.all(r.map(async o=>({pid:o.pid,agent:o.agent,command:o.command,cwd:await zy(o.pid),sessionFiles:await Vy(o.pid)})));return t&&(t.lsofMs+=s()),t&&(t.snapshots=i.length),i}function Zy(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ev(t,e){if(!e)return null;try{if(t==="claude"){let n=(0,nt.join)((0,Pu.homedir)(),".claude","projects",Zy(e)),s=(await(0,Er.readdir)(n).catch(()=>[])).filter(l=>l.endsWith(".jsonl"));if(s.length===0)return null;let i=null;if(await Promise.all(s.map(async l=>{let u=await(0,Er.stat)((0,nt.join)(n,l)).catch(()=>null);u&&(!i||u.mtimeMs>i.mtimeMs)&&(i={name:l,mtimeMs:u.mtimeMs})})),!i)return null;let o=(0,nt.join)(n,i.name),a=Mt(t,o);return a?{sessionId:a,filePath:o}:null}return Fu(e)}catch{return null}}async function tv(){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 Qy(t),r=[],s=[];for(let c of n){let d=qy(c);if(d){r.push(d);continue}Wy(c.agent,c.command)&&s.push(c)}t.directCandidates=r.length,t.fallbackLookups=s.length;let i=_.startTimer("process.scan.fallback_ms"),o=await Promise.all(s.map(async c=>{let d=await ev(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([...r,...o.filter(c=>c!==null)].map(c=>$y(c)));t.hydrateMs=a(),t.hydratedCandidates=l.filter(c=>c!==null).length;let u=Di(l.filter(c=>c!==null));return t.totalMs=e(),(t.totalMs>=Cy||t.fallbackLookups>0)&&Rr.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"),In={value:u,expiresAt:Date.now()+xy},u}async function Fi(){return In&&Date.now()<In.expiresAt?In.value:wn||(wn=tv().finally(()=>{wn=null}),wn)}async function Du(t){try{return(await Fi()).some(n=>n.sessionId===t)}catch(e){return Rr.warn({sessionId:t,error:String(e)},"isSessionProcessAlive failed, treating as not alive"),!1}}var Wu=require("fs"),Fe=require("fs/promises"),Wi=require("os"),An=require("path");var Tn=O.child({module:"activity-watcher"}),nv=12e4,rv=5e3,sv=6e4,Hu=5;function iv(){return(0,An.join)((0,Wi.homedir)(),".claude","projects")}function ov(){return(0,An.join)((0,Wi.homedir)(),".codex","sessions")}async function Uu(t){try{return await(0,Fe.realpath)(t)}catch{return t}}function Nr(t,e){return!(!t.endsWith(".jsonl")||e==="claude"&&t.includes("/subagents/"))}var Ui=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 Uu(e?.claudeDir??iv()),r=await Uu(e?.codexDir??ov());if(this.roots.set(n,"claude"),this.roots.set(r,"codex"),await Promise.all([this.bootstrap("claude",n),this.bootstrap("codex",r)]),this.updateGauges(),e?.usePolling){let s=e.pollingIntervalMs??100;for(let[i,o]of this.roots){let a=setInterval(()=>{this.pollScan(o,i)},s);a.unref?.(),this.pollTimers.push(a)}}else for(let[s,i]of this.roots)this.startNativeWatch(s,i);this.rescanTimer=setInterval(()=>{this.safetyRescan().catch(s=>{Tn.warn({error:String(s)},"activity watcher rescan failed")})},sv),this.rescanTimer.unref?.(),Tn.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 r=(0,Wu.watch)(e,{recursive:!0,persistent:!0},(s,i)=>{if(!i)return;let o=(0,An.join)(e,i.toString());Nr(o,n)&&this.resolveFsEvent(n,o)});r.on("error",s=>{Tn.warn({error:String(s),root:e},"activity watcher error")}),this.watchers.push(r)}catch(r){Tn.warn({error:String(r),root:e},"failed to start native recursive watch")}}async resolveFsEvent(e,n){let r=await(0,Fe.stat)(n).catch(()=>null);if(!r){this.handleUnlink(n);return}r.isFile()&&await this.handleFsChange(n,r.mtimeMs)}async pollScan(e,n){let r=await this.walkSessionFiles(n,Hu),s=new Set,i=!1;for(let{filePath:o,mtimeMs:a}of r){if(!Nr(o,e))continue;s.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&&(s.has(o)||(this.handleUnlink(o),i=!0));i&&(this.updateGauges(),this.notify())}identifyAgent(e){for(let[n,r]of this.roots)if(e===n||e.startsWith(`${n}/`))return r;return null}listActive(e=nv){let n=Date.now(),r=n-e,s=n-rv,i=[];for(let o of this.entries.values())o.lastActivityMs<r||i.push({...o,isResponding:o.lastActivityMs>=s});return i}onActivity(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async bootstrap(e,n){let r=await this.walkSessionFiles(n,Hu);await Promise.all(r.map(async({filePath:s,mtimeMs:i})=>{Nr(s,e)&&await this.ingestPath(e,s,i,i)}))}async walkSessionFiles(e,n){let r=[],s=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,An.join)(i,l.name);if(l.isDirectory()){await s(u,o+1);return}if(!l.isFile()||!l.name.endsWith(".jsonl"))return;let c=await(0,Fe.stat)(u).catch(()=>null);c&&r.push({filePath:u,mtimeMs:c.mtimeMs})}))};return await s(e,0),r}async handleFsChange(e,n){let r=this.identifyAgent(e);if(!r||!Nr(e,r))return;let s=Date.now(),i=n??s;await this.ingestPath(r,e,s,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,r,s){let i=this.filePathIndex.get(n);if(i)return this.touchEntry(i,r,s);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,r),c.mtimeMs=Math.max(c.mtimeMs,s),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:r,mtimeMs:s}),this.filePathIndex.set(n,u)}finally{this.metaInFlight.delete(o)}})(),this.metaInFlight.set(o,a)),await a,this.filePathIndex.has(n)}touchEntry(e,n,r){let s=this.entries.get(e);if(!s)return!1;let i=Math.max(s.lastActivityMs,n),o=Math.max(s.mtimeMs,r);return i===s.lastActivityMs&&o===s.mtimeMs?!1:(s.lastActivityMs=i,s.mtimeMs=o,!0)}async safetyRescan(){if(this.entries.size===0)return;let e=[];for(let[r,s]of this.entries)e.push((async()=>{let i=await(0,Fe.stat)(s.filePath).catch(()=>null);return i?i.mtimeMs>s.mtimeMs?this.touchEntry(r,i.mtimeMs,i.mtimeMs):!1:(this.filePathIndex.delete(s.filePath),this.entries.delete(r),!0)})());(await Promise.all(e)).some(Boolean)&&(this.updateGauges(),this.notify())}notify(){for(let e of this.listeners)try{e()}catch(n){Tn.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()}},Lt=new Ui;var st=O.child({module:"inventory"}),zu=6e3,av=1e4;function lv(t){return{agent:t.agent,cwd:t.cwd,sessionId:t.sessionId,confidence:"high",sessionFilePath:t.filePath,title:t.title,isResponding:t.isResponding}}async function cv(){return Lt.listActive().map(lv)}var Vu={listScannedSessions:Rn,listWatcherSessions:cv,scanRunningSessions:Fi,searchSessionContent:ed},ce=uv(),Cn=null,Or=0,Dr=0,Br=0,qi=0,Gi=new Set;function uv(){return{scannedSessions:[],runningSessions:[],scannedAt:"",refreshedAt:0}}function dv(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 fv(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(dv).sort(),runningSessions:t.runningSessions.map(fv).sort()})}function pv(){for(let t of Gi)try{t()}catch(e){st.warn({error:String(e)},"session inventory backfill listener failed")}}function kn(){_.gauge("session.inventory.external_cached_sessions",ce.scannedSessions.length),_.gauge("session.inventory.external_running_sessions",ce.runningSessions.length),_.gauge("session.inventory.backfill_inflight",Cn?1:0)}function Yu(t){return Gi.add(t),()=>{Gi.delete(t)}}function Ju(){return{cachedSessions:ce.scannedSessions.length,runningSessions:ce.runningSessions.length,cacheAgeMs:ce.refreshedAt?Math.max(0,Date.now()-ce.refreshedAt):void 0,backfillInFlight:!!Cn,lastBackfillDurationMs:Br||void 0,lastBackfillCompletedAt:Dr?new Date(Dr).toISOString():void 0,lastBackfillAppliedAt:qi?new Date(qi).toISOString():void 0}}kn();function Ku(){return Lt.onActivity(()=>{Zu(Vu,zu)})}var Nt={daemonActive:3,externalRunning:2,idle:1},Gu={high:3,medium:2,low:1};function Xu(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function hv(t,e){let n=t.runtime.needsAttention?1:0,r=e.runtime.needsAttention?1:0,s=t.runtime.isResponding?1:0,i=e.runtime.isResponding?1:0;return r-n||i-s||Nt[e.runtime.state]-Nt[t.runtime.state]||Xu(t,e)}function gv(t,e){return Nt[e.state]>Nt[t.state]?e:Nt[e.state]<Nt[t.state]?t:Gu[e.confidence]>Gu[t.confidence]?e:t}function mv(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function yv(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function vv(t,e){return e?t?!(Pt(e)&&!Pt(t)):!0:!1}function ji(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function Sv(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:{...ji(),...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 _v(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 bv(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 wv(t,e){for(let n of e){let r=`${n.agent}:${n.sessionId}`,s=t.get(r);if(!s){t.set(r,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=vv(s.title,n.title)?n.title:s.title,o=n.cwd||s.cwd,a=n.branch??s.branch,l=gv(s.runtime,n.runtime),u=s.sources.slice();for(let h of n.sources)u.includes(h)||u.push(h);let c=n.sources.includes("process"),d=s.sources.includes("process")&&!s.sources.includes("daemon"),p=c?s.lastActivityAt:d?n.lastActivityAt:yv(s.lastActivityAt,n.lastActivityAt);t.set(r,{...s,cwd:o,model:n.model??s.model,branch:a,title:i,createdAt:mv(s.createdAt,n.createdAt),lastActivityAt:p,sources:u,runtime:l,managed:s.managed||n.managed,approvalMode:n.approvalMode??s.approvalMode,observedApprovalMode:n.observedApprovalMode??s.observedApprovalMode,lastUsage:n.lastUsage??s.lastUsage,interruptReason:n.interruptReason??s.interruptReason,stallWarning:n.stallWarning??s.stallWarning})}}function Iv(...t){let e=new Map;for(let n of t)wv(e,n);return[...e.values()]}function Tv(t,e,n,r,s,i){let o=r?.toLowerCase(),a=t.filter(l=>{if(e&&l.agent!==e||n&&l.cwd!==n)return!1;if(o){let u=(l.title??"").toLowerCase(),c=(l.cwd??"").toLowerCase(),d=i?.[l.sessionId]?.toLowerCase()??"",p=u.includes(o)||c.includes(o)||(d?d.includes(o):!1),h=s?.has(l.sessionId)??!1;if(!p&&!h)return!1}return!0});return r&&st.info({total:t.length,filtered:a.length,search:r,contentMatchIds:s?.size??0},"filter applied"),a}function Av(t,e){if(!e)return 0;let n=0,r=t.length;for(;n<r;){let s=n+r>>1,i=t[s];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?r=s:n=s+1}if(n>0){let s=t[n-1];if(s.lastActivityAt===e.lastActivityAt&&s.sessionId===e.sessionId)return n}return 0}function ju(t,e,n,r,s,i,o,a){let l=i?1/0:Math.max(1,e||50),u=Iv(t.sessionRecords.map(Sv),t.scannedSessions,t.runningSessions.map(T=>_v(T,t.scannedAt)),t.activeSessions.map(bv)),c=t.deletedSessionIds?.size?u.filter(T=>!t.deletedSessionIds?.has(T.sessionId)):u,d=Tv(c,r,s,i,o,a),p=d.filter(T=>T.runtime.state!=="idle"||T.managed).sort(hv),h=d.filter(T=>T.runtime.state==="idle"&&!T.managed).sort(Xu),g=Av(h,n),f=h.slice(g,g+l),y=g+f.length<h.length&&f.length>0?{lastActivityAt:f[f.length-1].lastActivityAt,sessionId:f[f.length-1].sessionId}:void 0;return{sessions:n?f:[...p,...f],nextCursor:y}}async function $u(t){if(t.sessions.length===0)return t;let e=t.sessions.map(o=>o.cwd),[n,r]=await Promise.all([Cu(e),xu(e)]),s=!1,i=t.sessions.map(o=>{let a=n.get(o.cwd),l=r.get(o.cwd);return o.branch===a&&o.diffStat===l?o:(s=!0,{...o,branch:a,diffStat:l})});return s?{...t,sessions:i}:t}function xn(t,e,n,r,s){return new Promise(i=>{let o=Date.now(),a=!1,l=null,u=c=>{a||(a=!0,l&&(clearTimeout(l),l=null),i(c))};l=setTimeout(()=>{if(a)return;let c=Array.isArray(s)&&s.length>0;st.warn({source:t,timeoutMs:r,durationMs:Date.now()-o,partial:c?s.length:0},c?"session inventory source timed out, using partial results":"session inventory source timed out, using fallback"),u(c?s:n)},r),typeof l=="object"&&"unref"in l&&l.unref(),e().then(c=>{u(c)}).catch(c=>{a||st.warn({source:t,error:String(c)},"session inventory source failed, using fallback"),u(n)})})}function kv(t=Date.now()){return ce.refreshedAt===0||t-ce.refreshedAt>=av}async function Qu(t,e){let[n,r]=await Promise.all([xn("watcher.running_sessions",()=>t.listWatcherSessions(),[],e),xn("process.running_sessions",()=>t.scanRunningSessions(),[],e)]);return Di([...n,...r])}async function Cv(t,e){let n=new Date().toISOString(),r=[],[s,i]=await Promise.all([xn("scanner.sessions",()=>t.listScannedSessions(void 0,void 0,r),[],e,r),Qu(t,e)]);return{scannedSessions:s,runningSessions:i,scannedAt:n,refreshedAt:Date.now()}}function Zu(t,e){if(Cn)return;let n=Or,r=_.startTimer("session.inventory.backfill_latency_ms");Cn=Cv(t,e).then(s=>{if(n!==Or)return;let i=qu(ce);ce=s;let o=qu(s),a=r();Br=a,Dr=Date.now(),kn(),i!==o&&(qi=Date.now(),_.increment("session.inventory.backfill_applied"),st.info({durationMs:a,scanned:s.scannedSessions.length,running:s.runningSessions.length},"session inventory external backfill applied"),pv())}).catch(s=>{n===Or&&(Br=r(),Dr=Date.now(),kn(),st.warn({error:String(s),durationMs:Br},"session inventory external backfill failed"))}).finally(()=>{n===Or&&(Cn=null,kn())}),kn()}async function Fr(t){let e={...Vu,...t.loaders??{}},n=Math.max(250,t.sourceTimeoutMs??zu);if(!t.search){let c=_.startTimer("session.inventory.fast_path_latency_ms");kv()&&Zu(e,n);let d=ce,p=ju({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:d.scannedSessions,runningSessions:d.runningSessions,scannedAt:d.scannedAt||new Date().toISOString(),deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,void 0,void 0,t.customTitles);if(t.skipGitMetadata)return c(),p;let h=await $u(p);return c(),h}let r=[],s=new Date().toISOString(),i=t.search,[o,a,l]=await Promise.all([xn("scanner.sessions",()=>e.listScannedSessions(t.agent,t.cwd,r),[],n,r),Qu(e,n),xn("scanner.search_content",()=>e.searchSessionContent(i,t.agent),void 0,n)]);st.info({search:t.search,contentMatches:l?.size??0,scanned:o.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results");let u=ju({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:o,runningSessions:a,scannedAt:s,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,i,l,t.customTitles);return t.skipGitMetadata?u:$u(u)}var Ae=O.child({module:"scanner"});function Qi(t){let e=new Map;return{get(n){let r=e.get(n);if(r){if(Date.now()>r.expiresAt){e.delete(n);return}return r.value}},set(n,r){e.set(n,{value:r,expiresAt:Date.now()+t})},clear(){e.clear()}}}var Zi=3e4,Yi=Qi(Zi),Ji=Qi(Zi),Ur=Qi(Zi),$i=new Map,zi=new Map,Hr=null,it=24;function Gr(){Yi.clear(),Ji.clear(),Ur.clear()}function ld(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ot(t,e,n){if(t.length===0)return[];let r=Math.max(1,Math.min(e,t.length)),s=new Array(t.length),i=0;return await Promise.all(Array.from({length:r},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;s[o]=await n(t[o],o)}})),s}async function cd(){let t=(0,B.join)((0,ue.homedir)(),".codex","sessions"),e=await(0,N.readdir)(t).catch(()=>[]),n=[];for(let s of e){let i=(0,B.join)(t,s),o=await(0,N.readdir)(i).catch(()=>[]);for(let a of o){let l=(0,B.join)(i,a),u=await(0,N.readdir)(l).catch(()=>[]);for(let c of u){let d=(0,B.join)(l,c),p=await(0,N.readdir)(d).catch(()=>[]);for(let h of p)h.endsWith(".jsonl")&&n.push((0,B.join)(d,h))}}}let r=await ot(n,it,async s=>{let i=await(0,N.stat)(s).catch(()=>null);return{path:s,mtimeMs:i?.mtimeMs??0}});return r.sort((s,i)=>i.mtimeMs-s.mtimeMs),r}function xv(t){let e=`codex-latest:${(0,ue.homedir)()}`,n=new Map;for(let r of t)n.has(r.cwd)||n.set(r.cwd,r.match);Ur.set(e,n)}function*ud(t,e){let n=0,r=0;for(;n<t.length&&r<e;){let s=t.indexOf(`
99
+ `,n);s===-1&&(s=t.length);let i=t.substring(n,s);n=s+1,!(i.length===0||i.trim().length===0)&&(yield i,r+=1)}}var Vi=512*1024,td=256*1024;async function dd(t,e){if(e<=Vi)return(0,N.readFile)(t,"utf-8");let n=await(0,N.open)(t,"r");try{let r=Buffer.alloc(Vi),{bytesRead:s}=await n.read(r,0,Vi,0);return r.toString("utf-8",0,s)}finally{await n.close()}}async function fd(t,e){if(e<=td)return(0,N.readFile)(t,"utf-8");let n=await(0,N.open)(t,"r");try{let r=Math.max(0,e-td),s=Buffer.alloc(e-r),{bytesRead:i}=await n.read(s,0,s.length,r);return s.toString("utf-8",0,i)}finally{await n.close()}}function nd(t){switch(t){case"plan":return"plan";case"acceptEdits":return"acceptEdits";case"bypassPermissions":return"autoApprove";case"default":return"normal";default:return}}function Rv(t){let e=typeof t?.approval_policy=="string"?t.approval_policy:"",n=t?.sandbox_policy,r=typeof n?.type=="string"?n.type:"",s=Array.isArray(n?.writable_roots)?n.writable_roots:null;if(e==="never"&&r==="danger-full-access")return"autoApprove";if(e==="on-request"&&r==="workspace-write")return s?.length?"normal":"plan"}function Ev(t){return t?.type==="permission-mode"?nd(t.permissionMode):nd(t?.permissionMode)}function Pv(t){if(t?.type==="turn_context")return Rv(t.payload)}function Mv(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 r=Number(n.input_tokens),s=Number(n.output_tokens);if(!Number.isFinite(r)||!Number.isFinite(s))return;let i=Number(e.model_context_window);return{inputTokens:r,outputTokens:s,...Number.isFinite(i)&&i>0?{contextWindowTokens:i}:{}}}async function Lv(t,e){let n,r,s=await fd(t,e);for(let i of s.split(`
100
+ `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=Pv(o);a&&(n=a);let l=Mv(o);l&&(r=l)}return{approvalMode:n,lastUsage:r}}function rd(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.input_tokens??e.inputTokens),r=Number(e.output_tokens??e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(r))return;let s=Number(e.cache_creation_input_tokens??e.cacheCreationInputTokens),i=Number(e.cache_read_input_tokens??e.cacheReadInputTokens);return{inputTokens:n,outputTokens:r,...Number.isFinite(s)?{cacheCreationInputTokens:s}:{},...Number.isFinite(i)?{cacheReadInputTokens:i}:{}}}function Nv(t){return t?.type==="assistant"?rd(t.message?.usage??t.usage):rd(t?.toolUseResult?.usage)}async function pd(t,e){let n,r,s=await fd(t,e);for(let i of s.split(`
101
+ `)){if(!i.trim())continue;let o;try{o=JSON.parse(i)}catch{continue}let a=Ev(o);a&&(n=a);let l=Nv(o);l&&(r=l)}return{approvalMode:n,lastUsage:r}}function eo(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 hd(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?eo(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function jr(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 Ov=["<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 Bv(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?Ov.some(r=>n.startsWith(r)):!1}function $r(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=jr(t.message.content);return Bv(t,e)?"":e}function Dv(t){return Array.isArray(t)&&t.some(e=>e&&typeof e=="object"&&e.type==="tool_result")}function Fv(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object"||e.type!=="tool_result")return"";let n=e.content;return typeof n=="string"?n:Array.isArray(n)?n.map(r=>!r||typeof r!="object"?"":typeof r.text=="string"?r.text:typeof r.content=="string"?r.content:"").filter(Boolean).join(`
102
102
  `):""}).filter(Boolean).join(`
103
103
  `):""}function Hv(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(`
104
- `):""}function od(t){if(typeof t=="string")return t;let e=Hv(t);return e||(Array.isArray(t)&&t.length>0&&t.every(r=>r&&typeof r=="object"&&r.type==="tool_reference")?"":JSON.stringify(t))}var Uv=/Claude requested permissions to (?:edit|write to) (.+?) which is a sensitive file\.?$/i;function Wv(t){let n=t.match(Uv)?.[1]?.trim();return n||null}function qv(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 Gv(t){let e=Fv(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 vd(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function Wr(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:$i()}}function Mt(t,e){let n=(0,B.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 jv(t,e){let n=await pd(t,e),r=fd(n,64),s="",i="",o,a,l;for(let c of r){let d;try{d=JSON.parse(c)}catch{continue}if(!s&&typeof d.cwd=="string"&&(s=d.cwd),!i&&typeof d.sessionId=="string"&&(i=d.sessionId),o||(o=tt([d.customTitle,d.summary])),!l){let p=$r(d),h=tt([],p);h&&(a=p,l=h)}if(s&&(o||l))break}if(!s)return null;let u=await md(t,e);return{sessionId:i||Mt("claude",t)||(0,B.basename)(t,".jsonl"),cwd:s,title:o??l??tt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function $v(t,e){let n=await pd(t,e),r=fd(n,96),s="",i="",o,a,l;for(let u of r){let c;try{c=JSON.parse(u)}catch{continue}if(s||(s=c.payload?.cwd??c.cwd??""),i||(i=c.payload?.id??c.id??""),o||(o=tt([c.payload?.title,c.title])),!l){let d=yd(c),p=d&&!vd(d)?tt([],d):void 0;p&&(a=d,l=p)}if(s&&(o||l))break}return s?{sessionId:i||Mt("codex",t)||(0,B.basename)(t,".jsonl"),cwd:s,title:o??l??tt([],a),approvalMode:await Lv(t,"codex",e)}:null}async function rt(t,e){let n=await(0,N.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let i=await jv(t,r);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 s=await $v(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,approvalMode:s.approvalMode,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function ad(t,e){let n=(0,B.join)((0,ue.homedir)(),".claude","projects");try{let r;t?r=[ud(t)]:r=(await(0,N.readdir)(n,{withFileTypes:!0})).filter(u=>u.isDirectory()).map(u=>u.name);let s=[];for(let l of r){let u=(0,B.join)(n,l),c=await(0,N.readdir)(u).catch(()=>[]);for(let d of c)d.endsWith(".jsonl")&&s.push((0,B.join)(u,d))}let i=await ot(s,it,async l=>{let u=await(0,N.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(Wr(u)),u})).filter(l=>l!==null).map(l=>Wr(l)).sort((l,u)=>u.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Ae.warn({error:String(r)},"failed to list claude sessions"),[]}}async function ld(t,e){try{let n=await dd(),r=await ot(n,it,async i=>{let o=await rt(i.path,"codex");return o&&e&&(!t||o.cwd===t)&&e.push(Wr(o)),o});return Ev(r.map((i,o)=>i?{cwd:i.cwd,match:{path:n[o].path,mtimeMs:n[o].mtimeMs,sessionId:i.sessionId}}:null).filter(i=>i!==null)),r.filter(i=>i!==null).filter(i=>!t||i.cwd===t).map(i=>Wr(i)).sort((i,o)=>o.lastActivityAt.localeCompare(i.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list codex sessions"),[]}}async function Uu(t){if(!t)return null;let e=`codex-latest:${(0,ue.homedir)()}`,n=Ur.get(e);if(n){let i=n.get(t);return i?{sessionId:i.sessionId,filePath:i.path}:null}Hr||(Hr=(async()=>{let i=await dd(),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 Ur.set(e,a),a})().finally(()=>{Hr=null}));let s=(await Hr).get(t);return s?{sessionId:s.sessionId,filePath:s.path}:null}async function Rn(t,e,n){let s=`list:${(0,ue.homedir)()}:${t??"all"}:${e??""}`,i=Ji.get(s);if(i)return i;let o=zi.get(s);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await ad(e,n);else if(t==="codex")l=await ld(e,n);else{let[u,c]=await Promise.all([ad(e,n),ld(e,n)]);l=[...u,...c].sort((d,p)=>p.lastActivityAt.localeCompare(d.lastActivityAt))}return Ji.set(s,l),l})();return zi.set(s,a),a.finally(()=>zi.delete(s)),a}async function nd(t,e){let r=`search:${(0,ue.homedir)()}:${t}:${e??"all"}`,s=Ki.get(r);if(s)return s;let i=Vi.get(r);if(i)return i;let o=(async()=>{let a=new Set,l=t.toLowerCase();async function u(){let d=(0,B.join)((0,ue.homedir)(),".claude","projects");try{let p=await(0,N.readdir)(d,{withFileTypes:!0}),h=[];for(let f of p){if(!f.isDirectory())continue;let m=(0,B.join)(d,f.name),y=await(0,N.readdir)(m).catch(()=>[]);for(let T of y)T.endsWith(".jsonl")&&h.push((0,B.join)(m,T))}let g=await ot(h,it,f=>cd(f,l,"claude"));for(let f of g)f&&a.add(f)}catch(p){Ae.warn({error:String(p)},"failed to search claude files")}}async function c(){let d=(0,B.join)((0,ue.homedir)(),".codex","sessions");try{let p=[];async function h(f){let m=await(0,N.readdir)(f,{withFileTypes:!0}).catch(()=>[]);for(let y of m){let T=(0,B.join)(f,y.name);y.isDirectory()?await h(T):y.name.endsWith(".jsonl")&&p.push(T)}}await h(d);let g=await ot(p,it,f=>cd(f,l,"codex"));for(let f of g)f&&a.add(f)}catch(p){Ae.warn({error:String(p)},"failed to search codex files")}}return e==="claude"?await u():e==="codex"?await c():await Promise.all([u(),c()]),Ki.set(r,a),a})();return Vi.set(r,o),o.finally(()=>Vi.delete(r)),o}async function cd(t,e,n){let r=(0,Xi.createReadStream)(t,{encoding:"utf-8"}),s=(0,Qi.createInterface)({input:r,crlfDelay:1/0}),i=n==="claude"?zv:Vv,o="",a=!1;try{for await(let l of s){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{s.close(),r.destroy()}return a?o||Mt(n,t):null}function zv(t){return t?.type==="user"&&t.message?.role==="user"?$r(t):t?.type==="assistant"&&t.message?.role==="assistant"?jr(t.message.content):""}function Vv(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return to(t.payload.content)}let e=yd(t);return e||""}async function qr(t,e){let n=(0,Xi.createReadStream)(t,{encoding:"utf-8"}),r=(0,Qi.createInterface)({input:n,crlfDelay:1/0});try{for await(let s of r){if(!s.trim())continue;let i;try{i=JSON.parse(s)}catch{continue}if(e(i))break}}finally{r.close(),n.destroy()}}async function no(t,e){let n=(0,B.join)((0,ue.homedir)(),".claude","projects"),r=e?ud(e):null,s=await(0,N.readdir)(n).catch(()=>[]),i=r?[r,...s.filter(o=>o!==r)]:s;for(let o of i){let a=(0,B.join)(n,o,`${t}.jsonl`);if((await(0,N.stat)(a).catch(()=>null))?.isFile())return a}return null}async function Sd(t,e){let n=await no(t,e);if(!n)return;let r=await(0,N.stat)(n).catch(()=>null);return r?.isFile()?(await md(n,r.size)).lastUsage:void 0}async function ro(t,e,n){if(e==="claude")return no(t,n);let r=(0,B.join)((0,ue.homedir)(),".codex","sessions");return bd(r,t)}function Yv(t){if(t?.type==="user"&&t.message?.role==="user")return Dv(t.message.content)?{kind:"toolResult",...Gv(t)?{interrupted:!0}:{}}:$r(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=jr(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 Jv(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 Ui(t,e){if(e!=="claude")return{};let n=null;try{await qr(t,r=>{let s=Yv(r);s&&(n=s)})}catch(r){return r.code!=="ENOENT"&&Ae.warn({filePath:t,error:String(r)},"failed to read session runtime hints"),{}}return Jv(n)}async function so(t,e,n){let r=await ro(t,e,n);return r?Ui(r,e):{}}function Kv(t){if(typeof t?.timestamp!="string")return null;let e=Date.parse(t.timestamp);return Number.isFinite(e)?e:null}async function _d(t,e,n,r){if(e!=="codex"||!r||r<=0)return[];let s=await ro(t,e,n);if(!s)return[];let i=[];try{await qr(s,l=>{let u=Kv(l);u!=null&&u<r||i.push(...Ai(l,{cwd:n,includePatchCalls:!1}))})}catch(l){return l.code!=="ENOENT"&&Ae.warn({filePath:s,error:String(l)},"failed to read generated file notices"),[]}let o=await au(i,r),a=Te(o);return a?[a]:[]}async function En(t,e,n){let r=[],s=(i,o)=>{if(o?.coalesceConsecutiveAssistant&&i.role==="assistant"){let a=r[r.length-1];if(a?.role==="assistant"&&a.type!=="info"&&i.type!=="info"&&!ou(a.content)){r[r.length-1]=i;return}}r.push(i)};if(e==="claude")try{let i=await no(t,n);if(i){let o=new Map;await qr(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=wr(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=od(u.content),f=Wv(g);f&&s(qv(f));continue}let c=typeof u.tool_use_id=="string"?u.tool_use_id:"",d=c?o.get(c):void 0;if(!d)continue;let p=od(u.content);if(!Ir(a.toolUseResult,p))continue;let h=Te([d]);h&&s({role:"assistant",content:h})}let l=$r(a);l&&s({role:"user",content:l})}else if(a.type==="assistant"&&a.message?.role==="assistant"){let l=jr(a.message.content);l&&s({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 ro(t,e,n);i&&await qr(i,o=>{let a=Ai(o,{cwd:n,includePatchCalls:!0}),l=Te(a);if(l&&s({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=to(o.payload.content);c&&(u==="user"&&vd(c)||s({role:u,content:c},{coalesceConsecutiveAssistant:!0}))})}catch(i){Ae.warn({error:String(i)},"failed to read codex session history")}return r}async function bd(t,e){try{let n=await(0,N.readdir)(t,{withFileTypes:!0});for(let r of n){let s=(0,B.join)(t,r.name);if(r.isDirectory()){let i=await bd(s,e);if(i)return i}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return s}}catch(n){Ae.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Ot=require("fs"),Ad=require("path");var Xv=500,wd=200;function Id(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=wd?e:e.slice(-wd)}function Qv(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 Zv(t){if(!t||typeof t!="object"||Array.isArray(t))return{};let e={};for(let[n,r]of Object.entries(t))typeof n!="string"||n.length===0||typeof r!="string"||r.length===0||n===r||(e[n]=r);return e}function eS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",r=typeof e.toolName=="string"?e.toolName:"",s=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!r||!s)return;let o=e.approvalContext;return o&&typeof o=="object"&&!Array.isArray(o)&&o.provider==="codex"&&typeof o.kind=="string"&&typeof o.rpcId=="number"?{requestId:n,toolName:r,input:i,description:s,approvalContext:{provider:"codex",kind:o.kind,rpcId:o.rpcId,...typeof o.questionId=="string"?{questionId:o.questionId}:{},...typeof o.approveLabel=="string"?{approveLabel:o.approveLabel}:{},...typeof o.denyLabel=="string"?{denyLabel:o.denyLabel}:{}}}:{requestId:n,toolName:r,input:i,description:s}}function tS(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.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 rS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.inputTokens),r=Number(e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(r))return;let s=Number(e.contextWindowTokens),i=Number(e.cacheCreationInputTokens),o=Number(e.cacheReadInputTokens);return{inputTokens:n,outputTokens:r,...Number.isFinite(i)&&i>=0?{cacheCreationInputTokens:i}:{},...Number.isFinite(o)&&o>=0?{cacheReadInputTokens:o}:{},...Number.isFinite(s)&&s>0?{contextWindowTokens:s}:{}}}function Td(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:Id(t.acceptedClientMessageIds),interruptedClientMessageIds:Id(t.interruptedClientMessageIds),pendingApproval:eS(t.pendingApproval),lastUsage:rS(t.lastUsage),interruptReason:tS(t.interruptReason),stallWarning:nS(t.stallWarning)}}function sS(t){if(Array.isArray(t))return{records:t.map(Td),deletedSessionIds:[],sessionAliases:{}};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(Td):[],deletedSessionIds:Qv(e.deletedSessionIds),sessionAliases:Zv(e.sessionAliases)}}return{records:[],deletedSessionIds:[],sessionAliases:{}}}var zr=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,r=new Set;for(;!r.has(n);){r.add(n);let s=this.sessionAliases.get(n);if(!s||s===n)break;n=s}return n}find(e){let n=this.resolveSessionId(e);return this.records.find(r=>r.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(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}addAlias(e,n){if(!e||!n)return;let r=this.resolveSessionId(n);if(!r||e===r){this.sessionAliases.delete(e),this.deletedSessionIds.delete(e),this.scheduleSave();return}this.deletedSessionIds.delete(e),this.sessionAliases.set(e,r),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(s=>s.sessionId!==e&&s.sessionId!==n);let r=[];for(let[s,i]of this.sessionAliases)(s===e||s===n||i===n)&&(this.sessionAliases.delete(s),r.push(s));this.deletedSessionIds.add(n),e!==n&&this.deletedSessionIds.add(e);for(let s of r)this.deletedSessionIds.add(s);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()},Xv)}loadFromDisk(){try{let e=(0,Ot.readFileSync)(fr,"utf-8");return sS(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[],sessionAliases:{}}}saveToDisk(){(0,Ot.mkdirSync)((0,Ad.dirname)(fr),{recursive:!0}),(0,Ot.writeFileSync)(fr,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds],sessionAliases:Object.fromEntries(this.sessionAliases)},null,2))}};var Bt=require("path"),kd=require("os");function Vr(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Bt.join)((0,kd.homedir)(),t.slice(2)):t}function iS(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r&&(e=r[1]??e),e}function io(t,e){let n=Vr(iS(t));if(!n||(0,Bt.isAbsolute)(n))return n;let r=Vr(e??"");return r?(0,Bt.resolve)(r,n):n}var Cd={approvalRequestV1:"vibelet.approvalRequest.v1"};var Dt=require("fs"),xd=require("path");function oS(t){return!!(t&&typeof t=="object"&&typeof t.deviceId=="string"&&typeof t.pushToken=="string"&&t.platform==="expo"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"&&(typeof t.lastSentAt=="string"||typeof t.lastSentAt>"u"))}function aS(t){try{let e=(0,Dt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(oS):[]}catch{return[]}}function Pn(t,e){(0,Dt.mkdirSync)((0,xd.dirname)(t),{recursive:!0}),(0,Dt.writeFileSync)(t,JSON.stringify(e,null,2)+`
105
- `,"utf8")}var Yr=class{constructor(e=Fc){this.pushSubscriptionsPath=e;this.records=aS(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}count(){return this.records.length}register(e,n){let r=new Date().toISOString(),s=this.records.find(o=>o.deviceId===e),i={deviceId:e,pushToken:n,platform:"expo",createdAt:s?.createdAt??r,updatedAt:r,...s?.lastSentAt?{lastSentAt:s.lastSentAt}:{}};this.records=[i,...this.records.filter(o=>o.deviceId!==e&&o.pushToken!==n)],Pn(this.pushSubscriptionsPath,this.records)}unregister(e,n){let r=this.records.filter(s=>!(s.deviceId===e&&s.pushToken===n));return r.length===this.records.length?!1:(this.records=r,Pn(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(r=>r.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,Pn(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),r=new Date().toISOString(),s=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=r,s=!0);s&&Pn(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],Pn(this.pushSubscriptionsPath,this.records)}};var X=O.child({module:"push"}),lS="https://exp.host/--/api/v2/push/send",cS="https://exp.host/--/api/v2/push/getReceipts",uS=[0,1e3,3e3],Mn=new Yr;function dS(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 fS(t){return new Promise(e=>{setTimeout(e,t)})}function Rd(t){return t==="DeviceNotRegistered"}function pS(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],r=[];for(let[s,i]of t.data.entries()){let o=e[s];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}r.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:r}}function hS(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[r,s]of t.data.entries()){let i=e[r];!i||!s||s.status!=="ok"||typeof s.id!="string"||s.id.length===0||n.set(s.id,i)}return n}function gS(t,e){let n=[],r=[],s=t.data;for(let[i,o]of e.entries()){let a=s?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&r.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:r}}async function mS(t,e,n,r){let s=new Map(t);for(let i of uS){if(s.size===0)return;i>0&&await n(i);let o;try{o=await e(cS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...s.keys()]})})}catch(c){X.error({error:String(c),count:s.size},"push receipt request failed");return}if(!o.ok){X.error({status:o.status,statusText:o.statusText,count:s.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){X.error({count:s.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:u}=gS(a,s);for(let{token:c,receipt:d}of u){let p=d.details?.error;if(X.error({token:c,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),Rd(p)){let h=r.unregisterToken(c);X.info({token:c,errorCode:p,removed:h},"push token removed after receipt rejection")}}s=new Map(l.map(c=>[c,s.get(c)]))}s.size>0&&X.warn({pendingReceipts:s.size},"push receipts still pending after polling")}function yS(t){let e=t?.pushStore??Mn,n=t?.fetchImpl??globalThis.fetch,r=t?.sleepImpl??fS;return async function(i,o,a){let l=e.listTokens();if(l.length===0)return;let u=l.map(c=>({to:c,sound:"default",title:i,body:o,data:a,badge:1,priority:"high",_contentAvailable:!0,...dS(a)&&a.eventType==="approval_request"?{categoryId:Cd.approvalRequestV1}:{}}));try{let c=await n(lS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!c.ok){X.error({status:c.status,statusText:c.statusText},"push send failed");return}let d=await c.json().catch(()=>null);if(!d){X.error({count:u.length},"push send returned unreadable response");return}let{successfulTokens:p,ticketErrors:h}=pS(d,l),g=hS(d,l);for(let{token:f,ticket:m}of h){let y=m.details?.error;if(X.error({token:f,message:m.message,details:m.details,ticketStatus:m.status},"push ticket rejected"),Rd(y)){let T=e.unregisterToken(f);X.info({token:f,errorCode:y,removed:T},"push token removed after ticket rejection")}}p.length>0&&(X.debug({count:p.length},"push sent"),e.markSent(p)),g.size>0&&await mS(g,n,r,e)}catch(c){X.error({error:String(c)},"push send error")}}}function oo(t,e){Mn.register(t,e),X.info({deviceId:t,token:e,total:Mn.count()},"push token registered")}function ao(t,e){let n=Mn.unregister(t,e);X.info({deviceId:t,token:e,total:Mn.count(),removed:n},"push token unregistered")}var Jr=yS();var b=O.child({module:"manager"}),vS="Done.",SS="Approval required",Ed=180,Ft=200,_S=6e4,Pd=9e4,bS="Agent \u5361\u4F4F",wS="Agent \u5D29\u6E83",Md=200;function Ht(t){let e=Math.round(t/1e3);if(e<60)return`${e} \u79D2`;let n=Math.floor(e/60),r=e%60;return r===0?`${n} \u5206\u949F`:`${n} \u5206 ${r} \u79D2`}function Hd(t){if(!t)return;let e=t.trim();if(e)return e.length>Md?`${e.slice(0,Md-1)}\u2026`:e}function IS(t,e,n,r){let s=Ht(t),i=Ht(n),o=Ht(e),a=Hd(r),l=a?`
106
- \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${a}"\u3002`:"",u=n>e?`Agent \u957F\u65F6\u95F4\u6CA1\u6709\u8F93\u51FA\u3002\u5DF2 ${s} \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 ${s} \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}}function TS(t,e,n){let r=Ht(t),s=Ht(e),i=n>0?Ht(n):void 0;return{at:new Date().toISOString(),humanText:i?`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${s} \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 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${s} \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,...n>0?{hardTimeoutMs:n}:{}}}function AS(t,e){let n=Hd(e),r=n?`
107
- \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${r}`,...n?{lastPrompt:n}:{},exitCode:t}}function kS(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 Ld(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 CS(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 r of n)!r||e.includes(r)||(e.push(r),e.length>Ft&&e.splice(0,e.length-Ft));return e}function Kr(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}}function Nd(t){t.managed||(t.managed=!0)}function Od(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&Ar(e)}function Bd(t,e,n){return{sessionId:t,agent:e,...n}}function xS(t){return t.startsWith(Ii)}function Dd(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 Xr=class{constructor(e=Jr,n=Hu){this.pushSender=e;this.externalProcessPresenceCheck=n;this.removeInventoryBackfillListener=Ku(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.updateGauges(),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new zr;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(),_S),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=this.advanceWatchdogClock(Date.now(),"sweep"),n=S.idleTimeoutMs,r=S.turnStallTimeoutMs,s=S.turnStallHardTimeoutMs;if(n<=0&&r<=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(r<=0||a.pendingApproval||l<r)continue;let u=this.getRespondingLivenessHint(a),c=s>0&&l>=s,d=u==="dead";if(!d&&!c){if(!a.stallWarningAt){let g=TS(l,r,s);a.stallWarningAt=e,a.stallWarning=g,this.updateGauges(),b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:r,turnStallHardTimeoutMs:s,livenessHint:u},"responding session exceeded soft stall threshold; waiting before forced stop"),_.increment("driver.stall_warning",{agent:a.agent}),I.emit("driver.stall_warning",{sessionId:a.sessionId,agent:a.agent,idleMs:l,hardTimeoutMs:s||void 0}),this.broadcast(a.sessionId,{type:"session.stall_warning",sessionId:a.sessionId,warning:g}),this.store.upsert(J(a)),this.noteInventoryChanged("session_updated")}continue}let p=d||s<=0?r:s;b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:r,turnStallHardTimeoutMs:s,livenessHint:u},"stopping stalled driver"),_.increment("driver.stall_timeout",{agent:a.agent}),I.emit("driver.stall_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l});let h=IS(l,r,p,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}),this.pushSender(bS,this.buildPushBody(`${a.title||a.sessionId}: ${h.lastPrompt??""}`.trim()),{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}),I.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,r,s){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){b.info({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(b.debug({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"driver message received"),o.type!=="response"&&"sessionId"in o&&o.sessionId&&o.sessionId!==e.sessionId&&!this.sessions.has(o.sessionId)&&this.remapSessionId(e,o.sessionId,s),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,o.type==="session.done"&&(n==="claude"?(e.lastUsage=Ld(o.usage),this.reconcileClaudeSessionUsage(e,o.usage)):o.usage&&(e.lastUsage=kS(e.lastUsage,o.usage))),o.type==="session.interrupted"&&this.markLatestAcceptedClientMessageInterrupted(e),(o.type==="session.interrupted"||!Od(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){I.emit("approval.response",{sessionId:e.sessionId,requestId:o.requestId,approved:!0}),e.pendingApproval=void 0,e.isResponding=!0,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated");return}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(SS,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"&&Ar(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.bufferedPrompts.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){b.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}b.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"driver exited"),I.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&&Od(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=AS(o,e.lastUserMessage);e.interruptReason=u,this.broadcast(e.sessionId,{type:"session.interrupted_notice",sessionId:e.sessionId,reason:u}),this.pushSender(wS,this.buildPushBody(`${e.title||e.sessionId}: ${u.lastPrompt??""}`.trim()),{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 r=await Sd(e.sessionId,e.cwd),s=Ld(r??n);!s||CS(e.lastUsage,s)||(e.lastUsage=s,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"))}remapSessionId(e,n,r){if(!n||n===e.sessionId)return;let s=this.sessions.get(n);if(s&&s!==e){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"),r&&this.reply(r,`id_update_${Date.now()}`,!0,{sessionId:n,oldSessionId:i})}flushBufferedPrompt(e,n=!1){if(!e.driver||!e.active||e.startupInProgress||e.pendingApproval||!n&&e.isResponding)return!1;let r=e.bufferedPrompts.shift();return r?(e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=r,e.lastTurnStartedAt=Date.now(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),e.driver.sendPrompt(r,e.model),!0):!1}emitGeneratedFileNoticesForCompletedTurn(e){let n=e.lastTurnStartedAt;e.lastTurnStartedAt=void 0,!(e.agent!=="codex"||!n)&&_d(e.sessionId,e.agent,e.cwd,n).then(r=>{for(let s of r)this.broadcast(e.sessionId,{type:"tool.result",sessionId:e.sessionId,toolCallId:`generated-file-${Date.now()}`,output:s})}).catch(r=>{b.warn({sessionId:e.sessionId,error:String(r)},"failed to read generated-file notices")})}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let r=e.driver,s=e.sessionId,i=e.startupToken,o=_.startTimer("driver.spawn");(async()=>{try{let a=await r.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(s)!==e||e.startupToken!==i||e.driver!==r){b.info({pendingSessionId:s,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,b.info({pendingSessionId:s,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==s&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(s)!==e||e.startupToken!==i){b.info({pendingSessionId:s,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1,e.bufferedPrompts=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.error({sessionId:s,cwd:e.cwd,error:String(a)},"async codex createSession error"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to start Codex session: ${String(a)}`})}})()}configureDriverBeforeStart(e,n,r,s){if(e==="codex"&&n instanceof bn&&s&&n.setModel(s),e!=="claude"||!(n instanceof _n))return;let i=r??(0,lo.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=vn){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&xS(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(b.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return b.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),vn;if(r.approvalMode==="autoApprove")return Dd(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return vn;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=`${Ii}${l.trim()||(0,lo.randomUUID)()}`,c=r.pendingClaudeHookApprovals.get(u);if(c)return c.promise;let d=`Claude requested permissions to use ${i}.`,p,h=new Promise(g=>{p=g});return r.pendingClaudeHookApprovals.set(u,{requestId:u,promise:h,resolve:g=>{r.pendingClaudeHookApprovals.delete(u),p(g)}}),r.pendingApproval={requestId:u,toolName:i,input:a,description:d},I.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:i}),this.touchSession(r.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:u,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,r){if(e=this.resolveSessionRef(e).resolvedSessionId,this.isDeletedSession(e))return;let s=new Date().toISOString(),i=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.model,u=r?.pendingApproval,c=r?.title??"",d=r?.createdAt??s,p=r?.lastActivityAt??s,h=r?.lastUsage,g=ke(r?.acceptedClientMessageIds),f=ke(r?.interruptedClientMessageIds),m=r?.isResponding,y=r?.interruptReason,T=r?.stallWarning,A=r?"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,p=w.lastActivityAt||p,h=w.lastUsage??h,g=ke(w.acceptedClientMessageIds,g),f=ke(w.interruptedClientMessageIds,f),y=y??w.interruptReason,T=T??w.stallWarning,A="record";else if(!r){let P=(await Rn(n??i)).find(G=>G.sessionId===e);P&&(i=P.agent,o=P.cwd||o,c=P.title??c,d=P.createdAt,p=P.lastActivityAt,m=P.runtime.isResponding??m,A="scanner")}if(!i&&n&&(i=n,A=r?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,model:l,pendingApproval:u,title:c,createdAt:d,lastActivityAt:p,lastUsage:h,acceptedClientMessageIds:g,interruptedClientMessageIds:f,source:A,managed:r?.managed??w?.managed,isResponding:m||void 0,...y?{interruptReason:y}:{},...T?{stallWarning:T}:{}}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let r of this.sessions.values()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Bd(r.sessionId,r.agent,r.pendingApproval)))}for(let r of this.store.getAll()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Bd(r.sessionId,r.agent,r.pendingApproval)))}return e}restoreDriverPendingApproval(e,n){n&&e.restorePendingApproval?.(n)}async reviveSessionForApproval(e){if(e.driver)return!0;if(!e.pendingApproval||e.agent!=="codex")return!1;let n=this.createDriver(e.agent),r=this.configureDriverBeforeStart(e.agent,n,e.claudeHookSecret);return await n.start(e.cwd,e.sessionId,e.approvalMode),this.restoreDriverPendingApproval(n,e.pendingApproval),e.driver=n,e.active=!0,e.isResponding=!1,e.currentReplyText="",e.startupInProgress=!1,e.bufferedPrompts=e.bufferedPrompts??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=r??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(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<=Ed?n:`${n.slice(0,Math.max(1,Ed-3)).trimEnd()}...`:vS}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 r=Math.max(0,e-this.lastWatchdogWallClockMs);return this.lastWatchdogWallClockMs=e,r<=0?this.watchdogNowMs:r>Pd?(n==="sweep"&&b.warn({elapsedWallMs:r,toleratedGapMs:Pd},"watchdog gap detected; discounting paused wall-clock time"),this.watchdogNowMs):(this.watchdogNowMs+=r,this.watchdogNowMs)}touchSession(e,n=!0){let r=Date.now(),s=new Date(r).toISOString(),i=this.advanceWatchdogClock(r,"activity"),o=this.sessions.get(e);if(o){o.lastActivityAt=s,o.lastActivityTs=i,n&&this.store.upsert(J(o));return}let a=this.store.find(e);a&&this.store.upsert({...a,lastActivityAt:s})}updateGauges(){let e=0,n=0;for(let r of this.sessions.values())r.active&&e++,r.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 r=n?{...n}:{};return e.remapped&&(r.sessionId=e.resolvedSessionId,r.oldSessionId=e.requestedSessionId),Object.keys(r).length>0?r:void 0}buildSessionResponseData(e,n,r){let s=r?{...r}:{};return n&&n!==e.requestedSessionId&&(s.sessionId=n,s.oldSessionId=e.requestedSessionId),Object.keys(s).length>0?s: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 Rn(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.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);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor,n.customTitles);break}}addGlobalClient(e){this.globalClients.add(e)}removeClient(e){this.globalClients.delete(e);for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep(),this.removeInventoryBackfillListener(),this.globalClients.clear();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){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(){Fr({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds(),skipGitMetadata:!0}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}noteInventoryChanged(e){if(this.inventoryVersion+=1,this.globalClients.size===0)return;let n={type:"sessions.changed",version:this.inventoryVersion,reason:e},r=JSON.stringify(n);for(let s of this.globalClients)s.readyState===1&&s.send(r)}async createSession(e,n,r,s,i,o,a){s=Vr(s),b.info({agent:r,cwd:s,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,Fd.stat)(s)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${s}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${s}`);return}if(o)try{let u=(await this.listRecentSessionsForContinue(r,s)).find(c=>!this.isDeletedSession(c.sessionId));if(u)return b.info({sessionId:u.sessionId,cwd:s},"continue mode: resuming last session"),this.resumeSession(e,n,u.sessionId,r,s,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(r),u=this.configureDriverBeforeStart(r,l,void 0,a);if(r==="codex"){let g=`pending_${Date.now()}`;b.info({sessionId:g,agent:r,cwd:s},"session created (pending codex startup)"),_.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:g,agent:r,cwd:s,approvalMode:i});let f={sessionId:g,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,bufferedPrompts:[],startupToken:1,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(g,f),this.registerClaudeHookSession(f),this.store.upsert(J(f)),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(f,r,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(f,e);return}let c=_.startTimer("driver.spawn"),d=await l.start(s,void 0,i),p=c();b.info({sessionId:d,agent:r,spawnMs:p},"session created"),_.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:d,agent:r,cwd:s,approvalMode:i});let h={sessionId:d,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(d,h),this.registerClaudeHookSession(h),this.store.upsert(J(h)),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,r,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){b.error({agent:r,cwd:s,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,r,s,i,o){let a=this.resolveSessionRef(r);if(r=a.resolvedSessionId,this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let l=this.sessions.get(r);if(l&&l.active){l.clients.add(e),this.touchSession(l.sessionId),this.noteInventoryChanged("session_updated");let h=await En(r,s,l.cwd),g=this.annotateHistoryMessages(h,l.acceptedClientMessageIds,l.interruptedClientMessageIds),f=this.currentPartialReplyText(l);if(h.length>0||f||l.approvalMode||l.pendingApproval||l.stallWarning){let m={type:"session.history",sessionId:r,messages:g,...Kr(l.acceptedClientMessageIds),isResponding:l.isResponding||void 0,partialReplyText:f,approvalMode:l.approvalMode,pendingApproval:l.pendingApproval,stallWarning:l.stallWarning};e.readyState===1&&e.send(JSON.stringify(m))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(a,{sessionId:r}));return}let u=this.store.find(r),c=i||u?.cwd||"",d=o??u?.approvalMode,p=u?.title??"Resumed session";try{let h=_.startTimer("driver.spawn"),g=this.createDriver(s),f=this.configureDriverBeforeStart(s,g),m=this.canResumeDriverSession(s,r),y=await g.start(c,m?r:void 0,d),T=h();b.info({sessionId:y,agent:s,spawnMs:T},"session resumed"),_.increment("session.resume",{agent:s}),I.emit("session.resume",{sessionId:y,agent:s,cwd:c});let A={sessionId:y,agent:s,cwd:c,approvalMode:d,model:u?.model,driver:g,clients:new Set([e]),title:p,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,bufferedPrompts:[],startupToken:0,managed:u?.managed,pendingApproval:u?.pendingApproval,stallWarning:u?.stallWarning,claudeHookSecret:f,pendingClaudeHookApprovals:new Map};this.sessions.set(y,A),this.rememberSessionAlias(r,y),this.registerClaudeHookSession(A),this.store.upsert(J(A)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(A,s," (resumed)",e),this.restoreDriverPendingApproval(g,A.pendingApproval);let C=await En(m?r:y,s,c),P=this.annotateHistoryMessages(C,A.acceptedClientMessageIds,A.interruptedClientMessageIds);if(C.length>0||A.pendingApproval||A.stallWarning){b.info({sessionId:r,historyCount:C.length},"sending history messages");let G={type:"session.history",sessionId:y,messages:P,...Kr(A.acceptedClientMessageIds),approvalMode:d,pendingApproval:A.pendingApproval,stallWarning:A.stallWarning};e.readyState===1&&e.send(JSON.stringify(G))}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>Ft&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Ft))}rememberInterruptedClientMessage(e,n){e.interruptedClientMessageIds.includes(n)||(e.interruptedClientMessageIds.push(n),e.interruptedClientMessageIds.length>Ft&&e.interruptedClientMessageIds.splice(0,e.interruptedClientMessageIds.length-Ft))}markLatestAcceptedClientMessageInterrupted(e){let n=e.acceptedClientMessageIds[e.acceptedClientMessageIds.length-1];n&&this.rememberInterruptedClientMessage(e,n)}annotateHistoryMessages(e,n,r){if(!e.length||!n?.length||!r?.length)return e;let s=new Set(r),i=[];for(let 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];s.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,r,s,i,o,a,l){let u=this.resolveSessionRef(r);if(r=u.resolvedSessionId,this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(r);if(!c||!c.driver){let f=await this.resolveReconnectSession(r,i,c);if(!f){b.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:r,agent:f.agent,source:f.source},"auto-reconnecting session"),_.increment("session.reconnect",{agent:f.agent,source:f.source}),I.emit("session.reconnect",{sessionId:r,agent:f.agent,source:f.source});try{let m=this.createDriver(f.agent),y=this.configureDriverBeforeStart(f.agent,m,c?.claudeHookSecret),T=this.canResumeDriverSession(f.agent,r),A=await m.start(f.cwd,T?r:void 0,f.approvalMode);this.restoreDriverPendingApproval(m,f.pendingApproval),c?(c.approvalMode=f.approvalMode,c.model=f.model,c.pendingApproval=f.pendingApproval,c.driver=m,c.active=!0,c.clients.add(e),c.lastActivityAt=f.lastActivityAt,c.lastUsage=f.lastUsage,c.lastActivityTs=this.currentWatchdogTime(),c.isResponding=!1,c.currentReplyText="",c.acceptedClientMessageIds=ke(c.acceptedClientMessageIds,f.acceptedClientMessageIds),c.interruptedClientMessageIds=ke(c.interruptedClientMessageIds,f.interruptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,c.bufferedPrompts=c.bufferedPrompts??[],c.startupToken=c.startupToken??0,c.claudeHookSecret=y??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map,A&&A!==c.sessionId&&this.remapSessionId(c,A)):(c={sessionId:A,agent:f.agent,cwd:f.cwd,approvalMode:f.approvalMode,model:f.model,driver:m,clients:new Set([e]),title:f.title,createdAt:f.createdAt,lastActivityAt:f.lastActivityAt,lastUsage:f.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:f.acceptedClientMessageIds,interruptedClientMessageIds:f.interruptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:f.managed,pendingApproval:f.pendingApproval,claudeHookSecret:y,pendingClaudeHookApprovals:new Map,interruptReason:f.interruptReason},this.sessions.set(A,c),this.rememberSessionAlias(r,A)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,f.agent," (reconnected)"),this.store.upsert(J(c)),this.updateGauges(),this.noteInventoryChanged("session_updated"),r=c.sessionId}catch(m){this.reply(e,n,!1,void 0,`Failed to reconnect: ${m}`);return}}if(c.clients.add(e),c.pendingApproval){this.reply(e,n,!1,void 0,"Resolve the pending approval before sending another message.");return}if(o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,this.buildResolvedSessionResponseData(u,{sessionId:r,clientMessageId:o,duplicate:!0}));return}b.info({sessionId:r,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),I.emit("session.send",{sessionId:r,agent:c.agent,messagePreview:s.slice(0,100),imageCount:a?.length??0}),Nd(c),c.interruptReason&&(c.interruptReason=void 0,this.store.upsert(J(c)),this.noteInventoryChanged("session_updated"));let d=this.clearStallWarning(c);if(Pt(c.title)){let f=Li(s,50);f&&f!==c.title&&(c.title=f),this.store.upsert(J(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId),d&&this.noteInventoryChanged("session_updated");let p=new Set([".png",".jpg",".jpeg",".gif",".webp",".heic",".heif",".bmp",".svg"]),h=a?.length?a.map(f=>{let m=f.lastIndexOf("."),y=m>=0?f.slice(m).toLowerCase():"";return`[Attached ${p.has(y)?"image":"file"}: ${f}]`}).join(`
104
+ `):""}function sd(t){if(typeof t=="string")return t;let e=Hv(t);return e||(Array.isArray(t)&&t.length>0&&t.every(r=>r&&typeof r=="object"&&r.type==="tool_reference")?"":JSON.stringify(t))}var Uv=/Claude requested permissions to (?:edit|write to) (.+?) which is a sensitive file\.?$/i;function Wv(t){let n=t.match(Uv)?.[1]?.trim();return n||null}function qv(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 Gv(t){let e=Fv(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 gd(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function Wr(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:ji()}}function Mt(t,e){let n=(0,B.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 jv(t,e){let n=await dd(t,e),r=ud(n,64),s="",i="",o,a,l;for(let c of r){let d;try{d=JSON.parse(c)}catch{continue}if(!s&&typeof d.cwd=="string"&&(s=d.cwd),!i&&typeof d.sessionId=="string"&&(i=d.sessionId),o||(o=tt([d.customTitle,d.summary])),!l){let p=$r(d),h=tt([],p);h&&(a=p,l=h)}if(s&&(o||l))break}if(!s)return null;let u=await pd(t,e);return{sessionId:i||Mt("claude",t)||(0,B.basename)(t,".jsonl"),cwd:s,title:o??l??tt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function $v(t,e){let n=await dd(t,e),r=ud(n,96),s="",i="",o,a,l;for(let c of r){let d;try{d=JSON.parse(c)}catch{continue}if(s||(s=d.payload?.cwd??d.cwd??""),i||(i=d.payload?.id??d.id??""),o||(o=tt([d.payload?.title,d.title])),!l){let p=hd(d),h=p&&!gd(p)?tt([],p):void 0;h&&(a=p,l=h)}if(s&&(o||l))break}if(!s)return null;let u=await Lv(t,e);return{sessionId:i||Mt("codex",t)||(0,B.basename)(t,".jsonl"),cwd:s,title:o??l??tt([],a),approvalMode:u.approvalMode,lastUsage:u.lastUsage}}async function rt(t,e){let n=await(0,N.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let i=await jv(t,r);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 s=await $v(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,approvalMode:s.approvalMode,lastUsage:s.lastUsage,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function id(t,e){let n=(0,B.join)((0,ue.homedir)(),".claude","projects");try{let r;t?r=[ld(t)]:r=(await(0,N.readdir)(n,{withFileTypes:!0})).filter(u=>u.isDirectory()).map(u=>u.name);let s=[];for(let l of r){let u=(0,B.join)(n,l),c=await(0,N.readdir)(u).catch(()=>[]);for(let d of c)d.endsWith(".jsonl")&&s.push((0,B.join)(u,d))}let i=await ot(s,it,async l=>{let u=await(0,N.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(Wr(u)),u})).filter(l=>l!==null).map(l=>Wr(l)).sort((l,u)=>u.lastActivityAt.localeCompare(l.lastActivityAt))}catch(r){return Ae.warn({error:String(r)},"failed to list claude sessions"),[]}}async function od(t,e){try{let n=await cd(),r=await ot(n,it,async i=>{let o=await rt(i.path,"codex");return o&&e&&(!t||o.cwd===t)&&e.push(Wr(o)),o});return xv(r.map((i,o)=>i?{cwd:i.cwd,match:{path:n[o].path,mtimeMs:n[o].mtimeMs,sessionId:i.sessionId}}:null).filter(i=>i!==null)),r.filter(i=>i!==null).filter(i=>!t||i.cwd===t).map(i=>Wr(i)).sort((i,o)=>o.lastActivityAt.localeCompare(i.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list codex sessions"),[]}}async function Fu(t){if(!t)return null;let e=`codex-latest:${(0,ue.homedir)()}`,n=Ur.get(e);if(n){let i=n.get(t);return i?{sessionId:i.sessionId,filePath:i.path}:null}Hr||(Hr=(async()=>{let i=await cd(),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 Ur.set(e,a),a})().finally(()=>{Hr=null}));let s=(await Hr).get(t);return s?{sessionId:s.sessionId,filePath:s.path}:null}async function Rn(t,e,n){let s=`list:${(0,ue.homedir)()}:${t??"all"}:${e??""}`,i=Yi.get(s);if(i)return i;let o=$i.get(s);if(o)return o;let a=(async()=>{let l;if(t==="claude")l=await id(e,n);else if(t==="codex")l=await od(e,n);else{let[u,c]=await Promise.all([id(e,n),od(e,n)]);l=[...u,...c].sort((d,p)=>p.lastActivityAt.localeCompare(d.lastActivityAt))}return Yi.set(s,l),l})();return $i.set(s,a),a.finally(()=>$i.delete(s)),a}async function ed(t,e){let r=`search:${(0,ue.homedir)()}:${t}:${e??"all"}`,s=Ji.get(r);if(s)return s;let i=zi.get(r);if(i)return i;let o=(async()=>{let a=new Set,l=t.toLowerCase();async function u(){let d=(0,B.join)((0,ue.homedir)(),".claude","projects");try{let p=await(0,N.readdir)(d,{withFileTypes:!0}),h=[];for(let f of p){if(!f.isDirectory())continue;let m=(0,B.join)(d,f.name),y=await(0,N.readdir)(m).catch(()=>[]);for(let T of y)T.endsWith(".jsonl")&&h.push((0,B.join)(m,T))}let g=await ot(h,it,f=>ad(f,l,"claude"));for(let f of g)f&&a.add(f)}catch(p){Ae.warn({error:String(p)},"failed to search claude files")}}async function c(){let d=(0,B.join)((0,ue.homedir)(),".codex","sessions");try{let p=[];async function h(f){let m=await(0,N.readdir)(f,{withFileTypes:!0}).catch(()=>[]);for(let y of m){let T=(0,B.join)(f,y.name);y.isDirectory()?await h(T):y.name.endsWith(".jsonl")&&p.push(T)}}await h(d);let g=await ot(p,it,f=>ad(f,l,"codex"));for(let f of g)f&&a.add(f)}catch(p){Ae.warn({error:String(p)},"failed to search codex files")}}return e==="claude"?await u():e==="codex"?await c():await Promise.all([u(),c()]),Ji.set(r,a),a})();return zi.set(r,o),o.finally(()=>zi.delete(r)),o}async function ad(t,e,n){let r=(0,Ki.createReadStream)(t,{encoding:"utf-8"}),s=(0,Xi.createInterface)({input:r,crlfDelay:1/0}),i=n==="claude"?zv:Vv,o="",a=!1;try{for await(let l of s){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{s.close(),r.destroy()}return a?o||Mt(n,t):null}function zv(t){return t?.type==="user"&&t.message?.role==="user"?$r(t):t?.type==="assistant"&&t.message?.role==="assistant"?jr(t.message.content):""}function Vv(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return eo(t.payload.content)}let e=hd(t);return e||""}async function qr(t,e){let n=(0,Ki.createReadStream)(t,{encoding:"utf-8"}),r=(0,Xi.createInterface)({input:n,crlfDelay:1/0});try{for await(let s of r){if(!s.trim())continue;let i;try{i=JSON.parse(s)}catch{continue}if(e(i))break}}finally{r.close(),n.destroy()}}async function to(t,e){let n=(0,B.join)((0,ue.homedir)(),".claude","projects"),r=e?ld(e):null,s=await(0,N.readdir)(n).catch(()=>[]),i=r?[r,...s.filter(o=>o!==r)]:s;for(let o of i){let a=(0,B.join)(n,o,`${t}.jsonl`);if((await(0,N.stat)(a).catch(()=>null))?.isFile())return a}return null}async function md(t,e){let n=await to(t,e);if(!n)return;let r=await(0,N.stat)(n).catch(()=>null);return r?.isFile()?(await pd(n,r.size)).lastUsage:void 0}async function no(t,e,n){if(e==="claude")return to(t,n);let r=(0,B.join)((0,ue.homedir)(),".codex","sessions");return vd(r,t)}function Yv(t){if(t?.type==="user"&&t.message?.role==="user")return Dv(t.message.content)?{kind:"toolResult",...Gv(t)?{interrupted:!0}:{}}:$r(t)?{kind:"userPrompt"}:null;if(t?.type==="assistant"&&t.message?.role==="assistant"){let e=jr(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 Jv(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 Hi(t,e){if(e!=="claude")return{};let n=null;try{await qr(t,r=>{let s=Yv(r);s&&(n=s)})}catch(r){return r.code!=="ENOENT"&&Ae.warn({filePath:t,error:String(r)},"failed to read session runtime hints"),{}}return Jv(n)}async function ro(t,e,n){let r=await no(t,e,n);return r?Hi(r,e):{}}function Kv(t){if(typeof t?.timestamp!="string")return null;let e=Date.parse(t.timestamp);return Number.isFinite(e)?e:null}async function yd(t,e,n,r){if(e!=="codex"||!r||r<=0)return[];let s=await no(t,e,n);if(!s)return[];let i=[];try{await qr(s,l=>{let u=Kv(l);u!=null&&u<r||i.push(...Ai(l,{cwd:n,includePatchCalls:!1}))})}catch(l){return l.code!=="ENOENT"&&Ae.warn({filePath:s,error:String(l)},"failed to read generated file notices"),[]}let o=await ou(i,r),a=Te(o);return a?[a]:[]}async function En(t,e,n){let r=[],s=(i,o)=>{if(o?.coalesceConsecutiveAssistant&&i.role==="assistant"){let a=r[r.length-1];if(a?.role==="assistant"&&a.type!=="info"&&i.type!=="info"&&!iu(a.content)){r[r.length-1]=i;return}}r.push(i)};if(e==="claude")try{let i=await to(t,n);if(i){let o=new Map;await qr(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=wr(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=sd(u.content),f=Wv(g);f&&s(qv(f));continue}let c=typeof u.tool_use_id=="string"?u.tool_use_id:"",d=c?o.get(c):void 0;if(!d)continue;let p=sd(u.content);if(!Ir(a.toolUseResult,p))continue;let h=Te([d]);h&&s({role:"assistant",content:h})}let l=$r(a);l&&s({role:"user",content:l})}else if(a.type==="assistant"&&a.message?.role==="assistant"){let l=jr(a.message.content);l&&s({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 no(t,e,n);i&&await qr(i,o=>{let a=Ai(o,{cwd:n,includePatchCalls:!0}),l=Te(a);if(l&&s({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=eo(o.payload.content);c&&(u==="user"&&gd(c)||s({role:u,content:c},{coalesceConsecutiveAssistant:!0}))})}catch(i){Ae.warn({error:String(i)},"failed to read codex session history")}return r}async function vd(t,e){try{let n=await(0,N.readdir)(t,{withFileTypes:!0});for(let r of n){let s=(0,B.join)(t,r.name);if(r.isDirectory()){let i=await vd(s,e);if(i)return i}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return s}}catch(n){Ae.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var Ot=require("fs"),wd=require("path");var Xv=500,Sd=200;function _d(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=Sd?e:e.slice(-Sd)}function Qv(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 Zv(t){if(!t||typeof t!="object"||Array.isArray(t))return{};let e={};for(let[n,r]of Object.entries(t))typeof n!="string"||n.length===0||typeof r!="string"||r.length===0||n===r||(e[n]=r);return e}function eS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.requestId=="string"?e.requestId:"",r=typeof e.toolName=="string"?e.toolName:"",s=typeof e.description=="string"?e.description:"",i=e.input&&typeof e.input=="object"&&!Array.isArray(e.input)?e.input:{};if(!n||!r||!s)return;let o=e.approvalContext;return o&&typeof o=="object"&&!Array.isArray(o)&&o.provider==="codex"&&typeof o.kind=="string"&&typeof o.rpcId=="number"?{requestId:n,toolName:r,input:i,description:s,approvalContext:{provider:"codex",kind:o.kind,rpcId:o.rpcId,...typeof o.questionId=="string"?{questionId:o.questionId}:{},...typeof o.approveLabel=="string"?{approveLabel:o.approveLabel}:{},...typeof o.denyLabel=="string"?{denyLabel:o.denyLabel}:{}}}:{requestId:n,toolName:r,input:i,description:s}}function tS(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.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 rS(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=Number(e.inputTokens),r=Number(e.outputTokens);if(!Number.isFinite(n)||!Number.isFinite(r))return;let s=Number(e.contextWindowTokens),i=Number(e.cacheCreationInputTokens),o=Number(e.cacheReadInputTokens);return{inputTokens:n,outputTokens:r,...Number.isFinite(i)&&i>=0?{cacheCreationInputTokens:i}:{},...Number.isFinite(o)&&o>=0?{cacheReadInputTokens:o}:{},...Number.isFinite(s)&&s>0?{contextWindowTokens:s}:{}}}function bd(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:_d(t.acceptedClientMessageIds),interruptedClientMessageIds:_d(t.interruptedClientMessageIds),pendingApproval:eS(t.pendingApproval),lastUsage:rS(t.lastUsage),interruptReason:tS(t.interruptReason),stallWarning:nS(t.stallWarning)}}function sS(t){if(Array.isArray(t))return{records:t.map(bd),deletedSessionIds:[],sessionAliases:{}};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(bd):[],deletedSessionIds:Qv(e.deletedSessionIds),sessionAliases:Zv(e.sessionAliases)}}return{records:[],deletedSessionIds:[],sessionAliases:{}}}var zr=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,r=new Set;for(;!r.has(n);){r.add(n);let s=this.sessionAliases.get(n);if(!s||s===n)break;n=s}return n}find(e){let n=this.resolveSessionId(e);return this.records.find(r=>r.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(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}addAlias(e,n){if(!e||!n)return;let r=this.resolveSessionId(n);if(!r||e===r){this.sessionAliases.delete(e),this.deletedSessionIds.delete(e),this.scheduleSave();return}this.deletedSessionIds.delete(e),this.sessionAliases.set(e,r),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(s=>s.sessionId!==e&&s.sessionId!==n);let r=[];for(let[s,i]of this.sessionAliases)(s===e||s===n||i===n)&&(this.sessionAliases.delete(s),r.push(s));this.deletedSessionIds.add(n),e!==n&&this.deletedSessionIds.add(e);for(let s of r)this.deletedSessionIds.add(s);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()},Xv)}loadFromDisk(){try{let e=(0,Ot.readFileSync)(fr,"utf-8");return sS(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[],sessionAliases:{}}}saveToDisk(){(0,Ot.mkdirSync)((0,wd.dirname)(fr),{recursive:!0}),(0,Ot.writeFileSync)(fr,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds],sessionAliases:Object.fromEntries(this.sessionAliases)},null,2))}};var Bt=require("path"),Id=require("os");function Vr(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Bt.join)((0,Id.homedir)(),t.slice(2)):t}function iS(t){let e=t.trim();if(!e)return"";let n=e.indexOf("#");n>0&&(e=e.slice(0,n));let r=e.match(/^(.*?)(:\d+(?::\d+)?)$/);return r&&(e=r[1]??e),e}function so(t,e){let n=Vr(iS(t));if(!n||(0,Bt.isAbsolute)(n))return n;let r=Vr(e??"");return r?(0,Bt.resolve)(r,n):n}var Td={approvalRequestV1:"vibelet.approvalRequest.v1"};var Dt=require("fs"),Ad=require("path");function oS(t){return!!(t&&typeof t=="object"&&typeof t.deviceId=="string"&&typeof t.pushToken=="string"&&t.platform==="expo"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"&&(typeof t.lastSentAt=="string"||typeof t.lastSentAt>"u"))}function aS(t){try{let e=(0,Dt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(oS):[]}catch{return[]}}function Pn(t,e){(0,Dt.mkdirSync)((0,Ad.dirname)(t),{recursive:!0}),(0,Dt.writeFileSync)(t,JSON.stringify(e,null,2)+`
105
+ `,"utf8")}var Yr=class{constructor(e=Dc){this.pushSubscriptionsPath=e;this.records=aS(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}count(){return this.records.length}register(e,n){let r=new Date().toISOString(),s=this.records.find(o=>o.deviceId===e),i={deviceId:e,pushToken:n,platform:"expo",createdAt:s?.createdAt??r,updatedAt:r,...s?.lastSentAt?{lastSentAt:s.lastSentAt}:{}};this.records=[i,...this.records.filter(o=>o.deviceId!==e&&o.pushToken!==n)],Pn(this.pushSubscriptionsPath,this.records)}unregister(e,n){let r=this.records.filter(s=>!(s.deviceId===e&&s.pushToken===n));return r.length===this.records.length?!1:(this.records=r,Pn(this.pushSubscriptionsPath,this.records),!0)}unregisterToken(e){let n=this.records.filter(r=>r.pushToken!==e);return n.length===this.records.length?!1:(this.records=n,Pn(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),r=new Date().toISOString(),s=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=r,s=!0);s&&Pn(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],Pn(this.pushSubscriptionsPath,this.records)}};var X=O.child({module:"push"}),lS="https://exp.host/--/api/v2/push/send",cS="https://exp.host/--/api/v2/push/getReceipts",uS=[0,1e3,3e3],Mn=new Yr;function dS(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 fS(t){return new Promise(e=>{setTimeout(e,t)})}function kd(t){return t==="DeviceNotRegistered"}function pS(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],r=[];for(let[s,i]of t.data.entries()){let o=e[s];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}r.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:r}}function hS(t,e){let n=new Map;if(!Array.isArray(t.data))return n;for(let[r,s]of t.data.entries()){let i=e[r];!i||!s||s.status!=="ok"||typeof s.id!="string"||s.id.length===0||n.set(s.id,i)}return n}function gS(t,e){let n=[],r=[],s=t.data;for(let[i,o]of e.entries()){let a=s?.[i];if(!a||typeof a!="object"){n.push(i);continue}a.status==="error"&&r.push({token:o,receipt:a})}return{pendingTicketIds:n,receiptErrors:r}}async function mS(t,e,n,r){let s=new Map(t);for(let i of uS){if(s.size===0)return;i>0&&await n(i);let o;try{o=await e(cS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...s.keys()]})})}catch(c){X.error({error:String(c),count:s.size},"push receipt request failed");return}if(!o.ok){X.error({status:o.status,statusText:o.statusText,count:s.size},"push receipt request returned error status");return}let a=await o.json().catch(()=>null);if(!a){X.error({count:s.size},"push receipt response was unreadable");return}let{pendingTicketIds:l,receiptErrors:u}=gS(a,s);for(let{token:c,receipt:d}of u){let p=d.details?.error;if(X.error({token:c,message:d.message,details:d.details,receiptStatus:d.status},"push receipt rejected"),kd(p)){let h=r.unregisterToken(c);X.info({token:c,errorCode:p,removed:h},"push token removed after receipt rejection")}}s=new Map(l.map(c=>[c,s.get(c)]))}s.size>0&&X.warn({pendingReceipts:s.size},"push receipts still pending after polling")}function yS(t){let e=t?.pushStore??Mn,n=t?.fetchImpl??globalThis.fetch,r=t?.sleepImpl??fS;return async function(i,o,a){let l=e.listTokens();if(l.length===0)return;let u=l.map(c=>({to:c,sound:"default",title:i,body:o,data:a,badge:1,priority:"high",_contentAvailable:!0,...dS(a)&&a.eventType==="approval_request"?{categoryId:Td.approvalRequestV1}:{}}));try{let c=await n(lS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!c.ok){X.error({status:c.status,statusText:c.statusText},"push send failed");return}let d=await c.json().catch(()=>null);if(!d){X.error({count:u.length},"push send returned unreadable response");return}let{successfulTokens:p,ticketErrors:h}=pS(d,l),g=hS(d,l);for(let{token:f,ticket:m}of h){let y=m.details?.error;if(X.error({token:f,message:m.message,details:m.details,ticketStatus:m.status},"push ticket rejected"),kd(y)){let T=e.unregisterToken(f);X.info({token:f,errorCode:y,removed:T},"push token removed after ticket rejection")}}p.length>0&&(X.debug({count:p.length},"push sent"),e.markSent(p)),g.size>0&&await mS(g,n,r,e)}catch(c){X.error({error:String(c)},"push send error")}}}function io(t,e){Mn.register(t,e),X.info({deviceId:t,token:e,total:Mn.count()},"push token registered")}function oo(t,e){let n=Mn.unregister(t,e);X.info({deviceId:t,token:e,total:Mn.count(),removed:n},"push token unregistered")}var Jr=yS();var b=O.child({module:"manager"}),vS="Done.",SS="Approval required",Cd=180,Ft=200,_S=6e4,xd=9e4,bS="Agent \u5361\u4F4F",wS="Agent \u5D29\u6E83",Rd=200;function Ht(t){let e=Math.round(t/1e3);if(e<60)return`${e} \u79D2`;let n=Math.floor(e/60),r=e%60;return r===0?`${n} \u5206\u949F`:`${n} \u5206 ${r} \u79D2`}function Bd(t){if(!t)return;let e=t.trim();if(e)return e.length>Rd?`${e.slice(0,Rd-1)}\u2026`:e}function IS(t,e,n,r){let s=Ht(t),i=Ht(n),o=Ht(e),a=Bd(r),l=a?`
106
+ \u6700\u540E\u7684\u8BF7\u6C42\u662F\uFF1A"${a}"\u3002`:"",u=n>e?`Agent \u957F\u65F6\u95F4\u6CA1\u6709\u8F93\u51FA\u3002\u5DF2 ${s} \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 ${s} \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}}function TS(t,e,n){let r=Ht(t),s=Ht(e),i=n>0?Ht(n):void 0;return{at:new Date().toISOString(),humanText:i?`Agent \u53EF\u80FD\u5361\u4F4F\u4E86\u3002\u5DF2 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${s} \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 ${r} \u6CA1\u6709\u8F93\u51FA\uFF0C\u8D85\u8FC7 ${s} \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,...n>0?{hardTimeoutMs:n}:{}}}function AS(t,e){let n=Bd(e),r=n?`
107
+ \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${r}`,...n?{lastPrompt:n}:{},exitCode:t}}function kS(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 Ed(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 CS(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 r of n)!r||e.includes(r)||(e.push(r),e.length>Ft&&e.splice(0,e.length-Ft));return e}function Kr(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}}function Pd(t){t.managed||(t.managed=!0)}function Md(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&Ar(e)}function Ld(t,e,n){return{sessionId:t,agent:e,...n}}function xS(t){return t.startsWith(Ii)}function Nd(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 Xr=class{constructor(e=Jr,n=Du){this.pushSender=e;this.externalProcessPresenceCheck=n;this.removeInventoryBackfillListener=Yu(()=>{this.noteInventoryChanged("inventory_backfilled")}),this.updateGauges(),this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new zr;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(),_S),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=this.advanceWatchdogClock(Date.now(),"sweep"),n=S.idleTimeoutMs,r=S.turnStallTimeoutMs,s=S.turnStallHardTimeoutMs;if(n<=0&&r<=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(r<=0||a.pendingApproval||l<r)continue;let u=this.getRespondingLivenessHint(a),c=s>0&&l>=s,d=u==="dead";if(!d&&!c){if(!a.stallWarningAt){let g=TS(l,r,s);a.stallWarningAt=e,a.stallWarning=g,this.updateGauges(),b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:r,turnStallHardTimeoutMs:s,livenessHint:u},"responding session exceeded soft stall threshold; waiting before forced stop"),_.increment("driver.stall_warning",{agent:a.agent}),I.emit("driver.stall_warning",{sessionId:a.sessionId,agent:a.agent,idleMs:l,hardTimeoutMs:s||void 0}),this.broadcast(a.sessionId,{type:"session.stall_warning",sessionId:a.sessionId,warning:g}),this.store.upsert(J(a)),this.noteInventoryChanged("session_updated")}continue}let p=d||s<=0?r:s;b.warn({sessionId:a.sessionId,agent:a.agent,inactiveMs:l,turnStallTimeoutMs:r,turnStallHardTimeoutMs:s,livenessHint:u},"stopping stalled driver"),_.increment("driver.stall_timeout",{agent:a.agent}),I.emit("driver.stall_timeout",{sessionId:a.sessionId,agent:a.agent,idleMs:l});let h=IS(l,r,p,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}),this.pushSender(bS,this.buildPushBody(`${a.title||a.sessionId}: ${h.lastPrompt??""}`.trim()),{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}),I.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,r,s){let i=e.driver;i?.onMessage(o=>{if(e.driver!==i){b.info({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"ignoring stale driver message");return}if(b.debug({agent:n,context:r,msgType:o.type,sessionId:e.sessionId},"driver message received"),o.type!=="response"&&"sessionId"in o&&o.sessionId&&o.sessionId!==e.sessionId&&!this.sessions.has(o.sessionId)&&this.remapSessionId(e,o.sessionId,s),(o.type==="session.done"||o.type==="session.interrupted")&&(e.isResponding=!1,o.type==="session.done"&&(n==="claude"?(e.lastUsage=Ed(o.usage),this.reconcileClaudeSessionUsage(e,o.usage)):o.usage&&(e.lastUsage=kS(e.lastUsage,o.usage))),o.type==="session.interrupted"&&this.markLatestAcceptedClientMessageInterrupted(e),(o.type==="session.interrupted"||!Md(e))&&(e.pendingApproval=void 0)),o.type==="approval.request"){if(n==="codex"&&e.approvalMode==="autoApprove"){if(e.driver?.respondApproval(o.requestId,!0)??!1){I.emit("approval.response",{sessionId:e.sessionId,requestId:o.requestId,approved:!0}),e.pendingApproval=void 0,e.isResponding=!0,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated");return}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(SS,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"&&Ar(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.bufferedPrompts.length>0&&this.flushBufferedPrompt(e)}),i?.onExit?.(o=>{if(e.driver!==i){b.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"ignoring stale driver exit");return}b.info({agent:n,context:r,exitCode:o,sessionId:e.sessionId},"driver exited"),I.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&&Md(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=AS(o,e.lastUserMessage);e.interruptReason=u,this.broadcast(e.sessionId,{type:"session.interrupted_notice",sessionId:e.sessionId,reason:u}),this.pushSender(wS,this.buildPushBody(`${e.title||e.sessionId}: ${u.lastPrompt??""}`.trim()),{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 r=await md(e.sessionId,e.cwd),s=Ed(r??n);!s||CS(e.lastUsage,s)||(e.lastUsage=s,this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"))}remapSessionId(e,n,r){if(!n||n===e.sessionId)return;let s=this.sessions.get(n);if(s&&s!==e){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"),r&&this.reply(r,`id_update_${Date.now()}`,!0,{sessionId:n,oldSessionId:i})}flushBufferedPrompt(e,n=!1){if(!e.driver||!e.active||e.startupInProgress||e.pendingApproval||!n&&e.isResponding)return!1;let r=e.bufferedPrompts.shift();return r?(e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=r,e.lastTurnStartedAt=Date.now(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),e.driver.sendPrompt(r,e.model),!0):!1}emitGeneratedFileNoticesForCompletedTurn(e){let n=e.lastTurnStartedAt;e.lastTurnStartedAt=void 0,!(e.agent!=="codex"||!n)&&yd(e.sessionId,e.agent,e.cwd,n).then(r=>{for(let s of r)this.broadcast(e.sessionId,{type:"tool.result",sessionId:e.sessionId,toolCallId:`generated-file-${Date.now()}`,output:s})}).catch(r=>{b.warn({sessionId:e.sessionId,error:String(r)},"failed to read generated-file notices")})}startPendingCodexSession(e,n){if(e.agent!=="codex"||!e.driver)return;let r=e.driver,s=e.sessionId,i=e.startupToken,o=_.startTimer("driver.spawn");(async()=>{try{let a=await r.start(e.cwd,void 0,e.approvalMode),l=o();if(this.sessions.get(s)!==e||e.startupToken!==i||e.driver!==r){b.info({pendingSessionId:s,actualSessionId:a},"discarding stale codex startup result");return}e.startupInProgress=!1,b.info({pendingSessionId:s,sessionId:a,spawnMs:l},"codex session ready"),a&&a!==s&&this.remapSessionId(e,a,n),this.flushBufferedPrompt(e,!0)}catch(a){if(o(),this.sessions.get(s)!==e||e.startupToken!==i){b.info({pendingSessionId:s,error:String(a)},"ignoring stale codex startup failure");return}e.startupInProgress=!1,e.bufferedPrompts=[],e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.error({sessionId:s,cwd:e.cwd,error:String(a)},"async codex createSession error"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to start Codex session: ${String(a)}`})}})()}configureDriverBeforeStart(e,n,r,s){if(e==="codex"&&n instanceof bn&&s&&n.setModel(s),e!=="claude"||!(n instanceof _n))return;let i=r??(0,ao.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=vn){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&xS(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(b.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return b.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),vn;if(r.approvalMode==="autoApprove")return Nd(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return vn;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=`${Ii}${l.trim()||(0,ao.randomUUID)()}`,c=r.pendingClaudeHookApprovals.get(u);if(c)return c.promise;let d=`Claude requested permissions to use ${i}.`,p,h=new Promise(g=>{p=g});return r.pendingClaudeHookApprovals.set(u,{requestId:u,promise:h,resolve:g=>{r.pendingClaudeHookApprovals.delete(u),p(g)}}),r.pendingApproval={requestId:u,toolName:i,input:a,description:d},I.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:i}),this.touchSession(r.sessionId),this.noteInventoryChanged("session_updated"),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:u,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,r){if(e=this.resolveSessionRef(e).resolvedSessionId,this.isDeletedSession(e))return;let s=new Date().toISOString(),i=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.model,u=r?.pendingApproval,c=r?.title??"",d=r?.createdAt??s,p=r?.lastActivityAt??s,h=r?.lastUsage,g=ke(r?.acceptedClientMessageIds),f=ke(r?.interruptedClientMessageIds),m=r?.isResponding,y=r?.interruptReason,T=r?.stallWarning,A=r?"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,p=w.lastActivityAt||p,h=w.lastUsage??h,g=ke(w.acceptedClientMessageIds,g),f=ke(w.interruptedClientMessageIds,f),y=y??w.interruptReason,T=T??w.stallWarning,A="record";else if(!r){let x=(await Rn(n??i)).find(G=>G.sessionId===e);x&&(i=x.agent,o=x.cwd||o,c=x.title??c,d=x.createdAt,p=x.lastActivityAt,h=x.lastUsage??h,m=x.runtime.isResponding??m,A="scanner")}if(!i&&n&&(i=n,A=r?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,model:l,pendingApproval:u,title:c,createdAt:d,lastActivityAt:p,lastUsage:h,acceptedClientMessageIds:g,interruptedClientMessageIds:f,source:A,managed:r?.managed??w?.managed,isResponding:m||void 0,...y?{interruptReason:y}:{},...T?{stallWarning:T}:{}}}collectReconnectPendingApprovals(){let e=[],n=new Set;for(let r of this.sessions.values()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Ld(r.sessionId,r.agent,r.pendingApproval)))}for(let r of this.store.getAll()){if(!r.pendingApproval)continue;let s=`${r.agent}:${r.sessionId}:${r.pendingApproval.requestId}`;n.has(s)||(n.add(s),e.push(Ld(r.sessionId,r.agent,r.pendingApproval)))}return e}restoreDriverPendingApproval(e,n){n&&e.restorePendingApproval?.(n)}async reviveSessionForApproval(e){if(e.driver)return!0;if(!e.pendingApproval||e.agent!=="codex")return!1;let n=this.createDriver(e.agent),r=this.configureDriverBeforeStart(e.agent,n,e.claudeHookSecret);return await n.start(e.cwd,e.sessionId,e.approvalMode),this.restoreDriverPendingApproval(n,e.pendingApproval),e.driver=n,e.active=!0,e.isResponding=!1,e.currentReplyText="",e.startupInProgress=!1,e.bufferedPrompts=e.bufferedPrompts??[],e.startupToken=e.startupToken??0,e.claudeHookSecret=r??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval resumed)"),this.store.upsert(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<=Cd?n:`${n.slice(0,Math.max(1,Cd-3)).trimEnd()}...`:vS}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 r=Math.max(0,e-this.lastWatchdogWallClockMs);return this.lastWatchdogWallClockMs=e,r<=0?this.watchdogNowMs:r>xd?(n==="sweep"&&b.warn({elapsedWallMs:r,toleratedGapMs:xd},"watchdog gap detected; discounting paused wall-clock time"),this.watchdogNowMs):(this.watchdogNowMs+=r,this.watchdogNowMs)}touchSession(e,n=!0){let r=Date.now(),s=new Date(r).toISOString(),i=this.advanceWatchdogClock(r,"activity"),o=this.sessions.get(e);if(o){o.lastActivityAt=s,o.lastActivityTs=i,n&&this.store.upsert(J(o));return}let a=this.store.find(e);a&&this.store.upsert({...a,lastActivityAt:s})}updateGauges(){let e=0,n=0;for(let r of this.sessions.values())r.active&&e++,r.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 r=n?{...n}:{};return e.remapped&&(r.sessionId=e.resolvedSessionId,r.oldSessionId=e.requestedSessionId),Object.keys(r).length>0?r:void 0}buildSessionResponseData(e,n,r){let s=r?{...r}:{};return n&&n!==e.requestedSessionId&&(s.sessionId=n,s.oldSessionId=e.requestedSessionId),Object.keys(s).length>0?s: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 Rn(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.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);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor,n.customTitles);break}}addGlobalClient(e){this.globalClients.add(e)}removeClient(e){this.globalClients.delete(e);for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep(),this.removeInventoryBackfillListener(),this.globalClients.clear();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){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(){Fr({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds(),skipGitMetadata:!0}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}noteInventoryChanged(e){if(this.inventoryVersion+=1,this.globalClients.size===0)return;let n={type:"sessions.changed",version:this.inventoryVersion,reason:e},r=JSON.stringify(n);for(let s of this.globalClients)s.readyState===1&&s.send(r)}async createSession(e,n,r,s,i,o,a){s=Vr(s),b.info({agent:r,cwd:s,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,Od.stat)(s)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${s}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${s}`);return}if(o)try{let u=(await this.listRecentSessionsForContinue(r,s)).find(c=>!this.isDeletedSession(c.sessionId));if(u)return b.info({sessionId:u.sessionId,cwd:s},"continue mode: resuming last session"),this.resumeSession(e,n,u.sessionId,r,s,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(r),u=this.configureDriverBeforeStart(r,l,void 0,a);if(r==="codex"){let g=`pending_${Date.now()}`;b.info({sessionId:g,agent:r,cwd:s},"session created (pending codex startup)"),_.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:g,agent:r,cwd:s,approvalMode:i});let f={sessionId:g,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!0,bufferedPrompts:[],startupToken:1,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(g,f),this.registerClaudeHookSession(f),this.store.upsert(J(f)),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(f,r,"",e),this.reply(e,n,!0,{sessionId:g}),this.startPendingCodexSession(f,e);return}let c=_.startTimer("driver.spawn"),d=await l.start(s,void 0,i),p=c();b.info({sessionId:d,agent:r,spawnMs:p},"session created"),_.increment("session.create",{agent:r}),I.emit("session.create",{sessionId:d,agent:r,cwd:s,approvalMode:i});let h={sessionId:d,agent:r,cwd:s,approvalMode:i,model:a,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],interruptedClientMessageIds:[],syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:!0,claudeHookSecret:u,pendingClaudeHookApprovals:new Map};this.sessions.set(d,h),this.registerClaudeHookSession(h),this.store.upsert(J(h)),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_created"),this.bindDriverLifecycle(h,r,"",e),this.reply(e,n,!0,{sessionId:d})}catch(l){b.error({agent:r,cwd:s,error:String(l)},"createSession error"),this.reply(e,n,!1,void 0,String(l))}}async resumeSession(e,n,r,s,i,o){let a=this.resolveSessionRef(r);if(r=a.resolvedSessionId,this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let l=this.sessions.get(r);if(l&&l.active){l.clients.add(e),this.touchSession(l.sessionId),this.noteInventoryChanged("session_updated");let h=await En(r,s,l.cwd),g=this.annotateHistoryMessages(h,l.acceptedClientMessageIds,l.interruptedClientMessageIds),f=this.currentPartialReplyText(l);if(h.length>0||f||l.approvalMode||l.pendingApproval||l.stallWarning){let m={type:"session.history",sessionId:r,messages:g,...Kr(l.acceptedClientMessageIds),isResponding:l.isResponding||void 0,partialReplyText:f,approvalMode:l.approvalMode,pendingApproval:l.pendingApproval,stallWarning:l.stallWarning};e.readyState===1&&e.send(JSON.stringify(m))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(a,{sessionId:r}));return}let u=this.store.find(r),c=i||u?.cwd||"",d=o??u?.approvalMode,p=u?.title??"Resumed session";try{let h=_.startTimer("driver.spawn"),g=this.createDriver(s),f=this.configureDriverBeforeStart(s,g),m=this.canResumeDriverSession(s,r),y=await g.start(c,m?r:void 0,d),T=h();b.info({sessionId:y,agent:s,spawnMs:T},"session resumed"),_.increment("session.resume",{agent:s}),I.emit("session.resume",{sessionId:y,agent:s,cwd:c});let A={sessionId:y,agent:s,cwd:c,approvalMode:d,model:u?.model,driver:g,clients:new Set([e]),title:p,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,bufferedPrompts:[],startupToken:0,managed:u?.managed,pendingApproval:u?.pendingApproval,stallWarning:u?.stallWarning,claudeHookSecret:f,pendingClaudeHookApprovals:new Map};this.sessions.set(y,A),this.rememberSessionAlias(r,y),this.registerClaudeHookSession(A),this.store.upsert(J(A)),this.updateGauges(),this.noteInventoryChanged("session_updated"),this.bindDriverLifecycle(A,s," (resumed)",e),this.restoreDriverPendingApproval(g,A.pendingApproval);let C=await En(m?r:y,s,c),x=this.annotateHistoryMessages(C,A.acceptedClientMessageIds,A.interruptedClientMessageIds);if(C.length>0||A.pendingApproval||A.stallWarning){b.info({sessionId:r,historyCount:C.length},"sending history messages");let G={type:"session.history",sessionId:y,messages:x,...Kr(A.acceptedClientMessageIds),approvalMode:d,pendingApproval:A.pendingApproval,stallWarning:A.stallWarning};e.readyState===1&&e.send(JSON.stringify(G))}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>Ft&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Ft))}rememberInterruptedClientMessage(e,n){e.interruptedClientMessageIds.includes(n)||(e.interruptedClientMessageIds.push(n),e.interruptedClientMessageIds.length>Ft&&e.interruptedClientMessageIds.splice(0,e.interruptedClientMessageIds.length-Ft))}markLatestAcceptedClientMessageInterrupted(e){let n=e.acceptedClientMessageIds[e.acceptedClientMessageIds.length-1];n&&this.rememberInterruptedClientMessage(e,n)}annotateHistoryMessages(e,n,r){if(!e.length||!n?.length||!r?.length)return e;let s=new Set(r),i=[];for(let 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];s.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,r,s,i,o,a,l){let u=this.resolveSessionRef(r);if(r=u.resolvedSessionId,this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let c=this.sessions.get(r);if(!c||!c.driver){let f=await this.resolveReconnectSession(r,i,c);if(!f){b.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:r,agent:f.agent,source:f.source},"auto-reconnecting session"),_.increment("session.reconnect",{agent:f.agent,source:f.source}),I.emit("session.reconnect",{sessionId:r,agent:f.agent,source:f.source});try{let m=this.createDriver(f.agent),y=this.configureDriverBeforeStart(f.agent,m,c?.claudeHookSecret),T=this.canResumeDriverSession(f.agent,r),A=await m.start(f.cwd,T?r:void 0,f.approvalMode);this.restoreDriverPendingApproval(m,f.pendingApproval),c?(c.approvalMode=f.approvalMode,c.model=f.model,c.pendingApproval=f.pendingApproval,c.driver=m,c.active=!0,c.clients.add(e),c.lastActivityAt=f.lastActivityAt,c.lastUsage=f.lastUsage,c.lastActivityTs=this.currentWatchdogTime(),c.isResponding=!1,c.currentReplyText="",c.acceptedClientMessageIds=ke(c.acceptedClientMessageIds,f.acceptedClientMessageIds),c.interruptedClientMessageIds=ke(c.interruptedClientMessageIds,f.interruptedClientMessageIds),c.syntheticApprovalRetries=c.syntheticApprovalRetries??{},c.startupInProgress=!1,c.bufferedPrompts=c.bufferedPrompts??[],c.startupToken=c.startupToken??0,c.claudeHookSecret=y??c.claudeHookSecret,c.pendingClaudeHookApprovals=c.pendingClaudeHookApprovals??new Map,A&&A!==c.sessionId&&this.remapSessionId(c,A)):(c={sessionId:A,agent:f.agent,cwd:f.cwd,approvalMode:f.approvalMode,model:f.model,driver:m,clients:new Set([e]),title:f.title,createdAt:f.createdAt,lastActivityAt:f.lastActivityAt,lastUsage:f.lastUsage,active:!0,lastActivityTs:this.currentWatchdogTime(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:f.acceptedClientMessageIds,interruptedClientMessageIds:f.interruptedClientMessageIds,syntheticApprovalRetries:{},startupInProgress:!1,bufferedPrompts:[],startupToken:0,managed:f.managed,pendingApproval:f.pendingApproval,claudeHookSecret:y,pendingClaudeHookApprovals:new Map,interruptReason:f.interruptReason},this.sessions.set(A,c),this.rememberSessionAlias(r,A)),this.registerClaudeHookSession(c),this.bindDriverLifecycle(c,f.agent," (reconnected)"),this.store.upsert(J(c)),this.updateGauges(),this.noteInventoryChanged("session_updated"),r=c.sessionId}catch(m){this.reply(e,n,!1,void 0,`Failed to reconnect: ${m}`);return}}if(c.clients.add(e),c.pendingApproval){this.reply(e,n,!1,void 0,"Resolve the pending approval before sending another message.");return}if(o&&this.hasAcceptedClientMessage(c,o)){this.reply(e,n,!0,this.buildResolvedSessionResponseData(u,{sessionId:r,clientMessageId:o,duplicate:!0}));return}b.info({sessionId:r,clients:c.clients.size,hasDriver:!!c.driver,active:c.active,imageCount:a?.length??0},"sending message"),I.emit("session.send",{sessionId:r,agent:c.agent,messagePreview:s.slice(0,100),imageCount:a?.length??0}),Pd(c),c.interruptReason&&(c.interruptReason=void 0,this.store.upsert(J(c)),this.noteInventoryChanged("session_updated"));let d=this.clearStallWarning(c);if(Pt(c.title)){let f=Mi(s,50);f&&f!==c.title&&(c.title=f),this.store.upsert(J(c))}o&&this.rememberAcceptedClientMessage(c,o),this.touchSession(c.sessionId),d&&this.noteInventoryChanged("session_updated");let p=new Set([".png",".jpg",".jpeg",".gif",".webp",".heic",".heif",".bmp",".svg"]),h=a?.length?a.map(f=>{let m=f.lastIndexOf("."),y=m>=0?f.slice(m).toLowerCase():"";return`[Attached ${p.has(y)?"image":"file"}: ${f}]`}).join(`
108
108
  `):"",g=h?s?`${s}
109
109
 
110
- ${h}`:h:s;if(l!==void 0&&(c.model=l||void 0),c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.bufferedPrompts.push(g),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}));return}if(c.isResponding){c.bufferedPrompts.push(g),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}));return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.lastTurnStartedAt=Date.now(),this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(g,c.model),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}))}async sendReconnectSnapshot(e,n,r,s,i,o,a,l){try{let u=this.getDeletedSessionIds(),c;try{c=await Fr({agent:r,cwd:s,search:i,customTitles:l,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:u})}catch(h){b.warn({error:String(h)},"failed to build reconnect snapshot session list"),c={sessions:[],nextCursor:void 0}}c={...c,inventoryVersion:this.inventoryVersion};let d;if(o&&!u.has(o)){let h=o;o=this.resolveSessionRef(o).resolvedSessionId;let g=a??c.sessions.find(y=>y.sessionId===o)?.agent,f=this.sessions.get(o);f&&f.clients.add(e);let m=await this.resolveReconnectSession(o,g,f);if(m){let y=await En(o,m.agent,f?.cwd??m.cwd),T=this.annotateHistoryMessages(y,f?.acceptedClientMessageIds??m.acceptedClientMessageIds,f?.interruptedClientMessageIds??m.interruptedClientMessageIds),A=f?{}:await so(o,m.agent,m.cwd),w=!f&&!!A.isResponding,C=w?await this.externalProcessPresenceCheck(o):!1,P=w&&!C?{}:A,G=f?.interruptReason??m.interruptReason,ye=f?.stallWarning??m.stallWarning;d={sessionId:o,agent:m.agent,messages:T,...Kr(f?.acceptedClientMessageIds??m.acceptedClientMessageIds),isResponding:f?.isResponding??P.isResponding??(w&&!C?void 0:m.isResponding),...C?{externallyResponding:!0}:{},partialReplyText:f?this.currentPartialReplyText(f):P.partialReplyText,approvalMode:f?.approvalMode??m.approvalMode,...f?.pendingApproval?{pendingApproval:f.pendingApproval}:{},...G?{interruptReason:G}:{},...ye?{stallWarning:ye}:{}},h!==o&&this.reply(e,`id_update_${Date.now()}`,!0,{sessionId:o,oldSessionId:h})}}let p=this.collectReconnectPendingApprovals();_.increment("reconnect.snapshot",{activeSession:d?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:c.sessions,nextCursor:c.nextCursor,inventoryVersion:c.inventoryVersion,...d?{activeSession:d}:{},...p.length>0?{pendingApprovals:p}:{}}})}catch(u){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(u)}`)}}async approve(e,n,r,s,i){let o=this.resolveSessionRef(r);r=o.resolvedSessionId;let a=this.sessions.get(r),l=a?.pendingApproval,u=a?.pendingClaudeHookApprovals.get(s);if(a&&u){a.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),u.resolve(Dd(i)),a.isResponding=!0,this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:r}));return}let c=a?.syntheticApprovalRetries[s];if(a&&c&&Ar(s)){delete a.syntheticApprovalRetries[s],a.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:r})),i&&await this.retrySyntheticClaudeApproval(a,c);return}if(a&&!a.driver&&l)try{await this.reviveSessionForApproval(a)}catch(p){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(p)}`);return}if(!a?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),!a.driver.respondApproval(s,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:r}))}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",s=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,s,e.claudeHookSecret);await s.start(e.cwd,e.sessionId,r),e.driver=s,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.lastTurnStartedAt=Date.now(),e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken=0,e.claudeHookSecret=i??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(J(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),s.sendPrompt(n.message,e.model)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken+=1,this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,s){let i=this.resolveSessionRef(r);r=i.resolvedSessionId;let o=this.sessions.get(r);if(!o){let l=this.store.find(r);l?(s===null?delete l.approvalMode:l.approvalMode=s,this.store.upsert(l),this.noteInventoryChanged("session_updated"),b.info({sessionId:r,agent:l.agent,newMode:s},"approval mode changed (inactive session)")):b.info({sessionId:r,newMode:s},"approval mode changed (untracked session)"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:s,sessionId:r}));return}if(s===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let a=o.approvalMode;o.approvalMode=s,this.store.upsert(J(o)),this.noteInventoryChanged("session_updated"),b.info({sessionId:r,agent:o.agent,oldMode:a,newMode:s},"approval mode changed"),o.driver&&o.driver.setApprovalMode(s),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:s,sessionId:r}))}interrupt(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);if(!i){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("session.interrupt",{sessionId:r,agent:i.agent}),!i.driver){(i.isResponding||i.bufferedPrompts.length>0)&&(b.info({sessionId:r,agent:i.agent},"interrupting driverless session with stale responding state"),i.bufferedPrompts=[],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"),this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId})),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}));return}if(i.startupInProgress){let o=i.isResponding||i.bufferedPrompts.length>0;b.info({sessionId:r,agent:i.agent,hadBufferedTurn:o},"interrupting pending startup session"),i.bufferedPrompts=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,i.pendingApproval=void 0,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r})),o&&this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId});return}i.driver.interrupt(),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}clearInterrupt(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r),o=this.store.find(r);if(!i&&!o?.interruptReason){this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}));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(s,{sessionId:r}))}stopSession(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);if(!i){this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:r,agent:i.agent},"stopping session"),I.emit("session.stop",{sessionId:r,agent:i.agent}),Nd(i);let o=i.isResponding||i.bufferedPrompts.length>0||i.startupInProgress;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.bufferedPrompts=[],i.startupToken+=1,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.updateGauges(),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}deleteSession(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);i&&(b.info({sessionId:r,agent:i.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.startupInProgress=!1,i.bufferedPrompts=[],i.startupToken+=1,this.unregisterClaudeHookSession(i),this.sessions.delete(r)),I.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}async sendHistory(e,n,r,s){let i=this.resolveSessionRef(r);r=i.resolvedSessionId;let o=this.sessions.get(r),a=o?.active?o:void 0;if(!o&&this.isDeletedSession(r)){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(r)?.cwd??"",u=this.store.find(r),c=await En(r,s,l),d=this.annotateHistoryMessages(c,o?.acceptedClientMessageIds??u?.acceptedClientMessageIds,o?.interruptedClientMessageIds??u?.interruptedClientMessageIds),p=a||o?{}:await so(r,s,l),h=!a&&!!p.isResponding,g=h?await this.externalProcessPresenceCheck(r):!1,f=g?!0:void 0,m=h&&!g?{}:p,y=a?.isResponding??m.isResponding,T=a?this.currentPartialReplyText(a):m.partialReplyText;b.info({sessionId:r,historyCount:c.length,isResponding:y,externallyResponding:f,approvalMode:o?.approvalMode??u?.approvalMode},"sending history");let A={type:"session.history",sessionId:r,messages:d,...Kr(o?.acceptedClientMessageIds??u?.acceptedClientMessageIds),isResponding:y,externallyResponding:f,partialReplyText:T,approvalMode:o?.approvalMode??u?.approvalMode,pendingApproval:o?.pendingApproval??u?.pendingApproval,stallWarning:o?.stallWarning??u?.stallWarning};e.readyState===1&&e.send(JSON.stringify(A));let w=o?.interruptReason??u?.interruptReason;if(w&&e.readyState===1){let C={type:"session.interrupted_notice",sessionId:r,reason:w};e.send(JSON.stringify(C))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:r}))}async listSessions(e,n,r,s,i,o=50,a,l){try{let u=await Fr({agent:r,cwd:s,search:i,customTitles:l,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,{...u,inventoryVersion:this.inventoryVersion})}catch(u){this.reply(e,n,!1,void 0,String(u))}}createDriver(e){switch(e){case"claude":return new _n;case"codex":return new bn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){b.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let s=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:r.clients,o=i.size,a=0,l=0;for(let u of i)u.readyState===1?(u.send(s),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"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let u=r.title||e,c=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(u,c,{sessionId:e,agent:r.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,s,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:s,error:i};e.send(JSON.stringify(o))}};function co(t,e){if(!e.deviceId){e.respond({type:"response",id:t.id,ok:!1,error:"device_auth_required"});return}t.action==="push.register"?e.registerToken(e.deviceId,t.pushToken):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Ud=require("child_process");function RS(t,e){return(0,Ud.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function ES(t){let e=t.split(`
111
- `).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Wd(t,e=RS){let n;try{n=ES(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(r=>{try{let s=e("ps",["-p",String(r),"-o","command="]);return s?{pid:r,command:s}:{pid:r}}catch{return{pid:r}}})}var Ut=require("fs"),uo=require("os"),Gd=require("crypto"),jd=require("path");function $d(t){return(0,Gd.randomBytes)(t).toString("base64url")}function PS(){return`d_${$d(12)}`}function MS(){return(0,uo.hostname)()}function LS(){let t=(0,uo.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function NS(t){return{daemonId:PS(),daemonSecret:$d(32),displayName:MS(),canonicalHost:LS(),port:t,createdAt:new Date().toISOString()}}function qd(t,e){(0,Ut.mkdirSync)((0,jd.dirname)(e),{recursive:!0}),(0,Ut.writeFileSync)(e,JSON.stringify(t,null,2)+`
112
- `,"utf8")}function zd(t,e=Bc){try{let r=(0,Ut.readFileSync)(e,"utf8"),s=JSON.parse(r);if(typeof s.daemonId=="string"&&typeof s.daemonSecret=="string"&&typeof s.displayName=="string"&&typeof s.canonicalHost=="string"&&typeof s.createdAt=="string"){let i={daemonId:s.daemonId,daemonSecret:s.daemonSecret,displayName:s.displayName,canonicalHost:s.canonicalHost,port:typeof s.port=="number"&&Number.isFinite(s.port)?s.port:t,createdAt:s.createdAt};return i.port!==t&&(i.port=t,qd(i,e)),i}}catch{}let n=NS(t);return qd(n,e),n}var Wt=require("crypto"),qt=require("fs"),Yd=require("path");function fo(t){return(0,Wt.randomBytes)(t).toString("base64url")}function po(t){return(0,Wt.createHash)("sha256").update(t).digest("hex")}function Vd(t,e){let n=Buffer.from(t),r=Buffer.from(e);return n.length!==r.length?!1:(0,Wt.timingSafeEqual)(n,r)}function OS(t){try{let e=(0,qt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(r=>r&&typeof r.deviceId=="string"&&typeof r.deviceName=="string"&&typeof r.tokenHash=="string"&&typeof r.createdAt=="string"&&typeof r.lastSeenAt=="string"&&(typeof r.revokedAt=="string"||r.revokedAt===null)):[]}catch{return[]}}function Ln(t,e){(0,qt.mkdirSync)((0,Yd.dirname)(t),{recursive:!0}),(0,qt.writeFileSync)(t,JSON.stringify(e,null,2)+`
113
- `,"utf8")}var Qr=class{constructor(e=Dc){this.pairingsPath=e;this.records=OS(e)}records;windows=new Map;list(){return this.records.slice()}pairedCount(){return this.records.filter(e=>!e.revokedAt).length}openWindow(e=5*6e4,n=!1){let r=`pair_${fo(8)}`,s=fo(24),i=new Date(Date.now()+e).toISOString(),o={pairingId:r,pairNonce:s,expiresAt:i,reusable:n};return this.windows.set(s,o),o}consumeWindow(e){let n=this.windows.get(e);return!n||(n.reusable||this.windows.delete(e),new Date(n.expiresAt).getTime()<Date.now())?null:n}issuePairToken(e,n){let r=new Date().toISOString(),s=fo(32),i={deviceId:e,deviceName:n,tokenHash:po(s),createdAt:r,lastSeenAt:r,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),Ln(this.pairingsPath,this.records),s}validatePairToken(e,n,r=!0){let s=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!s)return!1;let i=po(n);return Vd(s.tokenHash,i)?(r&&(s.lastSeenAt=new Date().toISOString(),Ln(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let r=po(e),s=this.records.find(i=>!i.revokedAt&&Vd(i.tokenHash,r));return s?(n&&(s.lastSeenAt=new Date().toISOString(),Ln(this.pairingsPath,this.records)),s):null}revoke(e){let n=this.records.find(r=>r.deviceId===e&&!r.revokedAt);return n?(n.revokedAt=new Date().toISOString(),Ln(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),Ln(this.pairingsPath,this.records)}};function at(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function BS(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function ho(t,e){return BS(t)??e}function Zr(t,e){return!!(t&&e&&t===e)}function go(t,e,n,r=!0){return t?Zr(t,e)?!0:!!n(t,r):!1}var Xd=require("child_process"),Qd=require("fs");function es(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function mo(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function DS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function FS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function HS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}function ts(t){return!!t&&!DS(t)&&!FS(t)}function de(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function yo(t){return de(t.replace(/^https?:\/\//,""))??t}function US(t,e){return(t??[]).map(n=>de(n)).filter(n=>!!n).filter(n=>ts(n)).filter((n,r,s)=>n!==e&&s.indexOf(n)===r)}function WS(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 qS(t){let e=yo(t);return mo(e)||e.endsWith(".ts.net")}function GS(t){let e=yo(t);return HS(e)||e.endsWith(".local")}function jS(t){return yo(t).endsWith(".trycloudflare.com")}function Jd(t,e){return qS(t)?"tailscale":GS(t)?"local_network":e?"configured_host":"fallback"}function Zd(t){let e=new Set,n=[];for(let r of t){let s=`${r.host}:${r.port}:${r.secure===!0?"secure":"plain"}`;e.has(s)||(e.add(s),n.push(r))}return n}function $S(t){let e=t[0];return e?t.slice(1).filter(n=>n.port===e.port).map(n=>n.host).filter((n,r,s)=>n!==e.host&&s.indexOf(n)===r):[]}function zS(t){try{let e=new URL(t),n=de(e.hostname);if(!n)throw new Error("invalid relay hostname");let r=e.port?Number(e.port):e.protocol==="https:"?443:80,s=Number.isFinite(r)&&r>0?Math.floor(r):443,i=jS(n);return{kind:"relay",host:n,port:s,...e.protocol==="https:"?{secure:!0}:{},source:i?"quick_tunnel":"configured_relay",stability:i?"ephemeral":"stable"}}catch{return null}}function VS(t,e,n){let r=de(t)||"localhost",s=US(e,r);return Zd([{kind:"direct",host:r,port:n,source:Jd(r,!0),stability:"stable"},...s.map(i=>({kind:"direct",host:i,port:n,source:Jd(i,!1),stability:"stable"}))])}function ef(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function YS(t){let e=[],n=[];for(let[r,s]of Object.entries(t))if(s&&WS(r))for(let i of s)i.internal||i.family!=="IPv4"||ts(i.address)&&(mo(i.address)?e.push(i.address):n.push(i.address));return[...e,...n]}function Kd(t){let e=JSON.parse(t),n=de(e.Self?.DNSName),r=(e.Self?.TailscaleIPs??[]).map(o=>de(o)).filter(o=>!!o).filter(o=>mo(o)&&ts(o)),s=r[0]??n,i=[...n&&n!==s?[n]:[],...r.filter(o=>o!==s)];return{canonicalHost:s,fallbackHosts:i}}function tf(t=Xd.execFileSync,e=Qd.existsSync){let n=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(r=>typeof r=="string"&&r.length>0).filter(r=>e(r));for(let r of n)try{let s=t("tailscale",["--socket",r,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Kd(s)}catch{}try{let r=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Kd(r)}catch{return{fallbackHosts:[]}}}function nf(t){let e=VS(t.canonicalHost,t.fallbackHosts,t.port),n=t.relayUrl?zS(t.relayUrl):null,r=Zd([...n?[n]:[],...e]),s=r[0]??{kind:"direct",host:de(t.canonicalHost)||"localhost",port:t.port,source:"configured_host",stability:"stable"};return{canonicalHost:s.host,fallbackHosts:$S(r),port:s.port,connections:r}}function rf(t){let e=de(t.canonicalHost),n=de(t.configuredCanonicalHost)||de(t.tailscaleCanonicalHost)||e||"localhost",r=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...YS(t.interfaces)].map(s=>de(s)).filter(s=>!!s).filter(s=>ts(s)).filter((s,i,o)=>s!==n&&o.indexOf(s)===i);return{canonicalHost:n,fallbackHosts:r}}function sf(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 $=O.child({module:"daemon"}),Nn=O.child({module:"ws"});function JS(){try{let t=JSON.parse(require("fs").readFileSync(Hc,"utf8"));return typeof t.latestVersion=="string"?t.latestVersion:void 0}catch{return}}var U=zd(S.port),Z=new Xr((t,e,n)=>Jr(t,e,{daemonId:U.daemonId,canonicalHost:On().canonicalHost,...n??{}})),pe=new Qr,rs=new Set,He=new WeakMap,of=!1,uf=Date.now(),Gt=null,ns=null,KS=1e3;function XS(){let t=tf();return rf({canonicalHost:U.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:ef(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,cf.networkInterfaces)()})}function On(){let t=Date.now();if(ns&&ns.expiresAt>t)return ns.value;let e=XS(),n=nf({canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts,port:U.port,relayUrl:S.relayUrl});return ns={value:n,expiresAt:t+KS},n}function QS(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 ZS(t){let e=JSON.stringify(QS(t));await(0,oe.mkdir)(Ie,{recursive:!0}),await _o.default.toFile(vi,e,{type:"png",errorCorrectionLevel:"M",margin:1,scale:8});let n=await _o.default.toString(e,{type:"terminal",small:!0,errorCorrectionLevel:"M"});kt(`
110
+ ${h}`:h:s;if(l!==void 0&&(c.model=l||void 0),c.startupInProgress){c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.bufferedPrompts.push(g),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}));return}if(c.isResponding){c.bufferedPrompts.push(g),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}));return}c.isResponding=!0,c.currentReplyText="",c.lastUserMessage=s,c.lastTurnStartedAt=Date.now(),this.noteInventoryChanged("session_updated"),c.driver.sendPrompt(g,c.model),this.reply(e,n,!0,this.buildSessionResponseData(u,r,o?{sessionId:r,clientMessageId:o}:{sessionId:r}))}async sendReconnectSnapshot(e,n,r,s,i,o,a,l){try{let u=this.getDeletedSessionIds(),c;try{c=await Fr({agent:r,cwd:s,search:i,customTitles:l,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:u})}catch(h){b.warn({error:String(h)},"failed to build reconnect snapshot session list"),c={sessions:[],nextCursor:void 0}}c={...c,inventoryVersion:this.inventoryVersion};let d;if(o&&!u.has(o)){let h=o;o=this.resolveSessionRef(o).resolvedSessionId;let g=a??c.sessions.find(y=>y.sessionId===o)?.agent,f=this.sessions.get(o);f&&f.clients.add(e);let m=await this.resolveReconnectSession(o,g,f);if(m){let y=await En(o,m.agent,f?.cwd??m.cwd),T=this.annotateHistoryMessages(y,f?.acceptedClientMessageIds??m.acceptedClientMessageIds,f?.interruptedClientMessageIds??m.interruptedClientMessageIds),A=f?{}:await ro(o,m.agent,m.cwd),w=!f&&!!A.isResponding,C=w?await this.externalProcessPresenceCheck(o):!1,x=w&&!C?{}:A,G=f?.interruptReason??m.interruptReason,ye=f?.stallWarning??m.stallWarning;d={sessionId:o,agent:m.agent,messages:T,...Kr(f?.acceptedClientMessageIds??m.acceptedClientMessageIds),isResponding:f?.isResponding??x.isResponding??(w&&!C?void 0:m.isResponding),...C?{externallyResponding:!0}:{},partialReplyText:f?this.currentPartialReplyText(f):x.partialReplyText,approvalMode:f?.approvalMode??m.approvalMode,...f?.pendingApproval?{pendingApproval:f.pendingApproval}:{},...G?{interruptReason:G}:{},...ye?{stallWarning:ye}:{}},h!==o&&this.reply(e,`id_update_${Date.now()}`,!0,{sessionId:o,oldSessionId:h})}}let p=this.collectReconnectPendingApprovals();_.increment("reconnect.snapshot",{activeSession:d?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:c.sessions,nextCursor:c.nextCursor,inventoryVersion:c.inventoryVersion,...d?{activeSession:d}:{},...p.length>0?{pendingApprovals:p}:{}}})}catch(u){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(u)}`)}}async approve(e,n,r,s,i){let o=this.resolveSessionRef(r);r=o.resolvedSessionId;let a=this.sessions.get(r),l=a?.pendingApproval,u=a?.pendingClaudeHookApprovals.get(s);if(a&&u){a.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),u.resolve(Nd(i)),a.isResponding=!0,this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:r}));return}let c=a?.syntheticApprovalRetries[s];if(a&&c&&Ar(s)){delete a.syntheticApprovalRetries[s],a.pendingApproval=void 0,I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(a.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(o,{sessionId:r})),i&&await this.retrySyntheticClaudeApproval(a,c);return}if(a&&!a.driver&&l)try{await this.reviveSessionForApproval(a)}catch(p){this.reply(e,n,!1,void 0,`Failed to restore approval session: ${String(p)}`);return}if(!a?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("approval.response",{sessionId:r,requestId:s,approved:i}),!a.driver.respondApproval(s,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:r}))}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",s=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,s,e.claudeHookSecret);await s.start(e.cwd,e.sessionId,r),e.driver=s,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.lastTurnStartedAt=Date.now(),e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken=0,e.claudeHookSecret=i??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(J(e)),this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),s.sendPrompt(n.message,e.model)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,e.startupInProgress=!1,e.bufferedPrompts=[],e.startupToken+=1,this.updateGauges(),this.touchSession(e.sessionId),this.noteInventoryChanged("session_updated"),b.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,s){let i=this.resolveSessionRef(r);r=i.resolvedSessionId;let o=this.sessions.get(r);if(!o){let l=this.store.find(r);l?(s===null?delete l.approvalMode:l.approvalMode=s,this.store.upsert(l),this.noteInventoryChanged("session_updated"),b.info({sessionId:r,agent:l.agent,newMode:s},"approval mode changed (inactive session)")):b.info({sessionId:r,newMode:s},"approval mode changed (untracked session)"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:s,sessionId:r}));return}if(s===null){this.reply(e,n,!1,void 0,"Follow Remote is only available for external sessions");return}let a=o.approvalMode;o.approvalMode=s,this.store.upsert(J(o)),this.noteInventoryChanged("session_updated"),b.info({sessionId:r,agent:o.agent,oldMode:a,newMode:s},"approval mode changed"),o.driver&&o.driver.setApprovalMode(s),this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{approvalMode:s,sessionId:r}))}interrupt(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);if(!i){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(I.emit("session.interrupt",{sessionId:r,agent:i.agent}),!i.driver){(i.isResponding||i.bufferedPrompts.length>0)&&(b.info({sessionId:r,agent:i.agent},"interrupting driverless session with stale responding state"),i.bufferedPrompts=[],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"),this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId})),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}));return}if(i.startupInProgress){let o=i.isResponding||i.bufferedPrompts.length>0;b.info({sessionId:r,agent:i.agent,hadBufferedTurn:o},"interrupting pending startup session"),i.bufferedPrompts=[],i.isResponding=!1,i.currentReplyText="",i.lastUserMessage=void 0,i.pendingApproval=void 0,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r})),o&&this.broadcast(i.sessionId,{type:"session.interrupted",sessionId:i.sessionId});return}i.driver.interrupt(),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}clearInterrupt(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r),o=this.store.find(r);if(!i&&!o?.interruptReason){this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}));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(s,{sessionId:r}))}stopSession(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);if(!i){this.reply(e,n,!1,void 0,"Session not found");return}b.info({sessionId:r,agent:i.agent},"stopping session"),I.emit("session.stop",{sessionId:r,agent:i.agent}),Pd(i);let o=i.isResponding||i.bufferedPrompts.length>0||i.startupInProgress;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.bufferedPrompts=[],i.startupToken+=1,this.clearStallWarning(i),o&&this.markLatestAcceptedClientMessageInterrupted(i),this.updateGauges(),this.touchSession(i.sessionId),this.noteInventoryChanged("session_updated"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}deleteSession(e,n,r){let s=this.resolveSessionRef(r);r=s.resolvedSessionId;let i=this.sessions.get(r);i&&(b.info({sessionId:r,agent:i.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.startupInProgress=!1,i.bufferedPrompts=[],i.startupToken+=1,this.unregisterClaudeHookSession(i),this.sessions.delete(r)),I.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),Gr(),Pr(),this.noteInventoryChanged("session_deleted"),this.reply(e,n,!0,this.buildResolvedSessionResponseData(s,{sessionId:r}))}async sendHistory(e,n,r,s){let i=this.resolveSessionRef(r);r=i.resolvedSessionId;let o=this.sessions.get(r),a=o?.active?o:void 0;if(!o&&this.isDeletedSession(r)){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(r)?.cwd??"",u=this.store.find(r),c=await En(r,s,l),d=this.annotateHistoryMessages(c,o?.acceptedClientMessageIds??u?.acceptedClientMessageIds,o?.interruptedClientMessageIds??u?.interruptedClientMessageIds),p=a||o?{}:await ro(r,s,l),h=!a&&!!p.isResponding,g=h?await this.externalProcessPresenceCheck(r):!1,f=g?!0:void 0,m=h&&!g?{}:p,y=a?.isResponding??m.isResponding,T=a?this.currentPartialReplyText(a):m.partialReplyText;b.info({sessionId:r,historyCount:c.length,isResponding:y,externallyResponding:f,approvalMode:o?.approvalMode??u?.approvalMode},"sending history");let A={type:"session.history",sessionId:r,messages:d,...Kr(o?.acceptedClientMessageIds??u?.acceptedClientMessageIds),isResponding:y,externallyResponding:f,partialReplyText:T,approvalMode:o?.approvalMode??u?.approvalMode,pendingApproval:o?.pendingApproval??u?.pendingApproval,stallWarning:o?.stallWarning??u?.stallWarning};e.readyState===1&&e.send(JSON.stringify(A));let w=o?.interruptReason??u?.interruptReason;if(w&&e.readyState===1){let C={type:"session.interrupted_notice",sessionId:r,reason:w};e.send(JSON.stringify(C))}this.reply(e,n,!0,this.buildResolvedSessionResponseData(i,{sessionId:r}))}async listSessions(e,n,r,s,i,o=50,a,l){try{let u=await Fr({agent:r,cwd:s,search:i,customTitles:l,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,{...u,inventoryVersion:this.inventoryVersion})}catch(u){this.reply(e,n,!1,void 0,String(u))}}createDriver(e){switch(e){case"claude":return new _n;case"codex":return new bn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){b.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let s=JSON.stringify(n),i=n.type==="approval.request"?this.globalClients:r.clients,o=i.size,a=0,l=0;for(let u of i)u.readyState===1?(u.send(s),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"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let u=r.title||e,c=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(u,c,{sessionId:e,agent:r.agent,eventType:"reply_ready"});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,s,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:s,error:i};e.send(JSON.stringify(o))}};function lo(t,e){if(!e.deviceId){e.respond({type:"response",id:t.id,ok:!1,error:"device_auth_required"});return}t.action==="push.register"?e.registerToken(e.deviceId,t.pushToken):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Dd=require("child_process");function RS(t,e){return(0,Dd.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function ES(t){let e=t.split(`
111
+ `).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Fd(t,e=RS){let n;try{n=ES(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(r=>{try{let s=e("ps",["-p",String(r),"-o","command="]);return s?{pid:r,command:s}:{pid:r}}catch{return{pid:r}}})}var Ut=require("fs"),co=require("os"),Ud=require("crypto"),Wd=require("path");function qd(t){return(0,Ud.randomBytes)(t).toString("base64url")}function PS(){return`d_${qd(12)}`}function MS(){return(0,co.hostname)()}function LS(){let t=(0,co.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function NS(t){return{daemonId:PS(),daemonSecret:qd(32),displayName:MS(),canonicalHost:LS(),port:t,createdAt:new Date().toISOString()}}function Hd(t,e){(0,Ut.mkdirSync)((0,Wd.dirname)(e),{recursive:!0}),(0,Ut.writeFileSync)(e,JSON.stringify(t,null,2)+`
112
+ `,"utf8")}function Gd(t,e=Oc){try{let r=(0,Ut.readFileSync)(e,"utf8"),s=JSON.parse(r);if(typeof s.daemonId=="string"&&typeof s.daemonSecret=="string"&&typeof s.displayName=="string"&&typeof s.canonicalHost=="string"&&typeof s.createdAt=="string"){let i={daemonId:s.daemonId,daemonSecret:s.daemonSecret,displayName:s.displayName,canonicalHost:s.canonicalHost,port:typeof s.port=="number"&&Number.isFinite(s.port)?s.port:t,createdAt:s.createdAt};return i.port!==t&&(i.port=t,Hd(i,e)),i}}catch{}let n=NS(t);return Hd(n,e),n}var Wt=require("crypto"),qt=require("fs"),$d=require("path");function uo(t){return(0,Wt.randomBytes)(t).toString("base64url")}function fo(t){return(0,Wt.createHash)("sha256").update(t).digest("hex")}function jd(t,e){let n=Buffer.from(t),r=Buffer.from(e);return n.length!==r.length?!1:(0,Wt.timingSafeEqual)(n,r)}function OS(t){try{let e=(0,qt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(r=>r&&typeof r.deviceId=="string"&&typeof r.deviceName=="string"&&typeof r.tokenHash=="string"&&typeof r.createdAt=="string"&&typeof r.lastSeenAt=="string"&&(typeof r.revokedAt=="string"||r.revokedAt===null)):[]}catch{return[]}}function Ln(t,e){(0,qt.mkdirSync)((0,$d.dirname)(t),{recursive:!0}),(0,qt.writeFileSync)(t,JSON.stringify(e,null,2)+`
113
+ `,"utf8")}var Qr=class{constructor(e=Bc){this.pairingsPath=e;this.records=OS(e)}records;windows=new Map;list(){return this.records.slice()}pairedCount(){return this.records.filter(e=>!e.revokedAt).length}openWindow(e=5*6e4,n=!1){let r=`pair_${uo(8)}`,s=uo(24),i=new Date(Date.now()+e).toISOString(),o={pairingId:r,pairNonce:s,expiresAt:i,reusable:n};return this.windows.set(s,o),o}consumeWindow(e){let n=this.windows.get(e);return!n||(n.reusable||this.windows.delete(e),new Date(n.expiresAt).getTime()<Date.now())?null:n}issuePairToken(e,n){let r=new Date().toISOString(),s=uo(32),i={deviceId:e,deviceName:n,tokenHash:fo(s),createdAt:r,lastSeenAt:r,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),Ln(this.pairingsPath,this.records),s}validatePairToken(e,n,r=!0){let s=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!s)return!1;let i=fo(n);return jd(s.tokenHash,i)?(r&&(s.lastSeenAt=new Date().toISOString(),Ln(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let r=fo(e),s=this.records.find(i=>!i.revokedAt&&jd(i.tokenHash,r));return s?(n&&(s.lastSeenAt=new Date().toISOString(),Ln(this.pairingsPath,this.records)),s):null}revoke(e){let n=this.records.find(r=>r.deviceId===e&&!r.revokedAt);return n?(n.revokedAt=new Date().toISOString(),Ln(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),Ln(this.pairingsPath,this.records)}};function at(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function BS(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function po(t,e){return BS(t)??e}function Zr(t,e){return!!(t&&e&&t===e)}function ho(t,e,n,r=!0){return t?Zr(t,e)?!0:!!n(t,r):!1}var Yd=require("child_process"),Jd=require("fs");function es(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function go(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function DS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function FS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function HS(t){if(!es(t))return!1;let[e,n]=t.split(".").map(Number);return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}function ts(t){return!!t&&!DS(t)&&!FS(t)}function de(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function mo(t){return de(t.replace(/^https?:\/\//,""))??t}function US(t,e){return(t??[]).map(n=>de(n)).filter(n=>!!n).filter(n=>ts(n)).filter((n,r,s)=>n!==e&&s.indexOf(n)===r)}function WS(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 qS(t){let e=mo(t);return go(e)||e.endsWith(".ts.net")}function GS(t){let e=mo(t);return HS(e)||e.endsWith(".local")}function jS(t){return mo(t).endsWith(".trycloudflare.com")}function zd(t,e){return qS(t)?"tailscale":GS(t)?"local_network":e?"configured_host":"fallback"}function Kd(t){let e=new Set,n=[];for(let r of t){let s=`${r.host}:${r.port}:${r.secure===!0?"secure":"plain"}`;e.has(s)||(e.add(s),n.push(r))}return n}function $S(t){let e=t[0];return e?t.slice(1).filter(n=>n.port===e.port).map(n=>n.host).filter((n,r,s)=>n!==e.host&&s.indexOf(n)===r):[]}function zS(t){try{let e=new URL(t),n=de(e.hostname);if(!n)throw new Error("invalid relay hostname");let r=e.port?Number(e.port):e.protocol==="https:"?443:80,s=Number.isFinite(r)&&r>0?Math.floor(r):443,i=jS(n);return{kind:"relay",host:n,port:s,...e.protocol==="https:"?{secure:!0}:{},source:i?"quick_tunnel":"configured_relay",stability:i?"ephemeral":"stable"}}catch{return null}}function VS(t,e,n){let r=de(t)||"localhost",s=US(e,r);return Kd([{kind:"direct",host:r,port:n,source:zd(r,!0),stability:"stable"},...s.map(i=>({kind:"direct",host:i,port:n,source:zd(i,!1),stability:"stable"}))])}function Xd(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function YS(t){let e=[],n=[];for(let[r,s]of Object.entries(t))if(s&&WS(r))for(let i of s)i.internal||i.family!=="IPv4"||ts(i.address)&&(go(i.address)?e.push(i.address):n.push(i.address));return[...e,...n]}function Vd(t){let e=JSON.parse(t),n=de(e.Self?.DNSName),r=(e.Self?.TailscaleIPs??[]).map(o=>de(o)).filter(o=>!!o).filter(o=>go(o)&&ts(o)),s=r[0]??n,i=[...n&&n!==s?[n]:[],...r.filter(o=>o!==s)];return{canonicalHost:s,fallbackHosts:i}}function Qd(t=Yd.execFileSync,e=Jd.existsSync){let n=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(r=>typeof r=="string"&&r.length>0).filter(r=>e(r));for(let r of n)try{let s=t("tailscale",["--socket",r,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Vd(s)}catch{}try{let r=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Vd(r)}catch{return{fallbackHosts:[]}}}function Zd(t){let e=VS(t.canonicalHost,t.fallbackHosts,t.port),n=t.relayUrl?zS(t.relayUrl):null,r=Kd([...n?[n]:[],...e]),s=r[0]??{kind:"direct",host:de(t.canonicalHost)||"localhost",port:t.port,source:"configured_host",stability:"stable"};return{canonicalHost:s.host,fallbackHosts:$S(r),port:s.port,connections:r}}function ef(t){let e=de(t.canonicalHost),n=de(t.configuredCanonicalHost)||de(t.tailscaleCanonicalHost)||e||"localhost",r=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...YS(t.interfaces)].map(s=>de(s)).filter(s=>!!s).filter(s=>ts(s)).filter((s,i,o)=>s!==n&&o.indexOf(s)===i);return{canonicalHost:n,fallbackHosts:r}}function tf(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 $=O.child({module:"daemon"}),Nn=O.child({module:"ws"});function JS(){try{let t=JSON.parse(require("fs").readFileSync(Fc,"utf8"));return typeof t.latestVersion=="string"?t.latestVersion:void 0}catch{return}}var U=Gd(S.port),Z=new Xr((t,e,n)=>Jr(t,e,{daemonId:U.daemonId,canonicalHost:On().canonicalHost,...n??{}})),pe=new Qr,rs=new Set,He=new WeakMap,nf=!1,af=Date.now(),Gt=null,ns=null,KS=1e3;function XS(){let t=Qd();return ef({canonicalHost:U.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:Xd(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,of.networkInterfaces)()})}function On(){let t=Date.now();if(ns&&ns.expiresAt>t)return ns.value;let e=XS(),n=Zd({canonicalHost:e.canonicalHost,fallbackHosts:e.fallbackHosts,port:U.port,relayUrl:S.relayUrl});return ns={value:n,expiresAt:t+KS},n}function QS(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 ZS(t){let e=JSON.stringify(QS(t));await(0,oe.mkdir)(Ie,{recursive:!0}),await So.default.toFile(vi,e,{type:"png",errorCorrectionLevel:"M",margin:1,scale:8});let n=await So.default.toString(e,{type:"terminal",small:!0,errorCorrectionLevel:"M"});kt(`
114
114
  Scan this QR code with Vibelet app:
115
115
 
116
116
  ${n}
117
117
  `),kt(`If Vibelet app can't scan the terminal QR, open this PNG instead:
118
118
  ${vi}
119
- `)}async function vo(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function F(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function e_(t){let e=(0,jt.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 df(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function t_(t,e){if(at(t.socket.remoteAddress))return!0;let n=ho(t.headers.authorization,e.searchParams.get("token"));return go(n,S.legacyToken,(r,s)=>pe.validateAnyPairToken(r,s),!1)}function n_(){let t=pe.openWindow(df(),S.pairReusable),e=On();return{type:"vibelet-pair",daemonId:U.daemonId,displayName:U.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 r_(t,e){let n=io(t,e),r=await(0,oe.readdir)(n),s=[];for(let i of r){if(i.startsWith("."))continue;let o=await(0,oe.stat)((0,jt.join)(n,i)).catch(()=>null);o&&s.push({name:i,isDirectory:o.isDirectory()})}return s.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:s}}var Bn=(0,af.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let s=On(),i=JS(),o={status:"ok",version:Et,...i?{latestVersion:i}:{}};if(!t_(t,n)){F(e,200,o);return}let a={...o,status:"ok",daemonId:U.daemonId,displayName:U.displayName,canonicalHost:s.canonicalHost,uptimeSeconds:Math.round((Date.now()-uf)/1e3),activeSessions:Z.getActiveSessionCount(),pairedDevices:pe.pairedCount(),wsClients:fe.clients.size,drivers:Z.getDriverCounts(),sessionInventory:Xu(),metrics:_.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),F(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}F(e,200,n_());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}pe.reset(),F(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}F(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)){F(e,403,{error:"forbidden"});return}try{let s=await vo(t),i=t.headers[yn],o=Array.isArray(i)?i[0]:i;Z.handleClaudeSessionStartHook(o,s),F(e,200,{ok:!0})}catch(s){F(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}try{let s=await vo(t),i=t.headers[yn],o=Array.isArray(i)?i[0]:i,a=await Z.handleClaudePermissionHook(o,s);F(e,200,a)}catch(s){F(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let s=await vo(t);if(s.daemonId!==U.daemonId||typeof s.pairNonce!="string"||typeof s.deviceId!="string"||typeof s.deviceName!="string"){F(e,400,{error:"invalid_pair_request"});return}if(!pe.consumeWindow(s.pairNonce)){F(e,401,{error:"pair_window_expired"});return}let o=pe.issuePairToken(s.deviceId,s.deviceName),a=On();F(e,200,{daemonId:U.daemonId,displayName:U.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:s.deviceId,pairToken:o})}catch(s){F(e,400,{error:String(s)})}return}let r=ho(t.headers.authorization,n.searchParams.get("token"));if(!go(r,S.legacyToken,(s,i)=>pe.validateAnyPairToken(s,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let s={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif","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,jt.extname)(o).toLowerCase()||s[i]||".bin",u=50*1024*1024,c=[],d=0;for await(let p of t){let h=Buffer.isBuffer(p)?p:Buffer.from(p);if(d+=h.length,d>u){e.writeHead(413),e.end("File too large");return}c.push(h)}try{await(0,oe.mkdir)(yi,{recursive:!0});let p=`${Date.now()}_${(0,lf.randomBytes)(8).toString("hex")}${l}`,h=(0,jt.join)(yi,p);await(0,oe.writeFile)(h,Buffer.concat(c)),$.info({filePath:h,size:d,contentType:i,providedName:o||void 0},"file uploaded"),F(e,200,{path:h})}catch(p){$.error({error:String(p)},"upload failed"),F(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let s=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!s){e.writeHead(400),e.end("Missing path parameter");return}try{let o=io(s,i);if(!(await(0,oe.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=e_(o),u=await(0,oe.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${Et}`)}),fe=new ks.default({server:Bn});Bn.on("connection",t=>{rs.add(t),t.on("close",()=>{rs.delete(t)})});fe.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(r&&Zr(r,S.legacyToken))He.set(t,{authMode:"query_token"}),_.increment("ws.auth.success",{mode:"query_token"}),Z.addGlobalClient(t),Z.prewarmCaches();else if(r){let s=pe.validateAnyPairToken(r);if(s)He.set(t,{authMode:"query_token",deviceId:s.deviceId}),_.increment("ws.auth.success",{mode:"query_token"}),Z.addGlobalClient(t),Z.prewarmCaches();else{_.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}Nn.info({clients:fe.clients.size},"client connected"),_.increment("ws.connect"),_.gauge("ws.clients",fe.clients.size),I.emit("ws.connect",{clients:fe.clients.size,authMode:He.get(t)?.authMode??"pending",deviceId:He.get(t)?.deviceId}),t.on("message",async s=>{try{let i=JSON.parse(sf(s));if(!i||typeof i.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(i.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=i;if(!He.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(Zr(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===U.daemonId&&pe.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===U.daemonId){let l=pe.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){He.set(t,{authMode:"auth_hello",deviceId:a.deviceId}),_.increment("ws.auth.success",{mode:"auth_hello"}),Z.addGlobalClient(t),Z.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:U.daemonId,displayName:U.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)I.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?$.error:a.level==="warn"?$.warn:$.info).call($,{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 r_(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=He.get(t);co(i,{deviceId:a?.deviceId,registerToken:oo,unregisterToken:ao,respond:l=>t.send(JSON.stringify(l))});return}if(i.action==="push.unregister"){let a=He.get(t);co(i,{deviceId:a?.deviceId,registerToken:oo,unregisterToken:ao,respond:l=>t.send(JSON.stringify(l))});return}await Z.handle(t,o)}catch(i){Nn.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",s=>{Nn.info({clients:fe.clients.size,code:s},"client disconnected"),_.increment("ws.disconnect"),_.increment("ws.disconnect.code",{code:String(s)}),_.gauge("ws.clients",fe.clients.size),I.emit("ws.disconnect",{clients:fe.clients.size,code:s}),Z.removeClient(t)}),t.on("error",s=>{Nn.error({error:s.message},"websocket error")})});function So(){for(let t of rs)try{t.destroy()}catch{}rs.clear()}function ff(){let t=Kc({auditPath:At,stdoutLogPath:pr,stderrLogPath:hr,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&$.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 s_(){Gt||(Gt=setInterval(ff,S.storageHousekeepingIntervalMs),Gt.unref())}function i_(){Gt&&(clearInterval(Gt),Gt=null)}function lt(t,e=0){if(!of){of=!0,$.info({reason:t,exitCode:e},"shutting down"),I.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-uf)/1e3)}),_.stopPeriodicLog(),i_(),Lt.stop().catch(()=>{}),Z.shutdown();for(let n of fe.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}fe.close(n=>{n&&$.error({error:String(n)},"websocket close error")}),Bn.close(n=>{if(n){$.error({error:String(n)},"http close error"),So(),process.exit(1);return}So(),process.exit(e)}),setTimeout(()=>{$.error("force exiting after shutdown timeout"),So(),process.exit(e||1)},3e3).unref()}}fe.on("error",t=>{Nn.error({error:t.message},"wss error")});Bn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Wd(S.port).filter(n=>n.pid!==process.pid);$.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 $.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=>{$.error({error:String(t),stack:t.stack},"uncaughtException"),I.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{$.error({reason:String(t)},"unhandledRejection"),I.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});Bn.listen(S.port,async()=>{ff(),I.emit("daemon.start",{port:S.port}),_.startPeriodicLog(),s_(),Qu(),Lt.start().catch(r=>{$.warn({error:String(r)},"session activity watcher failed to start")});let t=On();$.info({port:S.port,pairingPort:t.port,daemonId:U.daemonId,displayName:U.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(df(),S.pairReusable),n={type:"vibelet-pair",daemonId:U.daemonId,displayName:U.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(`
119
+ `)}async function yo(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function F(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function e_(t){let e=(0,jt.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 lf(){return S.pairWindowMs===0?10*365.25*24*36e5:S.pairWindowMs}function t_(t,e){if(at(t.socket.remoteAddress))return!0;let n=po(t.headers.authorization,e.searchParams.get("token"));return ho(n,S.legacyToken,(r,s)=>pe.validateAnyPairToken(r,s),!1)}function n_(){let t=pe.openWindow(lf(),S.pairReusable),e=On();return{type:"vibelet-pair",daemonId:U.daemonId,displayName:U.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 r_(t,e){let n=so(t,e),r=await(0,oe.readdir)(n),s=[];for(let i of r){if(i.startsWith("."))continue;let o=await(0,oe.stat)((0,jt.join)(n,i)).catch(()=>null);o&&s.push({name:i,isDirectory:o.isDirectory()})}return s.sort((i,o)=>i.isDirectory!==o.isDirectory?i.isDirectory?-1:1:i.name.localeCompare(o.name)),{entries:s}}var Bn=(0,rf.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let s=On(),i=JS(),o={status:"ok",version:Et,...i?{latestVersion:i}:{}};if(!t_(t,n)){F(e,200,o);return}let a={...o,status:"ok",daemonId:U.daemonId,displayName:U.displayName,canonicalHost:s.canonicalHost,uptimeSeconds:Math.round((Date.now()-af)/1e3),activeSessions:Z.getActiveSessionCount(),pairedDevices:pe.pairedCount(),wsClients:fe.clients.size,drivers:Z.getDriverCounts(),sessionInventory:Ju(),metrics:_.snapshot()};S.relayUrl&&(a.relayUrl=S.relayUrl),F(e,200,a);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}F(e,200,n_());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}pe.reset(),F(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}F(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)){F(e,403,{error:"forbidden"});return}try{let s=await yo(t),i=t.headers[yn],o=Array.isArray(i)?i[0]:i;Z.handleClaudeSessionStartHook(o,s),F(e,200,{ok:!0})}catch(s){F(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!at(t.socket.remoteAddress)){F(e,403,{error:"forbidden"});return}try{let s=await yo(t),i=t.headers[yn],o=Array.isArray(i)?i[0]:i,a=await Z.handleClaudePermissionHook(o,s);F(e,200,a)}catch(s){F(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let s=await yo(t);if(s.daemonId!==U.daemonId||typeof s.pairNonce!="string"||typeof s.deviceId!="string"||typeof s.deviceName!="string"){F(e,400,{error:"invalid_pair_request"});return}if(!pe.consumeWindow(s.pairNonce)){F(e,401,{error:"pair_window_expired"});return}let o=pe.issuePairToken(s.deviceId,s.deviceName),a=On();F(e,200,{daemonId:U.daemonId,displayName:U.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:a.port,connections:a.connections,deviceId:s.deviceId,pairToken:o})}catch(s){F(e,400,{error:String(s)})}return}let r=po(t.headers.authorization,n.searchParams.get("token"));if(!ho(r,S.legacyToken,(s,i)=>pe.validateAnyPairToken(s,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(t.method==="POST"&&n.pathname==="/upload"){let s={"image/png":".png","image/jpeg":".jpg","image/gif":".gif","image/webp":".webp","image/heic":".heic","image/heif":".heif","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,jt.extname)(o).toLowerCase()||s[i]||".bin",u=50*1024*1024,c=[],d=0;for await(let p of t){let h=Buffer.isBuffer(p)?p:Buffer.from(p);if(d+=h.length,d>u){e.writeHead(413),e.end("File too large");return}c.push(h)}try{await(0,oe.mkdir)(yi,{recursive:!0});let p=`${Date.now()}_${(0,sf.randomBytes)(8).toString("hex")}${l}`,h=(0,jt.join)(yi,p);await(0,oe.writeFile)(h,Buffer.concat(c)),$.info({filePath:h,size:d,contentType:i,providedName:o||void 0},"file uploaded"),F(e,200,{path:h})}catch(p){$.error({error:String(p)},"upload failed"),F(e,500,{error:"Upload failed"})}return}if(n.pathname==="/file"){let s=n.searchParams.get("path"),i=n.searchParams.get("cwd")||void 0;if(!s){e.writeHead(400),e.end("Missing path parameter");return}try{let o=so(s,i);if(!(await(0,oe.stat)(o)).isFile()){e.writeHead(404),e.end("Not a file");return}let l=e_(o),u=await(0,oe.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${Et}`)}),fe=new ks.default({server:Bn});Bn.on("connection",t=>{rs.add(t),t.on("close",()=>{rs.delete(t)})});fe.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(r&&Zr(r,S.legacyToken))He.set(t,{authMode:"query_token"}),_.increment("ws.auth.success",{mode:"query_token"}),Z.addGlobalClient(t),Z.prewarmCaches();else if(r){let s=pe.validateAnyPairToken(r);if(s)He.set(t,{authMode:"query_token",deviceId:s.deviceId}),_.increment("ws.auth.success",{mode:"query_token"}),Z.addGlobalClient(t),Z.prewarmCaches();else{_.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}Nn.info({clients:fe.clients.size},"client connected"),_.increment("ws.connect"),_.gauge("ws.clients",fe.clients.size),I.emit("ws.connect",{clients:fe.clients.size,authMode:He.get(t)?.authMode??"pending",deviceId:He.get(t)?.deviceId}),t.on("message",async s=>{try{let i=JSON.parse(tf(s));if(!i||typeof i.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(i.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=i;if(!He.has(t)){if(o.action==="auth.hello"){let a=(()=>{if(Zr(o.pairToken,S.legacyToken))return{deviceId:o.deviceId};if(o.deviceId&&o.daemonId===U.daemonId&&pe.validatePairToken(o.deviceId,o.pairToken))return{deviceId:o.deviceId};if(!o.daemonId||o.daemonId===U.daemonId){let l=pe.validateAnyPairToken(o.pairToken);if(l)return{deviceId:l.deviceId}}return null})();if(a){He.set(t,{authMode:"auth_hello",deviceId:a.deviceId}),_.increment("ws.auth.success",{mode:"auth_hello"}),Z.addGlobalClient(t),Z.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:U.daemonId,displayName:U.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)I.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?$.error:a.level==="warn"?$.warn:$.info).call($,{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 r_(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=He.get(t);lo(i,{deviceId:a?.deviceId,registerToken:io,unregisterToken:oo,respond:l=>t.send(JSON.stringify(l))});return}if(i.action==="push.unregister"){let a=He.get(t);lo(i,{deviceId:a?.deviceId,registerToken:io,unregisterToken:oo,respond:l=>t.send(JSON.stringify(l))});return}await Z.handle(t,o)}catch(i){Nn.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",s=>{Nn.info({clients:fe.clients.size,code:s},"client disconnected"),_.increment("ws.disconnect"),_.increment("ws.disconnect.code",{code:String(s)}),_.gauge("ws.clients",fe.clients.size),I.emit("ws.disconnect",{clients:fe.clients.size,code:s}),Z.removeClient(t)}),t.on("error",s=>{Nn.error({error:s.message},"websocket error")})});function vo(){for(let t of rs)try{t.destroy()}catch{}rs.clear()}function cf(){let t=Jc({auditPath:At,stdoutLogPath:pr,stderrLogPath:hr,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&$.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 s_(){Gt||(Gt=setInterval(cf,S.storageHousekeepingIntervalMs),Gt.unref())}function i_(){Gt&&(clearInterval(Gt),Gt=null)}function lt(t,e=0){if(!nf){nf=!0,$.info({reason:t,exitCode:e},"shutting down"),I.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-af)/1e3)}),_.stopPeriodicLog(),i_(),Lt.stop().catch(()=>{}),Z.shutdown();for(let n of fe.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}fe.close(n=>{n&&$.error({error:String(n)},"websocket close error")}),Bn.close(n=>{if(n){$.error({error:String(n)},"http close error"),vo(),process.exit(1);return}vo(),process.exit(e)}),setTimeout(()=>{$.error("force exiting after shutdown timeout"),vo(),process.exit(e||1)},3e3).unref()}}fe.on("error",t=>{Nn.error({error:t.message},"wss error")});Bn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Fd(S.port).filter(n=>n.pid!==process.pid);$.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 $.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=>{$.error({error:String(t),stack:t.stack},"uncaughtException"),I.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{$.error({reason:String(t)},"unhandledRejection"),I.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});Bn.listen(S.port,async()=>{cf(),I.emit("daemon.start",{port:S.port}),_.startPeriodicLog(),s_(),Ku(),Lt.start().catch(r=>{$.warn({error:String(r)},"session activity watcher failed to start")});let t=On();$.info({port:S.port,pairingPort:t.port,daemonId:U.daemonId,displayName:U.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(lf(),S.pairReusable),n={type:"vibelet-pair",daemonId:U.daemonId,displayName:U.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(`
120
120
  \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
121
121
  \u2551 Vibelet Daemon v${Et} \u2551
122
122
  \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