bridge-agent 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +8 -8
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -20,15 +20,15 @@ Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._life
20
20
  `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in O.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,O.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new ti(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let l=o.attributeName(),a=this.getOptionValue(l),c=this.options.find(u=>u.negate&&l===u.attributeName()),d=this.options.find(u=>!u.negate&&l===u.attributeName());return c&&(c.presetArg===void 0&&a===!1||c.presetArg!==void 0&&a===c.presetArg)?c:d||o},s=o=>{let l=n(o),a=l.attributeName();return this.getOptionValueSource(a)==="env"?`environment variable '${l.envVar}'`:`option '${l.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(l=>l.long).map(l=>l.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=Er(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=Er(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
21
  `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>Zs(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=H.basename(e,H.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=O.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
22
  Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function vr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}xr.Command=At});var Ar=k(j=>{var{Argument:Or}=We(),{Command:Tt}=kr(),{CommanderError:ri,InvalidArgumentError:Cr}=ke(),{Help:ni}=St(),{Option:Ir}=kt();j.program=new Tt;j.createCommand=r=>new Tt(r);j.createOption=(r,e)=>new Ir(r,e);j.createArgument=(r,e)=>new Or(r,e);j.Command=Tt;j.Option=Ir;j.Argument=Or;j.Help=ni;j.CommanderError=ri;j.InvalidArgumentError=Cr;j.InvalidOptionArgumentError=Cr});var Mr=k(C=>{"use strict";var Pt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),si=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i(await(0,t.stat)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i((0,e.statSync)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(l,a)=>l.isFile()&&o(l,a),o=(l,a)=>{let c=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(c===void 0||u===void 0)throw new Error("cannot get uid or gid");let h=new Set([u,...d]),g=l.mode,p=l.uid,f=l.gid,m=parseInt("100",8),x=parseInt("010",8),b=parseInt("001",8),P=m|x;return!!(g&b||g&x&&h.has(f)||g&m&&p===c||g&P&&c===0)}}),ii=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l(await(0,t.stat)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.isexe=s;var i=(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l((0,e.statSync)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.sync=i;var o=(a,c)=>{let{pathExt:d=process.env.PATHEXT||""}=c,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let h of u){let g=h.toLowerCase(),p=a.substring(a.length-g.length).toLowerCase();if(g&&p===g)return!0}return!1},l=(a,c,d)=>a.isFile()&&o(c,d)}),oi=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),Nr=C&&C.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),ai=C&&C.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Rr=C&&C.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&Nr(t,e,n[s]);return ai(t,e),t}})(),ci=C&&C.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Nr(e,r,t)};Object.defineProperty(C,"__esModule",{value:!0});C.sync=C.isexe=C.posix=C.win32=void 0;var Dr=Rr(si());C.posix=Dr;var jr=Rr(ii());C.win32=jr;ci(oi(),C);var li=process.env._ISEXE_TEST_PLATFORM_||process.platform,Lr=li==="win32"?jr:Dr;C.isexe=Lr.isexe;C.sync=Lr.sync});var Kr=k((ic,Gr)=>{var{isexe:di,sync:ui}=Mr(),{join:hi,delimiter:fi,sep:$r,posix:Br}=require("path"),Ur=process.platform==="win32",Wr=new RegExp(`[${Br.sep}${$r===Br.sep?"":$r}]`.replace(/(\\)/g,"\\$1")),pi=new RegExp(`^\\.${Wr.source}`),Fr=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),Hr=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=fi})=>{let s=r.match(Wr)?[""]:[...Ur?[process.cwd()]:[],...(e||"").split(n)];if(Ur){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(l=>[l,l.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},qr=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&pi.test(e)?e.slice(0,2):"")+hi(t,e)},Vr=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(await di(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)},gi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(ui(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)};Gr.exports=Vr;Vr.sync=gi});var q=k((lc,en)=>{"use strict";var Qr=["nodebuffer","arraybuffer","fragments"],Zr=typeof Blob<"u";Zr&&Qr.push("blob");en.exports={BINARY_TYPES:Qr,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Zr,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ce=k((dc,Ge)=>{"use strict";var{EMPTY_BUFFER:bi}=q(),jt=Buffer[Symbol.species];function wi(r,e){if(r.length===0)return bi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new jt(t.buffer,t.byteOffset,n):t}function tn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function rn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Si(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Lt(r){if(Lt.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new jt(r):ArrayBuffer.isView(r)?e=new jt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Lt.readOnly=!1),e}Ge.exports={concat:wi,mask:tn,toArrayBuffer:Si,toBuffer:Lt,unmask:rn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Ge.exports.mask=function(e,t,n,s,i){i<48?tn(e,t,n,s,i):r.mask(e,t,n,s,i)},Ge.exports.unmask=function(e,t){e.length<32?rn(e,t):r.unmask(e,t)}}catch{}});var on=k((uc,sn)=>{"use strict";var nn=Symbol("kDone"),Mt=Symbol("kRun"),$t=class{constructor(e){this[nn]=()=>{this.pending--,this[Mt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Mt]()}[Mt](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[nn])}}};sn.exports=$t});var me=k((hc,dn)=>{"use strict";var Ie=require("zlib"),an=Ce(),Ei=on(),{kStatusCode:cn}=q(),vi=Buffer[Symbol.species],xi=Buffer.from([0,0,255,255]),Ye=Symbol("permessage-deflate"),V=Symbol("total-length"),pe=Symbol("callback"),z=Symbol("buffers"),ge=Symbol("error"),Ke,Bt=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Ke){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ke=new Ei(t)}}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[pe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="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 "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ke.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ke.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ie.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Ye]=this,this._inflate[V]=0,this._inflate[z]=[],this._inflate.on("error",Oi),this._inflate.on("data",ln)}this._inflate[pe]=n,this._inflate.write(e),t&&this._inflate.write(xi),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=an.concat(this._inflate[z],this._inflate[V]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[V]=0,this._inflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ie.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[V]=0,this._deflate[z]=[],this._deflate.on("data",ki)}this._deflate[pe]=n,this._deflate.write(e),this._deflate.flush(Ie.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=an.concat(this._deflate[z],this._deflate[V]);t&&(i=new vi(i.buffer,i.byteOffset,i.length-4)),this._deflate[pe]=null,this._deflate[V]=0,this._deflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};dn.exports=Bt;function ki(r){this[z].push(r),this[V]+=r.length}function ln(r){if(this[V]+=r.length,this[Ye]._maxPayload<1||this[V]<=this[Ye]._maxPayload){this[z].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][cn]=1009,this.removeListener("data",ln),this.reset()}function Oi(r){if(this[Ye]._inflate=null,this[ge]){this[pe](this[ge]);return}r[cn]=1007,this[pe](r)}});var _e=k((fc,Je)=>{"use strict";var{isUtf8:un}=require("buffer"),{hasBlob:Ci}=q(),Ii=[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 Ai(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Ut(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Ti(r){return Ci&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Je.exports={isBlob:Ti,isValidStatusCode:Ai,isValidUTF8:Ut,tokenChars:Ii};if(un)Je.exports.isValidUTF8=function(r){return r.length<24?Ut(r):un(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Je.exports.isValidUTF8=function(e){return e.length<32?Ut(e):r(e)}}catch{}});var Vt=k((pc,yn)=>{"use strict";var{Writable:Pi}=require("stream"),hn=me(),{BINARY_TYPES:Ni,EMPTY_BUFFER:fn,kStatusCode:Ri,kWebSocket:Di}=q(),{concat:Wt,toArrayBuffer:ji,unmask:Li}=Ce(),{isValidStatusCode:Mi,isValidUTF8:pn}=_e(),ze=Buffer[Symbol.species],L=0,gn=1,mn=2,_n=3,Ft=4,Ht=5,Xe=6,qt=class extends Pi{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ni[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Di]=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=L}_write(e,t,n){if(this._opcode===8&&this._state==L)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e),new ze(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case L:this.getInfo(e);break;case gn:this.getPayloadLength16(e);break;case mn:this.getPayloadLength64(e);break;case _n:this.getMask();break;case Ft:this.getData(e);break;case Ht:case Xe:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[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 n=(t[0]&64)===64;if(n&&!this._extensions[hn.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){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=n}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(n){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=(t[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=gn:this._payloadLength===127?this._state=mn: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 t=this.consume(8),n=t.readUInt32BE(0);if(n>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=n*Math.pow(2,32)+t.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 t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=_n:this._state=Ft}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ft}getData(e){let t=fn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Li(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ht,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[hn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(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");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===L&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=L;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Wt(n,t):this._binaryType==="arraybuffer"?s=ji(Wt(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!0),this._state=L,this.startLoop(e)}))}else{let s=Wt(n,t);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ht||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!1),this._state=L,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,fn),this.end();else{let n=e.readUInt16BE(0);if(!Mi(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ze(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=L;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=L,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[Ri]=s,o}};yn.exports=qt});var Yt=k((mc,Sn)=>{"use strict";var{Duplex:gc}=require("stream"),{randomFillSync:$i}=require("crypto"),bn=me(),{EMPTY_BUFFER:Bi,kWebSocket:Ui,NOOP:Wi}=q(),{isBlob:ye,isValidStatusCode:Fi}=_e(),{mask:wn,toBuffer:ee}=Ce(),M=Symbol("kByteLength"),Hi=Buffer.alloc(4),Qe=8*1024,te,be=Qe,B=0,qi=1,Vi=2,Gt=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=B,this.onerror=Wi,this[Ui]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Hi,t.generateMask?t.generateMask(n):(be===Qe&&(te===void 0&&(te=Buffer.alloc(Qe)),$i(te,0,Qe),be=0),n[0]=te[be++],n[1]=te[be++],n[2]=te[be++],n[3]=te[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let l;typeof e=="string"?(!t.mask||o)&&t[M]!==void 0?l=t[M]:(e=Buffer.from(e),l=e.length):(l=e.length,s=t.mask&&t.readOnly&&!o);let a=l;l>=65536?(i+=8,a=127):l>125&&(i+=2,a=126);let c=Buffer.allocUnsafe(s?l+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=a,a===126?c.writeUInt16BE(l,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(l,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(wn(e,n,c,i,l),[c]):(wn(e,n,e,0,l),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=Bi;else{if(typeof e!="number"||!Fi(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let l=Buffer.byteLength(t);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+l),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[M]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==B?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[bn.extensionName],i=t.binary?2:1,o=t.compress,l,a;typeof e=="string"?(l=Buffer.byteLength(e),a=!1):ye(e)?(l=e.size,a=!1):(e=ee(e),l=e.length,a=ee.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[M]:l,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==B?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[M],this._state=Vi,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Kt,this,l,s);return}this._bufferedBytes-=n[M];let o=ee(i);t?this.dispatch(o,t,n,s):(this._state=B,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Gi,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[bn.extensionName];this._bufferedBytes+=n[M],this._state=qi,i.compress(e,n.fin,(o,l)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");Kt(this,a,s);return}this._bufferedBytes-=n[M],this._state=B,n.readOnly=!1,this.sendFrame(r.frame(l,n),s),this.dequeue()})}dequeue(){for(;this._state===B&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][M],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][M],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Sn.exports=Gt;function Kt(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Gi(r,e,t){Kt(r,e,t),r.onerror(e)}});var Tn=k((_c,An)=>{"use strict";var{kForOnEventAttribute:Ae,kListener:Jt}=q(),En=Symbol("kCode"),vn=Symbol("kData"),xn=Symbol("kError"),kn=Symbol("kMessage"),On=Symbol("kReason"),we=Symbol("kTarget"),Cn=Symbol("kType"),In=Symbol("kWasClean"),G=class{constructor(e){this[we]=null,this[Cn]=e}get target(){return this[we]}get type(){return this[Cn]}};Object.defineProperty(G.prototype,"target",{enumerable:!0});Object.defineProperty(G.prototype,"type",{enumerable:!0});var re=class extends G{constructor(e,t={}){super(e),this[En]=t.code===void 0?0:t.code,this[On]=t.reason===void 0?"":t.reason,this[In]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[En]}get reason(){return this[On]}get wasClean(){return this[In]}};Object.defineProperty(re.prototype,"code",{enumerable:!0});Object.defineProperty(re.prototype,"reason",{enumerable:!0});Object.defineProperty(re.prototype,"wasClean",{enumerable:!0});var Se=class extends G{constructor(e,t={}){super(e),this[xn]=t.error===void 0?null:t.error,this[kn]=t.message===void 0?"":t.message}get error(){return this[xn]}get message(){return this[kn]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Te=class extends G{constructor(e,t={}){super(e),this[vn]=t.data===void 0?null:t.data}get data(){return this[vn]}};Object.defineProperty(Te.prototype,"data",{enumerable:!0});var Ki={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Ae]&&s[Jt]===e&&!s[Ae])return;let n;if(r==="message")n=function(i,o){let l=new Te("message",{data:o?i:i.toString()});l[we]=this,Ze(e,this,l)};else if(r==="close")n=function(i,o){let l=new re("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[we]=this,Ze(e,this,l)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,Ze(e,this,o)};else if(r==="open")n=function(){let i=new G("open");i[we]=this,Ze(e,this,i)};else return;n[Ae]=!!t[Ae],n[Jt]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Jt]===e&&!t[Ae]){this.removeListener(r,t);break}}};An.exports={CloseEvent:re,ErrorEvent:Se,Event:G,EventTarget:Ki,MessageEvent:Te};function Ze(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var et=k((yc,Pn)=>{"use strict";var{tokenChars:Pe}=_e();function W(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Yi(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,l,a=-1,c=-1,d=-1,u=0;for(;u<r.length;u++)if(c=r.charCodeAt(u),o===void 0)if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(u!==0&&(c===32||c===9))d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);c===44?(W(e,g,t),t=Object.create(null)):o=g,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===void 0)if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(c===32||c===9)d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),W(t,r.slice(a,d),!0),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(c===61&&a!==-1&&d===-1)l=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(Pe[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Pe[c]===1)a===-1&&(a=u);else if(c===34&&a!==-1)i=!1,d=u;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(a!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);n&&(g=g.replace(/\\/g,""),n=!1),W(t,l,g),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),l=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=r.slice(a,d);return o===void 0?W(e,h,t):(l===void 0?W(t,h,!0):n?W(t,l,h.replace(/\\/g,"")):W(t,l,h),W(e,o,t)),e}function Ji(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Pn.exports={format:Ji,parse:Yi}});var st=k((Sc,Hn)=>{"use strict";var zi=require("events"),Xi=require("https"),Qi=require("http"),Dn=require("net"),Zi=require("tls"),{randomBytes:eo,createHash:to}=require("crypto"),{Duplex:bc,Readable:wc}=require("stream"),{URL:zt}=require("url"),X=me(),ro=Vt(),no=Yt(),{isBlob:so}=_e(),{BINARY_TYPES:Nn,CLOSE_TIMEOUT:io,EMPTY_BUFFER:tt,GUID:oo,kForOnEventAttribute:Xt,kListener:ao,kStatusCode:co,kWebSocket:A,NOOP:jn}=q(),{EventTarget:{addEventListener:lo,removeEventListener:uo}}=Tn(),{format:ho,parse:fo}=et(),{toBuffer:po}=Ce(),Ln=Symbol("kAborted"),Qt=[8,13],K=["CONNECTING","OPEN","CLOSING","CLOSED"],go=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,v=class r extends zi{constructor(e,t,n){super(),this._binaryType=Nn[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=tt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Mn(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Nn.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,t,n){let s=new ro({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new no(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[A]=this,i[A]=this,e[A]=this,s.on("conclude",yo),s.on("drain",bo),s.on("error",wo),s.on("message",So),s.on("ping",Eo),s.on("pong",vo),i.onerror=xo,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Un),e.on("data",nt),e.on("end",Wn),e.on("error",Fn),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[X.extensionName]&&this._extensions[X.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bn(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||tt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||tt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[X.extensionName]||(s.compress=!1),this._sender.send(e||tt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(v,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v.prototype,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v.prototype,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v.prototype,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});Object.defineProperty(v.prototype,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(v.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(v.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Xt])return e[ao];return null},set(e){for(let t of this.listeners(r))if(t[Xt]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Xt]:!0})}})});v.prototype.addEventListener=lo;v.prototype.removeEventListener=uo;Hn.exports=v;function Mn(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:io,protocolVersion:Qt[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Qt.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Qt.join(", ")})`);let i;if(e instanceof zt)i=e;else try{i=new zt(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",l=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!l?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let f=new SyntaxError(a);if(r._redirects===0)throw f;rt(r,f);return}let c=o?443:80,d=eo(16).toString("base64"),u=o?Xi.request:Qi.request,h=new Set,g;if(s.createConnection=s.createConnection||(o?_o:mo),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(g=new X({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=ho({[X.extensionName]:g.offer()})),t.length){for(let f of t){if(typeof f!="string"||!go.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}s.headers["Sec-WebSocket-Protocol"]=t.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}`),l){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let p;if(s.followRedirects){if(r._redirects===0){r._originalIpc=l,r._originalSecure=o,r._originalHostOrSocketPath=l?s.socketPath:i.host;let f=n&&n.headers;if(n={...n,headers:{}},f)for(let[m,x]of Object.entries(f))n.headers[m.toLowerCase()]=x}else if(r.listenerCount("redirect")===0){let f=l?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!f||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),p=r._req=u(s),r._redirects&&r.emit("redirect",r.url,p)}else p=r._req=u(s);s.timeout&&p.on("timeout",()=>{R(r,p,"Opening handshake has timed out")}),p.on("error",f=>{p===null||p[Ln]||(p=r._req=null,rt(r,f))}),p.on("response",f=>{let m=f.headers.location,x=f.statusCode;if(m&&s.followRedirects&&x>=300&&x<400){if(++r._redirects>s.maxRedirects){R(r,p,"Maximum redirects exceeded");return}p.abort();let b;try{b=new zt(m,e)}catch{let y=new SyntaxError(`Invalid URL: ${m}`);rt(r,y);return}Mn(r,b,t,n)}else r.emit("unexpected-response",p,f)||R(r,p,`Unexpected server response: ${f.statusCode}`)}),p.on("upgrade",(f,m,x)=>{if(r.emit("upgrade",f),r.readyState!==v.CONNECTING)return;p=r._req=null;let b=f.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){R(r,m,"Invalid Upgrade header");return}let P=to("sha1").update(d+oo).digest("base64");if(f.headers["sec-websocket-accept"]!==P){R(r,m,"Invalid Sec-WebSocket-Accept header");return}let y=f.headers["sec-websocket-protocol"],w;if(y!==void 0?h.size?h.has(y)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":h.size&&(w="Server sent no subprotocol"),w){R(r,m,w);return}y&&(r._protocol=y);let S=f.headers["sec-websocket-extensions"];if(S!==void 0){if(!g){R(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let N;try{N=fo(S)}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}let E=Object.keys(N);if(E.length!==1||E[0]!==X.extensionName){R(r,m,"Server indicated an extension that was not requested");return}try{g.accept(N[X.extensionName])}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[X.extensionName]=g}r.setSocket(m,x,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(p,r):p.end()}function rt(r,e){r._readyState=v.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function mo(r){return r.path=r.socketPath,Dn.connect(r)}function _o(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Dn.isIP(r.host)?"":r.host),Zi.connect(r)}function R(r,e,t){r._readyState=v.CLOSING;let n=new Error(t);Error.captureStackTrace(n,R),e.setHeader?(e[Ln]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(rt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Zt(r,e,t){if(e){let n=so(e)?e.size:po(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${K[r.readyState]})`);process.nextTick(t,n)}}function yo(r,e){let t=this[A];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[A]!==void 0&&(t._socket.removeListener("data",nt),process.nextTick($n,t._socket),r===1005?t.close():t.close(r,e))}function bo(){let r=this[A];r.isPaused||r._socket.resume()}function wo(r){let e=this[A];e._socket[A]!==void 0&&(e._socket.removeListener("data",nt),process.nextTick($n,e._socket),e.close(r[co])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Rn(){this[A].emitClose()}function So(r,e){this[A].emit("message",r,e)}function Eo(r){let e=this[A];e._autoPong&&e.pong(r,!this._isServer,jn),e.emit("ping",r)}function vo(r){this[A].emit("pong",r)}function $n(r){r.resume()}function xo(r){let e=this[A];e.readyState!==v.CLOSED&&(e.readyState===v.OPEN&&(e._readyState=v.CLOSING,Bn(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Bn(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Un(){let r=this[A];if(this.removeListener("close",Un),this.removeListener("data",nt),this.removeListener("end",Wn),r._readyState=v.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[A]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Rn),r._receiver.on("finish",Rn))}function nt(r){this[A]._receiver.write(r)||this.pause()}function Wn(){let r=this[A];r._readyState=v.CLOSING,r._receiver.end(),this.end()}function Fn(){let r=this[A];this.removeListener("error",Fn),this.on("error",jn),r&&(r._readyState=v.CLOSING,this.destroy())}});var Kn=k((vc,Gn)=>{"use strict";var Ec=st(),{Duplex:ko}=require("stream");function qn(r){r.emit("close")}function Oo(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Vn(r){this.removeListener("error",Vn),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Co(r,e){let t=!0,n=new ko({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let l=!o&&n._readableState.objectMode?i.toString():i;n.push(l)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(qn,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(qn,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Oo),n.on("error",Vn),n}Gn.exports=Co});var er=k((xc,Yn)=>{"use strict";var{tokenChars:Io}=_e();function Ao(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Io[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let l=r.slice(t,n);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Yn.exports={parse:Ao}});var ts=k((Oc,es)=>{"use strict";var To=require("events"),it=require("http"),{Duplex:kc}=require("stream"),{createHash:Po}=require("crypto"),Jn=et(),ne=me(),No=er(),Ro=st(),{CLOSE_TIMEOUT:Do,GUID:jo,kWebSocket:Lo}=q(),Mo=/^[+/0-9A-Za-z]{22}==$/,zn=0,Xn=1,Zn=2,tr=class extends To{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Do,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Ro,...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=it.createServer((n,s)=>{let i=it.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,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=$o(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=zn}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===Zn){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Ne,this);return}if(e&&this.once("close",e),this._state!==Xn)if(this._state=Xn,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(Ne,this):process.nextTick(Ne,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Ne(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",Qn);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){se(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){se(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Mo.test(i)){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Re(t,400);return}let a=e.headers["sec-websocket-protocol"],c=new Set;if(a!==void 0)try{c=No.parse(a)}catch{se(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new ne({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=Jn.parse(d);g[ne.extensionName]&&(h.accept(g[ne.extensionName]),u[ne.extensionName]=h)}catch{se(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(g,p,f,m)=>{if(!g)return Re(t,p||401,f,m);this.completeUpgrade(u,i,c,e,t,n,s)});return}if(!this.options.verifyClient(h))return Re(t,401)}this.completeUpgrade(u,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,l){if(!i.readable||!i.writable)return i.destroy();if(i[Lo])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>zn)return Re(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Po("sha1").update(t+jo).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let u=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[ne.extensionName]){let u=e[ne.extensionName].params,h=Jn.format({[ne.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
23
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function vr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}xr.Command=At});var Ar=k(j=>{var{Argument:Or}=We(),{Command:Pt}=kr(),{CommanderError:ri,InvalidArgumentError:Cr}=ke(),{Help:ni}=St(),{Option:Ir}=kt();j.program=new Pt;j.createCommand=r=>new Pt(r);j.createOption=(r,e)=>new Ir(r,e);j.createArgument=(r,e)=>new Or(r,e);j.Command=Pt;j.Option=Ir;j.Argument=Or;j.Help=ni;j.CommanderError=ri;j.InvalidArgumentError=Cr;j.InvalidOptionArgumentError=Cr});var Mr=k(I=>{"use strict";var Tt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),si=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i(await(0,t.stat)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i((0,e.statSync)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(l,a)=>l.isFile()&&o(l,a),o=(l,a)=>{let c=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(c===void 0||u===void 0)throw new Error("cannot get uid or gid");let h=new Set([u,...d]),g=l.mode,p=l.uid,f=l.gid,m=parseInt("100",8),x=parseInt("010",8),b=parseInt("001",8),T=m|x;return!!(g&b||g&x&&h.has(f)||g&m&&p===c||g&T&&c===0)}}),ii=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l(await(0,t.stat)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.isexe=s;var i=(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l((0,e.statSync)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.sync=i;var o=(a,c)=>{let{pathExt:d=process.env.PATHEXT||""}=c,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let h of u){let g=h.toLowerCase(),p=a.substring(a.length-g.length).toLowerCase();if(g&&p===g)return!0}return!1},l=(a,c,d)=>a.isFile()&&o(c,d)}),oi=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),Nr=I&&I.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),ai=I&&I.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Rr=I&&I.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&Nr(t,e,n[s]);return ai(t,e),t}})(),ci=I&&I.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Nr(e,r,t)};Object.defineProperty(I,"__esModule",{value:!0});I.sync=I.isexe=I.posix=I.win32=void 0;var Dr=Rr(si());I.posix=Dr;var jr=Rr(ii());I.win32=jr;ci(oi(),I);var li=process.env._ISEXE_TEST_PLATFORM_||process.platform,Lr=li==="win32"?jr:Dr;I.isexe=Lr.isexe;I.sync=Lr.sync});var Kr=k((ic,Gr)=>{var{isexe:di,sync:ui}=Mr(),{join:hi,delimiter:fi,sep:$r,posix:Br}=require("path"),Ur=process.platform==="win32",Wr=new RegExp(`[${Br.sep}${$r===Br.sep?"":$r}]`.replace(/(\\)/g,"\\$1")),pi=new RegExp(`^\\.${Wr.source}`),Fr=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),Hr=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=fi})=>{let s=r.match(Wr)?[""]:[...Ur?[process.cwd()]:[],...(e||"").split(n)];if(Ur){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(l=>[l,l.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},qr=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&pi.test(e)?e.slice(0,2):"")+hi(t,e)},Vr=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(await di(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)},gi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(ui(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)};Gr.exports=Vr;Vr.sync=gi});var q=k((lc,en)=>{"use strict";var Qr=["nodebuffer","arraybuffer","fragments"],Zr=typeof Blob<"u";Zr&&Qr.push("blob");en.exports={BINARY_TYPES:Qr,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Zr,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ce=k((dc,Ge)=>{"use strict";var{EMPTY_BUFFER:bi}=q(),jt=Buffer[Symbol.species];function wi(r,e){if(r.length===0)return bi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new jt(t.buffer,t.byteOffset,n):t}function tn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function rn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Si(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Lt(r){if(Lt.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new jt(r):ArrayBuffer.isView(r)?e=new jt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Lt.readOnly=!1),e}Ge.exports={concat:wi,mask:tn,toArrayBuffer:Si,toBuffer:Lt,unmask:rn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Ge.exports.mask=function(e,t,n,s,i){i<48?tn(e,t,n,s,i):r.mask(e,t,n,s,i)},Ge.exports.unmask=function(e,t){e.length<32?rn(e,t):r.unmask(e,t)}}catch{}});var on=k((uc,sn)=>{"use strict";var nn=Symbol("kDone"),Mt=Symbol("kRun"),$t=class{constructor(e){this[nn]=()=>{this.pending--,this[Mt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Mt]()}[Mt](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[nn])}}};sn.exports=$t});var me=k((hc,dn)=>{"use strict";var Ie=require("zlib"),an=Ce(),Ei=on(),{kStatusCode:cn}=q(),vi=Buffer[Symbol.species],xi=Buffer.from([0,0,255,255]),Ye=Symbol("permessage-deflate"),V=Symbol("total-length"),pe=Symbol("callback"),z=Symbol("buffers"),ge=Symbol("error"),Ke,Bt=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Ke){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ke=new Ei(t)}}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[pe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="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 "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ke.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ke.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ie.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Ye]=this,this._inflate[V]=0,this._inflate[z]=[],this._inflate.on("error",Oi),this._inflate.on("data",ln)}this._inflate[pe]=n,this._inflate.write(e),t&&this._inflate.write(xi),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=an.concat(this._inflate[z],this._inflate[V]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[V]=0,this._inflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ie.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[V]=0,this._deflate[z]=[],this._deflate.on("data",ki)}this._deflate[pe]=n,this._deflate.write(e),this._deflate.flush(Ie.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=an.concat(this._deflate[z],this._deflate[V]);t&&(i=new vi(i.buffer,i.byteOffset,i.length-4)),this._deflate[pe]=null,this._deflate[V]=0,this._deflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};dn.exports=Bt;function ki(r){this[z].push(r),this[V]+=r.length}function ln(r){if(this[V]+=r.length,this[Ye]._maxPayload<1||this[V]<=this[Ye]._maxPayload){this[z].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][cn]=1009,this.removeListener("data",ln),this.reset()}function Oi(r){if(this[Ye]._inflate=null,this[ge]){this[pe](this[ge]);return}r[cn]=1007,this[pe](r)}});var _e=k((fc,Je)=>{"use strict";var{isUtf8:un}=require("buffer"),{hasBlob:Ci}=q(),Ii=[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 Ai(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Ut(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Pi(r){return Ci&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Je.exports={isBlob:Pi,isValidStatusCode:Ai,isValidUTF8:Ut,tokenChars:Ii};if(un)Je.exports.isValidUTF8=function(r){return r.length<24?Ut(r):un(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Je.exports.isValidUTF8=function(e){return e.length<32?Ut(e):r(e)}}catch{}});var Vt=k((pc,yn)=>{"use strict";var{Writable:Ti}=require("stream"),hn=me(),{BINARY_TYPES:Ni,EMPTY_BUFFER:fn,kStatusCode:Ri,kWebSocket:Di}=q(),{concat:Wt,toArrayBuffer:ji,unmask:Li}=Ce(),{isValidStatusCode:Mi,isValidUTF8:pn}=_e(),ze=Buffer[Symbol.species],L=0,gn=1,mn=2,_n=3,Ft=4,Ht=5,Xe=6,qt=class extends Ti{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ni[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Di]=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=L}_write(e,t,n){if(this._opcode===8&&this._state==L)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e),new ze(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case L:this.getInfo(e);break;case gn:this.getPayloadLength16(e);break;case mn:this.getPayloadLength64(e);break;case _n:this.getMask();break;case Ft:this.getData(e);break;case Ht:case Xe:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[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 n=(t[0]&64)===64;if(n&&!this._extensions[hn.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){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=n}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(n){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=(t[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=gn:this._payloadLength===127?this._state=mn: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 t=this.consume(8),n=t.readUInt32BE(0);if(n>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=n*Math.pow(2,32)+t.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 t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=_n:this._state=Ft}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ft}getData(e){let t=fn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Li(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ht,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[hn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(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");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===L&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=L;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Wt(n,t):this._binaryType==="arraybuffer"?s=ji(Wt(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!0),this._state=L,this.startLoop(e)}))}else{let s=Wt(n,t);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ht||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!1),this._state=L,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,fn),this.end();else{let n=e.readUInt16BE(0);if(!Mi(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ze(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=L;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=L,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[Ri]=s,o}};yn.exports=qt});var Yt=k((mc,Sn)=>{"use strict";var{Duplex:gc}=require("stream"),{randomFillSync:$i}=require("crypto"),bn=me(),{EMPTY_BUFFER:Bi,kWebSocket:Ui,NOOP:Wi}=q(),{isBlob:ye,isValidStatusCode:Fi}=_e(),{mask:wn,toBuffer:ee}=Ce(),M=Symbol("kByteLength"),Hi=Buffer.alloc(4),Qe=8*1024,te,be=Qe,B=0,qi=1,Vi=2,Gt=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=B,this.onerror=Wi,this[Ui]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Hi,t.generateMask?t.generateMask(n):(be===Qe&&(te===void 0&&(te=Buffer.alloc(Qe)),$i(te,0,Qe),be=0),n[0]=te[be++],n[1]=te[be++],n[2]=te[be++],n[3]=te[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let l;typeof e=="string"?(!t.mask||o)&&t[M]!==void 0?l=t[M]:(e=Buffer.from(e),l=e.length):(l=e.length,s=t.mask&&t.readOnly&&!o);let a=l;l>=65536?(i+=8,a=127):l>125&&(i+=2,a=126);let c=Buffer.allocUnsafe(s?l+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=a,a===126?c.writeUInt16BE(l,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(l,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(wn(e,n,c,i,l),[c]):(wn(e,n,e,0,l),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=Bi;else{if(typeof e!="number"||!Fi(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let l=Buffer.byteLength(t);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+l),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[M]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==B?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[bn.extensionName],i=t.binary?2:1,o=t.compress,l,a;typeof e=="string"?(l=Buffer.byteLength(e),a=!1):ye(e)?(l=e.size,a=!1):(e=ee(e),l=e.length,a=ee.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[M]:l,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==B?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[M],this._state=Vi,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Kt,this,l,s);return}this._bufferedBytes-=n[M];let o=ee(i);t?this.dispatch(o,t,n,s):(this._state=B,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Gi,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[bn.extensionName];this._bufferedBytes+=n[M],this._state=qi,i.compress(e,n.fin,(o,l)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");Kt(this,a,s);return}this._bufferedBytes-=n[M],this._state=B,n.readOnly=!1,this.sendFrame(r.frame(l,n),s),this.dequeue()})}dequeue(){for(;this._state===B&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][M],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][M],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Sn.exports=Gt;function Kt(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Gi(r,e,t){Kt(r,e,t),r.onerror(e)}});var Pn=k((_c,An)=>{"use strict";var{kForOnEventAttribute:Ae,kListener:Jt}=q(),En=Symbol("kCode"),vn=Symbol("kData"),xn=Symbol("kError"),kn=Symbol("kMessage"),On=Symbol("kReason"),we=Symbol("kTarget"),Cn=Symbol("kType"),In=Symbol("kWasClean"),G=class{constructor(e){this[we]=null,this[Cn]=e}get target(){return this[we]}get type(){return this[Cn]}};Object.defineProperty(G.prototype,"target",{enumerable:!0});Object.defineProperty(G.prototype,"type",{enumerable:!0});var re=class extends G{constructor(e,t={}){super(e),this[En]=t.code===void 0?0:t.code,this[On]=t.reason===void 0?"":t.reason,this[In]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[En]}get reason(){return this[On]}get wasClean(){return this[In]}};Object.defineProperty(re.prototype,"code",{enumerable:!0});Object.defineProperty(re.prototype,"reason",{enumerable:!0});Object.defineProperty(re.prototype,"wasClean",{enumerable:!0});var Se=class extends G{constructor(e,t={}){super(e),this[xn]=t.error===void 0?null:t.error,this[kn]=t.message===void 0?"":t.message}get error(){return this[xn]}get message(){return this[kn]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Pe=class extends G{constructor(e,t={}){super(e),this[vn]=t.data===void 0?null:t.data}get data(){return this[vn]}};Object.defineProperty(Pe.prototype,"data",{enumerable:!0});var Ki={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Ae]&&s[Jt]===e&&!s[Ae])return;let n;if(r==="message")n=function(i,o){let l=new Pe("message",{data:o?i:i.toString()});l[we]=this,Ze(e,this,l)};else if(r==="close")n=function(i,o){let l=new re("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[we]=this,Ze(e,this,l)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,Ze(e,this,o)};else if(r==="open")n=function(){let i=new G("open");i[we]=this,Ze(e,this,i)};else return;n[Ae]=!!t[Ae],n[Jt]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Jt]===e&&!t[Ae]){this.removeListener(r,t);break}}};An.exports={CloseEvent:re,ErrorEvent:Se,Event:G,EventTarget:Ki,MessageEvent:Pe};function Ze(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var et=k((yc,Tn)=>{"use strict";var{tokenChars:Te}=_e();function W(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Yi(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,l,a=-1,c=-1,d=-1,u=0;for(;u<r.length;u++)if(c=r.charCodeAt(u),o===void 0)if(d===-1&&Te[c]===1)a===-1&&(a=u);else if(u!==0&&(c===32||c===9))d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);c===44?(W(e,g,t),t=Object.create(null)):o=g,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===void 0)if(d===-1&&Te[c]===1)a===-1&&(a=u);else if(c===32||c===9)d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),W(t,r.slice(a,d),!0),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(c===61&&a!==-1&&d===-1)l=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(Te[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Te[c]===1)a===-1&&(a=u);else if(c===34&&a!==-1)i=!1,d=u;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Te[c]===1)a===-1&&(a=u);else if(a!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);n&&(g=g.replace(/\\/g,""),n=!1),W(t,l,g),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),l=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=r.slice(a,d);return o===void 0?W(e,h,t):(l===void 0?W(t,h,!0):n?W(t,l,h.replace(/\\/g,"")):W(t,l,h),W(e,o,t)),e}function Ji(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Tn.exports={format:Ji,parse:Yi}});var st=k((Sc,Hn)=>{"use strict";var zi=require("events"),Xi=require("https"),Qi=require("http"),Dn=require("net"),Zi=require("tls"),{randomBytes:eo,createHash:to}=require("crypto"),{Duplex:bc,Readable:wc}=require("stream"),{URL:zt}=require("url"),X=me(),ro=Vt(),no=Yt(),{isBlob:so}=_e(),{BINARY_TYPES:Nn,CLOSE_TIMEOUT:io,EMPTY_BUFFER:tt,GUID:oo,kForOnEventAttribute:Xt,kListener:ao,kStatusCode:co,kWebSocket:A,NOOP:jn}=q(),{EventTarget:{addEventListener:lo,removeEventListener:uo}}=Pn(),{format:ho,parse:fo}=et(),{toBuffer:po}=Ce(),Ln=Symbol("kAborted"),Qt=[8,13],K=["CONNECTING","OPEN","CLOSING","CLOSED"],go=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,v=class r extends zi{constructor(e,t,n){super(),this._binaryType=Nn[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=tt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Mn(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Nn.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,t,n){let s=new ro({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new no(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[A]=this,i[A]=this,e[A]=this,s.on("conclude",yo),s.on("drain",bo),s.on("error",wo),s.on("message",So),s.on("ping",Eo),s.on("pong",vo),i.onerror=xo,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Un),e.on("data",nt),e.on("end",Wn),e.on("error",Fn),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[X.extensionName]&&this._extensions[X.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bn(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||tt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||tt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[X.extensionName]||(s.compress=!1),this._sender.send(e||tt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(v,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v.prototype,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v.prototype,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v.prototype,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});Object.defineProperty(v.prototype,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(v.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(v.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Xt])return e[ao];return null},set(e){for(let t of this.listeners(r))if(t[Xt]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Xt]:!0})}})});v.prototype.addEventListener=lo;v.prototype.removeEventListener=uo;Hn.exports=v;function Mn(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:io,protocolVersion:Qt[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Qt.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Qt.join(", ")})`);let i;if(e instanceof zt)i=e;else try{i=new zt(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",l=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!l?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let f=new SyntaxError(a);if(r._redirects===0)throw f;rt(r,f);return}let c=o?443:80,d=eo(16).toString("base64"),u=o?Xi.request:Qi.request,h=new Set,g;if(s.createConnection=s.createConnection||(o?_o:mo),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(g=new X({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=ho({[X.extensionName]:g.offer()})),t.length){for(let f of t){if(typeof f!="string"||!go.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}s.headers["Sec-WebSocket-Protocol"]=t.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}`),l){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let p;if(s.followRedirects){if(r._redirects===0){r._originalIpc=l,r._originalSecure=o,r._originalHostOrSocketPath=l?s.socketPath:i.host;let f=n&&n.headers;if(n={...n,headers:{}},f)for(let[m,x]of Object.entries(f))n.headers[m.toLowerCase()]=x}else if(r.listenerCount("redirect")===0){let f=l?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!f||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),p=r._req=u(s),r._redirects&&r.emit("redirect",r.url,p)}else p=r._req=u(s);s.timeout&&p.on("timeout",()=>{R(r,p,"Opening handshake has timed out")}),p.on("error",f=>{p===null||p[Ln]||(p=r._req=null,rt(r,f))}),p.on("response",f=>{let m=f.headers.location,x=f.statusCode;if(m&&s.followRedirects&&x>=300&&x<400){if(++r._redirects>s.maxRedirects){R(r,p,"Maximum redirects exceeded");return}p.abort();let b;try{b=new zt(m,e)}catch{let y=new SyntaxError(`Invalid URL: ${m}`);rt(r,y);return}Mn(r,b,t,n)}else r.emit("unexpected-response",p,f)||R(r,p,`Unexpected server response: ${f.statusCode}`)}),p.on("upgrade",(f,m,x)=>{if(r.emit("upgrade",f),r.readyState!==v.CONNECTING)return;p=r._req=null;let b=f.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){R(r,m,"Invalid Upgrade header");return}let T=to("sha1").update(d+oo).digest("base64");if(f.headers["sec-websocket-accept"]!==T){R(r,m,"Invalid Sec-WebSocket-Accept header");return}let y=f.headers["sec-websocket-protocol"],w;if(y!==void 0?h.size?h.has(y)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":h.size&&(w="Server sent no subprotocol"),w){R(r,m,w);return}y&&(r._protocol=y);let S=f.headers["sec-websocket-extensions"];if(S!==void 0){if(!g){R(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let N;try{N=fo(S)}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}let E=Object.keys(N);if(E.length!==1||E[0]!==X.extensionName){R(r,m,"Server indicated an extension that was not requested");return}try{g.accept(N[X.extensionName])}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[X.extensionName]=g}r.setSocket(m,x,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(p,r):p.end()}function rt(r,e){r._readyState=v.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function mo(r){return r.path=r.socketPath,Dn.connect(r)}function _o(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Dn.isIP(r.host)?"":r.host),Zi.connect(r)}function R(r,e,t){r._readyState=v.CLOSING;let n=new Error(t);Error.captureStackTrace(n,R),e.setHeader?(e[Ln]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(rt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Zt(r,e,t){if(e){let n=so(e)?e.size:po(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${K[r.readyState]})`);process.nextTick(t,n)}}function yo(r,e){let t=this[A];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[A]!==void 0&&(t._socket.removeListener("data",nt),process.nextTick($n,t._socket),r===1005?t.close():t.close(r,e))}function bo(){let r=this[A];r.isPaused||r._socket.resume()}function wo(r){let e=this[A];e._socket[A]!==void 0&&(e._socket.removeListener("data",nt),process.nextTick($n,e._socket),e.close(r[co])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Rn(){this[A].emitClose()}function So(r,e){this[A].emit("message",r,e)}function Eo(r){let e=this[A];e._autoPong&&e.pong(r,!this._isServer,jn),e.emit("ping",r)}function vo(r){this[A].emit("pong",r)}function $n(r){r.resume()}function xo(r){let e=this[A];e.readyState!==v.CLOSED&&(e.readyState===v.OPEN&&(e._readyState=v.CLOSING,Bn(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Bn(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Un(){let r=this[A];if(this.removeListener("close",Un),this.removeListener("data",nt),this.removeListener("end",Wn),r._readyState=v.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[A]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Rn),r._receiver.on("finish",Rn))}function nt(r){this[A]._receiver.write(r)||this.pause()}function Wn(){let r=this[A];r._readyState=v.CLOSING,r._receiver.end(),this.end()}function Fn(){let r=this[A];this.removeListener("error",Fn),this.on("error",jn),r&&(r._readyState=v.CLOSING,this.destroy())}});var Kn=k((vc,Gn)=>{"use strict";var Ec=st(),{Duplex:ko}=require("stream");function qn(r){r.emit("close")}function Oo(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Vn(r){this.removeListener("error",Vn),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Co(r,e){let t=!0,n=new ko({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let l=!o&&n._readableState.objectMode?i.toString():i;n.push(l)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(qn,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(qn,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Oo),n.on("error",Vn),n}Gn.exports=Co});var er=k((xc,Yn)=>{"use strict";var{tokenChars:Io}=_e();function Ao(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Io[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let l=r.slice(t,n);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Yn.exports={parse:Ao}});var ts=k((Oc,es)=>{"use strict";var Po=require("events"),it=require("http"),{Duplex:kc}=require("stream"),{createHash:To}=require("crypto"),Jn=et(),ne=me(),No=er(),Ro=st(),{CLOSE_TIMEOUT:Do,GUID:jo,kWebSocket:Lo}=q(),Mo=/^[+/0-9A-Za-z]{22}==$/,zn=0,Xn=1,Zn=2,tr=class extends Po{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Do,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Ro,...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=it.createServer((n,s)=>{let i=it.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,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=$o(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=zn}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===Zn){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Ne,this);return}if(e&&this.once("close",e),this._state!==Xn)if(this._state=Xn,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(Ne,this):process.nextTick(Ne,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Ne(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",Qn);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){se(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){se(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Mo.test(i)){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Re(t,400);return}let a=e.headers["sec-websocket-protocol"],c=new Set;if(a!==void 0)try{c=No.parse(a)}catch{se(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new ne({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=Jn.parse(d);g[ne.extensionName]&&(h.accept(g[ne.extensionName]),u[ne.extensionName]=h)}catch{se(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(g,p,f,m)=>{if(!g)return Re(t,p||401,f,m);this.completeUpgrade(u,i,c,e,t,n,s)});return}if(!this.options.verifyClient(h))return Re(t,401)}this.completeUpgrade(u,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,l){if(!i.readable||!i.writable)return i.destroy();if(i[Lo])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>zn)return Re(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${To("sha1").update(t+jo).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let u=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[ne.extensionName]){let u=e[ne.extensionName].params,h=Jn.format({[ne.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
24
24
  `).join(`\r
25
25
  `)),i.removeListener("error",Qn),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Ne,this)})),l(d,s)}};es.exports=tr;function $o(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Ne(r){r._state=Zn,r.emit("close")}function Qn(){this.destroy()}function Re(r,e,t,n){t=t||it.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${it.STATUS_CODES[e]}\r
26
26
  `+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
27
27
  `)+`\r
28
28
  \r
29
- `+t)}function se(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,se),r.emit("wsClientError",o,t,e)}else Re(t,n,s,i)}});var as={};Ws(as,{loadConfig:()=>ie,loadProjectSettings:()=>sr,saveConfig:()=>oe});function De(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function ie(){let r=Y.default.existsSync(ot)?ot:os;Y.default.existsSync(r)||(console.error("[bridge] Config not found. Run: bridge-agent auth"),process.exit(1));let e=Y.default.readFileSync(r,"utf-8"),t;try{t=JSON.parse(e)}catch{console.error("[bridge] Invalid config file at",os),process.exit(1)}(!t||typeof t!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let n=t,s=typeof n.server=="string"?n.server:"",i=typeof n.token=="string"?n.token:"",o=typeof n.name=="string"?n.name:"bridge-agent";(!s||!i)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let l={server:s,token:i,name:o},a=De(n,"agentPaths"),c=De(n,"projectPaths");return a&&(l.agentPaths=a),c&&(l.projectPaths=c),l}function oe(r){let e=je.default.dirname(ot);Y.default.existsSync(e)||Y.default.mkdirSync(e,{recursive:!0}),Y.default.writeFileSync(ot,JSON.stringify(r,null,2),{mode:384})}function sr(r){let e=je.default.join(r??process.cwd(),".jerico","settings.json");if(!Y.default.existsSync(e))return{};try{let t=Y.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=De(s,"hooks"),l=De(s,"env"),a=De(s,"agentPaths");return o&&(i.hooks=o),l&&(i.env=l),a&&(i.agentPaths=a),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var Y,je,nr,ot,os,Ee=Us(()=>{"use strict";Y=_(require("fs")),je=_(require("path")),nr=_(require("os"));ot=je.default.join(nr.default.homedir(),".jerico","settings.json"),os=je.default.join(nr.default.homedir(),".bridge","config.json")});var Tr=_(Ar(),1),{program:Ka,createCommand:Ya,createArgument:Ja,createOption:za,CommanderError:Xa,InvalidArgumentError:Qa,InvalidOptionArgumentError:Za,Command:Pr,Argument:ec,Option:tc,Help:rc}=Tr.default;var Ss=require("node:http"),le=require("node:child_process"),T=require("node:fs"),Z=require("node:os"),D=_(require("path"));var Xr=_(require("node-pty"));var Rt=_(Kr()),he=_(require("fs")),Oe=_(require("path")),Jr=_(require("net")),zr=require("child_process"),Fe=r=>r+`
29
+ `+t)}function se(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,se),r.emit("wsClientError",o,t,e)}else Re(t,n,s,i)}});var as={};Ws(as,{loadConfig:()=>ie,loadProjectSettings:()=>sr,saveConfig:()=>oe});function De(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function ie(){let r=Y.default.existsSync(ot)?ot:os;Y.default.existsSync(r)||(console.error("[bridge] Config not found. Run: bridge-agent auth"),process.exit(1));let e=Y.default.readFileSync(r,"utf-8"),t;try{t=JSON.parse(e)}catch{console.error("[bridge] Invalid config file at",os),process.exit(1)}(!t||typeof t!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let n=t,s=typeof n.server=="string"?n.server:"",i=typeof n.token=="string"?n.token:"",o=typeof n.name=="string"?n.name:"bridge-agent";(!s||!i)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let l={server:s,token:i,name:o},a=De(n,"agentPaths"),c=De(n,"projectPaths");return a&&(l.agentPaths=a),c&&(l.projectPaths=c),l}function oe(r){let e=je.default.dirname(ot);Y.default.existsSync(e)||Y.default.mkdirSync(e,{recursive:!0}),Y.default.writeFileSync(ot,JSON.stringify(r,null,2),{mode:384})}function sr(r){let e=je.default.join(r??process.cwd(),".jerico","settings.json");if(!Y.default.existsSync(e))return{};try{let t=Y.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=De(s,"hooks"),l=De(s,"env"),a=De(s,"agentPaths");return o&&(i.hooks=o),l&&(i.env=l),a&&(i.agentPaths=a),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var Y,je,nr,ot,os,Ee=Us(()=>{"use strict";Y=_(require("fs")),je=_(require("path")),nr=_(require("os"));ot=je.default.join(nr.default.homedir(),".jerico","settings.json"),os=je.default.join(nr.default.homedir(),".bridge","config.json")});var Pr=_(Ar(),1),{program:Ka,createCommand:Ya,createArgument:Ja,createOption:za,CommanderError:Xa,InvalidArgumentError:Qa,InvalidOptionArgumentError:Za,Command:Tr,Argument:ec,Option:tc,Help:rc}=Pr.default;var Ss=require("node:http"),le=require("node:child_process"),P=require("node:fs"),Z=require("node:os"),D=_(require("path"));var Xr=_(require("node-pty"));var Rt=_(Kr()),he=_(require("fs")),Oe=_(require("path")),Jr=_(require("net")),zr=require("child_process"),Fe=r=>r+`
30
30
  `,He=r=>r.replace(/[\r\n]+$/,"")+"\r",fe=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:Fe},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>Nt(".claude")||ue("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:He,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>ue("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:He},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>Nt(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:He,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>ue("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:Fe},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>yi(11434),formatInput:Fe},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>ue("OPENAI_API_KEY")||ue("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:Fe},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>Nt(".kimi")||ue("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["-r",r,"--yolo"],supportsMcpConfig:!0,formatInput:He,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]}];var Yr=process.env.HOME??"/Users/unknown";function qe(r){try{let e=(0,zr.spawnSync)(r,["--version"],{timeout:5e3});return e.status!==0?void 0:(e.stdout??e.stderr??Buffer.from("")).toString("utf8").split(`
31
- `)[0].trim()||void 0}catch{return}}function mi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=Oe.default.join(Yr,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=he.default.readdirSync(s)}catch{}i.sort((o,l)=>l.localeCompare(o));for(let o of i){let l=Oe.default.join(s,o,r.binary);if(he.default.existsSync(l)){let a=qe(l);e.push({path:l,version:a})}}}else{let i=Oe.default.join(Yr,n);if(he.default.existsSync(i)){let o=qe(i);e.push({path:i,version:o})}}}return e}async function _i(r,e={}){if(e[r.key]){let n=e[r.key],s=qe(n);if(s)return{path:n,version:s}}try{let n=await(0,Rt.default)(r.binary);if(n&&he.default.existsSync(n)){let s=qe(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=mi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Rt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Dt(r={}){let e=[];for(let t of fe)try{let{path:n,version:s}=await _i(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:fe.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function Nt(r){return he.default.existsSync(Oe.default.join(process.env.HOME??"",r))}function ue(r){return!!process.env[r]}async function yi(r){return new Promise(e=>{let t=Jr.default.createConnection(r,"127.0.0.1");t.setTimeout(200),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}var Ve=class{handles=new Map;nextInstanceId=1;lastErrors=new Map;spawn(e,t,n,s,i,o,l,a,c){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:t}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),h=Math.max(1,Math.min(500,o)),g={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};c&&(g.BRIDGE_SERVER_URL=c.serverUrl,g.BRIDGE_TOKEN=c.token,g.BRIDGE_WORKSPACE_ID=c.workspaceId,g.BRIDGE_PROJECT_ID=c.projectId,c.projectEnv&&Object.assign(g,c.projectEnv));let p=process.env.BRIDGE_MCP_URL;p&&(g.BRIDGE_MCP_URL=p);let f;try{f=Xr.spawn(n,s,{name:"xterm-256color",cols:u,rows:h,cwd:c?.cwd,env:g})}catch(b){let P=b instanceof Error?b.message:String(b);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:P}),!1}let m=this.nextInstanceId++,x={agentId:e,agentKey:t,process:f,pid:f.pid,killed:!1,instanceId:m};return f.onData(b=>{let P=this.handles.get(e);!P||P.instanceId!==m||x.killed||l(Buffer.from(b).toString("base64"))}),f.onExit(({exitCode:b,signal:P})=>{let y=this.handles.get(e);!y||y.instanceId!==m||x.killed||x.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:b,signal:P}),a(b??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,x),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:c?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Buffer.from(t,"base64").toString(),o=fe.find(a=>a.key===s.agentKey),l=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(l)}kill(e,t=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(t){try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}setTimeout(()=>{try{process.kill(-s,"SIGKILL")}catch{}},2e3)}else try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}console.log("[daemon] pty.kill",{agentId:e,force:t})}resize(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,t)),o=Math.max(1,Math.min(500,n));s.process.resize(i,o)}getLastError(e){return this.lastErrors.get(e)}killAll(){for(let e of this.handles.values())try{process.kill(-e.pid,"SIGTERM")}catch{e.process.kill()}this.handles.clear()}getLiveAgentIds(){return[...this.handles.keys()]}};var Bo=_(Kn(),1),Uo=_(et(),1),Wo=_(me(),1),Fo=_(Vt(),1),Ho=_(Yt(),1),qo=_(er(),1),rs=_(st(),1),Vo=_(ts(),1);var I=rs.default;var F=_(require("fs")),$=_(require("path")),J=_(require("os")),dt=require("node:child_process"),fr=require("node:crypto");var ns=r=>r;var ss=r=>r,is=r=>r;function rr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}Ee();var Le=_(require("fs")),ir=_(require("path")),cs=_(require("os")),Go=2e5;function Ko(r){let e=ir.default.join(cs.default.homedir(),".claude","projects");if(Le.default.existsSync(e))try{let t=Le.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=ir.default.join(e,n.name,`${r}.jsonl`);if(Le.default.existsSync(s))return s}}catch{}}function Yo(r){try{let t=Le.default.readFileSync(r,"utf-8").trim().split(`
31
+ `)[0].trim()||void 0}catch{return}}function mi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=Oe.default.join(Yr,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=he.default.readdirSync(s)}catch{}i.sort((o,l)=>l.localeCompare(o));for(let o of i){let l=Oe.default.join(s,o,r.binary);if(he.default.existsSync(l)){let a=qe(l);e.push({path:l,version:a})}}}else{let i=Oe.default.join(Yr,n);if(he.default.existsSync(i)){let o=qe(i);e.push({path:i,version:o})}}}return e}async function _i(r,e={}){if(e[r.key]){let n=e[r.key],s=qe(n);if(s)return{path:n,version:s}}try{let n=await(0,Rt.default)(r.binary);if(n&&he.default.existsSync(n)){let s=qe(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=mi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Rt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Dt(r={}){let e=[];for(let t of fe)try{let{path:n,version:s}=await _i(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:fe.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function Nt(r){return he.default.existsSync(Oe.default.join(process.env.HOME??"",r))}function ue(r){return!!process.env[r]}async function yi(r){return new Promise(e=>{let t=Jr.default.createConnection(r,"127.0.0.1");t.setTimeout(200),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}var Ve=class{handles=new Map;nextInstanceId=1;lastErrors=new Map;spawn(e,t,n,s,i,o,l,a,c){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:t}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),h=Math.max(1,Math.min(500,o)),g={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};c&&(g.BRIDGE_SERVER_URL=c.serverUrl,g.BRIDGE_TOKEN=c.token,g.BRIDGE_WORKSPACE_ID=c.workspaceId,g.BRIDGE_PROJECT_ID=c.projectId,c.projectEnv&&Object.assign(g,c.projectEnv));let p=process.env.BRIDGE_MCP_URL;p&&(g.BRIDGE_MCP_URL=p);let f;try{f=Xr.spawn(n,s,{name:"xterm-256color",cols:u,rows:h,cwd:c?.cwd,env:g})}catch(b){let T=b instanceof Error?b.message:String(b);return this.lastErrors.set(e,T),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:T}),!1}let m=this.nextInstanceId++,x={agentId:e,agentKey:t,process:f,pid:f.pid,killed:!1,instanceId:m};return f.onData(b=>{let T=this.handles.get(e);!T||T.instanceId!==m||x.killed||l(Buffer.from(b).toString("base64"))}),f.onExit(({exitCode:b,signal:T})=>{let y=this.handles.get(e);!y||y.instanceId!==m||x.killed||x.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:b,signal:T}),a(b??null,T?String(T):null))}),this.lastErrors.delete(e),this.handles.set(e,x),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:c?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:t.length});return}let i=Buffer.from(t,"base64").toString(),o=fe.find(a=>a.key===s.agentKey),l=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(l)}kill(e,t=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(t){try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}setTimeout(()=>{try{process.kill(-s,"SIGKILL")}catch{}},2e3)}else try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}console.log("[daemon] pty.kill",{agentId:e,force:t})}resize(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,t)),o=Math.max(1,Math.min(500,n));s.process.resize(i,o)}getLastError(e){return this.lastErrors.get(e)}killAll(){for(let e of this.handles.values())try{process.kill(-e.pid,"SIGTERM")}catch{e.process.kill()}this.handles.clear()}getLiveAgentIds(){return[...this.handles.keys()]}};var Bo=_(Kn(),1),Uo=_(et(),1),Wo=_(me(),1),Fo=_(Vt(),1),Ho=_(Yt(),1),qo=_(er(),1),rs=_(st(),1),Vo=_(ts(),1);var C=rs.default;var F=_(require("fs")),$=_(require("path")),J=_(require("os")),dt=require("node:child_process"),fr=require("node:crypto");var ns=r=>r;var ss=r=>r,is=r=>r;function rr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}Ee();var Le=_(require("fs")),ir=_(require("path")),cs=_(require("os")),Go=2e5;function Ko(r){let e=ir.default.join(cs.default.homedir(),".claude","projects");if(Le.default.existsSync(e))try{let t=Le.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=ir.default.join(e,n.name,`${r}.jsonl`);if(Le.default.existsSync(s))return s}}catch{}}function Yo(r){try{let t=Le.default.readFileSync(r,"utf-8").trim().split(`
32
32
  `);for(let n=t.length-1;n>=0;n--){let s=t[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let l=o,a=(l.input_tokens??0)+(l.cache_creation_input_tokens??0)+(l.cache_read_input_tokens??0);if(a===0)continue;return{usedPct:Math.min(100,Math.round(a/Go*100)),usedTokens:a}}catch{continue}}}catch{}return null}function or(r,e,t){let n,s=-1,i=()=>{if(n||(n=Ko(e)),!n)return;let a=Yo(n);a&&a.usedTokens!==s&&(s=a.usedTokens,t(r,a.usedPct,a.usedTokens))},o=setTimeout(i,2e3),l=setInterval(i,3e3);return()=>{clearTimeout(o),clearInterval(l)}}var Q=_(require("fs")),Me=_(require("path")),ar=_(require("os")),ls=300*60*1e3,ds={free:10,pro:40,max_5x:200,max_20x:200};function Jo(){let r=Me.default.join(ar.default.homedir(),".jerico","settings.json");try{if(!Q.default.existsSync(r))return"pro";let t=JSON.parse(Q.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in ds)return t}catch{}return"pro"}function zo(){let r=Me.default.join(ar.default.homedir(),".claude","projects");if(!Q.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-ls,n=1/0,s=0;try{let o=Q.default.readdirSync(r,{withFileTypes:!0}).filter(l=>l.isDirectory());for(let l of o){let a=Me.default.join(r,l.name),c;try{c=Q.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of c){let u=Me.default.join(a,d),h;try{if(Q.default.statSync(u).size>20*1024*1024)continue;h=Q.default.readFileSync(u,"utf-8")}catch{continue}for(let g of h.split(`
33
33
  `)){let p=g.trim();if(p)try{let f=JSON.parse(p);if(f.type!=="user"||f.message?.role!=="user"||f.userType!==void 0&&f.userType!=="external")continue;let x=f.timestamp;if(typeof x!="string")continue;let b=Date.parse(x);if(isNaN(b)||b<t)continue;s++,b<n&&(n=b)}catch{continue}}}}}catch{}let i=isFinite(n)?n+ls:0;return{prompts5h:s,resetAt:i}}function us(r){let e=()=>{let n=Jo(),s=ds[n]??40,{prompts5h:i,resetAt:o}=zo();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var ve=_(require("os")),at=_(require("fs")),lr=require("node:child_process");function fs(){let r=0,e=0;for(let t of ve.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var cr=fs();function Xo(){let r=fs(),e=r.idle-cr.idle,t=r.total-cr.total;return cr=r,t===0?0:Math.round((1-e/t)*100)}function Qo(){let r=ve.default.totalmem(),e=ve.default.freemem(),t=0;try{let n=(0,lr.spawnSync)("vm_stat",["-c","10"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(n.status===0&&n.stdout){let s=n.stdout.match(/page size of (\d+) bytes/),i=n.stdout.match(/Pages speculative:\s*(\d+)/),o=n.stdout.match(/Pages inactive:\s*(\d+)/);if(i&&o){let l=s?parseInt(s[1],10):4096;t=(parseInt(i[1],10)+parseInt(o[1],10))*l}}}catch{}return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:Math.round(t/1024/1024)}}function Zo(){if(process.platform==="darwin")return Qo();let r=ve.default.totalmem(),e=ve.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function ea(){try{let r=(0,lr.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(r.status!==0||!r.stdout)return;let e=r.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let t=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:t,charging:n}}catch{return}}function ta(){try{let r="/sys/class/power_supply",e=at.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(at.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=at.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function hs(){let r=process.platform;if(r==="darwin")return ea();if(r==="linux")return ta()}var ra=1e4,na=3;function ps(r){let e=0,t=hs(),n=setInterval(()=>{e++,e%na===0&&(t=hs());let s=Zo();r({cpu:Xo(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},ra);return()=>clearInterval(n)}var ct=_(require("fs")),lt=_(require("path")),gs=_(require("node-pty"));function sa(){try{let r=require.resolve("node-pty"),e=lt.default.resolve(lt.default.dirname(r),"..");return lt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function ms(){let r=sa();if(!r||!ct.default.existsSync(r))return!0;try{ct.default.accessSync(r,ct.default.constants.X_OK)}catch{return!1}try{gs.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ae=new Map;function ia(){try{return(0,fr.createHash)("sha256").update(J.default.hostname()+":"+J.default.userInfo().username).digest("hex")}catch{return"unknown"}}var $e=[];function oa(r){let e=Date.now(),t=e-3e4;for(;$e.length&&$e[0].ts<t;)$e.shift();return $e.push({agentKey:r,ts:e}),new Set($e.map(s=>s.agentKey)).size>=2}var aa=r=>r.replace(/[\r\n]+$/,"")+"\r",ur=null,ca=us(r=>{ur=r}),la=3e4,da=5e3,ua=400;function ha(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function fa(r,e=ua){return r.length<=e?r:`${r.slice(0,e)}...`}function pa(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function ht(){let r=F.default.realpathSync(process.argv[1]??""),e=$.default.dirname(r);return[$.default.resolve(e,"../../mcp-server/dist/index.cjs"),$.default.resolve(e,"bridge-mcp.cjs"),$.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>F.default.existsSync(n))??"bridge-mcp"}function ga(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:ht(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId,BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},n=$.default.join(J.default.tmpdir(),`bridge-mcp-${r.agentId??r.projectId}.json`);return F.default.writeFileSync(n,JSON.stringify(t,null,2)+`
34
34
  `,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config",n]}catch(e){return console.warn("[daemon] mcp.config.build.failed",{error:String(e)}),[]}}var ma={bridge_get_project:"Project metadata: name, cwd, machineId",bridge_get_plan:"Read project spec/description",bridge_update_plan:"Update project spec/description",bridge_get_project_history:"Past run history and failure patterns",bridge_get_execution_status:"Run history with todo completion counts",bridge_get_todos:"List todos + session state for this project",bridge_add_todo:"Create a new todo (title, todoType, dependsOn)",bridge_update_todo:"Update a todo title or status",bridge_cancel_run:"Cancel active run (use before restarting a stale plan)",bridge_list_agents:"All agents: role, status, inRun flag",bridge_get_agent_status:"Single agent status check",bridge_spawn_worker:"Spawn a new worker agent (agentKey, role)",bridge_kill_agent:"Terminate a stuck or dead agent",bridge_get_agent_output:"Read terminal output of any agent",bridge_send_input:"Send text input to an agent PTY",bridge_get_my_task:"Get the task assigned to this agent",bridge_complete_task:"Signal task completion",bridge_fail_task:"Signal task failure with a specific reason",bridge_get_todo_context:"Read todo output/error for a specific todo",bridge_assign_task:"Assign a pending todo to a specific agent"};function xe(...r){return`
@@ -361,8 +361,8 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
361
361
 
362
362
  ${xe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function ys(r){let e=process.env.BRIDGE_TEST_SCRIPTED_REVIEW,t=r==="reviewer"&&e==="1";return console.log("[daemon] getRoleSystemPrompt.called",{role:r,envFlag:e,returning:t?"SCRIPTED":"NORMAL"}),t?ba:ya[r]}function wa(r,e,t){if(!e)return[];let n=ys(e);if(!n)return[];if(r==="claude")try{let s=$.default.join(J.default.tmpdir(),`bridge-role-${t}.md`),i=n.replaceAll("{{PANEL_ID}}",t);return F.default.writeFileSync(s,i+`
363
363
  `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:s}),["--append-system-prompt-file",s]}catch(s){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,role:e,error:String(s)}),[]}return r==="qwen"?["--append-system-prompt",n]:[]}function Be(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Sa(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:ht(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId,BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},n=$.default.join(J.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??r.projectId}.json`);return F.default.writeFileSync(n,JSON.stringify(t,null,2)+`
364
- `,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function Ea(r){try{let e=ht(),t=`{BRIDGE_SERVER_URL=${Be(r.serverUrl)},BRIDGE_TOKEN=${Be(r.token)},BRIDGE_WORKSPACE_ID=${Be(r.workspaceId)},BRIDGE_PROJECT_ID=${Be(r.projectId)},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${Be(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function va(r){try{return F.default.statSync(r).isDirectory()}catch{return!1}}function dr(r,e){try{return e(r)}catch{return!1}}function xa(r,e,t,n,s=va){let i=n?.[r];if(i&&dr(i,s))return{path:i,source:"local_override"};if(t){if(dr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}return e&&dr(e,s)?{path:e,source:"server_project"}:(console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:`Set projectPaths["${r}"] in ~/.jerico/settings.json`}),{path:J.default.homedir(),source:"fallback_home"})}function ka(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId}),!1;let e=ht(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,dt.spawnSync)("qwen",["mcp","remove","--scope","project","bridge"],t);let n=(0,dt.spawnSync)("qwen",["mcp","add","--scope","project","-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return n.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:n.status,stderr:(n.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var ut=[],hr=!1,_s=!1;function bs(){return hr}function ws(r){if(_s)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(_s=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let c=$.default.join(J.default.homedir(),".jerico","settings.json");F.default.existsSync(c)&&JSON.parse(F.default.readFileSync(c,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=ie(),t=(0,fr.createHash)("sha256").update(e.token).digest("hex"),n=null,s=null,i=null,o=0;function l(){s&&(clearTimeout(s),s=null),n=new I(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let c=n,d=null;c.on("open",()=>{hr=!0,console.log("[daemon] ws.connected",{server:e.server}),i=setInterval(()=>{c.readyState===I.OPEN&&c.ping()},la);let u=!ms();c.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:u,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:ia()})),Dt(e.agentPaths).then(h=>{ut=h,c.readyState===I.OPEN&&c.send(JSON.stringify({type:"agents",list:ut}))}),d=ps(h=>{c.readyState===I.OPEN&&c.send(JSON.stringify({type:"system_metrics",daemonId:t,...h}))})}),c.on("message",u=>{let h;try{h=JSON.parse(u.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}Oa(h,c,r,e)}),c.on("close",u=>{hr=!1,i&&(clearInterval(i),i=null),d?.(),d=null,u===1008?(o++,o>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:o})):o=0,!s&&(console.log("[daemon] ws.reconnecting",{attempt:1}),s=setTimeout(l,3e3))}),c.on("error",u=>{console.error("[daemon] ws.error",{message:u.message})})}function a(){i&&(clearInterval(i),i=null),ca();for(let c of ae.values())c();r.killAll(),n?.close()}process.on("SIGINT",()=>{a(),process.exit(0)}),process.on("SIGTERM",()=>{a(),process.exit(0)}),process.on("SIGHUP",()=>{a(),process.exit(0)}),process.on("uncaughtException",c=>{console.error("[daemon] uncaughtException",{error:c.message}),r.killAll(),process.exit(1)}),l()}function Oa(r,e,t,n){switch(r.type){case"spawn":{console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role});let s=ut.find(y=>y.key===r.agentKey);if(!s){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let i=fe.find(y=>y.key===r.agentKey),o=[];if(r.sessionId&&i?.resumeArgs)o=i.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,r.sessionId,(y,w,S)=>{e.readyState===I.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:y,usedPct:w,usedTokens:S,...ur}))})));else if(i?.assignSessionId){let y=crypto.randomUUID(),w=r.agentKey==="kimi"?"--session":"--session-id";o=[...i.spawnArgs??[],w,y],e.readyState===I.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:y})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:y})),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,y,(S,N,E)=>{e.readyState===I.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:N,usedTokens:E,...ur}))})))}else e.readyState===I.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let l,a=!1,c,d;if(r.projectId&&r.workspaceId){let y=pa(n.server),w=xa(r.projectId,r.cwd,r.daemonLocalPath,n.projectPaths),S=w.path;d=w.source;let N=sr(S);if(l={serverUrl:y,token:n.token,workspaceId:ss(r.workspaceId),projectId:is(r.projectId),agentId:r.agentId?ns(r.agentId):void 0,cwd:S,projectEnv:N.env},r.agentKey==="claude"){let E=ga(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else if(r.agentKey==="codex"){let E=Ea(l);a=E.length>0,c="stdio",o=[...o,...E]}else if(r.agentKey==="qwen")a=ka(l),c=a?"stdio":void 0;else if(r.agentKey==="kimi"){let E=Sa(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else a=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"});if(rr("phase2a.verified_at")&&(w.source==="daemon_override"||w.source==="server_project")){let E=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(E,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(U=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(U)})})}if(rr("phase2a.auto_register")&&(w.source==="daemon_override"||w.source==="server_project"))try{let E=(0,dt.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(E.status===0&&E.stdout&&E.stdout.trim()){let U=E.stdout.trim();n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,oe(n);let pt=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(pt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:U})}).catch(Ds=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(Ds)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:U})}}catch(E){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(E)})}}let u=wa(r.agentKey,r.role,r.agentId);u.length>0&&(o=[...o,...u]);let h=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),p=Date.now(),f="",m=0,x=!1,b=!1;if(t.spawn(r.agentId,r.agentKey,s.binaryPath,o,h,g,y=>{m+=y.length;try{let w=Buffer.from(y,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!b&&Date.now()-p<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){b=!0;let S=ys(r.role);if(S){let N=S.replaceAll("{{PANEL_ID}}",r.agentId),E=aa(N),U=Buffer.from(E).toString("base64");t.write(r.agentId,U,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!f)try{let w=Buffer.from(y,"base64").toString("utf-8"),S=ha(w).replace(/\x00/g,"").trim();if(S&&(f=fa(S)),r.agentKey==="codex"&&!x&&Date.now()-p<2e4&&/included in your plan for free|let[’']s build together/i.test(S)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(S)){x=!0;let N=Buffer.from("y").toString("base64");t.write(r.agentId,N,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}e.readyState===I.OPEN&&e.send(JSON.stringify({type:"output",agentId:r.agentId,data:y}))},(y,w)=>{let S=Date.now()-p,N=S<=da;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:y,signal:w,uptimeMs:S,earlyExit:N,outputBytes:m,firstOutputSnippet:f||void 0}),N&&e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${y??"null"} signal=${w??"null"} snippet="${f||"no output"}"`})),e.readyState===I.OPEN&&e.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:y,signal:w}))},l))e.readyState===I.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:a,transport:a?c:void 0,projectId:l?.projectId,effectiveCwd:l?.cwd,cwdSource:d}));else{let w=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&oa(r.agentKey);e.readyState===I.OPEN&&(w?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ae.get(r.agentId)?.(),ae.delete(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"detect_agents":Dt(n.agentPaths).then(s=>{ut=s,e.readyState===I.OPEN&&e.send(JSON.stringify({type:"agents",list:s}))});break;case"dir_list":{let s=J.default.homedir(),i=(r.path||"~").replace(/^~/,s),o=$.default.resolve(i);if(o!==s&&!o.startsWith(s+$.default.sep)){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let l=F.default.readdirSync(o,{withFileTypes:!0}).filter(a=>a.isDirectory()&&!a.name.startsWith(".")).map(a=>({name:a.name,path:$.default.join(o,a.name)})).sort((a,c)=>a.name.localeCompare(c.name));e.readyState===I.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:l}))}catch(l){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:[],error:l instanceof Error?l.message:"Cannot read directory"}))}break}default:{let s=r}}}var Es="com.jerico.bridge-agent.plist",vs=D.default.join((0,Z.homedir)(),"Library","LaunchAgents"),ft=D.default.join(vs,Es),pr=D.default.join((0,Z.homedir)(),"bridge-daemon.log"),gr=D.default.join((0,Z.homedir)(),"bridge-daemon.err.log"),ce=D.default.join((0,Z.homedir)(),".bridge","daemon.lock");function Ca(){let r=[...process.env.npm_config_global_prefix?[D.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function Ia(){try{(0,T.mkdirSync)(D.default.dirname(ce),{recursive:!0})}catch{}if((0,T.existsSync)(ce))try{let{pid:r}=JSON.parse((0,T.readFileSync)(ce,"utf8"));if(r&&process.kill(r,0))return console.warn("[bridge] daemon.already.running",{pid:r,lock:ce}),!1;(0,T.unlinkSync)(ce)}catch{try{(0,T.unlinkSync)(ce)}catch{}}try{let r=(0,T.openSync)(ce,"wx");return(0,T.writeSync)(r,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,T.closeSync)(r),!0}catch{return!1}}function xs(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(D.default.join((0,Z.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(D.default.join((0,Z.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,le.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(D.default.dirname(i))}catch{}let n=D.default.join((0,Z.homedir)(),".vscode","extensions");try{let s=(0,le.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
365
- `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=D.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function Aa(r){try{(0,le.execSync)(`mkdir -p "${vs}"`,{stdio:"pipe"})}catch{}let e=xs(),t=`<?xml version="1.0" encoding="UTF-8"?>
364
+ `,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function Ea(r){try{let e=ht(),t=`{BRIDGE_SERVER_URL=${Be(r.serverUrl)},BRIDGE_TOKEN=${Be(r.token)},BRIDGE_WORKSPACE_ID=${Be(r.workspaceId)},BRIDGE_PROJECT_ID=${Be(r.projectId)},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${Be(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function va(r){try{return F.default.statSync(r).isDirectory()}catch{return!1}}function dr(r,e){try{return e(r)}catch{return!1}}function xa(r,e,t,n,s=va){let i=n?.[r];if(i&&dr(i,s))return{path:i,source:"local_override"};if(t){if(dr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}return e&&dr(e,s)?{path:e,source:"server_project"}:(console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:`Set projectPaths["${r}"] in ~/.jerico/settings.json`}),{path:J.default.homedir(),source:"fallback_home"})}function ka(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId}),!1;let e=ht(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,dt.spawnSync)("qwen",["mcp","remove","--scope","project","bridge"],t);let n=(0,dt.spawnSync)("qwen",["mcp","add","--scope","project","-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return n.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:n.status,stderr:(n.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var ut=[],hr=!1,_s=!1;function bs(){return hr}function ws(r){if(_s)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(_s=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let c=$.default.join(J.default.homedir(),".jerico","settings.json");F.default.existsSync(c)&&JSON.parse(F.default.readFileSync(c,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=ie(),t=(0,fr.createHash)("sha256").update(e.token).digest("hex"),n=null,s=null,i=null,o=0;function l(){s&&(clearTimeout(s),s=null),n=new C(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let c=n,d=null;c.on("open",()=>{hr=!0,console.log("[daemon] ws.connected",{server:e.server}),i=setInterval(()=>{c.readyState===C.OPEN&&c.ping()},la);let u=!ms();c.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:u,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:ia()})),Dt(e.agentPaths).then(h=>{ut=h,c.readyState===C.OPEN&&c.send(JSON.stringify({type:"agents",list:ut}))}),d=ps(h=>{c.readyState===C.OPEN&&c.send(JSON.stringify({type:"system_metrics",daemonId:t,...h}))})}),c.on("message",u=>{let h;try{h=JSON.parse(u.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}Oa(h,c,r,e)}),c.on("close",u=>{hr=!1,i&&(clearInterval(i),i=null),d?.(),d=null,u===1008?(o++,o>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:o})):o=0,!s&&(console.log("[daemon] ws.reconnecting",{attempt:1}),s=setTimeout(l,3e3))}),c.on("error",u=>{console.error("[daemon] ws.error",{message:u.message})})}function a(){i&&(clearInterval(i),i=null),ca();for(let c of ae.values())c();r.killAll(),n?.close()}process.on("SIGINT",()=>{a(),process.exit(0)}),process.on("SIGTERM",()=>{a(),process.exit(0)}),process.on("SIGHUP",()=>{a(),process.exit(0)}),process.on("uncaughtException",c=>{console.error("[daemon] uncaughtException",{error:c.message}),r.killAll(),process.exit(1)}),l()}function Oa(r,e,t,n){switch(r.type){case"spawn":{console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role});let s=ut.find(y=>y.key===r.agentKey);if(!s){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let i=fe.find(y=>y.key===r.agentKey),o=[];if(r.sessionId&&i?.resumeArgs)o=i.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,r.sessionId,(y,w,S)=>{e.readyState===C.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:y,usedPct:w,usedTokens:S,...ur}))})));else if(i?.assignSessionId){let y=crypto.randomUUID(),w=r.agentKey==="kimi"?"--session":"--session-id";o=[...i.spawnArgs??[],w,y],e.readyState===C.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:y})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:y})),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,y,(S,N,E)=>{e.readyState===C.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:N,usedTokens:E,...ur}))})))}else e.readyState===C.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let l,a=!1,c,d;if(r.projectId&&r.workspaceId){let y=pa(n.server),w=xa(r.projectId,r.cwd,r.daemonLocalPath,n.projectPaths),S=w.path;d=w.source;let N=sr(S);if(l={serverUrl:y,token:n.token,workspaceId:ss(r.workspaceId),projectId:is(r.projectId),agentId:r.agentId?ns(r.agentId):void 0,cwd:S,projectEnv:N.env},r.agentKey==="claude"){let E=ga(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else if(r.agentKey==="codex"){let E=Ea(l);a=E.length>0,c="stdio",o=[...o,...E]}else if(r.agentKey==="qwen")a=ka(l),c=a?"stdio":void 0;else if(r.agentKey==="kimi"){let E=Sa(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else a=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"});if(rr("phase2a.verified_at")&&(w.source==="daemon_override"||w.source==="server_project")){let E=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(E,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(U=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(U)})})}if(rr("phase2a.auto_register")&&(w.source==="daemon_override"||w.source==="server_project"))try{let E=(0,dt.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(E.status===0&&E.stdout&&E.stdout.trim()){let U=E.stdout.trim();n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,oe(n);let pt=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(pt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:U})}).catch(Ds=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(Ds)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:U})}}catch(E){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(E)})}}let u=wa(r.agentKey,r.role,r.agentId);u.length>0&&(o=[...o,...u]);let h=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),p=Date.now(),f="",m=0,x=!1,b=!1;if(t.spawn(r.agentId,r.agentKey,s.binaryPath,o,h,g,y=>{m+=y.length;try{let w=Buffer.from(y,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!b&&Date.now()-p<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){b=!0;let S=ys(r.role);if(S){let N=S.replaceAll("{{PANEL_ID}}",r.agentId),E=aa(N),U=Buffer.from(E).toString("base64");t.write(r.agentId,U,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!f)try{let w=Buffer.from(y,"base64").toString("utf-8"),S=ha(w).replace(/\x00/g,"").trim();if(S&&(f=fa(S)),r.agentKey==="codex"&&!x&&Date.now()-p<2e4&&/included in your plan for free|let[’']s build together/i.test(S)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(S)){x=!0;let N=Buffer.from("y").toString("base64");t.write(r.agentId,N,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}e.readyState===C.OPEN&&e.send(JSON.stringify({type:"output",agentId:r.agentId,data:y}))},(y,w)=>{let S=Date.now()-p,N=S<=da;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:y,signal:w,uptimeMs:S,earlyExit:N,outputBytes:m,firstOutputSnippet:f||void 0}),N&&e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${y??"null"} signal=${w??"null"} snippet="${f||"no output"}"`})),e.readyState===C.OPEN&&e.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:y,signal:w}))},l))e.readyState===C.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:a,transport:a?c:void 0,projectId:l?.projectId,effectiveCwd:l?.cwd,cwdSource:d}));else{let w=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&oa(r.agentKey);e.readyState===C.OPEN&&(w?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===C.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ae.get(r.agentId)?.(),ae.delete(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"detect_agents":Dt(n.agentPaths).then(s=>{ut=s,e.readyState===C.OPEN&&e.send(JSON.stringify({type:"agents",list:s}))});break;case"dir_list":{let s=J.default.homedir(),i=(r.path||"~").replace(/^~/,s),o=$.default.resolve(i);if(o!==s&&!o.startsWith(s+$.default.sep)){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let l=F.default.readdirSync(o,{withFileTypes:!0}).filter(a=>a.isDirectory()&&!a.name.startsWith(".")).map(a=>({name:a.name,path:$.default.join(o,a.name)})).sort((a,c)=>a.name.localeCompare(c.name));e.readyState===C.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:l}))}catch(l){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:[],error:l instanceof Error?l.message:"Cannot read directory"}))}break}default:{let s=r}}}var Es="com.jerico.bridge-agent.plist",vs=D.default.join((0,Z.homedir)(),"Library","LaunchAgents"),ft=D.default.join(vs,Es),pr=D.default.join((0,Z.homedir)(),"bridge-daemon.log"),gr=D.default.join((0,Z.homedir)(),"bridge-daemon.err.log"),ce=D.default.join((0,Z.homedir)(),".bridge","daemon.lock");function Ca(){let r=[...process.env.npm_config_global_prefix?[D.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function Ia(){try{(0,P.mkdirSync)(D.default.dirname(ce),{recursive:!0})}catch{}if((0,P.existsSync)(ce))try{let{pid:r}=JSON.parse((0,P.readFileSync)(ce,"utf8"));if(r&&process.kill(r,0))return console.warn("[bridge] daemon.already.running",{pid:r,lock:ce}),!1;(0,P.unlinkSync)(ce)}catch{try{(0,P.unlinkSync)(ce)}catch{}}try{let r=(0,P.openSync)(ce,"wx");return(0,P.writeSync)(r,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,P.closeSync)(r),!0}catch{return!1}}function xs(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(D.default.join((0,Z.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(D.default.join((0,Z.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,le.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(D.default.dirname(i))}catch{}let n=D.default.join((0,Z.homedir)(),".vscode","extensions");try{let s=(0,le.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
365
+ `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=D.default.join(n,i,"resources","native-binary");(0,P.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function Aa(r){try{(0,le.execSync)(`mkdir -p "${vs}"`,{stdio:"pipe"})}catch{}let e=xs(),t=`<?xml version="1.0" encoding="UTF-8"?>
366
366
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
367
367
  <plist version="1.0">
368
368
  <dict>
@@ -390,6 +390,6 @@ ${xe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_
390
390
  </dict>
391
391
  </dict>
392
392
  </plist>
393
- `;try{return(0,T.writeFileSync)(ft,t,"utf-8"),!0}catch(n){return console.warn("[bridge] launchd.plist.write.failed",{error:String(n)}),!1}}function Ta(){try{return(0,le.execSync)(`launchctl kickstart -kp gui/$(id -u)/${Es} 2>/dev/null; launchctl unload "${ft}" 2>/dev/null; launchctl load "${ft}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(r){let e=String(r);return{ok:!1,permissionDenied:e.includes("Permission denied")||e.includes("not allowed")||e.includes("bootstrap")}}}function Pa(r){try{let e=(0,le.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:xs(),BRIDGE_DAEMON:"1"}});e.unref(),setTimeout(()=>{e.pid&&process.kill(e.pid,0)?(console.log("[bridge] daemon.pid",{pid:e.pid}),console.log("[bridge] background.ok",{log:pr})):console.error("[bridge] background.failed \u2014 check: tail -f",{log:gr})},2e3)}catch(e){console.error("[bridge] background.spawn.failed",{error:String(e)})}}function Na(){let r=parseInt(process.env.HEALTH_PORT??"3101",10),e=Date.now()+6e3,t=()=>{if(Date.now()>e){console.error("[bridge] health.verify.timeout \u2014 daemon may have crashed immediately");return}try{let s=require("node:http").get(`http://127.0.0.1:${r}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(t,500)});s.on("error",()=>{setTimeout(t,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(t,500)})}catch{setTimeout(t,500)}};setTimeout(t,1e3)}function Ra(){let r=new Ve;ws(r);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,Ss.createServer)((n,s)=>{let i=bs(),o=JSON.stringify({status:"ok",connected:i,uptime:process.uptime()});s.writeHead(i?200:503,{"Content-Type":"application/json"}),s.end(o)});t.listen(e,"127.0.0.1",()=>{console.log(`[bridge] health. listening on 127.0.0.1:${e}`)}),t.on("error",n=>{console.error("[bridge] health.error",{error:n.message})})}function ks(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(console.log("[bridge] Starting bridge-agent daemon..."),r){Ra();return}Ia()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=Ca(),t=Aa(e),{ok:n,permissionDenied:s}=t?Ta():{ok:!1,permissionDenied:!1};if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:pr,err:gr}),Na(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${ft}"`),console.warn(`[bridge] Falling back to background process...
394
- `)),Pa(e),process.exit(0)}var Os=_(require("https")),Cs=_(require("http"));Ee();function Da(r){return(r??"").trim()}async function Is(r,e=!1,t){console.log("[bridge] Starting auth flow..."),console.log(`[bridge] Server: ${r}`),console.log("[bridge] Open this URL to generate a daemon token:"),console.log(` ${r}/connect`);let n=Da(t);n&&console.log("[bridge] Using token from --token"),e&&(n?console.log("[bridge] --no-browser ignored because --token is provided."):(console.log("[bridge] --no-browser: exiting after printing URL."),process.exit(0)));let s=n;s||(console.log(),console.log("[bridge] After authenticating, paste your token here:"),s=await ja()),s||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await La(r,s)||(console.error("[bridge] Token validation failed. Please try again."),process.exit(1));let l=r.replace(/^https?:\/\//,a=>a.startsWith("https")?"wss://":"ws://").replace(/\/?$/,"/ws/daemon");oe({server:l,token:s,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function ja(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
395
- `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function La(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?Os.default:Cs.default,o={hostname:n.hostname,port:n.port||(s?443:80),path:n.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}},l=i.request(o,a=>{t(a.statusCode===200)});l.on("error",()=>t(!1)),l.end()})}var As=_(require("https")),Ts=_(require("http")),mr=_(require("fs")),_r=_(require("path")),Ps=require("node:crypto");Ee();function Ma(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Ns(r,e,t){let n=ie(),s=(0,Ps.createHash)("sha256").update(n.token).digest("hex"),i=Ma(n.server),o=_r.default.resolve(t);_r.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),mr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),mr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let a=new URL(`/api/workspaces/${r}/projects/${e}/machine-paths`,i),c=a.protocol==="https:",d=c?As.default:Ts.default;n.projectPaths={...n.projectPaths??{},[e]:o},oe(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o}),h=await new Promise((g,p)=>{let f=d.request({hostname:a.hostname,port:a.port||(c?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let x="";m.on("data",b=>{x+=b}),m.on("end",()=>{if(m.statusCode===200)g(200);else{try{let b=JSON.parse(x);console.error("[bridge] link-project failed:",b.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}g(m.statusCode??0)}})});f.on("error",m=>{p(m)}),f.write(u),f.end()});h===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:h}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}Ee();function $a(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Rs(){let r=ie(),e=$a(r.server),t=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:"{}"});t.ok||(console.error(`[cli] cleanup-orphans: HTTP ${t.status}`),process.exit(1));let{deleted:n}=await t.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var de=new Pr;de.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.3.5");de.command("start").description("Start the bridge-agent daemon").action(()=>{ks()});de.command("auth").description("Authenticate with Bridge server").requiredOption("-s, --server <url>","Server URL (e.g., https://your-server.com)").option("-t, --token <token>","Use token non-interactively").option("--no-browser","Print auth URL without opening browser or interactive prompt").action(r=>{Is(r.server,!r.browser,r.token)});de.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{Ns(r,e,t)});de.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{Rs()});de.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Ee(),as)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});de.parse();
393
+ `;try{return(0,P.writeFileSync)(ft,t,"utf-8"),!0}catch(n){return console.warn("[bridge] launchd.plist.write.failed",{error:String(n)}),!1}}function Pa(){try{return(0,le.execSync)(`launchctl kickstart -kp gui/$(id -u)/${Es} 2>/dev/null; launchctl unload "${ft}" 2>/dev/null; launchctl load "${ft}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(r){let e=String(r);return{ok:!1,permissionDenied:e.includes("Permission denied")||e.includes("not allowed")||e.includes("bootstrap")}}}function Ta(r){try{let e=(0,le.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:xs(),BRIDGE_DAEMON:"1"}});e.unref(),setTimeout(()=>{e.pid&&process.kill(e.pid,0)?(console.log("[bridge] daemon.pid",{pid:e.pid}),console.log("[bridge] background.ok",{log:pr})):console.error("[bridge] background.failed \u2014 check: tail -f",{log:gr})},2e3)}catch(e){console.error("[bridge] background.spawn.failed",{error:String(e)})}}function Na(){let r=parseInt(process.env.HEALTH_PORT??"3101",10),e=Date.now()+6e3,t=()=>{if(Date.now()>e){console.error("[bridge] health.verify.timeout \u2014 daemon may have crashed immediately");return}try{let s=require("node:http").get(`http://127.0.0.1:${r}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(t,500)});s.on("error",()=>{setTimeout(t,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(t,500)})}catch{setTimeout(t,500)}};setTimeout(t,1e3)}function Ra(){let r=new Ve;ws(r);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,Ss.createServer)((n,s)=>{let i=bs(),o=JSON.stringify({status:"ok",connected:i,uptime:process.uptime()});s.writeHead(i?200:503,{"Content-Type":"application/json"}),s.end(o)});t.listen(e,"127.0.0.1",()=>{console.log(`[bridge] health. listening on 127.0.0.1:${e}`)}),t.on("error",n=>{console.error("[bridge] health.error",{error:n.message})})}function ks(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(console.log("[bridge] Starting bridge-agent daemon..."),r){Ra();return}Ia()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=Ca(),t=Aa(e),{ok:n,permissionDenied:s}=t?Pa():{ok:!1,permissionDenied:!1};if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:pr,err:gr}),Na(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${ft}"`),console.warn(`[bridge] Falling back to background process...
394
+ `)),Ta(e),process.exit(0)}var Os=_(require("https")),Cs=_(require("http"));Ee();function Da(r){return(r??"").trim()}async function Is(r,e=!1,t){console.log("[bridge] Starting auth flow..."),console.log(`[bridge] Server: ${r}`),console.log("[bridge] Open this URL to generate a daemon token:"),console.log(` ${r}/connect`);let n=Da(t);n&&console.log("[bridge] Using token from --token"),e&&(n?console.log("[bridge] --no-browser ignored because --token is provided."):(console.log("[bridge] --no-browser: exiting after printing URL."),process.exit(0)));let s=n;s||(console.log(),console.log("[bridge] After authenticating, paste your token here:"),s=await ja()),s||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await La(r,s)||(console.error("[bridge] Token validation failed. Please try again."),process.exit(1));let l=r.replace(/^https?:\/\//,a=>a.startsWith("https")?"wss://":"ws://").replace(/\/?$/,"/ws/daemon");oe({server:l,token:s,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function ja(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
395
+ `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function La(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?Os.default:Cs.default,o={hostname:n.hostname,port:n.port||(s?443:80),path:n.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}},l=i.request(o,a=>{t(a.statusCode===200)});l.on("error",()=>t(!1)),l.end()})}var As=_(require("https")),Ps=_(require("http")),mr=_(require("fs")),_r=_(require("path")),Ts=require("node:crypto");Ee();function Ma(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Ns(r,e,t){let n=ie(),s=(0,Ts.createHash)("sha256").update(n.token).digest("hex"),i=Ma(n.server),o=_r.default.resolve(t);_r.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),mr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),mr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let a=new URL(`/api/workspaces/${r}/projects/${e}/machine-paths`,i),c=a.protocol==="https:",d=c?As.default:Ps.default;n.projectPaths={...n.projectPaths??{},[e]:o},oe(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o}),h=await new Promise((g,p)=>{let f=d.request({hostname:a.hostname,port:a.port||(c?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let x="";m.on("data",b=>{x+=b}),m.on("end",()=>{if(m.statusCode===200)g(200);else{try{let b=JSON.parse(x);console.error("[bridge] link-project failed:",b.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}g(m.statusCode??0)}})});f.on("error",m=>{p(m)}),f.write(u),f.end()});h===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:h}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}Ee();function $a(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Rs(){let r=ie(),e=$a(r.server),t=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:"{}"});t.ok||(console.error(`[cli] cleanup-orphans: HTTP ${t.status}`),process.exit(1));let{deleted:n}=await t.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var de=new Tr;de.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.3.6");de.command("start").description("Start the bridge-agent daemon").action(()=>{ks()});de.command("auth").description("Authenticate with Bridge server").requiredOption("-s, --server <url>","Server URL (e.g., https://your-server.com)").option("-t, --token <token>","Use token non-interactively").option("--no-browser","Print auth URL without opening browser or interactive prompt").action(r=>{Is(r.server,!r.browser,r.token)});de.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{Ns(r,e,t)});de.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{Rs()});de.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Ee(),as)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});de.parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bridge-agent",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Bridge local agent — connects your AI tools to Jerico",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",