bridge-agent 0.10.3 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +32 -32
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var Li=Object.create;var Gt=Object.defineProperty;var Bi=Object.getOwnPropertyDescriptor;var Mi=Object.getOwnPropertyNames;var $i=Object.getPrototypeOf,Ui=Object.prototype.hasOwnProperty;var
|
|
3
|
-
`).replace(/^/gm," ".repeat(i))}let l=[`Usage: ${r.commandUsage(e)}`,""],d=r.commandDescription(e);d.length>0&&(l=l.concat([r.wrap(d,s,0),""]));let u=r.visibleArguments(e).map(
|
|
2
|
+
"use strict";var Li=Object.create;var Gt=Object.defineProperty;var Bi=Object.getOwnPropertyDescriptor;var Mi=Object.getOwnPropertyNames;var $i=Object.getPrototypeOf,Ui=Object.prototype.hasOwnProperty;var en=(t,e)=>()=>(t&&(e=t(t=0)),e);var A=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Wi=(t,e)=>{for(var r in e)Gt(t,r,{get:e[r],enumerable:!0})},Gi=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Mi(e))!Ui.call(t,s)&&s!==r&&Gt(t,s,{get:()=>e[s],enumerable:!(n=Bi(e,s))||n.enumerable});return t};var _=(t,e,r)=>(r=t!=null?Li($i(t)):{},Gi(e||!t||!t.__esModule?Gt(r,"default",{value:t,enumerable:!0}):r,t));var Fe=A(Ht=>{var dt=class extends Error{constructor(e,r,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=e,this.nestedError=void 0}},Ft=class extends dt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Ht.CommanderError=dt;Ht.InvalidArgumentError=Ft});var ut=A(Vt=>{var{InvalidArgumentError:Fi}=Fe(),qt=class{constructor(e,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,r){return r===this.defaultValue||!Array.isArray(r)?[e]:r.concat(e)}default(e,r){return this.defaultValue=e,this.defaultValueDescription=r,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(r,n)=>{if(!this.argChoices.includes(r))throw new Fi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,n):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Hi(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}Vt.Argument=qt;Vt.humanReadableArgName=Hi});var Jt=A(tn=>{var{humanReadableArgName:qi}=ut(),Kt=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let r=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&r.push(n),this.sortSubcommands&&r.sort((s,i)=>s.name().localeCompare(i.name())),r}compareOptions(e,r){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(r))}visibleOptions(e){let r=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!s&&!i?r.push(n):n.long&&!i?r.push(e.createOption(n.long,n.description)):n.short&&!s&&r.push(e.createOption(n.short,n.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let r=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);r.push(...s)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(r=>{r.description=r.description||e._argsDescription[r.name()]||""}),e.registeredArguments.find(r=>r.description)?e.registeredArguments:[]}subcommandTerm(e){let r=e.registeredArguments.map(n=>qi(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,r){return r.visibleCommands(e).reduce((n,s)=>Math.max(n,r.subcommandTerm(s).length),0)}longestOptionTermLength(e,r){return r.visibleOptions(e).reduce((n,s)=>Math.max(n,r.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,r){return r.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,r.optionTerm(s).length),0)}longestArgumentTermLength(e,r){return r.visibleArguments(e).reduce((n,s)=>Math.max(n,r.argumentTerm(s).length),0)}commandUsage(e){let r=e._name;e._aliases[0]&&(r=r+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+r+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let r=[];return e.argChoices&&r.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&r.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&r.push(`env: ${e.envVar}`),r.length>0?`${e.description} (${r.join(", ")})`:e.description}argumentDescription(e){let r=[];if(e.argChoices&&r.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),r.length>0){let n=`(${r.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,r){let n=r.padWidth(e,r),s=r.helpWidth||80,i=2,o=2;function a(h,f){if(f){let b=`${h.padEnd(n+o)}${f}`;return r.wrap(b,s-i,n+o)}return h}function c(h){return h.join(`
|
|
3
|
+
`).replace(/^/gm," ".repeat(i))}let l=[`Usage: ${r.commandUsage(e)}`,""],d=r.commandDescription(e);d.length>0&&(l=l.concat([r.wrap(d,s,0),""]));let u=r.visibleArguments(e).map(h=>a(r.argumentTerm(h),r.argumentDescription(h)));u.length>0&&(l=l.concat(["Arguments:",c(u),""]));let p=r.visibleOptions(e).map(h=>a(r.optionTerm(h),r.optionDescription(h)));if(p.length>0&&(l=l.concat(["Options:",c(p),""])),this.showGlobalOptions){let h=r.visibleGlobalOptions(e).map(f=>a(r.optionTerm(f),r.optionDescription(f)));h.length>0&&(l=l.concat(["Global Options:",c(h),""]))}let g=r.visibleCommands(e).map(h=>a(r.subcommandTerm(h),r.subcommandDescription(h)));return g.length>0&&(l=l.concat(["Commands:",c(g),""])),l.join(`
|
|
4
4
|
`)}padWidth(e,r){return Math.max(r.longestOptionTermLength(e,r),r.longestGlobalOptionTermLength(e,r),r.longestSubcommandTermLength(e,r),r.longestArgumentTermLength(e,r))}wrap(e,r,n,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let a=r-n;if(a<s)return e;let c=e.slice(0,n),l=e.slice(n).replace(`\r
|
|
5
5
|
`,`
|
|
6
6
|
`),d=" ".repeat(n),p="\\s\u200B",g=new RegExp(`
|
|
7
|
-
|.{1,${a-1}}([${p}]|$)|[^${p}]+?([${p}]|$)`,"g"),
|
|
8
|
-
`?"":(b>0?d:"")+
|
|
9
|
-
`)}};
|
|
7
|
+
|.{1,${a-1}}([${p}]|$)|[^${p}]+?([${p}]|$)`,"g"),h=l.match(g)||[];return c+h.map((f,b)=>f===`
|
|
8
|
+
`?"":(b>0?d:"")+f.trimEnd()).join(`
|
|
9
|
+
`)}};tn.Help=Kt});var Qt=A(Xt=>{var{InvalidArgumentError:Vi}=Fe(),Yt=class{constructor(e,r){this.flags=e,this.description=r||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Ji(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,r){return this.defaultValue=e,this.defaultValueDescription=r,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let r=e;return typeof e=="string"&&(r={[e]:!0}),this.implied=Object.assign(this.implied||{},r),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,r){return r===this.defaultValue||!Array.isArray(r)?[e]:r.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(r,n)=>{if(!this.argChoices.includes(r))throw new Vi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,n):r},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ki(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},zt=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(r=>{r.negate?this.negativeOptions.set(r.attributeName(),r):this.positiveOptions.set(r.attributeName(),r)}),this.negativeOptions.forEach((r,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,r){let n=r.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return r.negate===(i===e)}};function Ki(t){return t.split("-").reduce((e,r)=>e+r[0].toUpperCase()+r.slice(1))}function Ji(t){let e,r,n=t.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),r=n.shift(),!e&&/^-[^-]$/.test(r)&&(e=r,r=void 0),{shortFlag:e,longFlag:r}}Xt.Option=Yt;Xt.DualOptions=zt});var nn=A(rn=>{function Yi(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);let r=[];for(let n=0;n<=t.length;n++)r[n]=[n];for(let n=0;n<=e.length;n++)r[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=t.length;s++){let i=1;t[s-1]===e[n-1]?i=0:i=1,r[s][n]=Math.min(r[s-1][n]+1,r[s][n-1]+1,r[s-1][n-1]+i),s>1&&n>1&&t[s-1]===e[n-2]&&t[s-2]===e[n-1]&&(r[s][n]=Math.min(r[s][n],r[s-2][n-2]+1))}return r[t.length][e.length]}function zi(t,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let r=t.startsWith("--");r&&(t=t.slice(2),e=e.map(o=>o.slice(2)));let n=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=Yi(t,o),c=Math.max(t.length,o.length);(c-a)/c>i&&(a<s?(s=a,n=[o]):a===s&&n.push(o))}),n.sort((o,a)=>o.localeCompare(a)),r&&(n=n.map(o=>`--${o}`)),n.length>1?`
|
|
10
10
|
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
11
|
-
(Did you mean ${n[0]}?)`:""}
|
|
11
|
+
(Did you mean ${n[0]}?)`:""}rn.suggestSimilar=zi});var ln=A(cn=>{var Xi=require("node:events").EventEmitter,Zt=require("node:child_process"),Y=require("node:path"),er=require("node:fs"),T=require("node:process"),{Argument:Qi,humanReadableArgName:Zi}=ut(),{CommanderError:tr}=Fe(),{Help:eo}=Jt(),{Option:sn,DualOptions:to}=Qt(),{suggestSimilar:on}=nn(),rr=class t extends Xi{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:r=>T.stdout.write(r),writeErr:r=>T.stderr.write(r),getOutHelpWidth:()=>T.stdout.isTTY?T.stdout.columns:void 0,getErrHelpWidth:()=>T.stderr.isTTY?T.stderr.columns:void 0,outputError:(r,n)=>n(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let r=this;r;r=r.parent)e.push(r);return e}command(e,r,n){let s=r,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return s&&(c.description(s),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),s?this:c}createCommand(e){return new t(e)}createHelp(){return Object.assign(new eo,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,r){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
12
12
|
- specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,r){return new Qi(e,r)}argument(e,r,n,s){let i=this.createArgument(e,r);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(e){let r=this.registeredArguments.slice(-1)[0];if(r&&r.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,r){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=r??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,r){return typeof e!="object"?(this.helpCommand(e,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,r){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
13
|
-
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(e,r,n){this._exitCallback&&this._exitCallback(new tr(e,r,n)),T.exit(e)}action(e){let r=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=r,this}createOption(e,r){return new
|
|
14
|
-
- already used by option '${r.flags}'`)}this.options.push(e)}_registerCommand(e){let r=s=>[s.name()].concat(s.aliases()),n=r(e).find(s=>this._findCommand(s));if(n){let s=r(this._findCommand(n)).join("|"),i=r(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let r=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,o):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+r,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+r,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,r,n,s,i){if(typeof r=="object"&&r instanceof
|
|
13
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(e,r,n){this._exitCallback&&this._exitCallback(new tr(e,r,n)),T.exit(e)}action(e){let r=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=r,this}createOption(e,r){return new sn(e,r)}_callParseArg(e,r,n,s){try{return e.parseArg(r,n)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let r=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(r){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
|
|
14
|
+
- already used by option '${r.flags}'`)}this.options.push(e)}_registerCommand(e){let r=s=>[s.name()].concat(s.aliases()),n=r(e).find(s=>this._findCommand(s));if(n){let s=r(this._findCommand(n)).join("|"),i=r(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let r=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,o):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+r,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+r,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,r,n,s,i){if(typeof r=="object"&&r instanceof sn)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(r,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(c,l)=>{let d=a.exec(c);return d?d[0]:l},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,r,n,s){return this._optionEx({},e,r,n,s)}requiredOption(e,r,n,s){return this._optionEx({mandatory:!0},e,r,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,r){return this.setOptionValueWithSource(e,r,void 0)}setOptionValueWithSource(e,r,n){return this._storeOptionsAsProperties?this[e]=r:this._optionValues[e]=r,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let r;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(r=n.getOptionValueSource(e))}),r}_prepareUserArgs(e,r){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},e===void 0&&r.from===void 0){T.versions?.electron&&(r.from="electron");let s=T.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(r.from="eval")}e===void 0&&(e=T.argv),this.rawArgs=e.slice();let n;switch(r.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":T.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${r.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,r){let n=this._prepareUserArgs(e,r);return this._parseCommand([],n),this}async parseAsync(e,r){let n=this._prepareUserArgs(e,r);return await this._parseCommand([],n),this}_executeSubCommand(e,r){r=r.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(d,u){let p=Y.resolve(d,u);if(er.existsSync(p))return p;if(s.includes(Y.extname(u)))return;let g=s.find(h=>er.existsSync(`${p}${h}`));if(g)return`${p}${g}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=er.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=Y.resolve(Y.dirname(d),a)}if(a){let d=i(a,o);if(!d&&!e._executableFile&&this._scriptPath){let u=Y.basename(this._scriptPath,Y.extname(this._scriptPath));u!==this._name&&(d=i(a,`${u}-${e._name}`))}o=d||o}n=s.includes(Y.extname(o));let c;T.platform!=="win32"?n?(r.unshift(o),r=an(T.execArgv).concat(r),c=Zt.spawn(T.argv[0],r,{stdio:"inherit"})):c=Zt.spawn(o,r,{stdio:"inherit"}):(r.unshift(o),r=an(T.execArgv).concat(r),c=Zt.spawn(T.execPath,r,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{T.on(u,()=>{c.killed===!1&&c.exitCode===null&&c.kill(u)})});let l=this._exitCallback;c.on("close",d=>{d=d??1,l?l(new tr(d,"commander.executeSubCommandAsync","(close)")):T.exit(d)}),c.on("error",d=>{if(d.code==="ENOENT"){let u=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",p=`'${o}' does not exist
|
|
15
15
|
- if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
16
16
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
17
17
|
- ${u}`;throw new Error(p)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)T.exit(1);else{let u=new tr(1,"commander.executeSubCommandAsync","(error)");u.nestedError=d,l(u)}}),this.runningCommand=c}_dispatchSubcommand(e,r,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,r.concat(n));else return s._parseCommand(r,n)}),i}_dispatchHelpCommand(e){e||this.help();let r=this._findCommand(e);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,r)=>{e.required&&this.args[r]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,a)}return o};this._checkNumberOfArguments();let r=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,a)=>e(n,a,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),r[s]=i}),this.processedArgs=r}_chainOrCall(e,r){return e&&e.then&&typeof e.then=="function"?e.then(()=>r()):r()}_chainOrCallHooks(e,r){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[r]!==void 0).forEach(i=>{i._lifeCycleHooks[r].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),r==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,r,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,r))}),s}_parseCommand(e,r){let n=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),r=n.unknown,this.args=e.concat(r),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),r);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,e,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,r)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,r);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,r);this.listenerCount("command:*")?this.emit("command:*",e,r):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(r=>r._name===e||r._aliases.includes(e))}_findOption(e){return this.options.find(r=>r.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(r=>{r.mandatory&&e.getOptionValue(r.attributeName())===void 0&&e.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let r=[],n=[],s=r,i=e.slice();function o(c){return c.length>1&&c[0]==="-"}let a=null;for(;i.length;){let c=i.shift();if(c==="--"){s===n&&s.push(c),s.push(...i);break}if(a&&!o(c)){this.emit(`option:${a.name()}`,c);continue}if(a=null,o(c)){let l=this._findOption(c);if(l){if(l.required){let d=i.shift();d===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,d)}else if(l.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${l.name()}`,d)}else this.emit(`option:${l.name()}`);a=l.variadic?l:null;continue}}if(c.length>2&&c[0]==="-"&&c[1]!=="-"){let l=this._findOption(`-${c[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,c.slice(2)):(this.emit(`option:${l.name()}`),i.unshift(`-${c.slice(2)}`));continue}}if(/^--[^=]+=/.test(c)){let l=c.indexOf("="),d=this._findOption(c.slice(0,l));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,c.slice(l+1));continue}}if(o(c)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&n.length===0){if(this._findCommand(c)){r.push(c),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){r.push(c),i.length>0&&r.push(...i);break}else if(this._defaultCommandName){n.push(c),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(c),i.length>0&&s.push(...i);break}s.push(c)}return{operands:r,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},r=this.options.length;for(let n=0;n<r;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,r)=>Object.assign(e,r.opts()),{})}error(e,r){this._outputConfiguration.outputError(`${e}
|
|
18
18
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
20
|
-
`),this.outputHelp({error:!0}));let n=r||{},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 T.env){let r=e.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,T.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new to(this.options),r=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&r(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!r(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let r=`error: missing required argument '${e}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(e){let r=`error: option '${e.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let r=`error: required option '${e.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,r){let n=o=>{let a=o.attributeName(),c=this.getOptionValue(a),l=this.options.find(u=>u.negate&&a===u.attributeName()),d=this.options.find(u=>!u.negate&&a===u.attributeName());return l&&(l.presetArg===void 0&&c===!1||l.presetArg!==void 0&&c===l.presetArg)?l:d||o},s=o=>{let a=n(o),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(r)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let r="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);r=
|
|
20
|
+
`),this.outputHelp({error:!0}));let n=r||{},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 T.env){let r=e.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,T.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new to(this.options),r=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&r(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!r(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let r=`error: missing required argument '${e}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(e){let r=`error: option '${e.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let r=`error: required option '${e.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,r){let n=o=>{let a=o.attributeName(),c=this.getOptionValue(a),l=this.options.find(u=>u.negate&&a===u.attributeName()),d=this.options.find(u=>!u.negate&&a===u.attributeName());return l&&(l.presetArg===void 0&&c===!1||l.presetArg!==void 0&&c===l.presetArg)?l:d||o},s=o=>{let a=n(o),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(r)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let r="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);r=on(e,s)}let n=`error: unknown option '${e}'${r}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let r=this.registeredArguments.length,n=r===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],r="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),r=on(e,s)}let n=`error: unknown command '${e}'${r}`;this.error(n,{code:"commander.unknownCommand"})}version(e,r,n){if(e===void 0)return this._version;this._version=e,r=r||"-V, --version",n=n||"output the version number";let s=this.createOption(r,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,r){return e===void 0&&r===void 0?this._description:(this._description=e,r&&(this._argsDescription=r),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let r=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(r=this.commands[this.commands.length-1]),e===r._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 r._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(r=>this.alias(r)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let r=this.registeredArguments.map(n=>Zi(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=Y.basename(e,Y.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let r=this.createHelp();return r.helpWidth===void 0&&(r.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),r.formatHelp(this,r)}_getHelpContext(e){e=e||{};let r={error:!!e.error},n;return r.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),r.write=e.write||n,r.command=this,r}outputHelp(e){let r;typeof e=="function"&&(r=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(r&&(s=r(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,r){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",r=r??"display help for command",this._helpOption=this.createOption(e,r),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 r=T.exitCode||0;r===0&&e&&typeof e!="function"&&e.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(e,r){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 r=="function"?o=r({error:i.error,command:i.command}):o=r,o&&i.write(`${o}
|
|
23
|
-
`)}),this}_outputHelpIfRequested(e){let r=this._getHelpOption();r&&e.find(s=>r.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function on(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let r,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?r=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=i[1],n=i[3],s=i[4]),r&&s!=="0"?`${r}=${n}:${parseInt(s)+1}`:e})}an.Command=rr});var pn=A(F=>{var{Argument:ln}=ut(),{Command:nr}=cn(),{CommanderError:ro,InvalidArgumentError:dn}=Fe(),{Help:no}=Jt(),{Option:un}=Qt();F.program=new nr;F.createCommand=t=>new nr(t);F.createOption=(t,e)=>new un(t,e);F.createArgument=(t,e)=>new ln(t,e);F.Command=nr;F.Option=un;F.Argument=ln;F.Help=no;F.CommanderError=ro;F.InvalidArgumentError=dn;F.InvalidOptionArgumentError=dn});var wn=A(L=>{"use strict";var sr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),so=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sync=t.isexe=void 0;var e=require("node:fs"),r=require("node:fs/promises"),n=async(a,c={})=>{let{ignoreErrors:l=!1}=c;try{return i(await(0,r.stat)(a),c)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};t.isexe=n;var s=(a,c={})=>{let{ignoreErrors:l=!1}=c;try{return i((0,e.statSync)(a),c)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};t.sync=s;var i=(a,c)=>a.isFile()&&o(a,c),o=(a,c)=>{let l=c.uid??process.getuid?.(),d=c.groups??process.getgroups?.()??[],u=c.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let p=new Set([u,...d]),g=a.mode,f=a.uid,h=a.gid,b=parseInt("100",8),y=parseInt("010",8),w=parseInt("001",8),D=b|y;return!!(g&w||g&y&&p.has(h)||g&b&&f===l||g&D&&l===0)}}),io=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sync=t.isexe=void 0;var e=require("node:fs"),r=require("node:fs/promises"),n=require("node:path"),s=async(c,l={})=>{let{ignoreErrors:d=!1}=l;try{return a(await(0,r.stat)(c),c,l)}catch(u){let p=u;if(d||p.code==="EACCES")return!1;throw p}};t.isexe=s;var i=(c,l={})=>{let{ignoreErrors:d=!1}=l;try{return a((0,e.statSync)(c),c,l)}catch(u){let p=u;if(d||p.code==="EACCES")return!1;throw p}};t.sync=i;var o=(c,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let p of u){let g=p.toLowerCase(),f=c.substring(c.length-g.length).toLowerCase();if(g&&f===g)return!0}return!1},a=(c,l,d)=>c.isFile()&&o(l,d)}),oo=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})}),gn=L&&L.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),ao=L&&L.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mn=L&&L.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),s=0;s<n.length;s++)n[s]!=="default"&&gn(r,e,n[s]);return ao(r,e),r}})(),co=L&&L.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&gn(e,t,r)};Object.defineProperty(L,"__esModule",{value:!0});L.sync=L.isexe=L.posix=L.win32=void 0;var _n=mn(so());L.posix=_n;var yn=mn(io());L.win32=yn;co(oo(),L);var lo=process.env._ISEXE_TEST_PLATFORM_||process.platform,bn=lo==="win32"?yn:_n;L.isexe=bn.isexe;L.sync=bn.sync});var An=A((ml,Pn)=>{var{isexe:uo,sync:po}=wn(),{join:ho,delimiter:fo,sep:Sn,posix:vn}=require("path"),En=process.platform==="win32",kn=new RegExp(`[${vn.sep}${Sn===vn.sep?"":Sn}]`.replace(/(\\)/g,"\\$1")),go=new RegExp(`^\\.${kn.source}`),In=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),xn=(t,{path:e=process.env.PATH,pathExt:r=process.env.PATHEXT,delimiter:n=fo})=>{let s=t.match(kn)?[""]:[...En?[process.cwd()]:[],...(e||"").split(n)];if(En){let i=r||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(a=>[a,a.toLowerCase()]);return t.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},On=(t,e)=>{let r=/^".*"$/.test(t)?t.slice(1,-1):t;return(!r&&go.test(e)?e.slice(0,2):"")+ho(r,e)},Cn=async(t,e={})=>{let{pathEnv:r,pathExt:n,pathExtExe:s}=xn(t,e),i=[];for(let o of r){let a=On(o,t);for(let c of n){let l=a+c;if(await uo(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw In(t)},mo=(t,e={})=>{let{pathEnv:r,pathExt:n,pathExtExe:s}=xn(t,e),i=[];for(let o of r){let a=On(o,t);for(let c of n){let l=a+c;if(po(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw In(t)};Pn.exports=Cn;Cn.sync=mo});var z=A((wl,Bn)=>{"use strict";var jn=["nodebuffer","arraybuffer","fragments"],Ln=typeof Blob<"u";Ln&&jn.push("blob");Bn.exports={BINARY_TYPES:jn,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Ln,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ve=A((Sl,ft)=>{"use strict";var{EMPTY_BUFFER:wo}=z(),cr=Buffer[Symbol.species];function So(t,e){if(t.length===0)return wo;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),n=0;for(let s=0;s<t.length;s++){let i=t[s];r.set(i,n),n+=i.length}return n<e?new cr(r.buffer,r.byteOffset,n):r}function Mn(t,e,r,n,s){for(let i=0;i<s;i++)r[n+i]=t[i]^e[i&3]}function $n(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3]}function vo(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function lr(t){if(lr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new cr(t):ArrayBuffer.isView(t)?e=new cr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),lr.readOnly=!1),e}ft.exports={concat:So,mask:Mn,toArrayBuffer:vo,toBuffer:lr,unmask:$n};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");ft.exports.mask=function(e,r,n,s,i){i<48?Mn(e,r,n,s,i):t.mask(e,r,n,s,i)},ft.exports.unmask=function(e,r){e.length<32?$n(e,r):t.unmask(e,r)}}catch{}});var Gn=A((vl,Wn)=>{"use strict";var Un=Symbol("kDone"),dr=Symbol("kRun"),ur=class{constructor(e){this[Un]=()=>{this.pending--,this[dr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[dr]()}[dr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Un])}}};Wn.exports=ur});var xe=A((El,Vn)=>{"use strict";var Ke=require("zlib"),Fn=Ve(),Eo=Gn(),{kStatusCode:Hn}=z(),ko=Buffer[Symbol.species],Io=Buffer.from([0,0,255,255]),mt=Symbol("permessage-deflate"),X=Symbol("total-length"),ke=Symbol("callback"),te=Symbol("buffers"),Ie=Symbol("error"),gt,pr=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,!gt){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;gt=new Eo(r)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[ke];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let r=this._options,n=e.find(s=>!(r.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>s.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(n.server_no_context_takeover=!0),r.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(n.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?n.client_max_window_bits=r.clientMaxWindowBits:(n.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(n=>{let s=r[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}"`);r[n]=s})}),e}decompress(e,r,n){gt.add(s=>{this._decompress(e,r,(i,o)=>{s(),n(i,o)})})}compress(e,r,n){gt.add(s=>{this._compress(e,r,(i,o)=>{s(),n(i,o)})})}_decompress(e,r,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ke.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ke.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[mt]=this,this._inflate[X]=0,this._inflate[te]=[],this._inflate.on("error",Oo),this._inflate.on("data",qn)}this._inflate[ke]=n,this._inflate.write(e),r&&this._inflate.write(Io),this._inflate.flush(()=>{let i=this._inflate[Ie];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Fn.concat(this._inflate[te],this._inflate[X]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[X]=0,this._inflate[te]=[],r&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,r,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ke.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ke.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[X]=0,this._deflate[te]=[],this._deflate.on("data",xo)}this._deflate[ke]=n,this._deflate.write(e),this._deflate.flush(Ke.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Fn.concat(this._deflate[te],this._deflate[X]);r&&(i=new ko(i.buffer,i.byteOffset,i.length-4)),this._deflate[ke]=null,this._deflate[X]=0,this._deflate[te]=[],r&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Vn.exports=pr;function xo(t){this[te].push(t),this[X]+=t.length}function qn(t){if(this[X]+=t.length,this[mt]._maxPayload<1||this[X]<=this[mt]._maxPayload){this[te].push(t);return}this[Ie]=new RangeError("Max payload size exceeded"),this[Ie].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Ie][Hn]=1009,this.removeListener("data",qn),this.reset()}function Oo(t){if(this[mt]._inflate=null,this[Ie]){this[ke](this[Ie]);return}t[Hn]=1007,this[ke](t)}});var Oe=A((kl,_t)=>{"use strict";var{isUtf8:Kn}=require("buffer"),{hasBlob:Co}=z(),Po=[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 Ao(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function hr(t){let e=t.length,r=0;for(;r<e;)if((t[r]&128)===0)r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return!1;r+=2}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return!1;r+=3}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return!1;r+=4}else return!1;return!0}function To(t){return Co&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}_t.exports={isBlob:To,isValidStatusCode:Ao,isValidUTF8:hr,tokenChars:Po};if(Kn)_t.exports.isValidUTF8=function(t){return t.length<24?hr(t):Kn(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");_t.exports.isValidUTF8=function(e){return e.length<32?hr(e):t(e)}}catch{}});var yr=A((Il,es)=>{"use strict";var{Writable:Ro}=require("stream"),Jn=xe(),{BINARY_TYPES:No,EMPTY_BUFFER:Yn,kStatusCode:Do,kWebSocket:jo}=z(),{concat:fr,toArrayBuffer:Lo,unmask:Bo}=Ve(),{isValidStatusCode:Mo,isValidUTF8:zn}=Oe(),yt=Buffer[Symbol.species],H=0,Xn=1,Qn=2,Zn=3,gr=4,mr=5,bt=6,_r=class extends Ro{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||No[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[jo]=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=H}_write(e,r,n){if(this._opcode===8&&this._state==H)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 yt(n.buffer,n.byteOffset+e,n.length-e),new yt(n.buffer,n.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=r.length-e;e>=n.length?r.set(this._buffers.shift(),s):(r.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new yt(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return r}startLoop(e){this._loop=!0;do switch(this._state){case H:this.getInfo(e);break;case Xn:this.getPayloadLength16(e);break;case Qn:this.getPayloadLength64(e);break;case Zn:this.getMask();break;case gr:this.getData(e);break;case mr:case bt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[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=(r[0]&64)===64;if(n&&!this._extensions[Jn.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[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=(r[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=Xn:this._payloadLength===127?this._state=Qn: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 r=this.consume(8),n=r.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)+r.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=Zn:this._state=gr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=gr}getData(e){let r=Yn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Bo(r,this._mask)}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=mr,this.decompress(r,e);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(e)}decompress(e,r){this._extensions[Jn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return r(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");r(o);return}this._fragments.push(i)}this.dataMessage(r),this._state===H&&this.startLoop(r)})}dataMessage(e){if(!this._fin){this._state=H;return}let r=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=fr(n,r):this._binaryType==="arraybuffer"?s=Lo(fr(n,r)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=H):(this._state=bt,setImmediate(()=>{this.emit("message",s,!0),this._state=H,this.startLoop(e)}))}else{let s=fr(n,r);if(!this._skipUTF8Validation&&!zn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===mr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=H):(this._state=bt,setImmediate(()=>{this.emit("message",s,!1),this._state=H,this.startLoop(e)}))}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Yn),this.end();else{let n=e.readUInt16BE(0);if(!Mo(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(i);return}let s=new yt(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!zn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=H;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=H):(this._state=bt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=H,this.startLoop(r)}))}createError(e,r,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=i,o[Do]=s,o}};es.exports=_r});var Sr=A((Ol,ns)=>{"use strict";var{Duplex:xl}=require("stream"),{randomFillSync:$o}=require("crypto"),ts=xe(),{EMPTY_BUFFER:Uo,kWebSocket:Wo,NOOP:Go}=z(),{isBlob:Ce,isValidStatusCode:Fo}=Oe(),{mask:rs,toBuffer:le}=Ve(),q=Symbol("kByteLength"),Ho=Buffer.alloc(4),wt=8*1024,de,Pe=wt,V=0,qo=1,Vo=2,br=class t{constructor(e,r,n){this._extensions=r||{},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=V,this.onerror=Go,this[Wo]=void 0}static frame(e,r){let n,s=!1,i=2,o=!1;r.mask&&(n=r.maskBuffer||Ho,r.generateMask?r.generateMask(n):(Pe===wt&&(de===void 0&&(de=Buffer.alloc(wt)),$o(de,0,wt),Pe=0),n[0]=de[Pe++],n[1]=de[Pe++],n[2]=de[Pe++],n[3]=de[Pe++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!r.mask||o)&&r[q]!==void 0?a=r[q]:(e=Buffer.from(e),a=e.length):(a=e.length,s=r.mask&&r.readOnly&&!o);let c=a;a>=65536?(i+=8,c=127):a>125&&(i+=2,c=126);let l=Buffer.allocUnsafe(s?a+i:i);return l[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(l[0]|=64),l[1]=c,c===126?l.writeUInt16BE(a,2):c===127&&(l[2]=l[3]=0,l.writeUIntBE(a,4,6)),r.mask?(l[1]|=128,l[i-4]=n[0],l[i-3]=n[1],l[i-2]=n[2],l[i-1]=n[3],o?[l,e]:s?(rs(e,n,l,i,a),[l]):(rs(e,n,e,0,a),[l,e])):[l,e]}close(e,r,n,s){let i;if(e===void 0)i=Uo;else{if(typeof e!="number"||!Fo(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(r);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof r=="string"?i.write(r,2):i.set(r,2)}}let o={[q]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==V?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,r,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Ce(e)?(s=e.size,i=!1):(e=le(e),s=e.length,i=le.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[q]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==V?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(t.frame(e,o),n)}pong(e,r,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Ce(e)?(s=e.size,i=!1):(e=le(e),s=e.length,i=le.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[q]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==V?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(t.frame(e,o),n)}send(e,r,n){let s=this._extensions[ts.extensionName],i=r.binary?2:1,o=r.compress,a,c;typeof e=="string"?(a=Buffer.byteLength(e),c=!1):Ce(e)?(a=e.size,c=!1):(e=le(e),a=e.length,c=le.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),r.fin&&(this._firstFragment=!0);let l={[q]:a,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==V?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,r,n,s){this._bufferedBytes+=n[q],this._state=Vo,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(wr,this,a,s);return}this._bufferedBytes-=n[q];let o=le(i);r?this.dispatch(o,r,n,s):(this._state=V,this.sendFrame(t.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Ko,this,i,s)})}dispatch(e,r,n,s){if(!r){this.sendFrame(t.frame(e,n),s);return}let i=this._extensions[ts.extensionName];this._bufferedBytes+=n[q],this._state=qo,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");wr(this,c,s);return}this._bufferedBytes-=n[q],this._state=V,n.readOnly=!1,this.sendFrame(t.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===V&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][q],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][q],this._queue.push(e)}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r)}};ns.exports=br;function wr(t,e,r){typeof r=="function"&&r(e);for(let n=0;n<t._queue.length;n++){let s=t._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Ko(t,e,r){wr(t,e,r),t.onerror(e)}});var ps=A((Cl,us)=>{"use strict";var{kForOnEventAttribute:Je,kListener:vr}=z(),ss=Symbol("kCode"),is=Symbol("kData"),os=Symbol("kError"),as=Symbol("kMessage"),cs=Symbol("kReason"),Ae=Symbol("kTarget"),ls=Symbol("kType"),ds=Symbol("kWasClean"),Q=class{constructor(e){this[Ae]=null,this[ls]=e}get target(){return this[Ae]}get type(){return this[ls]}};Object.defineProperty(Q.prototype,"target",{enumerable:!0});Object.defineProperty(Q.prototype,"type",{enumerable:!0});var ue=class extends Q{constructor(e,r={}){super(e),this[ss]=r.code===void 0?0:r.code,this[cs]=r.reason===void 0?"":r.reason,this[ds]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[ss]}get reason(){return this[cs]}get wasClean(){return this[ds]}};Object.defineProperty(ue.prototype,"code",{enumerable:!0});Object.defineProperty(ue.prototype,"reason",{enumerable:!0});Object.defineProperty(ue.prototype,"wasClean",{enumerable:!0});var Te=class extends Q{constructor(e,r={}){super(e),this[os]=r.error===void 0?null:r.error,this[as]=r.message===void 0?"":r.message}get error(){return this[os]}get message(){return this[as]}};Object.defineProperty(Te.prototype,"error",{enumerable:!0});Object.defineProperty(Te.prototype,"message",{enumerable:!0});var Ye=class extends Q{constructor(e,r={}){super(e),this[is]=r.data===void 0?null:r.data}get data(){return this[is]}};Object.defineProperty(Ye.prototype,"data",{enumerable:!0});var Jo={addEventListener(t,e,r={}){for(let s of this.listeners(t))if(!r[Je]&&s[vr]===e&&!s[Je])return;let n;if(t==="message")n=function(i,o){let a=new Ye("message",{data:o?i:i.toString()});a[Ae]=this,St(e,this,a)};else if(t==="close")n=function(i,o){let a=new ue("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Ae]=this,St(e,this,a)};else if(t==="error")n=function(i){let o=new Te("error",{error:i,message:i.message});o[Ae]=this,St(e,this,o)};else if(t==="open")n=function(){let i=new Q("open");i[Ae]=this,St(e,this,i)};else return;n[Je]=!!r[Je],n[vr]=e,r.once?this.once(t,n):this.on(t,n)},removeEventListener(t,e){for(let r of this.listeners(t))if(r[vr]===e&&!r[Je]){this.removeListener(t,r);break}}};us.exports={CloseEvent:ue,ErrorEvent:Te,Event:Q,EventTarget:Jo,MessageEvent:Ye};function St(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r)}});var vt=A((Pl,hs)=>{"use strict";var{tokenChars:ze}=Oe();function J(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Yo(t){let e=Object.create(null),r=Object.create(null),n=!1,s=!1,i=!1,o,a,c=-1,l=-1,d=-1,u=0;for(;u<t.length;u++)if(l=t.charCodeAt(u),o===void 0)if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(u!==0&&(l===32||l===9))d===-1&&c!==-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=t.slice(c,d);l===44?(J(e,g,r),r=Object.create(null)):o=g,c=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(l===32||l===9)d===-1&&c!==-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),J(r,t.slice(c,d),!0),l===44&&(J(e,o,r),r=Object.create(null),o=void 0),c=d=-1}else if(l===61&&c!==-1&&d===-1)a=t.slice(c,u),c=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(ze[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);c===-1?c=u:n||(n=!0),s=!1}else if(i)if(ze[l]===1)c===-1&&(c=u);else if(l===34&&c!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&t.charCodeAt(u-1)===61)i=!0;else if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(c!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=t.slice(c,d);n&&(g=g.replace(/\\/g,""),n=!1),J(r,a,g),l===44&&(J(e,o,r),r=Object.create(null),o=void 0),a=void 0,c=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(c===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let p=t.slice(c,d);return o===void 0?J(e,p,r):(a===void 0?J(r,p,!0):n?J(r,a,p.replace(/\\/g,"")):J(r,a,p),J(e,o,r)),e}function zo(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.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(", ")}hs.exports={format:zo,parse:Yo}});var xt=A((Rl,Is)=>{"use strict";var Xo=require("events"),Qo=require("https"),Zo=require("http"),ms=require("net"),ea=require("tls"),{randomBytes:ta,createHash:ra}=require("crypto"),{Duplex:Al,Readable:Tl}=require("stream"),{URL:Er}=require("url"),re=xe(),na=yr(),sa=Sr(),{isBlob:ia}=Oe(),{BINARY_TYPES:fs,CLOSE_TIMEOUT:oa,EMPTY_BUFFER:Et,GUID:aa,kForOnEventAttribute:kr,kListener:ca,kStatusCode:la,kWebSocket:B,NOOP:_s}=z(),{EventTarget:{addEventListener:da,removeEventListener:ua}}=ps(),{format:pa,parse:ha}=vt(),{toBuffer:fa}=Ve(),ys=Symbol("kAborted"),Ir=[8,13],Z=["CONNECTING","OPEN","CLOSING","CLOSED"],ga=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,C=class t extends Xo{constructor(e,r,n){super(),this._binaryType=fs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Et,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(n=r,r=[]):r=[r]),bs(this,e,r,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){fs.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,n){let s=new na({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new sa(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[B]=this,i[B]=this,e[B]=this,s.on("conclude",ya),s.on("drain",ba),s.on("error",wa),s.on("message",Sa),s.on("ping",va),s.on("pong",Ea),i.onerror=ka,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",vs),e.on("data",It),e.on("end",Es),e.on("error",ks),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[re.extensionName]&&this._extensions[re.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){G(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Ss(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=r=void 0):typeof r=="function"&&(n=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||Et,r,n)}pong(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=r=void 0):typeof r=="function"&&(n=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||Et,r,n)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(n=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[re.extensionName]||(s.compress=!1),this._sender.send(e||Et,s,n)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){G(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(C,"CONNECTING",{enumerable:!0,value:Z.indexOf("CONNECTING")});Object.defineProperty(C.prototype,"CONNECTING",{enumerable:!0,value:Z.indexOf("CONNECTING")});Object.defineProperty(C,"OPEN",{enumerable:!0,value:Z.indexOf("OPEN")});Object.defineProperty(C.prototype,"OPEN",{enumerable:!0,value:Z.indexOf("OPEN")});Object.defineProperty(C,"CLOSING",{enumerable:!0,value:Z.indexOf("CLOSING")});Object.defineProperty(C.prototype,"CLOSING",{enumerable:!0,value:Z.indexOf("CLOSING")});Object.defineProperty(C,"CLOSED",{enumerable:!0,value:Z.indexOf("CLOSED")});Object.defineProperty(C.prototype,"CLOSED",{enumerable:!0,value:Z.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(C.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(C.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[kr])return e[ca];return null},set(e){for(let r of this.listeners(t))if(r[kr]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[kr]:!0})}})});C.prototype.addEventListener=da;C.prototype.removeEventListener=ua;Is.exports=C;function bs(t,e,r,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:oa,protocolVersion:Ir[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(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!Ir.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Ir.join(", ")})`);let i;if(e instanceof Er)i=e;else try{i=new Er(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",c;if(i.protocol!=="ws:"&&!o&&!a?c=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"),c){let h=new SyntaxError(c);if(t._redirects===0)throw h;kt(t,h);return}let l=o?443:80,d=ta(16).toString("base64"),u=o?Qo.request:Zo.request,p=new Set,g;if(s.createConnection=s.createConnection||(o?_a:ma),s.defaultPort=s.defaultPort||l,s.port=i.port||l,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 re({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=pa({[re.extensionName]:g.offer()})),r.length){for(let h of r){if(typeof h!="string"||!ga.test(h)||p.has(h))throw new SyntaxError("An invalid or duplicated subprotocol was specified");p.add(h)}s.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let h=s.path.split(":");s.socketPath=h[0],s.path=h[1]}let f;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let h=n&&n.headers;if(n={...n,headers:{}},h)for(let[b,y]of Object.entries(h))n.headers[b.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let h=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!h||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,h||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),f=t._req=u(s),t._redirects&&t.emit("redirect",t.url,f)}else f=t._req=u(s);s.timeout&&f.on("timeout",()=>{G(t,f,"Opening handshake has timed out")}),f.on("error",h=>{f===null||f[ys]||(f=t._req=null,kt(t,h))}),f.on("response",h=>{let b=h.headers.location,y=h.statusCode;if(b&&s.followRedirects&&y>=300&&y<400){if(++t._redirects>s.maxRedirects){G(t,f,"Maximum redirects exceeded");return}f.abort();let w;try{w=new Er(b,e)}catch{let P=new SyntaxError(`Invalid URL: ${b}`);kt(t,P);return}bs(t,w,r,n)}else t.emit("unexpected-response",f,h)||G(t,f,`Unexpected server response: ${h.statusCode}`)}),f.on("upgrade",(h,b,y)=>{if(t.emit("upgrade",h),t.readyState!==C.CONNECTING)return;f=t._req=null;let w=h.headers.upgrade;if(w===void 0||w.toLowerCase()!=="websocket"){G(t,b,"Invalid Upgrade header");return}let D=ra("sha1").update(d+aa).digest("base64");if(h.headers["sec-websocket-accept"]!==D){G(t,b,"Invalid Sec-WebSocket-Accept header");return}let P=h.headers["sec-websocket-protocol"],$;if(P!==void 0?p.size?p.has(P)||($="Server sent an invalid subprotocol"):$="Server sent a subprotocol but none was requested":p.size&&($="Server sent no subprotocol"),$){G(t,b,$);return}P&&(t._protocol=P);let Ge=h.headers["sec-websocket-extensions"];if(Ge!==void 0){if(!g){G(t,b,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S;try{S=ha(Ge)}catch{G(t,b,"Invalid Sec-WebSocket-Extensions header");return}let k=Object.keys(S);if(k.length!==1||k[0]!==re.extensionName){G(t,b,"Server indicated an extension that was not requested");return}try{g.accept(S[re.extensionName])}catch{G(t,b,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[re.extensionName]=g}t.setSocket(b,y,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(f,t):f.end()}function kt(t,e){t._readyState=C.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function ma(t){return t.path=t.socketPath,ms.connect(t)}function _a(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=ms.isIP(t.host)?"":t.host),ea.connect(t)}function G(t,e,r){t._readyState=C.CLOSING;let n=new Error(r);Error.captureStackTrace(n,G),e.setHeader?(e[ys]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(kt,t,n)):(e.destroy(n),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function xr(t,e,r){if(e){let n=ia(e)?e.size:fa(e).length;t._socket?t._sender._bufferedBytes+=n:t._bufferedAmount+=n}if(r){let n=new Error(`WebSocket is not open: readyState ${t.readyState} (${Z[t.readyState]})`);process.nextTick(r,n)}}function ya(t,e){let r=this[B];r._closeFrameReceived=!0,r._closeMessage=e,r._closeCode=t,r._socket[B]!==void 0&&(r._socket.removeListener("data",It),process.nextTick(ws,r._socket),t===1005?r.close():r.close(t,e))}function ba(){let t=this[B];t.isPaused||t._socket.resume()}function wa(t){let e=this[B];e._socket[B]!==void 0&&(e._socket.removeListener("data",It),process.nextTick(ws,e._socket),e.close(t[la])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function gs(){this[B].emitClose()}function Sa(t,e){this[B].emit("message",t,e)}function va(t){let e=this[B];e._autoPong&&e.pong(t,!this._isServer,_s),e.emit("ping",t)}function Ea(t){this[B].emit("pong",t)}function ws(t){t.resume()}function ka(t){let e=this[B];e.readyState!==C.CLOSED&&(e.readyState===C.OPEN&&(e._readyState=C.CLOSING,Ss(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Ss(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function vs(){let t=this[B];if(this.removeListener("close",vs),this.removeListener("data",It),this.removeListener("end",Es),t._readyState=C.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[B]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",gs),t._receiver.on("finish",gs))}function It(t){this[B]._receiver.write(t)||this.pause()}function Es(){let t=this[B];t._readyState=C.CLOSING,t._receiver.end(),this.end()}function ks(){let t=this[B];this.removeListener("error",ks),this.on("error",_s),t&&(t._readyState=C.CLOSING,this.destroy())}});var Ps=A((Dl,Cs)=>{"use strict";var Nl=xt(),{Duplex:Ia}=require("stream");function xs(t){t.emit("close")}function xa(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Os(t){this.removeListener("error",Os),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Oa(t,e){let r=!0,n=new Ia({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||t.pause()}),t.once("error",function(i){n.destroyed||(r=!1,n.destroy(i))}),t.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(xs,n);return}let o=!1;t.once("error",function(c){o=!0,i(c)}),t.once("close",function(){o||i(s),process.nextTick(xs,n)}),r&&t.terminate()},n._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){n._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},n._read=function(){t.isPaused&&t.resume()},n._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){n._write(s,i,o)});return}t.send(s,o)},n.on("end",xa),n.on("error",Os),n}Cs.exports=Oa});var Or=A((jl,As)=>{"use strict";var{tokenChars:Ca}=Oe();function Pa(t){let e=new Set,r=-1,n=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(n===-1&&Ca[o]===1)r===-1&&(r=s);else if(s!==0&&(o===32||o===9))n===-1&&r!==-1&&(n=s);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=t.slice(r,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),r=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(r===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(r,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}As.exports={parse:Pa}});var Bs=A((Bl,Ls)=>{"use strict";var Aa=require("events"),Ot=require("http"),{Duplex:Ll}=require("stream"),{createHash:Ta}=require("crypto"),Ts=vt(),pe=xe(),Ra=Or(),Na=xt(),{CLOSE_TIMEOUT:Da,GUID:ja,kWebSocket:La}=z(),Ba=/^[+/0-9A-Za-z]{22}==$/,Rs=0,Ns=1,js=2,Cr=class extends Aa{constructor(e,r){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Da,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Na,...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=Ot.createServer((n,s)=>{let i=Ot.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,r)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Ma(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=Rs}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===js){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xe,this);return}if(e&&this.once("close",e),this._state!==Ns)if(this._state=Ns,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(Xe,this):process.nextTick(Xe,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{Xe(this)})}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,r,n,s){r.on("error",Ds);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){he(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){he(this,e,r,400,"Invalid Upgrade header");return}if(i===void 0||!Ba.test(i)){he(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){he(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Qe(r,400);return}let c=e.headers["sec-websocket-protocol"],l=new Set;if(c!==void 0)try{l=Ra.parse(c)}catch{he(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let p=new pe({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=Ts.parse(d);g[pe.extensionName]&&(p.accept(g[pe.extensionName]),u[pe.extensionName]=p)}catch{he(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(p,(g,f,h,b)=>{if(!g)return Qe(r,f||401,h,b);this.completeUpgrade(u,i,l,e,r,n,s)});return}if(!this.options.verifyClient(p))return Qe(r,401)}this.completeUpgrade(u,i,l,e,r,n,s)}completeUpgrade(e,r,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[La])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Rs)return Qe(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Ta("sha1").update(r+ja).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&&(l.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[pe.extensionName]){let u=e[pe.extensionName].params,p=Ts.format({[pe.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${p}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
23
|
+
`)}),this}_outputHelpIfRequested(e){let r=this._getHelpOption();r&&e.find(s=>r.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function an(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let r,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?r=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=i[1],n=i[3],s=i[4]),r&&s!=="0"?`${r}=${n}:${parseInt(s)+1}`:e})}cn.Command=rr});var hn=A(F=>{var{Argument:dn}=ut(),{Command:nr}=ln(),{CommanderError:ro,InvalidArgumentError:un}=Fe(),{Help:no}=Jt(),{Option:pn}=Qt();F.program=new nr;F.createCommand=t=>new nr(t);F.createOption=(t,e)=>new pn(t,e);F.createArgument=(t,e)=>new dn(t,e);F.Command=nr;F.Option=pn;F.Argument=dn;F.Help=no;F.CommanderError=ro;F.InvalidArgumentError=un;F.InvalidOptionArgumentError=un});var Sn=A(L=>{"use strict";var sr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),so=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sync=t.isexe=void 0;var e=require("node:fs"),r=require("node:fs/promises"),n=async(a,c={})=>{let{ignoreErrors:l=!1}=c;try{return i(await(0,r.stat)(a),c)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};t.isexe=n;var s=(a,c={})=>{let{ignoreErrors:l=!1}=c;try{return i((0,e.statSync)(a),c)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};t.sync=s;var i=(a,c)=>a.isFile()&&o(a,c),o=(a,c)=>{let l=c.uid??process.getuid?.(),d=c.groups??process.getgroups?.()??[],u=c.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let p=new Set([u,...d]),g=a.mode,h=a.uid,f=a.gid,b=parseInt("100",8),y=parseInt("010",8),w=parseInt("001",8),D=b|y;return!!(g&w||g&y&&p.has(f)||g&b&&h===l||g&D&&l===0)}}),io=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sync=t.isexe=void 0;var e=require("node:fs"),r=require("node:fs/promises"),n=require("node:path"),s=async(c,l={})=>{let{ignoreErrors:d=!1}=l;try{return a(await(0,r.stat)(c),c,l)}catch(u){let p=u;if(d||p.code==="EACCES")return!1;throw p}};t.isexe=s;var i=(c,l={})=>{let{ignoreErrors:d=!1}=l;try{return a((0,e.statSync)(c),c,l)}catch(u){let p=u;if(d||p.code==="EACCES")return!1;throw p}};t.sync=i;var o=(c,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let p of u){let g=p.toLowerCase(),h=c.substring(c.length-g.length).toLowerCase();if(g&&h===g)return!0}return!1},a=(c,l,d)=>c.isFile()&&o(l,d)}),oo=sr(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})}),mn=L&&L.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),ao=L&&L.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),_n=L&&L.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),s=0;s<n.length;s++)n[s]!=="default"&&mn(r,e,n[s]);return ao(r,e),r}})(),co=L&&L.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mn(e,t,r)};Object.defineProperty(L,"__esModule",{value:!0});L.sync=L.isexe=L.posix=L.win32=void 0;var yn=_n(so());L.posix=yn;var bn=_n(io());L.win32=bn;co(oo(),L);var lo=process.env._ISEXE_TEST_PLATFORM_||process.platform,wn=lo==="win32"?bn:yn;L.isexe=wn.isexe;L.sync=wn.sync});var Tn=A((_l,An)=>{var{isexe:uo,sync:po}=Sn(),{join:ho,delimiter:fo,sep:vn,posix:En}=require("path"),kn=process.platform==="win32",In=new RegExp(`[${En.sep}${vn===En.sep?"":vn}]`.replace(/(\\)/g,"\\$1")),go=new RegExp(`^\\.${In.source}`),xn=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),On=(t,{path:e=process.env.PATH,pathExt:r=process.env.PATHEXT,delimiter:n=fo})=>{let s=t.match(In)?[""]:[...kn?[process.cwd()]:[],...(e||"").split(n)];if(kn){let i=r||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(a=>[a,a.toLowerCase()]);return t.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},Cn=(t,e)=>{let r=/^".*"$/.test(t)?t.slice(1,-1):t;return(!r&&go.test(e)?e.slice(0,2):"")+ho(r,e)},Pn=async(t,e={})=>{let{pathEnv:r,pathExt:n,pathExtExe:s}=On(t,e),i=[];for(let o of r){let a=Cn(o,t);for(let c of n){let l=a+c;if(await uo(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw xn(t)},mo=(t,e={})=>{let{pathEnv:r,pathExt:n,pathExtExe:s}=On(t,e),i=[];for(let o of r){let a=Cn(o,t);for(let c of n){let l=a+c;if(po(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw xn(t)};An.exports=Pn;Pn.sync=mo});var z=A((Sl,Mn)=>{"use strict";var Ln=["nodebuffer","arraybuffer","fragments"],Bn=typeof Blob<"u";Bn&&Ln.push("blob");Mn.exports={BINARY_TYPES:Ln,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Bn,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ve=A((vl,ft)=>{"use strict";var{EMPTY_BUFFER:wo}=z(),cr=Buffer[Symbol.species];function So(t,e){if(t.length===0)return wo;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),n=0;for(let s=0;s<t.length;s++){let i=t[s];r.set(i,n),n+=i.length}return n<e?new cr(r.buffer,r.byteOffset,n):r}function $n(t,e,r,n,s){for(let i=0;i<s;i++)r[n+i]=t[i]^e[i&3]}function Un(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3]}function vo(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function lr(t){if(lr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new cr(t):ArrayBuffer.isView(t)?e=new cr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),lr.readOnly=!1),e}ft.exports={concat:So,mask:$n,toArrayBuffer:vo,toBuffer:lr,unmask:Un};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");ft.exports.mask=function(e,r,n,s,i){i<48?$n(e,r,n,s,i):t.mask(e,r,n,s,i)},ft.exports.unmask=function(e,r){e.length<32?Un(e,r):t.unmask(e,r)}}catch{}});var Fn=A((El,Gn)=>{"use strict";var Wn=Symbol("kDone"),dr=Symbol("kRun"),ur=class{constructor(e){this[Wn]=()=>{this.pending--,this[dr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[dr]()}[dr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Wn])}}};Gn.exports=ur});var xe=A((kl,Kn)=>{"use strict";var Ke=require("zlib"),Hn=Ve(),Eo=Fn(),{kStatusCode:qn}=z(),ko=Buffer[Symbol.species],Io=Buffer.from([0,0,255,255]),mt=Symbol("permessage-deflate"),X=Symbol("total-length"),ke=Symbol("callback"),te=Symbol("buffers"),Ie=Symbol("error"),gt,pr=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,!gt){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;gt=new Eo(r)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[ke];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let r=this._options,n=e.find(s=>!(r.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>s.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(n.server_no_context_takeover=!0),r.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(n.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?n.client_max_window_bits=r.clientMaxWindowBits:(n.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(n=>{let s=r[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}"`);r[n]=s})}),e}decompress(e,r,n){gt.add(s=>{this._decompress(e,r,(i,o)=>{s(),n(i,o)})})}compress(e,r,n){gt.add(s=>{this._compress(e,r,(i,o)=>{s(),n(i,o)})})}_decompress(e,r,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ke.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ke.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[mt]=this,this._inflate[X]=0,this._inflate[te]=[],this._inflate.on("error",Oo),this._inflate.on("data",Vn)}this._inflate[ke]=n,this._inflate.write(e),r&&this._inflate.write(Io),this._inflate.flush(()=>{let i=this._inflate[Ie];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Hn.concat(this._inflate[te],this._inflate[X]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[X]=0,this._inflate[te]=[],r&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,r,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ke.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ke.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[X]=0,this._deflate[te]=[],this._deflate.on("data",xo)}this._deflate[ke]=n,this._deflate.write(e),this._deflate.flush(Ke.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Hn.concat(this._deflate[te],this._deflate[X]);r&&(i=new ko(i.buffer,i.byteOffset,i.length-4)),this._deflate[ke]=null,this._deflate[X]=0,this._deflate[te]=[],r&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Kn.exports=pr;function xo(t){this[te].push(t),this[X]+=t.length}function Vn(t){if(this[X]+=t.length,this[mt]._maxPayload<1||this[X]<=this[mt]._maxPayload){this[te].push(t);return}this[Ie]=new RangeError("Max payload size exceeded"),this[Ie].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Ie][qn]=1009,this.removeListener("data",Vn),this.reset()}function Oo(t){if(this[mt]._inflate=null,this[Ie]){this[ke](this[Ie]);return}t[qn]=1007,this[ke](t)}});var Oe=A((Il,_t)=>{"use strict";var{isUtf8:Jn}=require("buffer"),{hasBlob:Co}=z(),Po=[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 Ao(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function hr(t){let e=t.length,r=0;for(;r<e;)if((t[r]&128)===0)r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return!1;r+=2}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return!1;r+=3}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return!1;r+=4}else return!1;return!0}function To(t){return Co&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}_t.exports={isBlob:To,isValidStatusCode:Ao,isValidUTF8:hr,tokenChars:Po};if(Jn)_t.exports.isValidUTF8=function(t){return t.length<24?hr(t):Jn(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");_t.exports.isValidUTF8=function(e){return e.length<32?hr(e):t(e)}}catch{}});var yr=A((xl,ts)=>{"use strict";var{Writable:Ro}=require("stream"),Yn=xe(),{BINARY_TYPES:No,EMPTY_BUFFER:zn,kStatusCode:Do,kWebSocket:jo}=z(),{concat:fr,toArrayBuffer:Lo,unmask:Bo}=Ve(),{isValidStatusCode:Mo,isValidUTF8:Xn}=Oe(),yt=Buffer[Symbol.species],H=0,Qn=1,Zn=2,es=3,gr=4,mr=5,bt=6,_r=class extends Ro{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||No[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[jo]=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=H}_write(e,r,n){if(this._opcode===8&&this._state==H)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 yt(n.buffer,n.byteOffset+e,n.length-e),new yt(n.buffer,n.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=r.length-e;e>=n.length?r.set(this._buffers.shift(),s):(r.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new yt(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return r}startLoop(e){this._loop=!0;do switch(this._state){case H:this.getInfo(e);break;case Qn:this.getPayloadLength16(e);break;case Zn:this.getPayloadLength64(e);break;case es:this.getMask();break;case gr:this.getData(e);break;case mr:case bt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[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=(r[0]&64)===64;if(n&&!this._extensions[Yn.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[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=(r[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=Qn:this._payloadLength===127?this._state=Zn: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 r=this.consume(8),n=r.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)+r.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=es:this._state=gr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=gr}getData(e){let r=zn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Bo(r,this._mask)}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=mr,this.decompress(r,e);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(e)}decompress(e,r){this._extensions[Yn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return r(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");r(o);return}this._fragments.push(i)}this.dataMessage(r),this._state===H&&this.startLoop(r)})}dataMessage(e){if(!this._fin){this._state=H;return}let r=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=fr(n,r):this._binaryType==="arraybuffer"?s=Lo(fr(n,r)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=H):(this._state=bt,setImmediate(()=>{this.emit("message",s,!0),this._state=H,this.startLoop(e)}))}else{let s=fr(n,r);if(!this._skipUTF8Validation&&!Xn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===mr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=H):(this._state=bt,setImmediate(()=>{this.emit("message",s,!1),this._state=H,this.startLoop(e)}))}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,zn),this.end();else{let n=e.readUInt16BE(0);if(!Mo(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(i);return}let s=new yt(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Xn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=H;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=H):(this._state=bt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=H,this.startLoop(r)}))}createError(e,r,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=i,o[Do]=s,o}};ts.exports=_r});var Sr=A((Cl,ss)=>{"use strict";var{Duplex:Ol}=require("stream"),{randomFillSync:$o}=require("crypto"),rs=xe(),{EMPTY_BUFFER:Uo,kWebSocket:Wo,NOOP:Go}=z(),{isBlob:Ce,isValidStatusCode:Fo}=Oe(),{mask:ns,toBuffer:de}=Ve(),q=Symbol("kByteLength"),Ho=Buffer.alloc(4),wt=8*1024,ue,Pe=wt,V=0,qo=1,Vo=2,br=class t{constructor(e,r,n){this._extensions=r||{},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=V,this.onerror=Go,this[Wo]=void 0}static frame(e,r){let n,s=!1,i=2,o=!1;r.mask&&(n=r.maskBuffer||Ho,r.generateMask?r.generateMask(n):(Pe===wt&&(ue===void 0&&(ue=Buffer.alloc(wt)),$o(ue,0,wt),Pe=0),n[0]=ue[Pe++],n[1]=ue[Pe++],n[2]=ue[Pe++],n[3]=ue[Pe++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let a;typeof e=="string"?(!r.mask||o)&&r[q]!==void 0?a=r[q]:(e=Buffer.from(e),a=e.length):(a=e.length,s=r.mask&&r.readOnly&&!o);let c=a;a>=65536?(i+=8,c=127):a>125&&(i+=2,c=126);let l=Buffer.allocUnsafe(s?a+i:i);return l[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(l[0]|=64),l[1]=c,c===126?l.writeUInt16BE(a,2):c===127&&(l[2]=l[3]=0,l.writeUIntBE(a,4,6)),r.mask?(l[1]|=128,l[i-4]=n[0],l[i-3]=n[1],l[i-2]=n[2],l[i-1]=n[3],o?[l,e]:s?(ns(e,n,l,i,a),[l]):(ns(e,n,e,0,a),[l,e])):[l,e]}close(e,r,n,s){let i;if(e===void 0)i=Uo;else{if(typeof e!="number"||!Fo(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(r);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof r=="string"?i.write(r,2):i.set(r,2)}}let o={[q]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==V?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,r,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Ce(e)?(s=e.size,i=!1):(e=de(e),s=e.length,i=de.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[q]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==V?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(t.frame(e,o),n)}pong(e,r,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Ce(e)?(s=e.size,i=!1):(e=de(e),s=e.length,i=de.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[q]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==V?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(t.frame(e,o),n)}send(e,r,n){let s=this._extensions[rs.extensionName],i=r.binary?2:1,o=r.compress,a,c;typeof e=="string"?(a=Buffer.byteLength(e),c=!1):Ce(e)?(a=e.size,c=!1):(e=de(e),a=e.length,c=de.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),r.fin&&(this._firstFragment=!0);let l={[q]:a,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};Ce(e)?this._state!==V?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==V?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,r,n,s){this._bufferedBytes+=n[q],this._state=Vo,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(wr,this,a,s);return}this._bufferedBytes-=n[q];let o=de(i);r?this.dispatch(o,r,n,s):(this._state=V,this.sendFrame(t.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Ko,this,i,s)})}dispatch(e,r,n,s){if(!r){this.sendFrame(t.frame(e,n),s);return}let i=this._extensions[rs.extensionName];this._bufferedBytes+=n[q],this._state=qo,i.compress(e,n.fin,(o,a)=>{if(this._socket.destroyed){let c=new Error("The socket was closed while data was being compressed");wr(this,c,s);return}this._bufferedBytes-=n[q],this._state=V,n.readOnly=!1,this.sendFrame(t.frame(a,n),s),this.dequeue()})}dequeue(){for(;this._state===V&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][q],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][q],this._queue.push(e)}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r)}};ss.exports=br;function wr(t,e,r){typeof r=="function"&&r(e);for(let n=0;n<t._queue.length;n++){let s=t._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Ko(t,e,r){wr(t,e,r),t.onerror(e)}});var hs=A((Pl,ps)=>{"use strict";var{kForOnEventAttribute:Je,kListener:vr}=z(),is=Symbol("kCode"),os=Symbol("kData"),as=Symbol("kError"),cs=Symbol("kMessage"),ls=Symbol("kReason"),Ae=Symbol("kTarget"),ds=Symbol("kType"),us=Symbol("kWasClean"),Q=class{constructor(e){this[Ae]=null,this[ds]=e}get target(){return this[Ae]}get type(){return this[ds]}};Object.defineProperty(Q.prototype,"target",{enumerable:!0});Object.defineProperty(Q.prototype,"type",{enumerable:!0});var pe=class extends Q{constructor(e,r={}){super(e),this[is]=r.code===void 0?0:r.code,this[ls]=r.reason===void 0?"":r.reason,this[us]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[is]}get reason(){return this[ls]}get wasClean(){return this[us]}};Object.defineProperty(pe.prototype,"code",{enumerable:!0});Object.defineProperty(pe.prototype,"reason",{enumerable:!0});Object.defineProperty(pe.prototype,"wasClean",{enumerable:!0});var Te=class extends Q{constructor(e,r={}){super(e),this[as]=r.error===void 0?null:r.error,this[cs]=r.message===void 0?"":r.message}get error(){return this[as]}get message(){return this[cs]}};Object.defineProperty(Te.prototype,"error",{enumerable:!0});Object.defineProperty(Te.prototype,"message",{enumerable:!0});var Ye=class extends Q{constructor(e,r={}){super(e),this[os]=r.data===void 0?null:r.data}get data(){return this[os]}};Object.defineProperty(Ye.prototype,"data",{enumerable:!0});var Jo={addEventListener(t,e,r={}){for(let s of this.listeners(t))if(!r[Je]&&s[vr]===e&&!s[Je])return;let n;if(t==="message")n=function(i,o){let a=new Ye("message",{data:o?i:i.toString()});a[Ae]=this,St(e,this,a)};else if(t==="close")n=function(i,o){let a=new pe("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Ae]=this,St(e,this,a)};else if(t==="error")n=function(i){let o=new Te("error",{error:i,message:i.message});o[Ae]=this,St(e,this,o)};else if(t==="open")n=function(){let i=new Q("open");i[Ae]=this,St(e,this,i)};else return;n[Je]=!!r[Je],n[vr]=e,r.once?this.once(t,n):this.on(t,n)},removeEventListener(t,e){for(let r of this.listeners(t))if(r[vr]===e&&!r[Je]){this.removeListener(t,r);break}}};ps.exports={CloseEvent:pe,ErrorEvent:Te,Event:Q,EventTarget:Jo,MessageEvent:Ye};function St(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r)}});var vt=A((Al,fs)=>{"use strict";var{tokenChars:ze}=Oe();function J(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Yo(t){let e=Object.create(null),r=Object.create(null),n=!1,s=!1,i=!1,o,a,c=-1,l=-1,d=-1,u=0;for(;u<t.length;u++)if(l=t.charCodeAt(u),o===void 0)if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(u!==0&&(l===32||l===9))d===-1&&c!==-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=t.slice(c,d);l===44?(J(e,g,r),r=Object.create(null)):o=g,c=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(l===32||l===9)d===-1&&c!==-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),J(r,t.slice(c,d),!0),l===44&&(J(e,o,r),r=Object.create(null),o=void 0),c=d=-1}else if(l===61&&c!==-1&&d===-1)a=t.slice(c,u),c=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(ze[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);c===-1?c=u:n||(n=!0),s=!1}else if(i)if(ze[l]===1)c===-1&&(c=u);else if(l===34&&c!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&t.charCodeAt(u-1)===61)i=!0;else if(d===-1&&ze[l]===1)c===-1&&(c=u);else if(c!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(c===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=t.slice(c,d);n&&(g=g.replace(/\\/g,""),n=!1),J(r,a,g),l===44&&(J(e,o,r),r=Object.create(null),o=void 0),a=void 0,c=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(c===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let p=t.slice(c,d);return o===void 0?J(e,p,r):(a===void 0?J(r,p,!0):n?J(r,a,p.replace(/\\/g,"")):J(r,a,p),J(e,o,r)),e}function zo(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.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(", ")}fs.exports={format:zo,parse:Yo}});var xt=A((Nl,xs)=>{"use strict";var Xo=require("events"),Qo=require("https"),Zo=require("http"),_s=require("net"),ea=require("tls"),{randomBytes:ta,createHash:ra}=require("crypto"),{Duplex:Tl,Readable:Rl}=require("stream"),{URL:Er}=require("url"),re=xe(),na=yr(),sa=Sr(),{isBlob:ia}=Oe(),{BINARY_TYPES:gs,CLOSE_TIMEOUT:oa,EMPTY_BUFFER:Et,GUID:aa,kForOnEventAttribute:kr,kListener:ca,kStatusCode:la,kWebSocket:B,NOOP:ys}=z(),{EventTarget:{addEventListener:da,removeEventListener:ua}}=hs(),{format:pa,parse:ha}=vt(),{toBuffer:fa}=Ve(),bs=Symbol("kAborted"),Ir=[8,13],Z=["CONNECTING","OPEN","CLOSING","CLOSED"],ga=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,C=class t extends Xo{constructor(e,r,n){super(),this._binaryType=gs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Et,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(n=r,r=[]):r=[r]),ws(this,e,r,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){gs.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,n){let s=new na({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new sa(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[B]=this,i[B]=this,e[B]=this,s.on("conclude",ya),s.on("drain",ba),s.on("error",wa),s.on("message",Sa),s.on("ping",va),s.on("pong",Ea),i.onerror=ka,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",Es),e.on("data",It),e.on("end",ks),e.on("error",Is),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[re.extensionName]&&this._extensions[re.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){G(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),vs(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=r=void 0):typeof r=="function"&&(n=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||Et,r,n)}pong(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=r=void 0):typeof r=="function"&&(n=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||Et,r,n)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,r,n){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(n=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){xr(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[re.extensionName]||(s.compress=!1),this._sender.send(e||Et,s,n)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){G(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(C,"CONNECTING",{enumerable:!0,value:Z.indexOf("CONNECTING")});Object.defineProperty(C.prototype,"CONNECTING",{enumerable:!0,value:Z.indexOf("CONNECTING")});Object.defineProperty(C,"OPEN",{enumerable:!0,value:Z.indexOf("OPEN")});Object.defineProperty(C.prototype,"OPEN",{enumerable:!0,value:Z.indexOf("OPEN")});Object.defineProperty(C,"CLOSING",{enumerable:!0,value:Z.indexOf("CLOSING")});Object.defineProperty(C.prototype,"CLOSING",{enumerable:!0,value:Z.indexOf("CLOSING")});Object.defineProperty(C,"CLOSED",{enumerable:!0,value:Z.indexOf("CLOSED")});Object.defineProperty(C.prototype,"CLOSED",{enumerable:!0,value:Z.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(C.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(C.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[kr])return e[ca];return null},set(e){for(let r of this.listeners(t))if(r[kr]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[kr]:!0})}})});C.prototype.addEventListener=da;C.prototype.removeEventListener=ua;xs.exports=C;function ws(t,e,r,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:oa,protocolVersion:Ir[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(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!Ir.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Ir.join(", ")})`);let i;if(e instanceof Er)i=e;else try{i=new Er(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",c;if(i.protocol!=="ws:"&&!o&&!a?c=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"),c){let f=new SyntaxError(c);if(t._redirects===0)throw f;kt(t,f);return}let l=o?443:80,d=ta(16).toString("base64"),u=o?Qo.request:Zo.request,p=new Set,g;if(s.createConnection=s.createConnection||(o?_a:ma),s.defaultPort=s.defaultPort||l,s.port=i.port||l,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 re({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=pa({[re.extensionName]:g.offer()})),r.length){for(let f of r){if(typeof f!="string"||!ga.test(f)||p.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");p.add(f)}s.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let h;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let f=n&&n.headers;if(n={...n,headers:{}},f)for(let[b,y]of Object.entries(f))n.headers[b.toLowerCase()]=y}else if(t.listenerCount("redirect")===0){let f=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!f||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),h=t._req=u(s),t._redirects&&t.emit("redirect",t.url,h)}else h=t._req=u(s);s.timeout&&h.on("timeout",()=>{G(t,h,"Opening handshake has timed out")}),h.on("error",f=>{h===null||h[bs]||(h=t._req=null,kt(t,f))}),h.on("response",f=>{let b=f.headers.location,y=f.statusCode;if(b&&s.followRedirects&&y>=300&&y<400){if(++t._redirects>s.maxRedirects){G(t,h,"Maximum redirects exceeded");return}h.abort();let w;try{w=new Er(b,e)}catch{let P=new SyntaxError(`Invalid URL: ${b}`);kt(t,P);return}ws(t,w,r,n)}else t.emit("unexpected-response",h,f)||G(t,h,`Unexpected server response: ${f.statusCode}`)}),h.on("upgrade",(f,b,y)=>{if(t.emit("upgrade",f),t.readyState!==C.CONNECTING)return;h=t._req=null;let w=f.headers.upgrade;if(w===void 0||w.toLowerCase()!=="websocket"){G(t,b,"Invalid Upgrade header");return}let D=ra("sha1").update(d+aa).digest("base64");if(f.headers["sec-websocket-accept"]!==D){G(t,b,"Invalid Sec-WebSocket-Accept header");return}let P=f.headers["sec-websocket-protocol"],$;if(P!==void 0?p.size?p.has(P)||($="Server sent an invalid subprotocol"):$="Server sent a subprotocol but none was requested":p.size&&($="Server sent no subprotocol"),$){G(t,b,$);return}P&&(t._protocol=P);let Ge=f.headers["sec-websocket-extensions"];if(Ge!==void 0){if(!g){G(t,b,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S;try{S=ha(Ge)}catch{G(t,b,"Invalid Sec-WebSocket-Extensions header");return}let k=Object.keys(S);if(k.length!==1||k[0]!==re.extensionName){G(t,b,"Server indicated an extension that was not requested");return}try{g.accept(S[re.extensionName])}catch{G(t,b,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[re.extensionName]=g}t.setSocket(b,y,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(h,t):h.end()}function kt(t,e){t._readyState=C.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function ma(t){return t.path=t.socketPath,_s.connect(t)}function _a(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=_s.isIP(t.host)?"":t.host),ea.connect(t)}function G(t,e,r){t._readyState=C.CLOSING;let n=new Error(r);Error.captureStackTrace(n,G),e.setHeader?(e[bs]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(kt,t,n)):(e.destroy(n),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function xr(t,e,r){if(e){let n=ia(e)?e.size:fa(e).length;t._socket?t._sender._bufferedBytes+=n:t._bufferedAmount+=n}if(r){let n=new Error(`WebSocket is not open: readyState ${t.readyState} (${Z[t.readyState]})`);process.nextTick(r,n)}}function ya(t,e){let r=this[B];r._closeFrameReceived=!0,r._closeMessage=e,r._closeCode=t,r._socket[B]!==void 0&&(r._socket.removeListener("data",It),process.nextTick(Ss,r._socket),t===1005?r.close():r.close(t,e))}function ba(){let t=this[B];t.isPaused||t._socket.resume()}function wa(t){let e=this[B];e._socket[B]!==void 0&&(e._socket.removeListener("data",It),process.nextTick(Ss,e._socket),e.close(t[la])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function ms(){this[B].emitClose()}function Sa(t,e){this[B].emit("message",t,e)}function va(t){let e=this[B];e._autoPong&&e.pong(t,!this._isServer,ys),e.emit("ping",t)}function Ea(t){this[B].emit("pong",t)}function Ss(t){t.resume()}function ka(t){let e=this[B];e.readyState!==C.CLOSED&&(e.readyState===C.OPEN&&(e._readyState=C.CLOSING,vs(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function vs(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Es(){let t=this[B];if(this.removeListener("close",Es),this.removeListener("data",It),this.removeListener("end",ks),t._readyState=C.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[B]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",ms),t._receiver.on("finish",ms))}function It(t){this[B]._receiver.write(t)||this.pause()}function ks(){let t=this[B];t._readyState=C.CLOSING,t._receiver.end(),this.end()}function Is(){let t=this[B];this.removeListener("error",Is),this.on("error",ys),t&&(t._readyState=C.CLOSING,this.destroy())}});var As=A((jl,Ps)=>{"use strict";var Dl=xt(),{Duplex:Ia}=require("stream");function Os(t){t.emit("close")}function xa(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Cs(t){this.removeListener("error",Cs),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Oa(t,e){let r=!0,n=new Ia({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&n._readableState.objectMode?i.toString():i;n.push(a)||t.pause()}),t.once("error",function(i){n.destroyed||(r=!1,n.destroy(i))}),t.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Os,n);return}let o=!1;t.once("error",function(c){o=!0,i(c)}),t.once("close",function(){o||i(s),process.nextTick(Os,n)}),r&&t.terminate()},n._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){n._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},n._read=function(){t.isPaused&&t.resume()},n._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){n._write(s,i,o)});return}t.send(s,o)},n.on("end",xa),n.on("error",Cs),n}Ps.exports=Oa});var Or=A((Ll,Ts)=>{"use strict";var{tokenChars:Ca}=Oe();function Pa(t){let e=new Set,r=-1,n=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(n===-1&&Ca[o]===1)r===-1&&(r=s);else if(s!==0&&(o===32||o===9))n===-1&&r!==-1&&(n=s);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let a=t.slice(r,n);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),r=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(r===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(r,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Ts.exports={parse:Pa}});var Ms=A((Ml,Bs)=>{"use strict";var Aa=require("events"),Ot=require("http"),{Duplex:Bl}=require("stream"),{createHash:Ta}=require("crypto"),Rs=vt(),he=xe(),Ra=Or(),Na=xt(),{CLOSE_TIMEOUT:Da,GUID:ja,kWebSocket:La}=z(),Ba=/^[+/0-9A-Za-z]{22}==$/,Ns=0,Ds=1,Ls=2,Cr=class extends Aa{constructor(e,r){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Da,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Na,...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=Ot.createServer((n,s)=>{let i=Ot.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,r)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Ma(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=Ns}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===Ls){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xe,this);return}if(e&&this.once("close",e),this._state!==Ds)if(this._state=Ds,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(Xe,this):process.nextTick(Xe,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{Xe(this)})}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,r,n,s){r.on("error",js);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){fe(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){fe(this,e,r,400,"Invalid Upgrade header");return}if(i===void 0||!Ba.test(i)){fe(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){fe(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Qe(r,400);return}let c=e.headers["sec-websocket-protocol"],l=new Set;if(c!==void 0)try{l=Ra.parse(c)}catch{fe(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let p=new he({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=Rs.parse(d);g[he.extensionName]&&(p.accept(g[he.extensionName]),u[he.extensionName]=p)}catch{fe(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let p={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(p,(g,h,f,b)=>{if(!g)return Qe(r,h||401,f,b);this.completeUpgrade(u,i,l,e,r,n,s)});return}if(!this.options.verifyClient(p))return Qe(r,401)}this.completeUpgrade(u,i,l,e,r,n,s)}completeUpgrade(e,r,n,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[La])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Ns)return Qe(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Ta("sha1").update(r+ja).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&&(l.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[he.extensionName]){let u=e[he.extensionName].params,p=Rs.format({[he.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${p}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
24
24
|
`).join(`\r
|
|
25
|
-
`)),i.removeListener("error",
|
|
25
|
+
`)),i.removeListener("error",js),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(Xe,this)})),a(d,s)}};Bs.exports=Cr;function Ma(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let n of Object.keys(e))t.removeListener(n,e[n])}}function Xe(t){t._state=Ls,t.emit("close")}function js(){this.destroy()}function Qe(t,e,r,n){r=r||Ot.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...n},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${Ot.STATUS_CODES[e]}\r
|
|
26
26
|
`+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
|
|
27
27
|
`)+`\r
|
|
28
28
|
\r
|
|
29
|
-
`+r)}function
|
|
30
|
-
`,
|
|
31
|
-
`)[0].trim()||void 0}catch{return}}function _o(t){if(!t.versionDirGlobs?.length)return[];let e=[],r=t.versionDirGlobs;for(let n of r){let s=qe.default.join(
|
|
29
|
+
`+r)}function fe(t,e,r,n,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,fe),t.emit("wsClientError",o,r,e)}else Qe(r,n,s,i)}});function ge(){return process.env.BRIDGE_PROFILE||void 0}function ee(){let t=ge();return t?se.default.join(ei,"profiles",t,"settings.json"):se.default.join(ei,"settings.json")}function De(){let t=ge(),e=t?`${t}.daemon.lock`:"daemon.lock";return se.default.join((0,Ne.homedir)(),".bridge",e)}function je(){let t=ge();return t?`com.jerico.bridge-agent.${t}.plist`:"com.jerico.bridge-agent.plist"}function Rt(){let t=ge(),e=t?`-${t}`:"";return{out:se.default.join((0,Ne.homedir)(),`bridge-daemon${e}.log`),err:se.default.join((0,Ne.homedir)(),`bridge-daemon${e}.err.log`)}}function Br(){let t=process.env.HEALTH_PORT;if(t){let e=parseInt(t,10);if(Number.isFinite(e))return e}return ge()?3102:3101}function ti(){let t=ge();return se.default.join((0,Ne.homedir)(),".bridge",t?`bridge-agent-wrapper-${t}.sh`:"bridge-agent-wrapper.sh")}function ri(){let t=ge();return t?`:profile:${t}`:""}var Ne,se,ei,me=en(()=>{"use strict";Ne=require("node:os"),se=_(require("path")),ei=se.default.join((0,Ne.homedir)(),".jerico")});var si={};Wi(si,{getConfigPath:()=>ee,loadConfig:()=>_e,loadProjectSettings:()=>Mr,mergeSettings:()=>ie,saveConfig:()=>Qa});function et(t,e){let r=t[e];if(!(!r||typeof r!="object"||Array.isArray(r)))return Object.fromEntries(Object.entries(r).filter(([,n])=>typeof n=="string"))}function _e(){let t=ee(),e=!!process.env.BRIDGE_PROFILE,r=M.default.existsSync(t)||e?t:Xa;if(!M.default.existsSync(r)){let h=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${h}`),process.exit(1)}let n=M.default.readFileSync(r,"utf-8"),s;try{s=JSON.parse(n)}catch{console.error("[bridge] Invalid config file at",r),process.exit(1)}(!s||typeof s!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let i=s,o=typeof i.server=="string"?i.server:"",a=typeof i.token=="string"?i.token:"",c=typeof i.name=="string"?i.name:"bridge-agent",l=[/23-88-110-113\.sslip\.io/i,/23\.88\.110\.113:443\/ws\/daemon$/,/23\.88\.110\.113:3100\/ws\/daemon$/],d="wss://lcars.jerico.appnova.io/ws/daemon";if(o&&l.some(h=>h.test(o))){console.warn(`[daemon] config.url_migration: migrating stale URL ${o} \u2192 ${d}`),o=d,i.server=o;try{M.default.writeFileSync(r,JSON.stringify(i,null,2),{mode:384}),M.default.chmodSync(r,384)}catch(h){console.warn("[daemon] config.url_migration: failed to save migrated config",String(h))}}(!o||!a)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let u={server:o,token:a,name:c},p=et(i,"agentPaths"),g=et(i,"projectPaths");return p&&(u.agentPaths=p),g&&(u.projectPaths=g),typeof i.claudeTier=="string"&&(u.claudeTier=i.claudeTier),u}function Qa(t){let e=ee(),r=tt.default.dirname(e);M.default.existsSync(r)||M.default.mkdirSync(r,{recursive:!0}),M.default.writeFileSync(e,JSON.stringify(t,null,2),{mode:384})}function ie(t){let e=ee(),r=tt.default.dirname(e);M.default.existsSync(r)||M.default.mkdirSync(r,{recursive:!0});let n={};if(M.default.existsSync(e))try{n=JSON.parse(M.default.readFileSync(e,"utf-8"))}catch{n={}}M.default.writeFileSync(e,JSON.stringify({...n,...t},null,2),{mode:384})}function Mr(t){let e=tt.default.join(t??process.cwd(),".jerico","settings.json");if(!M.default.existsSync(e))return{};try{let r=M.default.readFileSync(e,"utf-8"),n=JSON.parse(r);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=et(s,"hooks"),a=et(s,"env"),c=et(s,"agentPaths");return o&&(i.hooks=o),a&&(i.env=a),c&&(i.agentPaths=c),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var M,tt,ni,Xa,Le=en(()=>{"use strict";M=_(require("fs")),tt=_(require("path")),ni=_(require("os"));me();Xa=tt.default.join(ni.default.homedir(),".bridge","config.json")});var fn=_(hn(),1),{program:il,createCommand:ol,createArgument:al,createOption:cl,CommanderError:ll,InvalidArgumentError:dl,InvalidOptionArgumentError:ul,Command:gn,Argument:pl,Option:hl,Help:fl}=fn.default;var Si=require("node:http"),ve=require("node:child_process"),j=require("node:fs"),We=require("node:os"),U=_(require("path"));var jn=_(require("node-pty"));var or=_(Tn()),Ee=_(require("fs")),qe=_(require("path")),Nn=_(require("net")),Dn=require("child_process"),ir=t=>t+`
|
|
30
|
+
`,ce=t=>t.replace(/[\r\n]+$/,"")+"\r",le=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:ir},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>He(".claude")||K("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:t=>["--dangerously-skip-permissions","--resume",t],supportsMcpConfig:!0,formatInput:ce,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>K("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:ce},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>He(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:t=>["--resume",t,"--yolo"],supportsMcpConfig:!0,formatInput:ce,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>K("GEMINI_API_KEY"),spawnArgs:["--approval-mode","yolo"],assignSessionId:!0,resumeArgs:t=>["--approval-mode","yolo","--resume",t],supportsMcpConfig:!0,formatInput:ce},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>bo(11434),formatInput:ir},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>K("OPENAI_API_KEY")||K("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:ir},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>He(".kimi")||K("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:t=>["-r",t,"--yolo"],supportsMcpConfig:!0,formatInput:ce,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]},{key:"forge",displayName:"Forge",binary:"forge",checkAuth:async()=>He(".forge/.credentials.json")||K("FORGE_API_KEY"),assignSessionId:!0,resumeArgs:t=>["--conversation-id",t],supportsMcpConfig:!0,formatInput:ce},{key:"opencode",displayName:"OpenCode",binary:"opencode",checkAuth:async()=>He(".config/opencode")||K("OPENCODE_API_KEY")||K("ANTHROPIC_API_KEY")||K("OPENAI_API_KEY"),supportsMcpConfig:!0,formatInput:ce,versionDirGlobs:[".opencode/bin"],env:{OPENCODE_CONFIG_CONTENT:'{"permission":"allow"}'}}];var Rn=process.env.HOME??"/Users/unknown";function pt(t){try{let e=(0,Dn.spawnSync)(t,["--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 _o(t){if(!t.versionDirGlobs?.length)return[];let e=[],r=t.versionDirGlobs;for(let n of r){let s=qe.default.join(Rn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=Ee.default.readdirSync(s)}catch{}i.sort((o,a)=>a.localeCompare(o));for(let o of i){let a=qe.default.join(s,o,t.binary);if(Ee.default.existsSync(a)){let c=pt(a);e.push({path:a,version:c})}}}else{let i=qe.default.join(Rn,n);if(Ee.default.existsSync(i)){let o=pt(i);e.push({path:i,version:o})}}}return e}async function yo(t,e={}){if(e[t.key]){let n=e[t.key],s=pt(n);if(s)return{path:n,version:s}}try{let n=await(0,or.default)(t.binary);if(n&&Ee.default.existsSync(n)){let s=pt(n);if(s!==void 0)return{path:n,version:s}}}catch{}let r=_o(t);for(let n of r)if(n.version!==void 0)return n;try{let n=await(0,or.default)(t.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${t.key}'`)}async function ar(t={}){let e=[];for(let r of le)try{let{path:n,version:s}=await yo(r,t),o=await r.checkAuth()?"ok":"missing";e.push({key:r.key,displayName:r.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(r=>r.key),missing:le.map(r=>r.key).filter(r=>!e.find(n=>n.key===r))}),e}function He(t){return Ee.default.existsSync(qe.default.join(process.env.HOME??"",t))}function K(t){return!!process.env[t]}async function bo(t){return new Promise(e=>{let r=Nn.default.createConnection(t,"127.0.0.1");r.setTimeout(200),r.on("connect",()=>{r.destroy(),e(!0)}),r.on("error",()=>e(!1)),r.on("timeout",()=>{r.destroy(),e(!1)})})}var ht=class{handles=new Map;nextInstanceId=1;lastErrors=new Map;livenessTimer=null;currentWs=null;setCurrentWs(e){this.currentWs=e}getCurrentWs(){return this.currentWs}startLivenessCheck(e=6e4){this.livenessTimer||(this.livenessTimer=setInterval(()=>{for(let[r,n]of this.handles.entries()){if(n.killed)continue;let s=!1;try{s=process.kill(n.pid,0)}catch{s=!1}s||(console.warn("[daemon] pty.liveness.dead",{agentId:r,pid:n.pid}),this.handles.delete(r),n.onExit(137,"SIGKILL"))}},e),console.log("[daemon] pty.liveness.started",{intervalMs:e}))}stopLivenessCheck(){this.livenessTimer&&(clearInterval(this.livenessTimer),this.livenessTimer=null,console.log("[daemon] pty.liveness.stopped"))}spawn(e,r,n,s,i,o,a,c,l){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:r}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),p=Math.max(1,Math.min(500,o)),g={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(g.BRIDGE_SERVER_URL=l.serverUrl,g.BRIDGE_TOKEN=l.token,g.BRIDGE_WORKSPACE_ID=l.workspaceId,g.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(g,l.projectEnv));let h=le.find(D=>D.key===r);h?.env&&Object.assign(g,h.env);let f=process.env.BRIDGE_MCP_URL;f&&(g.BRIDGE_MCP_URL=f);let b;try{b=jn.spawn(n,s,{name:"xterm-256color",cols:u,rows:p,cwd:l?.cwd,env:g})}catch(D){let P=D instanceof Error?D.message:String(D);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:r,error:P}),!1}let y=this.nextInstanceId++,w={agentId:e,agentKey:r,process:b,pid:b.pid,killed:!1,instanceId:y,onExit:c};return b.onData(D=>{let P=this.handles.get(e);!P||P.instanceId!==y||w.killed||a(Buffer.from(D).toString("base64"))}),b.onExit(({exitCode:D,signal:P})=>{let $=this.handles.get(e);!$||$.instanceId!==y||w.killed||w.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:D,signal:P}),c(D??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,w),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:r,args:s,cwd:l?.cwd}),!0}write(e,r,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:r.length});return}let i=Buffer.from(r,"base64").toString(),o=le.find(c=>c.key===s.agentKey),a=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(a)}kill(e,r=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(r){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:r})}resize(e,r,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,r)),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()]}getAgentKey(e){return this.handles.get(e)?.agentKey}};var $a=_(As(),1),Ua=_(vt(),1),Wa=_(xe(),1),Ga=_(yr(),1),Fa=_(Sr(),1),Ha=_(Or(),1),$s=_(xt(),1),qa=_(Ms(),1);var E=$s.default;var N=_(require("fs")),it=require("node:fs/promises"),O=_(require("path")),R=_(require("os")),Ue=require("node:child_process"),ct=require("node:crypto");var Pr=["claude","codex","qwen","kimi","forge","opencode","gemini"];var Ct=["developer","reviewer","planner","executor","shell","runner","orchestrator"],Ul=Ct.filter(t=>t!=="orchestrator"),Wl=[...Ct,"system"];var Us=t=>t;var Ws=t=>t,Gs=t=>t,Fs=3e3;function Ar(t){return(process.env.JERICO_FEATURES??"").split(",").map(r=>r.trim()).filter(Boolean).includes(t)}var Hs={developer:`# Bridge Worker \u2014 Developer Role
|
|
32
32
|
|
|
33
33
|
You are a **Developer** worker in a multi-agent orchestration system called Bridge.
|
|
34
34
|
|
|
@@ -357,7 +357,7 @@ Summarize: todos completed, failed, any blockers. List what workers did.
|
|
|
357
357
|
|
|
358
358
|
---
|
|
359
359
|
|
|
360
|
-
{{TOOL_TABLE}}`};var Tr={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",bridge_list_groups:"List all agent groups and their member agentIds",bridge_get_group_status:"Get agents in a group with status and last output line",bridge_dispatch_to_group:"Send a text message/command to every agent in a group",bridge_list_workspace_projects:"List all workspace projects with name, cwd, active run count",bridge_query_workspace:"Natural-language query about orchestration state",bridge_list_active_runs:"All active orchestration runs across workspace projects",bridge_peek_panel:"Read terminal output of any panel workspace-wide (no project boundary)",bridge_status_panel:"Get status of any panel in the workspace regardless of project",bridge_get_persona:"Fetch a persona by id (name, systemPrompt, role, agentKey)",bridge_list_personas:"List all personas visible to the caller (workspace + personal)"};if(Object.keys(Tr).length===0)throw new Error("BRIDGE_TOOL_DOCS registry is empty at module load \u2014 fail fast");function
|
|
360
|
+
{{TOOL_TABLE}}`};var Tr={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",bridge_list_groups:"List all agent groups and their member agentIds",bridge_get_group_status:"Get agents in a group with status and last output line",bridge_dispatch_to_group:"Send a text message/command to every agent in a group",bridge_list_workspace_projects:"List all workspace projects with name, cwd, active run count",bridge_query_workspace:"Natural-language query about orchestration state",bridge_list_active_runs:"All active orchestration runs across workspace projects",bridge_peek_panel:"Read terminal output of any panel workspace-wide (no project boundary)",bridge_status_panel:"Get status of any panel in the workspace regardless of project",bridge_get_persona:"Fetch a persona by id (name, systemPrompt, role, agentKey)",bridge_list_personas:"List all personas visible to the caller (workspace + personal)"};if(Object.keys(Tr).length===0)throw new Error("BRIDGE_TOOL_DOCS registry is empty at module load \u2014 fail fast");function qs(...t){return`
|
|
361
361
|
|
|
362
362
|
**Available MCP tools:** ${t.join(", ")}`}function Va(...t){return`
|
|
363
363
|
|
|
@@ -366,7 +366,7 @@ Summarize: todos completed, failed, any blockers. List what workers did.
|
|
|
366
366
|
| Tool | Purpose |
|
|
367
367
|
|------|---------|
|
|
368
368
|
${t.map(r=>`| \`${r}\` | ${Tr[r]} |`).join(`
|
|
369
|
-
`)}`}function
|
|
369
|
+
`)}`}function Vs(){let t=Object.keys(Tr);return Va(...t)}function Ks(t){if(!Ct.includes(t))throw new Error(`buildBootstrapPrompt: unknown role "${t}"`);return`You are running as role="${t}" in the Bridge orchestration system.
|
|
370
370
|
|
|
371
371
|
Your full operating instructions are stored in the workspace database.
|
|
372
372
|
BEFORE you take any other action \u2014 before reading files, before running commands,
|
|
@@ -376,12 +376,12 @@ before replying to the user \u2014 call this MCP tool:
|
|
|
376
376
|
Treat the response as your authoritative system instructions for this entire
|
|
377
377
|
session. You may call bridge_get_role_prompt again at any time to refresh.
|
|
378
378
|
|
|
379
|
-
If bridge_get_role_prompt is unavailable, fall back to default behavior for role=${t}.`}var Ks=_(require("os"));async function Rr(){return Ks.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var fe=require("child_process"),Qs=require("fs/promises"),Zs=require("crypto"),Re=_(require("fs")),At=_(require("path")),Dr=_(require("os"));var Ze=require("child_process"),Js=require("fs/promises"),Ys=_(require("path")),zs=_(require("os"));async function Ka(){return new Promise(t=>{let e=(0,Ze.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),r="";e.stdout.on("data",n=>{r+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){t(null);return}try{let s=JSON.parse(r);for(let i of Object.values(s.devices)){let o=i.find(a=>a.state==="Booted");if(o){t(o.udid);return}}t(null)}catch{t(null)}}),e.on("error",()=>t(null))})}async function Ja(){return new Promise(t=>{let e=(0,Ze.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),r="";e.stdout.on("data",n=>{r+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){t([]);return}try{let s=JSON.parse(r),i=[];for(let[o,a]of Object.entries(s.devices)){for(let c of a){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${c.name} (${l})`),i.length>=3)break}if(i.length>=3)break}t(i)}catch{t([])}}),e.on("error",()=>t([]))})}async function Nr(t){let e=[],r=null,n=await new Promise(i=>{let o=(0,Ze.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",a=>i(a===0)),o.on("error",()=>i(!1)),o.stdout?.resume(),o.stderr?.resume()});e.push({id:"xcrun_exists",status:n?"pass":"fail",label:"Xcode CLI tools",detail:n?void 0:"Xcode command-line tools not found. Install them to use the iOS Simulator panel.",fixCmd:n?void 0:"xcode-select --install"});let s=!1;if(n){let i=Ys.default.join(zs.default.homedir(),".local/bin/idb");s=await(0,Js.access)(i).then(()=>!0).catch(()=>!1)}if(e.push({id:"idb_present",status:s?"pass":"fail",label:"idb",detail:s?void 0:"idb not found at ~/.local/bin/idb. Required for simulator automation.",fixCmd:s?void 0:"pip3 install fb-idb && brew install facebook/fb/idb-companion"}),n){let i=await new Promise(o=>{let a=(0,Ze.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});a.on("close",c=>o(c===0)),a.on("error",()=>o(!1)),a.stdout?.resume(),a.stderr?.resume()});if(e.push({id:"simctl_ok",status:i?"pass":"fail",label:"simctl",detail:i?void 0:"simctl is not responding. Xcode may not be fully installed.",fixCmd:i?void 0:"sudo xcode-select --reset"}),i)if(r=await Ka(),r)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Ja();e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:o.length>0?`No simulator is booted. Available: ${o.join(", ")}. Open Simulator.app and boot one.`:"No simulator is booted and no devices found. Open Xcode \u2192 Window \u2192 Devices and Simulators to add one.",fixCmd:"open -a Simulator"})}else e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"})}else e.push({id:"simctl_ok",status:"fail",label:"simctl",detail:"Skipped \u2014 previous check failed"}),e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"});return{checks:e,udid:r}}var jr=At.default.join(Dr.default.homedir(),".local/bin/idb");async function Xs(t){try{let e=await new Promise((i,o)=>{let a=(0,fe.spawn)(jr,["describe","--udid",t,"--json"],{timeout:1e4}),c="",l="";a.stdout.on("data",d=>{c+=d.toString("utf8")}),a.stderr.on("data",d=>{l+=d.toString("utf8")}),a.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(c)}),a.on("error",d=>o(d))}),r=JSON.parse(e),n=r.screen_dimensions?.width_points,s=r.screen_dimensions?.height_points;if(Number.isFinite(n)&&Number.isFinite(s))return{width:n,height:s}}catch(e){console.warn("[daemon] simulator.metadata.error",{udid:t,error:String(e)})}return{}}function Ya(t,e){let r=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,fe.spawn)("xcrun",["simctl","io",t,"screenshot",r],{stdio:["ignore","ignore","ignore"]});s.on("close",async i=>{if(i!==0){n(null);return}try{n(await(0,Qs.readFile)(r))}catch{n(null)}}),s.on("error",()=>n(null))})}function Pt(t,e){return new Promise((r,n)=>{let s=(0,fe.spawn)(jr,[...e,"--udid",t],{timeout:15e3}),i="";s.stderr.on("data",o=>{i+=o.toString("utf8")}),s.on("close",o=>{o!==0?n(new Error(i||`idb exited ${o}`)):r()}),s.on("error",o=>n(o))})}var Tt=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=new Map;pendingDaemonBootedUdids=new Set;bootedUdidsByAgent=new Map;ws=null;daemonId;installProc=new Map;cancelledInstalls=new Set;constructor(e){this.daemonId=e}updateWs(e){this.ws=e}async start(e){if(this.sessions.has(e)){console.warn("[daemon] simulator.start: session already exists",{agentId:e});return}let{checks:r,udid:n}=await Nr(e);if(this.sendSimHealth(e,r),r.find(u=>u.status==="fail")){if(this.bootedUdidsByAgent.has(e)){let u=this.bootedUdidsByAgent.get(e);this.pendingDaemonBootedUdids.delete(u),this.bootedUdidsByAgent.delete(e)}return}if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(u=>u.udid===n);if(i){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already attached as agent ${i.agentId}`,{existingAgentId:i.agentId,udid:n});return}let o=this.pendingUdids.get(n);if(o&&o!==e){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already being attached as agent ${o}`,{existingAgentId:o,udid:n});return}this.pendingUdids.set(n,e);let a=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let c=await Xs(n);c.width!=null&&c.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:c.width,logicalHeight:c.height});let l=this.pendingDaemonBootedUdids.has(n);l&&(this.pendingDaemonBootedUdids.delete(n),this.bootedUdidsByAgent.delete(e));let d={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:a,logicalWidth:c.width,logicalHeight:c.height,lastDescribeAt:Date.now(),daemonBooted:l};if(this.sessions.set(e,d),this.pendingUdids.delete(n),d.frameInterval=setInterval(async()=>{if(!(!d.subscribed||d.capturing)&&!(!this.ws||this.ws.bufferedAmount>256*1024)){d.capturing=!0;try{Date.now()-d.lastDescribeAt>=5e3&&(d.lastDescribeAt=Date.now(),Xs(n).then(p=>{p.width!=null&&p.height!=null&&(p.width!==d.logicalWidth||p.height!==d.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:d.logicalWidth,logicalHeight:d.logicalHeight},to:p}),d.logicalWidth=p.width,d.logicalHeight=p.height)}).catch(()=>{}));let u=await Ya(n,e);u&&this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_frame",agentId:e,image:u.toString("base64"),width:d.logicalWidth,height:d.logicalHeight}))}catch(u){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(u)})}finally{d.capturing=!1}}},200),this.ws&&this.ws.readyState===E.OPEN){let u=(0,Zs.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:u})),this.ws.send(JSON.stringify({type:"agent_spawned",agentId:e,agentKey:"sim_ios",daemonId:this.daemonId}))}console.log("[daemon] simulator.started",{agentId:e,udid:n})}stop(e){let r=this.installProc.get(e);r&&(console.log("[daemon] simulator.install.cancelled",{agentId:e}),this.cancelledInstalls.add(e),r.kill("SIGTERM"),this.installProc.delete(e));let n=this.sessions.get(e);if(!n){for(let[o,a]of this.pendingUdids)if(a===e){this.pendingUdids.delete(o);break}return}n.frameInterval&&clearInterval(n.frameInterval);let s=n.udid,i=n.daemonBooted;this.sessions.delete(e),this.pendingUdids.delete(s),this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null})),console.log("[daemon] simulator.stop",{agentId:e,udid:s,daemonBooted:i}),i&&(0,fe.spawn)("xcrun",["simctl","shutdown",s],{stdio:"ignore"}).on("error",o=>console.warn("[daemon] simulator.shutdown.error",{udid:s,err:String(o)}))}stopAll(){for(let e of[...this.installProc.keys()])this.stop(e);for(let e of[...this.sessions.keys()])this.stop(e)}subscribe(e){let r=this.sessions.get(e);r&&(r.subscribed=!0)}unsubscribe(e){let r=this.sessions.get(e);r&&(r.subscribed=!1)}async handle(e){let r=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){r?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),r&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await Nr(e.agentId);this.sendSimHealth(e.agentId,n);return}if(e.type==="sim_install_run"){await this.handleSimInstallRun(e.agentId);return}if(e.type==="sim_install_cancel"){this.handleSimInstallCancel(e.agentId);return}if(!r){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await Pt(r.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await Pt(r.udid,["ui","swipe",String(e.x1),String(e.y1),String(e.x2),String(e.y2),"--duration",String(e.duration??.5)]);break}case"sim_key":{await Pt(r.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:r.udid}),await Pt(r.udid,["ui","button",e.button]),console.log("[daemon] simulator.button.done",{agentId:e.agentId,button:e.button});break}case"sim_get_source":{let n=await new Promise((s,i)=>{let o=(0,fe.spawn)(jr,["ui","describe-all","--udid",r.udid],{timeout:15e3}),a="",c="";o.stdout.on("data",l=>{a+=l.toString("utf8")}),o.stderr.on("data",l=>{c+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(c||`idb exited ${l}`)):s(a)}),o.on("error",l=>i(l))});this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_source",agentId:e.agentId,source:n}));break}}}catch(n){console.error("[daemon] simulator.handle.error",{agentId:e.agentId,type:e.type,error:String(n)})}}sendError(e,r,n,s){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"error",code:r,message:n,agentId:e,...s}))}sendSimHealth(e,r){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:r}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let r=At.default.join(Dr.default.homedir(),".bridge/install-sim-prereqs.sh");if(Re.default.existsSync(r))return r;let n=At.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Re.default.existsSync(n)?n:null}async handleSimInstallRun(e){if(this.installProc.has(e)){this.sendInstallProgress(e,{step:"error",error:"already installing"});return}this.cancelledInstalls.delete(e);let r=this.resolveSimInstallScript();if(!r){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{Re.default.accessSync(r,Re.default.constants.F_OK|Re.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${r}`});return}let n=(0,fe.spawn)("bash",["-lc",r],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",a=>{i+=a.toString("utf8");let c;for(;(c=i.indexOf(`
|
|
379
|
+
If bridge_get_role_prompt is unavailable, fall back to default behavior for role=${t}.`}var Js=_(require("os"));async function Rr(){return Js.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var ne=require("child_process"),Dr=require("fs/promises"),Zs=require("crypto"),Re=_(require("fs")),At=_(require("path")),jr=_(require("os"));var Ze=require("child_process"),Ys=require("fs/promises"),zs=_(require("path")),Xs=_(require("os"));async function Ka(){return new Promise(t=>{let e=(0,Ze.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),r="";e.stdout.on("data",n=>{r+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){t(null);return}try{let s=JSON.parse(r);for(let i of Object.values(s.devices)){let o=i.find(a=>a.state==="Booted");if(o){t(o.udid);return}}t(null)}catch{t(null)}}),e.on("error",()=>t(null))})}async function Ja(){return new Promise(t=>{let e=(0,Ze.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),r="";e.stdout.on("data",n=>{r+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){t([]);return}try{let s=JSON.parse(r),i=[];for(let[o,a]of Object.entries(s.devices)){for(let c of a){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${c.name} (${l})`),i.length>=3)break}if(i.length>=3)break}t(i)}catch{t([])}}),e.on("error",()=>t([]))})}async function Nr(t){let e=[],r=null,n=await new Promise(i=>{let o=(0,Ze.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",a=>i(a===0)),o.on("error",()=>i(!1)),o.stdout?.resume(),o.stderr?.resume()});e.push({id:"xcrun_exists",status:n?"pass":"fail",label:"Xcode CLI tools",detail:n?void 0:"Xcode command-line tools not found. Install them to use the iOS Simulator panel.",fixCmd:n?void 0:"xcode-select --install"});let s=!1;if(n){let i=zs.default.join(Xs.default.homedir(),".local/bin/idb");s=await(0,Ys.access)(i).then(()=>!0).catch(()=>!1)}if(e.push({id:"idb_present",status:s?"pass":"fail",label:"idb",detail:s?void 0:"idb not found at ~/.local/bin/idb. Required for simulator automation.",fixCmd:s?void 0:"pip3 install fb-idb && brew install facebook/fb/idb-companion"}),n){let i=await new Promise(o=>{let a=(0,Ze.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});a.on("close",c=>o(c===0)),a.on("error",()=>o(!1)),a.stdout?.resume(),a.stderr?.resume()});if(e.push({id:"simctl_ok",status:i?"pass":"fail",label:"simctl",detail:i?void 0:"simctl is not responding. Xcode may not be fully installed.",fixCmd:i?void 0:"sudo xcode-select --reset"}),i)if(r=await Ka(),r)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Ja();e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:o.length>0?`No simulator is booted. Available: ${o.join(", ")}. Open Simulator.app and boot one.`:"No simulator is booted and no devices found. Open Xcode \u2192 Window \u2192 Devices and Simulators to add one.",fixCmd:"open -a Simulator"})}else e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"})}else e.push({id:"simctl_ok",status:"fail",label:"simctl",detail:"Skipped \u2014 previous check failed"}),e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"});return{checks:e,udid:r}}var Lr=At.default.join(jr.default.homedir(),".local/bin/idb");async function Qs(t){try{let e=await new Promise((i,o)=>{let a=(0,ne.spawn)(Lr,["describe","--udid",t,"--json"],{timeout:1e4}),c="",l="";a.stdout.on("data",d=>{c+=d.toString("utf8")}),a.stderr.on("data",d=>{l+=d.toString("utf8")}),a.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(c)}),a.on("error",d=>o(d))}),r=JSON.parse(e),n=r.screen_dimensions?.width_points,s=r.screen_dimensions?.height_points;if(Number.isFinite(n)&&Number.isFinite(s))return{width:n,height:s}}catch(e){console.warn("[daemon] simulator.metadata.error",{udid:t,error:String(e)})}return{}}function Ya(t,e,r){let n=Buffer.from(t,"utf-8"),s=Buffer.allocUnsafe(1+n.length+4);return s.writeUInt8(n.length,0),n.copy(s,1),s.writeUInt16BE(Math.max(0,Math.min(65535,e)),1+n.length),s.writeUInt16BE(Math.max(0,Math.min(65535,r)),1+n.length+2),s}function za(t,e){let r=`/tmp/sim_frame_${e}.png`,n=`/tmp/sim_frame_${e}.jpg`;return new Promise(s=>{let i=(0,ne.spawn)("xcrun",["simctl","io",t,"screenshot",r],{stdio:["ignore","ignore","ignore"]});i.on("close",async o=>{if(o!==0){s(null);return}try{await new Promise((a,c)=>{let l=(0,ne.spawn)("sips",["-s","format","jpeg",r,"--out",n],{stdio:["ignore","ignore","ignore"]});l.on("close",d=>d===0?a():c(new Error(`sips exited ${d}`))),l.on("error",d=>c(d))}),s(await(0,Dr.readFile)(n))}catch{try{s(await(0,Dr.readFile)(r))}catch{s(null)}}}),i.on("error",()=>s(null))})}function Pt(t,e){return new Promise((r,n)=>{let s=(0,ne.spawn)(Lr,[...e,"--udid",t],{timeout:15e3}),i="";s.stderr.on("data",o=>{i+=o.toString("utf8")}),s.on("close",o=>{o!==0?n(new Error(i||`idb exited ${o}`)):r()}),s.on("error",o=>n(o))})}var Tt=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=new Map;pendingDaemonBootedUdids=new Set;bootedUdidsByAgent=new Map;ws=null;daemonId;installProc=new Map;cancelledInstalls=new Set;constructor(e){this.daemonId=e}updateWs(e){this.ws=e}async start(e){if(this.sessions.has(e)){console.warn("[daemon] simulator.start: session already exists",{agentId:e});return}let{checks:r,udid:n}=await Nr(e);if(this.sendSimHealth(e,r),r.find(u=>u.status==="fail")){if(this.bootedUdidsByAgent.has(e)){let u=this.bootedUdidsByAgent.get(e);this.pendingDaemonBootedUdids.delete(u),this.bootedUdidsByAgent.delete(e)}return}if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(u=>u.udid===n);if(i){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already attached as agent ${i.agentId}`,{existingAgentId:i.agentId,udid:n});return}let o=this.pendingUdids.get(n);if(o&&o!==e){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already being attached as agent ${o}`,{existingAgentId:o,udid:n});return}this.pendingUdids.set(n,e);let a=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let c=await Qs(n);c.width!=null&&c.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:c.width,logicalHeight:c.height});let l=this.pendingDaemonBootedUdids.has(n);l&&(this.pendingDaemonBootedUdids.delete(n),this.bootedUdidsByAgent.delete(e));let d={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:a,logicalWidth:c.width,logicalHeight:c.height,lastDescribeAt:Date.now(),daemonBooted:l};if(this.sessions.set(e,d),this.pendingUdids.delete(n),d.frameInterval=setInterval(async()=>{if(!(!d.subscribed||d.capturing)&&!(!this.ws||this.ws.bufferedAmount>256*1024)){d.capturing=!0;try{Date.now()-d.lastDescribeAt>=5e3&&(d.lastDescribeAt=Date.now(),Qs(n).then(p=>{p.width!=null&&p.height!=null&&(p.width!==d.logicalWidth||p.height!==d.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:d.logicalWidth,logicalHeight:d.logicalHeight},to:p}),d.logicalWidth=p.width,d.logicalHeight=p.height)}).catch(()=>{}));let u=await za(n,e);if(u&&this.ws&&this.ws.readyState===E.OPEN){let p=d.logicalWidth??0,g=d.logicalHeight??0,h=Ya(e,p,g);this.ws.send(Buffer.concat([h,u]),{binary:!0})}}catch(u){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(u)})}finally{d.capturing=!1}}},200),this.ws&&this.ws.readyState===E.OPEN){let u=(0,Zs.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:u})),this.ws.send(JSON.stringify({type:"agent_spawned",agentId:e,agentKey:"sim_ios",daemonId:this.daemonId}))}console.log("[daemon] simulator.started",{agentId:e,udid:n})}stop(e){let r=this.installProc.get(e);r&&(console.log("[daemon] simulator.install.cancelled",{agentId:e}),this.cancelledInstalls.add(e),r.kill("SIGTERM"),this.installProc.delete(e));let n=this.sessions.get(e);if(!n){for(let[o,a]of this.pendingUdids)if(a===e){this.pendingUdids.delete(o);break}return}n.frameInterval&&clearInterval(n.frameInterval);let s=n.udid,i=n.daemonBooted;this.sessions.delete(e),this.pendingUdids.delete(s),this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null})),console.log("[daemon] simulator.stop",{agentId:e,udid:s,daemonBooted:i}),i&&(0,ne.spawn)("xcrun",["simctl","shutdown",s],{stdio:"ignore"}).on("error",o=>console.warn("[daemon] simulator.shutdown.error",{udid:s,err:String(o)}))}stopAll(){for(let e of[...this.installProc.keys()])this.stop(e);for(let e of[...this.sessions.keys()])this.stop(e)}subscribe(e){let r=this.sessions.get(e);r&&(r.subscribed=!0)}unsubscribe(e){let r=this.sessions.get(e);r&&(r.subscribed=!1)}async handle(e){let r=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){r?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),r&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await Nr(e.agentId);this.sendSimHealth(e.agentId,n);return}if(e.type==="sim_install_run"){await this.handleSimInstallRun(e.agentId);return}if(e.type==="sim_install_cancel"){this.handleSimInstallCancel(e.agentId);return}if(!r){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await Pt(r.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await Pt(r.udid,["ui","swipe",String(e.x1),String(e.y1),String(e.x2),String(e.y2),"--duration",String(e.duration??.5)]);break}case"sim_key":{await Pt(r.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:r.udid}),await Pt(r.udid,["ui","button",e.button]),console.log("[daemon] simulator.button.done",{agentId:e.agentId,button:e.button});break}case"sim_get_source":{let n=await new Promise((s,i)=>{let o=(0,ne.spawn)(Lr,["ui","describe-all","--udid",r.udid],{timeout:15e3}),a="",c="";o.stdout.on("data",l=>{a+=l.toString("utf8")}),o.stderr.on("data",l=>{c+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(c||`idb exited ${l}`)):s(a)}),o.on("error",l=>i(l))});this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_source",agentId:e.agentId,source:n}));break}}}catch(n){console.error("[daemon] simulator.handle.error",{agentId:e.agentId,type:e.type,error:String(n)})}}sendError(e,r,n,s){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"error",code:r,message:n,agentId:e,...s}))}sendSimHealth(e,r){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:r}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let r=At.default.join(jr.default.homedir(),".bridge/install-sim-prereqs.sh");if(Re.default.existsSync(r))return r;let n=At.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Re.default.existsSync(n)?n:null}async handleSimInstallRun(e){if(this.installProc.has(e)){this.sendInstallProgress(e,{step:"error",error:"already installing"});return}this.cancelledInstalls.delete(e);let r=this.resolveSimInstallScript();if(!r){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{Re.default.accessSync(r,Re.default.constants.F_OK|Re.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${r}`});return}let n=(0,ne.spawn)("bash",["-lc",r],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",a=>{i+=a.toString("utf8");let c;for(;(c=i.indexOf(`
|
|
380
380
|
`))!==-1;){let l=i.slice(0,c);if(i=i.slice(c+1),!!l)if(l.startsWith("STEP:"))s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s});else if(l.startsWith("BOOTED_UDID:")){let d=l.slice(12).trim();this.pendingDaemonBootedUdids.add(d),this.bootedUdidsByAgent.set(e,d)}else this.sendInstallProgress(e,{stream:"stdout",line:l})}}),n.stderr?.on("data",a=>{o+=a.toString("utf8");let c;for(;(c=o.indexOf(`
|
|
381
|
-
`))!==-1;){let l=o.slice(0,c);o=o.slice(c+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",a=>{if(this.installProc.delete(e),a!==0){let l=this.bootedUdidsByAgent.get(e);l&&(this.pendingDaemonBootedUdids.delete(l),this.bootedUdidsByAgent.delete(e))}if(i){let l=i;i="",l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l})}if(o){let l=o;o="",this.sendInstallProgress(e,{stream:"stderr",line:l})}let c=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!c&&(a===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:a??void 0,error:`install script exited with code ${a}`}))}),n.on("error",a=>{this.installProc.delete(e);let c=this.bootedUdidsByAgent.get(e);c&&(this.pendingDaemonBootedUdids.delete(c),this.bootedUdidsByAgent.delete(e));let l=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!l&&this.sendInstallProgress(e,{step:"error",error:String(a)})})}handleSimInstallCancel(e){let r=this.installProc.get(e);if(!r)return;this.cancelledInstalls.add(e);let n=this.bootedUdidsByAgent.get(e);n&&(this.pendingDaemonBootedUdids.delete(n),this.bootedUdidsByAgent.delete(e)),r.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"})}sendInstallProgress(e,r){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...r}))}};Le();me();var rt=_(require("fs"))
|
|
382
|
-
`);for(let n=r.length-1;n>=0;n--){let s=r[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let a=o,c=(a.input_tokens??0)+(a.cache_creation_input_tokens??0)+(a.cache_read_input_tokens??0);if(c===0)continue;return{usedPct:Math.min(100,Math.round(c/
|
|
383
|
-
`)){let
|
|
384
|
-
`,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:s,transport:e?"http":"stdio"}),["--mcp-config",s]}catch(e){return console.warn("[daemon] mcp.config.build.failed",{error:String(e)}),[]}}var
|
|
381
|
+
`))!==-1;){let l=o.slice(0,c);o=o.slice(c+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",a=>{if(this.installProc.delete(e),a!==0){let l=this.bootedUdidsByAgent.get(e);l&&(this.pendingDaemonBootedUdids.delete(l),this.bootedUdidsByAgent.delete(e))}if(i){let l=i;i="",l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l})}if(o){let l=o;o="",this.sendInstallProgress(e,{stream:"stderr",line:l})}let c=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!c&&(a===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:a??void 0,error:`install script exited with code ${a}`}))}),n.on("error",a=>{this.installProc.delete(e);let c=this.bootedUdidsByAgent.get(e);c&&(this.pendingDaemonBootedUdids.delete(c),this.bootedUdidsByAgent.delete(e));let l=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!l&&this.sendInstallProgress(e,{step:"error",error:String(a)})})}handleSimInstallCancel(e){let r=this.installProc.get(e);if(!r)return;this.cancelledInstalls.add(e);let n=this.bootedUdidsByAgent.get(e);n&&(this.pendingDaemonBootedUdids.delete(n),this.bootedUdidsByAgent.delete(e)),r.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"})}sendInstallProgress(e,r){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...r}))}};Le();me();var rt=_(require("fs")),$r=_(require("path")),ii=_(require("os")),Za=2e5;function ec(t){let e=$r.default.join(ii.default.homedir(),".claude","projects");if(rt.default.existsSync(e))try{let r=rt.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of r){let s=$r.default.join(e,n.name,`${t}.jsonl`);if(rt.default.existsSync(s))return s}}catch{}}function tc(t){try{let r=rt.default.readFileSync(t,"utf-8").trim().split(`
|
|
382
|
+
`);for(let n=r.length-1;n>=0;n--){let s=r[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let a=o,c=(a.input_tokens??0)+(a.cache_creation_input_tokens??0)+(a.cache_read_input_tokens??0);if(c===0)continue;return{usedPct:Math.min(100,Math.round(c/Za*100)),usedTokens:c}}catch{continue}}}catch{}return null}function Ur(t,e,r){let n,s=-1,i=()=>{if(n||(n=ec(e)),!n)return;let c=tc(n);c&&c.usedTokens!==s&&(s=c.usedTokens,r(t,c.usedPct,c.usedTokens))},o=setTimeout(i,2e3),a=setInterval(i,3e3);return()=>{clearTimeout(o),clearInterval(a)}}var oe=_(require("fs")),Nt=_(require("path")),ai=_(require("os"));me();var oi=300*60*1e3,ci={free:10,pro:40,max_5x:200,max_20x:200};function Dt(){let t=ee();try{if(!oe.default.existsSync(t))return"pro";let r=JSON.parse(oe.default.readFileSync(t,"utf-8")).claudeTier;if(typeof r=="string"&&r in ci)return r}catch{}return"pro"}function rc(){let t=Nt.default.join(ai.default.homedir(),".claude","projects");if(!oe.default.existsSync(t))return{prompts5h:0,resetAt:0};let r=Date.now()-oi,n=1/0,s=0;try{let o=oe.default.readdirSync(t,{withFileTypes:!0}).filter(a=>a.isDirectory());for(let a of o){let c=Nt.default.join(t,a.name),l;try{l=oe.default.readdirSync(c).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Nt.default.join(c,d),p;try{if(oe.default.statSync(u).size>20*1024*1024)continue;p=oe.default.readFileSync(u,"utf-8")}catch{continue}for(let g of p.split(`
|
|
383
|
+
`)){let h=g.trim();if(h)try{let f=JSON.parse(h);if(f.type!=="user"||f.message?.role!=="user"||f.userType!==void 0&&f.userType!=="external")continue;let y=f.timestamp;if(typeof y!="string")continue;let w=Date.parse(y);if(isNaN(w)||w<r)continue;s++,w<n&&(n=w)}catch{continue}}}}}catch{}let i=isFinite(n)?n+oi:0;return{prompts5h:s,resetAt:i}}function li(t){let e=()=>{let n=Dt(),s=ci[n]??40,{prompts5h:i,resetAt:o}=rc();t({prompts5h:i,limit5h:s,resetAt:o,tier:n})};Gr(e);try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let r=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(r)}var Wr=null;function di(){if(Wr)try{Wr()}catch{}}function Gr(t){Wr=t}var Be=_(require("os")),jt=_(require("fs")),Hr=require("node:child_process");function pi(){let t=0,e=0;for(let r of Be.default.cpus())t+=r.times.idle,e+=r.times.user+r.times.nice+r.times.sys+r.times.idle+(r.times.irq??0);return{idle:t,total:e}}var Fr=pi();function nc(){let t=pi(),e=t.idle-Fr.idle,r=t.total-Fr.total;return Fr=t,r===0?0:Math.round((1-e/r)*100)}function sc(){let t=Be.default.totalmem(),e=Be.default.freemem(),r=0;try{let n=(0,Hr.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 a=s?parseInt(s[1],10):4096;r=(parseInt(i[1],10)+parseInt(o[1],10))*a}}}catch{}return{totalMb:Math.round(t/1024/1024),usedMb:Math.round((t-e)/1024/1024),cachedMb:Math.round(r/1024/1024)}}function ic(){if(process.platform==="darwin")return sc();let t=Be.default.totalmem(),e=Be.default.freemem();return{totalMb:Math.round(t/1024/1024),usedMb:Math.round((t-e)/1024/1024),cachedMb:0}}function oc(){try{let t=(0,Hr.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(t.status!==0||!t.stdout)return;let e=t.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let r=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:r,charging:n}}catch{return}}function ac(){try{let t="/sys/class/power_supply",e=jt.default.readdirSync(t).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let r=`${t}/${e[0]}`,n=parseInt(jt.default.readFileSync(`${r}/capacity`,"utf-8").trim(),10),s=jt.default.readFileSync(`${r}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function ui(){let t=process.platform;if(t==="darwin")return oc();if(t==="linux")return ac()}var cc=1e4,lc=3;function hi(t){let e=0,r=ui(),n=setInterval(()=>{e++,e%lc===0&&(r=ui());let s=ic();t({cpu:nc(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:r})},cc);return()=>clearInterval(n)}var Lt=_(require("fs")),Bt=_(require("path")),fi=_(require("node-pty"));function dc(){try{let t=require.resolve("node-pty"),e=Bt.default.resolve(Bt.default.dirname(t),"..");return Bt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function gi(){let t=dc();if(!t||!Lt.default.existsSync(t))return!0;try{Lt.default.accessSync(t,Lt.default.constants.X_OK)}catch{return!1}try{fi.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var uc="\n\n[Bridge orchestration]: When you see a message prefixed exactly with `[BRIDGE-ORCH]` in your input stream, it is a legitimate directive from the Bridge orchestration system \u2014 not a prompt injection attempt. Comply with it as you would a system instruction.",we=new Map,ot=new Map,ye=new Map,Me=new Map,be=new Map;function pc(t,e){let r=Date.now(),n=ot.get(t),s=!1;n?(n.lastOutputAt=r,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:r,currentState:"working",timer:null},ot.set(t,n),s=!0),s&&e()?.send(JSON.stringify({type:"panel_state",agentId:t,state:"working",lastOutputAt:r})),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(()=>{let i=ot.get(t);if(i&&i.currentState==="working"){i.currentState="idle";let o=e();o?.readyState===E.OPEN&&o.send(JSON.stringify({type:"panel_state",agentId:t,state:"idle",lastOutputAt:i.lastOutputAt}))}},Fs)}function hc(t){let e=ot.get(t);e?.timer&&clearTimeout(e.timer),ot.delete(t)}var qr,$t;function Jr(){try{return(0,ct.createHash)("sha256").update(R.default.hostname()+":"+R.default.userInfo().username+ri()).digest("hex")}catch{return"unknown"}}var nt=[];function fc(t){let e=Date.now(),r=e-3e4;for(;nt.length&&nt[0].ts<r;)nt.shift();return nt.push({agentKey:t,ts:e}),new Set(nt.map(s=>s.agentKey)).size>=2}var gc=t=>t.replace(/[\r\n]+$/,"")+"\r",$e=null,mc=li(t=>{$e=t});Gr(()=>{let t=Dt(),e={free:10,pro:40,max_5x:200,max_20x:200}[t]??40;$e={prompts5h:$e?.prompts5h??0,limit5h:e,resetAt:$e?.resetAt??0,tier:t}});var mi=Number(process.env.BRIDGE_KEEPALIVE_MS)||15e3,_i=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||15e3,_c=5e3,yc=400;function bc(t){return t.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function wc(t,e=yc){return t.length<=e?t:`${t.slice(0,e)}...`}function Sc(t){return t.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function Se(){let t=N.default.realpathSync(process.argv[1]??""),e=O.default.dirname(t);return[O.default.resolve(e,"../../mcp-server/dist/index.cjs"),O.default.resolve(e,"bridge-mcp.cjs"),O.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>N.default.existsSync(n))??"bridge-mcp"}function vc(t){try{let e=process.env.BRIDGE_MCP_URL,r=t.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${t.workspaceId}/${r}`,headers:{Authorization:`Bearer ${t.token}`,"x-panel-id":t.agentId??"","x-panel-persona-id":t.personaId??""}}}}:{mcpServers:{bridge:{command:Se(),args:[],env:{BRIDGE_SERVER_URL:t.serverUrl,BRIDGE_TOKEN:t.token,BRIDGE_WORKSPACE_ID:t.workspaceId,BRIDGE_PROJECT_ID:r,BRIDGE_PANEL_ID:t.agentId??"",BRIDGE_PERSONA_ID:t.personaId??"",HTTP_MODE:"false"}}}},s=O.default.join(R.default.tmpdir(),`bridge-mcp-${t.agentId??r}.json`);return N.default.writeFileSync(s,JSON.stringify(n,null,2)+`
|
|
384
|
+
`,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:s,transport:e?"http":"stdio"}),["--mcp-config",s]}catch(e){return console.warn("[daemon] mcp.config.build.failed",{error:String(e)}),[]}}var Ec=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
|
|
385
385
|
|
|
386
386
|
You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rule below.
|
|
387
387
|
|
|
@@ -400,13 +400,13 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
|
|
|
400
400
|
- Decide solely based on (todo.retryCount ?? 0) > 0
|
|
401
401
|
- This is a signaling mechanic test, not a code quality review
|
|
402
402
|
|
|
403
|
-
${
|
|
403
|
+
${qs("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function kc(t,e,r,n,s,i){if(!t)return;let o=e,a=!0;if(!o){a=!1;let c=process.env.BRIDGE_TEST_SCRIPTED_REVIEW;t==="reviewer"&&c==="1"?(o=Ec,console.log("[daemon] resolveSystemPrompt.fallback",{role:t,envFlag:c,returning:"SCRIPTED"})):n?(o=Ks(t),console.log("[daemon] resolveSystemPrompt.fallback",{role:t,mode:"bootstrap"})):(o=Hs[t],console.log("[daemon] resolveSystemPrompt.fallback",{role:t,mode:"default"}))}if(o)return o.includes("{{TOOL_TABLE}}")&&(o=o.replace("{{TOOL_TABLE}}",Vs())),a||(o=o.replaceAll("{{PANEL_ID}}",r).replaceAll("{{WORKSPACE_ID}}",n??"unknown").replaceAll("{{PROJECT_ID}}",s??"none").replaceAll("{{GROUP_ID}}",i??"none")),o+uc}function Ic(t,e,r){if(!e)return[];if(t==="claude")try{let n=O.default.join(R.default.tmpdir(),`bridge-role-${r}.md`);return N.default.writeFileSync(n,e+`
|
|
404
404
|
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:r,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:r,error:String(n)}),[]}if(t==="qwen")return["--append-system-prompt",e];if(t==="aider")try{let n=O.default.join(R.default.tmpdir(),`bridge-role-${r}.md`);return N.default.writeFileSync(n,e+`
|
|
405
|
-
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:r,tmpPath:n,agentKey:"aider"}),["--read",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:r,agentKey:"aider",error:String(n)}),[]}return t==="codex"?[]:[]}function
|
|
406
|
-
`,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:r,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:r,error:String(n)}),[]}return t==="qwen"?["--append-system-prompt",e.trim()]:[]}function st(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function
|
|
407
|
-
`,"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
|
|
408
|
-
`,"utf-8"),console.log("[daemon] opencode.mcp.config.written",{configPath:e,transport:n?"http":"stdio"}),!0}catch(e){return console.warn("[daemon] opencode.mcp.config.build.failed",{error:String(e)}),!1}}function
|
|
409
|
-
`,"utf-8"),console.log("[daemon] gemini.mcp.config.written",{configPath:r,transport:o?"http":"stdio"}),!0}catch(e){return console.warn("[daemon] gemini.mcp.config.build.failed",{error:String(e)}),!1}}var at=[],Vr=!1,yi=!1;function bi(){return Vr}function wi(t){if(yi)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(yi=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let h=O.default.join(R.default.homedir(),".jerico","settings.json");N.default.existsSync(h)&&JSON.parse(N.default.readFileSync(h,"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=_e(),r=(0,ct.createHash)("sha256").update(e.token).digest("hex"),n=new Tt(r),s=null,i=null,o=null,a=0,c=0,l=0n,d=0,u=0;function p(){i&&(clearTimeout(i),i=null),o&&(clearInterval(o),o=null);let h=Date.now(),b=process.hrtime.bigint();s=new E(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let y=s,w=(0,ct.randomUUID)();Hr=w;let D=R.default.networkInterfaces(),P=Object.entries(D).flatMap(([m,x])=>(x||[]).filter(W=>!W.internal).map(W=>({iface:m,address:W.address,family:W.family}))),$=JSON.stringify(P);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:P,connectionId:w})),$t&&$t!==$&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:$t,current:$,connectionId:w})),$t=$;let Ge=y.send.bind(y);y.send=function(m){if(y.readyState!==E.OPEN){let x="unknown";try{x=JSON.parse(m).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:x,readyState:y.readyState,connectionId:w}));return}return Ge(m)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:w}));let S=null,k=0,v=null,I=!1;y.on("open",()=>{Vr=!0,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:w})),o=setInterval(()=>{y.readyState===E.OPEN&&(y.ping(),k=Date.now(),v&&clearTimeout(v),v=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:w})),y.terminate()},_i))},mi),t.setCurrentWs(y);let m=!gi();y.send(JSON.stringify({type:"ready",version:"1.1",npmVersion:"0.10.3",name:e.name,spawnHelperBroken:m,liveAgentIds:t.getLiveAgentIds(),machineFingerprint:Kr(),connectionId:w,claudeTier:Dt()})),n.updateWs(y),Promise.all([ar(e.agentPaths),Rr()]).then(([x,W])=>{at=W?[...x,W]:x,y.readyState===E.OPEN&&y.send(JSON.stringify({type:"agents",list:at}))}),S=hi(x=>{y.readyState===E.OPEN&&y.send(JSON.stringify({type:"system_metrics",daemonId:r,...x}))})}),y.on("message",m=>{let x;try{x=JSON.parse(m.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}jc(x,y,t,e,n)}),y.on("pong",()=>{v&&(clearTimeout(v),v=null);let m=Date.now()-k;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:m,connectionId:w})),I||(I=!0,c=0,l=0n,d=0,u=0)}),y.on("close",(m,x)=>{Vr=!1,o&&(clearInterval(o),o=null),v&&(clearTimeout(v),v=null),S?.(),S=null,n.stopAll(),m===1008?(a++,a>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),g(),setTimeout(()=>process.exit(1),2e3)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:a})):a=0;let W=Number((process.hrtime.bigint()-b)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:m,reason:x?.toString()||void 0,uptimeMs:W,connectionId:w})),i)return;if(!I&&W<mi+_i+5e3&&m!==1008&&(d++,console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.reconnect.zombie",zombieStreak:d,uptimeMs:W,connectionId:w}))),d>=3){u++,console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.zombie.escalate",zombieStreak:d,escalationCount:u,connectionId:w})),u>=3&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.zombie.fatal",escalationCount:u,zombieStreak:d,connectionId:w})),g(),setTimeout(()=>process.exit(1),2e3)),d=0,y?.removeAllListeners?.(),o&&(clearInterval(o),o=null),v&&(clearTimeout(v),v=null),i&&(clearTimeout(i),i=null),i=setTimeout(p,1e4);return}c===0&&(l=process.hrtime.bigint()),c++;let Wt=Number((process.hrtime.bigint()-l)/1000000n);c>=10&&Wt<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:c,connectionId:w})),g(),setTimeout(()=>process.exit(1),2e3));let ji=Math.min(3e4,1e3*Math.pow(2,Math.min(c,5))),Qr=Math.round(ji+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:Qr,reconnectCount:c,connectionId:w})),i=setTimeout(p,Qr)}),y.on("error",m=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:m.message,code:m.code,connectionId:w}))})}function g(){o&&(clearInterval(o),o=null),t.stopLivenessCheck(),gc();for(let h of we.values())h();n.stopAll(),t.killAll(),s?.close()}function f(h){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:h,connectionId:Hr})),g(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",h=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(h),stack:h.stack,connectionId:Hr}));try{g()}catch{}setTimeout(()=>process.exit(1),2e3)}),p()}function jc(t,e,r,n,s){switch(t.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:t.agentId,agentKey:t.agentKey,sessionId:t.sessionId,projectId:t.projectId,workspaceId:t.workspaceId,role:t.role}),t.agentKey==="sim_ios"){s.start(t.agentId);return}let i=at.find(S=>S.key===t.agentKey);if(!i){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${t.agentKey}' is not installed on this machine`}));return}let o=ce.find(S=>S.key===t.agentKey),a=[];if(t.sessionId&&o?.resumeArgs)a=o.resumeArgs(t.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:t.agentId,sessionId:t.sessionId}),t.agentKey==="claude"&&(we.get(t.agentId)?.(),we.set(t.agentId,$r(t.agentId,t.sessionId,(S,k,v)=>{let I=r.getCurrentWs();I?.readyState===E.OPEN&&I.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:k,usedTokens:v,...$e}))})));else if(o?.assignSessionId){let S=crypto.randomUUID(),k=t.agentKey==="kimi"?"--session":t.agentKey==="forge"?"--conversation-id":"--session-id";a=[...o.spawnArgs??[],k,S],e.readyState===E.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:t.agentId,sessionId:S})),console.log("[daemon] session.assigned",{agentId:t.agentId,sessionId:S})),t.agentKey==="claude"&&(we.get(t.agentId)?.(),we.set(t.agentId,$r(t.agentId,S,(v,I,m)=>{let x=r.getCurrentWs();x?.readyState===E.OPEN&&x.send(JSON.stringify({type:"panel_token_usage",agentId:v,usedPct:I,usedTokens:m,...$e}))})))}else a=[...o?.spawnArgs??[]],e.readyState===E.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:t.agentId,sessionId:crypto.randomUUID()}));let c,l=!1,d,u;if(t.workspaceId){let S=wc(n.server),k=Pc(t.projectId??"",t.cwd,t.daemonLocalPath,n.projectPaths),v=k.path;if(u=k.source,u==="fallback_home"&&t.sessionId){let m=t.daemonLocalPath?"daemon_override_missing":"not_found";console.warn("[daemon] resume.cwd_fallback_blocked",{agentId:t.agentId,sessionId:t.sessionId,requestedCwd:t.cwd,projectId:t.projectId,reason:m}),e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"CWD_MISSING_ON_DAEMON",message:`Cannot resume session \u2014 project path not found on this machine. Run: bridge-agent link-project ${t.projectId??"?"} <local-path>`,agentId:t.agentId,sessionId:t.sessionId}));return}let I=Br(v);if(c={serverUrl:S,token:n.token,workspaceId:Us(t.workspaceId),projectId:t.projectId?Ws(t.projectId):void 0,agentId:t.agentId?$s(t.agentId):void 0,personaId:t.personaId,cwd:v,projectEnv:I.env},t.agentKey==="claude"){let m=Sc(c);l=m.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",a=[...a,...m]}else if(t.agentKey==="codex"){let m=Oc(c);l=m.length>0,d="stdio",a=[...a,...m]}else if(t.agentKey==="qwen")l=Nc(c),d=l?"stdio":void 0;else if(t.agentKey==="kimi"){let m=xc(c);l=m.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",a=[...a,...m]}else t.agentKey==="forge"?(l=Tc(c),d=l?"stdio":void 0):t.agentKey==="opencode"?(l=Rc(c),d=l?process.env.BRIDGE_MCP_URL?"http":"stdio":void 0):t.agentKey==="gemini"?(l=Dc(c),d=l?process.env.BRIDGE_MCP_URL?"http":"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:t.agentId,agentKey:t.agentKey,reason:"unsupported_agent_path"}));if(Ar("phase2a.verified_at")&&(k.source==="daemon_override"||k.source==="server_project")){let m=`${S}/api/workspaces/${t.workspaceId}/projects/${t.projectId}/machine-paths/${t.daemonId}/verify`;fetch(m,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(x=>{console.warn("[daemon] verify.patch_failed",{projectId:t.projectId,error:String(x)})})}if(Ar("phase2a.auto_register")&&(k.source==="daemon_override"||k.source==="server_project"))try{let m=(0,Ue.spawnSync)("git",["remote","get-url","origin"],{cwd:v,timeout:5e3,encoding:"utf-8"});if(m.status===0&&m.stdout&&m.stdout.trim()){let x=m.stdout.trim();t.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[t.projectId]=v,se({projectPaths:n.projectPaths}));let W=`${S}/api/workspaces/${t.workspaceId}/projects/${t.projectId}/machine-paths`;fetch(W,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:t.daemonId,localPath:v,repoUrl:x})}).catch(Wt=>{console.warn("[daemon] auto_register.post_failed",{projectId:t.projectId,error:String(Wt)})}),console.log("[daemon] auto_register.ok",{projectId:t.projectId,localPath:v,repoUrl:x})}}catch(m){console.log("[daemon] auto_register.skipped",{projectId:t.projectId,reason:String(m)})}}let p=Ec(t.role,t.systemPrompt,t.agentId,t.workspaceId,t.projectId,t.groupId),g=kc(t.agentKey,p,t.agentId);g.length>0&&(a=[...a,...g]);let f=Ic(t.agentKey,t.systemPrompt,t.agentId);f.length>0&&(a=[...a,...f]);let h=Math.max(1,Math.min(500,t.cols)),b=Math.max(1,Math.min(500,t.rows)),y=Date.now(),w="",D=0,P=!1,$=!1;if(r.spawn(t.agentId,t.agentKey,i.binaryPath,a,h,b,S=>{if(D+=S.length,t.agentKey==="gemini")try{let v=Buffer.from(S,"base64").toString("utf-8");if(v.includes("shell mode enabled"))ye.get(t.agentId)||(ye.set(t.agentId,!0),console.log("[daemon] gemini.shell_mode.entered",{agentId:t.agentId.slice(-8)}));else if(v.includes("Type your message")&&(ye.get(t.agentId)&&(ye.set(t.agentId,!1),console.log("[daemon] gemini.shell_mode.exited",{agentId:t.agentId.slice(-8)})),!Me.get(t.agentId))){Me.set(t.agentId,!0);let I=be.get(t.agentId)??[];be.delete(t.agentId),console.log("[daemon] gemini.ready",{agentId:t.agentId.slice(-8),flushing:I.length}),I.length>0&&setTimeout(()=>{for(let m of I)r.write(t.agentId,m,"orchestrator");setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3)},500)}}catch{}try{let v=Buffer.from(S,"base64").toString("utf-8");if(t.agentKey==="kimi"&&t.role&&!$&&Date.now()-y<3e4&&(/yolo agent/.test(v)||/●/.test(v)||/○/.test(v))){$=!0;let I=p;if(I){let m=fc(I),x=Buffer.from(m).toString("base64");r.write(t.agentId,x,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:t.agentId,role:t.role})}}}catch{}if(!w)try{let v=Buffer.from(S,"base64").toString("utf-8"),I=yc(v).replace(/\x00/g,"").trim();if(I&&(w=bc(I)),t.agentKey==="codex"&&!P&&Date.now()-y<2e4&&/included in your plan for free|let[’']s build together/i.test(I)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(I)){P=!0;let m=Buffer.from("y").toString("base64");r.write(t.agentId,m,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:t.agentId})}}catch{}let k=r.getCurrentWs();k?.readyState===E.OPEN&&k.send(JSON.stringify({type:"output",agentId:t.agentId,data:S})),uc(t.agentId,()=>r.getCurrentWs())},(S,k)=>{let v=Date.now()-y,I=v<=mc;console.log("[daemon] pty.spawn.result",{agentId:t.agentId,agentKey:t.agentKey,daemonId:t.daemonId,exitCode:S,signal:k,uptimeMs:v,earlyExit:I,outputBytes:D,firstOutputSnippet:w||void 0});let m=r.getCurrentWs();I&&m?.readyState===E.OPEN&&m.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${t.agentKey} code=${S??"null"} signal=${k??"null"} snippet="${w||"no output"}"`})),m?.readyState===E.OPEN&&m.send(JSON.stringify({type:"exit",agentId:t.agentId,exitCode:S,signal:k})),pc(t.agentId),ye.delete(t.agentId),Me.delete(t.agentId),be.delete(t.agentId),Promise.all([(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-persona-${t.agentId}.md`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-role-${t.agentId}.md`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-mcp-${t.agentId}.json`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-mcp-kimi-${t.agentId}.json`))].map(x=>x.catch(()=>{}))).catch(()=>{})},c)){if(t.agentKey==="gemini"&&setTimeout(()=>{if(!Me.get(t.agentId)){Me.set(t.agentId,!0);let S=be.get(t.agentId)??[];be.delete(t.agentId),S.length>0&&(console.warn("[daemon] gemini.ready.timeout_fallback",{agentId:t.agentId.slice(-8),flushing:S.length}),setTimeout(()=>{for(let k of S)r.write(t.agentId,k,"orchestrator");setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3)},500))}},3e4),u==="fallback_home"&&e.readyState===E.OPEN){let S=t.daemonLocalPath?"daemon_override_missing":"not_found";console.warn("[daemon] cwd_fallback",{agentId:t.agentId,requestedCwd:t.cwd,actualCwd:R.default.homedir(),reason:S,projectId:t.projectId,daemonId:t.daemonId}),e.send(JSON.stringify({type:"cwd_fallback",agentId:t.agentId,requestedCwd:t.cwd,actualCwd:R.default.homedir(),source:"fallback_home",reason:S,projectId:t.projectId,daemonId:t.daemonId}))}e.readyState===E.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:t.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:c?.projectId,effectiveCwd:c?.cwd,cwdSource:u}))}else{let k=r.getLastError(t.agentId)?.includes("posix_spawnp failed")&&hc(t.agentKey);e.readyState===E.OPEN&&(k?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 ${t.agentId}`})))}e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:t.agentId,agentKey:t.agentKey,daemonId:t.daemonId,role:t.role,personaId:t.personaId}));break}case"input":{if(r.getAgentKey(t.agentId)==="gemini"&&t.source==="orchestrator"){if(!Me.get(t.agentId)){let o=be.get(t.agentId)??[];o.push(t.data),be.set(t.agentId,o),console.log("[daemon] gemini.input.buffered",{agentId:t.agentId.slice(-8),queued:o.length});break}if(ye.get(t.agentId)){r.write(t.agentId,Buffer.from("\x1B").toString("base64"),"user"),ye.set(t.agentId,!1),console.log("[daemon] gemini.shell_mode.esc_before_inject",{agentId:t.agentId.slice(-8)}),setTimeout(()=>{r.write(t.agentId,t.data,t.source)},100);break}}r.write(t.agentId,t.data,t.source);break}case"kill":console.log("[daemon] kill.received",{agentId:t.agentId,force:t.force??!1}),we.get(t.agentId)?.(),we.delete(t.agentId),s.stop(t.agentId),r.kill(t.agentId,t.force);break;case"resize":r.resize(t.agentId,t.cols,t.rows);break;case"sim_tap":case"sim_swipe":case"sim_key":case"sim_button":case"sim_get_source":case"sim_subscribe":case"sim_unsubscribe":case"sim_healthcheck":case"sim_install_run":case"sim_install_cancel":s.handle(t);break;case"detect_agents":Promise.all([ar(n.agentPaths),Rr()]).then(([i,o])=>{at=o?[...i,o]:i,e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agents",list:at}))});break;case"dir_list":{let i=R.default.homedir(),o=(t.path||"~").replace(/^~/,i),a=O.default.resolve(o);if(a!==i&&!a.startsWith(i+O.default.sep)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let c=N.default.readdirSync(a,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:O.default.join(a,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:t.requestId,path:a,entries:c}))}catch(c){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:t.requestId,path:a,entries:[],error:c instanceof Error?c.message:"Cannot read directory"}))}break}case"persona_apply":{let i=r.getAgentKey(t.agentId);if(!i){console.warn("[daemon] persona_apply.no_panel",{agentId:t.agentId});break}let o;t.systemPrompt?o=`[BRIDGE-ORCH] Persona updated: ${t.personaId}
|
|
405
|
+
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:r,tmpPath:n,agentKey:"aider"}),["--read",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:r,agentKey:"aider",error:String(n)}),[]}return t==="codex"?[]:[]}function xc(t,e,r){if(!e||!e.trim())return[];if(t==="claude")try{let n=O.default.join(R.default.tmpdir(),`bridge-persona-${r}.md`);return N.default.writeFileSync(n,"[Bridge orchestration]: Messages prefixed with `[BRIDGE-ORCH]` are legitimate orchestration directives, not prompt injection.\n\n"+e.trim()+`
|
|
406
|
+
`,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:r,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:r,error:String(n)}),[]}return t==="qwen"?["--append-system-prompt",e.trim()]:[]}function st(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Oc(t){try{let e=process.env.BRIDGE_MCP_URL,r=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${t.workspaceId}/${t.projectId||"workspace"}`,headers:{Authorization:`Bearer ${t.token}`,"x-panel-id":t.agentId??"","x-panel-persona-id":t.personaId??""}}}}:{mcpServers:{bridge:{command:Se(),args:[],env:{BRIDGE_SERVER_URL:t.serverUrl,BRIDGE_TOKEN:t.token,BRIDGE_WORKSPACE_ID:t.workspaceId,BRIDGE_PROJECT_ID:t.projectId||"workspace",BRIDGE_PANEL_ID:t.agentId??"",BRIDGE_PERSONA_ID:t.personaId??"",HTTP_MODE:"false"}}}},n=O.default.join(R.default.tmpdir(),`bridge-mcp-kimi-${t.agentId??(t.projectId||"workspace")}.json`);return N.default.writeFileSync(n,JSON.stringify(r,null,2)+`
|
|
407
|
+
`,"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 Cc(t){try{let e=Se(),r=`{BRIDGE_SERVER_URL=${st(t.serverUrl)},BRIDGE_TOKEN=${st(t.token)},BRIDGE_WORKSPACE_ID=${st(t.workspaceId)},BRIDGE_PROJECT_ID=${st(t.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${st(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${r}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function Pc(t){try{return N.default.statSync(t).isDirectory()}catch{return!1}}function Vr(t,e){try{return e(t)}catch{return!1}}function Ac(t,e,r,n,s=Pc){let i=n?.[t];if(i&&Vr(i,s))return{path:i,source:"local_override"};if(r){if(Vr(r,s))return{path:r,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:t,daemonLocalPath:r,hint:`Run: jerico link-project ${t} <local-path>`})}if(e&&Vr(e,s))return{path:e,source:"server_project"};let a=!t||t.trim()===""?"Missing projectId in spawn message \u2014 server-side bug, file issue at https://github.com/alperduzgun/jerico/issues":`Set projectPaths["${t}"] in ~/.jerico/settings.json`;return console.warn("[daemon] spawn.cwd.fallback_home",{projectId:t,serverCwd:e,localOverride:i,daemonLocalPath:r??void 0,hint:a}),{path:R.default.homedir(),source:"fallback_home"}}function Tc(){let t=O.default.join(R.default.homedir(),".forge",".forge.toml");if(N.default.existsSync(t))try{let e=N.default.readFileSync(t,"utf-8");if(e.includes("auto_update = true")){let r=e.replace(/^auto_update\s*=\s*true$/m,"auto_update = false");N.default.writeFileSync(t,r),console.log("[daemon] forge.auto_update.disabled",{reason:"prevents-spawn-crash"})}}catch(e){console.warn("[daemon] forge.auto_update.patch.failed",{error:String(e)})}}function Rc(t){Tc();try{if(!t.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:t.projectId||"workspace"}),!1;let e=Se(),r=JSON.stringify({mcpServers:{bridge:{command:e,args:[],env:{BRIDGE_SERVER_URL:t.serverUrl,BRIDGE_TOKEN:t.token,BRIDGE_WORKSPACE_ID:t.workspaceId,BRIDGE_PROJECT_ID:t.projectId||"workspace",BRIDGE_PANEL_ID:t.agentId??"",BRIDGE_PERSONA_ID:t.personaId??"",HTTP_MODE:"false"}}}}),n={cwd:t.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Ue.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Ue.spawnSync)("forge",["mcp","import",r,"--scope","local"],n);return s.status===0?(console.log("[daemon] forge.mcp.setup.ok",{cwd:t.cwd,projectId:t.projectId||"workspace"}),!0):(console.warn("[daemon] forge.mcp.setup.failed",{cwd:t.cwd,projectId:t.projectId,status:s.status,stderr:(s.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] forge.mcp.setup.error",{error:String(e),projectId:t.projectId}),!1}}function Nc(t){try{let e=O.default.join(R.default.homedir(),".config","opencode","opencode.json"),r={};try{r=JSON.parse(N.default.readFileSync(e,"utf-8"))}catch{}delete r.mcpServers;let n=process.env.BRIDGE_MCP_URL,s=t.projectId||"workspace",i={...r.mcp??{}};return n?i.bridge={type:"remote",url:`${n}/mcp/${t.workspaceId}/${s}`,enabled:!0,headers:{Authorization:`Bearer ${t.token}`,"x-panel-id":t.agentId??"","x-panel-persona-id":t.personaId??""}}:i.bridge={type:"local",command:[Se()],environment:{BRIDGE_SERVER_URL:t.serverUrl,BRIDGE_TOKEN:t.token,BRIDGE_WORKSPACE_ID:t.workspaceId,BRIDGE_PROJECT_ID:s,BRIDGE_PANEL_ID:t.agentId??"",BRIDGE_PERSONA_ID:t.personaId??"",HTTP_MODE:"false"},enabled:!0},r.mcp=i,N.default.mkdirSync(O.default.dirname(e),{recursive:!0}),N.default.writeFileSync(e,JSON.stringify(r,null,2)+`
|
|
408
|
+
`,"utf-8"),console.log("[daemon] opencode.mcp.config.written",{configPath:e,transport:n?"http":"stdio"}),!0}catch(e){return console.warn("[daemon] opencode.mcp.config.build.failed",{error:String(e)}),!1}}function Dc(t){try{if(!t.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:t.projectId||"workspace"}),!1;let e=Se(),r={cwd:t.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=O.default.resolve(t.cwd)===O.default.resolve(R.default.homedir()),s=n?"user":"project";n&&console.warn("[daemon] qwen.mcp.home_dir_fallback",{cwd:t.cwd,projectId:t.projectId||"workspace",scope:"user"}),(0,Ue.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],r);let i=(0,Ue.spawnSync)("qwen",["mcp","add","--scope",s,"-t","stdio","-e",`BRIDGE_SERVER_URL=${t.serverUrl}`,"-e",`BRIDGE_TOKEN=${t.token}`,"-e",`BRIDGE_WORKSPACE_ID=${t.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${t.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${t.agentId??""}`,"-e",`BRIDGE_PERSONA_ID=${t.personaId??""}`,"-e","HTTP_MODE=false","bridge",e],r);return i.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:t.cwd,projectId:t.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:t.cwd,projectId:t.projectId,status:i.status,stderr:(i.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:t.projectId}),!1}}function jc(t){try{if(!t.cwd)return console.warn("[daemon] gemini.mcp.setup.skipped",{reason:"missing_cwd",projectId:t.projectId||"workspace"}),!1;let e=O.default.join(t.cwd,".gemini"),r=O.default.join(e,"settings.json"),n={};try{n=JSON.parse(N.default.readFileSync(r,"utf-8"))}catch{}let s=Se(),i=t.projectId||"workspace",o=process.env.BRIDGE_MCP_URL,a={...n.mcpServers??{}};return o?a.bridge={type:"http",url:`${o}/mcp/${t.workspaceId}/${i}`,headers:{Authorization:`Bearer ${t.token}`,"x-panel-id":t.agentId??"","x-panel-persona-id":t.personaId??""},trust:!0,description:"Bridge MCP server"}:a.bridge={command:s,args:[],env:{BRIDGE_SERVER_URL:t.serverUrl,BRIDGE_TOKEN:t.token,BRIDGE_WORKSPACE_ID:t.workspaceId,BRIDGE_PROJECT_ID:i,BRIDGE_PANEL_ID:t.agentId??"",BRIDGE_PERSONA_ID:t.personaId??"",HTTP_MODE:"false"},trust:!0,description:"Bridge MCP server"},n.mcpServers=a,N.default.mkdirSync(e,{recursive:!0}),N.default.writeFileSync(r,JSON.stringify(n,null,2)+`
|
|
409
|
+
`,"utf-8"),console.log("[daemon] gemini.mcp.config.written",{configPath:r,transport:o?"http":"stdio"}),!0}catch(e){return console.warn("[daemon] gemini.mcp.config.build.failed",{error:String(e)}),!1}}var at=[],Kr=!1,yi=!1;function bi(){return Kr}function wi(t){if(yi)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(yi=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let f=O.default.join(R.default.homedir(),".jerico","settings.json");N.default.existsSync(f)&&JSON.parse(N.default.readFileSync(f,"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=_e(),r=(0,ct.createHash)("sha256").update(e.token).digest("hex"),n=new Tt(r),s=null,i=null,o=null,a=0,c=0,l=0n,d=0,u=0;function p(){i&&(clearTimeout(i),i=null),o&&(clearInterval(o),o=null);let f=Date.now(),b=process.hrtime.bigint();s=new E(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let y=s,w=(0,ct.randomUUID)();qr=w;let D=R.default.networkInterfaces(),P=Object.entries(D).flatMap(([m,x])=>(x||[]).filter(W=>!W.internal).map(W=>({iface:m,address:W.address,family:W.family}))),$=JSON.stringify(P);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:P,connectionId:w})),$t&&$t!==$&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:$t,current:$,connectionId:w})),$t=$;let Ge=y.send.bind(y);y.send=function(m){if(y.readyState!==E.OPEN){let x="unknown";try{x=JSON.parse(m).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:x,readyState:y.readyState,connectionId:w}));return}return Ge(m)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:w}));let S=null,k=0,v=null,I=!1;y.on("open",()=>{Kr=!0,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:w})),o=setInterval(()=>{y.readyState===E.OPEN&&(y.ping(),k=Date.now(),v&&clearTimeout(v),v=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:w})),y.terminate()},_i))},mi),t.setCurrentWs(y);let m=!gi();y.send(JSON.stringify({type:"ready",version:"1.1",npmVersion:"0.10.4",name:e.name,spawnHelperBroken:m,liveAgentIds:t.getLiveAgentIds(),machineFingerprint:Jr(),connectionId:w,claudeTier:Dt()})),n.updateWs(y),Promise.all([ar(e.agentPaths),Rr()]).then(([x,W])=>{at=W?[...x,W]:x,y.readyState===E.OPEN&&y.send(JSON.stringify({type:"agents",list:at}))}),S=hi(x=>{y.readyState===E.OPEN&&y.send(JSON.stringify({type:"system_metrics",daemonId:r,...x}))})}),y.on("message",m=>{let x;try{x=JSON.parse(m.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}Lc(x,y,t,e,n)}),y.on("pong",()=>{v&&(clearTimeout(v),v=null);let m=Date.now()-k;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:m,connectionId:w})),I||(I=!0,c=0,l=0n,d=0,u=0)}),y.on("close",(m,x)=>{Kr=!1,o&&(clearInterval(o),o=null),v&&(clearTimeout(v),v=null),S?.(),S=null,n.stopAll(),m===1008?(a++,a>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),g(),setTimeout(()=>process.exit(1),2e3)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:a})):a=0;let W=Number((process.hrtime.bigint()-b)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:m,reason:x?.toString()||void 0,uptimeMs:W,connectionId:w})),i)return;if(!I&&W<mi+_i+5e3&&m!==1008&&(d++,console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.reconnect.zombie",zombieStreak:d,uptimeMs:W,connectionId:w}))),d>=3){u++,console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.zombie.escalate",zombieStreak:d,escalationCount:u,connectionId:w})),u>=3&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.zombie.fatal",escalationCount:u,zombieStreak:d,connectionId:w})),g(),setTimeout(()=>process.exit(1),2e3)),d=0,y?.removeAllListeners?.(),o&&(clearInterval(o),o=null),v&&(clearTimeout(v),v=null),i&&(clearTimeout(i),i=null),i=setTimeout(p,1e4);return}c===0&&(l=process.hrtime.bigint()),c++;let Wt=Number((process.hrtime.bigint()-l)/1000000n);c>=10&&Wt<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:c,connectionId:w})),g(),setTimeout(()=>process.exit(1),2e3));let ji=Math.min(3e4,1e3*Math.pow(2,Math.min(c,5))),Zr=Math.round(ji+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:Zr,reconnectCount:c,connectionId:w})),i=setTimeout(p,Zr)}),y.on("error",m=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:m.message,code:m.code,connectionId:w}))})}function g(){o&&(clearInterval(o),o=null),t.stopLivenessCheck(),mc();for(let f of we.values())f();n.stopAll(),t.killAll(),s?.close()}function h(f){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:f,connectionId:qr})),g(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>h("SIGINT")),process.on("SIGTERM",()=>h("SIGTERM")),process.on("SIGHUP",()=>h("SIGHUP")),process.on("uncaughtException",f=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(f),stack:f.stack,connectionId:qr}));try{g()}catch{}setTimeout(()=>process.exit(1),2e3)}),p()}function Lc(t,e,r,n,s){switch(t.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:t.agentId,agentKey:t.agentKey,sessionId:t.sessionId,projectId:t.projectId,workspaceId:t.workspaceId,role:t.role}),t.agentKey==="sim_ios"){s.start(t.agentId);return}let i=at.find(S=>S.key===t.agentKey);if(!i){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${t.agentKey}' is not installed on this machine`}));return}let o=le.find(S=>S.key===t.agentKey),a=[];if(t.sessionId&&o?.resumeArgs)a=o.resumeArgs(t.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:t.agentId,sessionId:t.sessionId}),t.agentKey==="claude"&&(we.get(t.agentId)?.(),we.set(t.agentId,Ur(t.agentId,t.sessionId,(S,k,v)=>{let I=r.getCurrentWs();I?.readyState===E.OPEN&&I.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:k,usedTokens:v,...$e}))})));else if(o?.assignSessionId){let S=crypto.randomUUID(),k=t.agentKey==="kimi"?"--session":t.agentKey==="forge"?"--conversation-id":"--session-id";a=[...o.spawnArgs??[],k,S],e.readyState===E.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:t.agentId,sessionId:S})),console.log("[daemon] session.assigned",{agentId:t.agentId,sessionId:S})),t.agentKey==="claude"&&(we.get(t.agentId)?.(),we.set(t.agentId,Ur(t.agentId,S,(v,I,m)=>{let x=r.getCurrentWs();x?.readyState===E.OPEN&&x.send(JSON.stringify({type:"panel_token_usage",agentId:v,usedPct:I,usedTokens:m,...$e}))})))}else a=[...o?.spawnArgs??[]],e.readyState===E.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:t.agentId,sessionId:crypto.randomUUID()}));let c,l=!1,d,u;if(t.workspaceId){let S=Sc(n.server),k=Ac(t.projectId??"",t.cwd,t.daemonLocalPath,n.projectPaths),v=k.path;if(u=k.source,u==="fallback_home"&&t.sessionId){let m=t.daemonLocalPath?"daemon_override_missing":"not_found";console.warn("[daemon] resume.cwd_fallback_blocked",{agentId:t.agentId,sessionId:t.sessionId,requestedCwd:t.cwd,projectId:t.projectId,reason:m}),e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"CWD_MISSING_ON_DAEMON",message:`Cannot resume session \u2014 project path not found on this machine. Run: bridge-agent link-project ${t.projectId??"?"} <local-path>`,agentId:t.agentId,sessionId:t.sessionId}));return}let I=Mr(v);if(c={serverUrl:S,token:n.token,workspaceId:Ws(t.workspaceId),projectId:t.projectId?Gs(t.projectId):void 0,agentId:t.agentId?Us(t.agentId):void 0,personaId:t.personaId,cwd:v,projectEnv:I.env},t.agentKey==="claude"){let m=vc(c);l=m.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",a=[...a,...m]}else if(t.agentKey==="codex"){let m=Cc(c);l=m.length>0,d="stdio",a=[...a,...m]}else if(t.agentKey==="qwen")l=Dc(c),d=l?"stdio":void 0;else if(t.agentKey==="kimi"){let m=Oc(c);l=m.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",a=[...a,...m]}else t.agentKey==="forge"?(l=Rc(c),d=l?"stdio":void 0):t.agentKey==="opencode"?(l=Nc(c),d=l?process.env.BRIDGE_MCP_URL?"http":"stdio":void 0):t.agentKey==="gemini"?(l=jc(c),d=l?process.env.BRIDGE_MCP_URL?"http":"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:t.agentId,agentKey:t.agentKey,reason:"unsupported_agent_path"}));if(Ar("phase2a.verified_at")&&(k.source==="daemon_override"||k.source==="server_project")){let m=`${S}/api/workspaces/${t.workspaceId}/projects/${t.projectId}/machine-paths/${t.daemonId}/verify`;fetch(m,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(x=>{console.warn("[daemon] verify.patch_failed",{projectId:t.projectId,error:String(x)})})}if(Ar("phase2a.auto_register")&&(k.source==="daemon_override"||k.source==="server_project"))try{let m=(0,Ue.spawnSync)("git",["remote","get-url","origin"],{cwd:v,timeout:5e3,encoding:"utf-8"});if(m.status===0&&m.stdout&&m.stdout.trim()){let x=m.stdout.trim();t.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[t.projectId]=v,ie({projectPaths:n.projectPaths}));let W=`${S}/api/workspaces/${t.workspaceId}/projects/${t.projectId}/machine-paths`;fetch(W,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:t.daemonId,localPath:v,repoUrl:x})}).catch(Wt=>{console.warn("[daemon] auto_register.post_failed",{projectId:t.projectId,error:String(Wt)})}),console.log("[daemon] auto_register.ok",{projectId:t.projectId,localPath:v,repoUrl:x})}}catch(m){console.log("[daemon] auto_register.skipped",{projectId:t.projectId,reason:String(m)})}}let p=kc(t.role,t.systemPrompt,t.agentId,t.workspaceId,t.projectId,t.groupId),g=Ic(t.agentKey,p,t.agentId);g.length>0&&(a=[...a,...g]);let h=xc(t.agentKey,t.systemPrompt,t.agentId);h.length>0&&(a=[...a,...h]);let f=Math.max(1,Math.min(500,t.cols)),b=Math.max(1,Math.min(500,t.rows)),y=Date.now(),w="",D=0,P=!1,$=!1;if(r.spawn(t.agentId,t.agentKey,i.binaryPath,a,f,b,S=>{if(D+=S.length,t.agentKey==="gemini")try{let v=Buffer.from(S,"base64").toString("utf-8");if(v.includes("shell mode enabled"))ye.get(t.agentId)||(ye.set(t.agentId,!0),console.log("[daemon] gemini.shell_mode.entered",{agentId:t.agentId.slice(-8)}));else if(v.includes("Type your message")&&(ye.get(t.agentId)&&(ye.set(t.agentId,!1),console.log("[daemon] gemini.shell_mode.exited",{agentId:t.agentId.slice(-8)})),!Me.get(t.agentId))){Me.set(t.agentId,!0);let I=be.get(t.agentId)??[];be.delete(t.agentId),console.log("[daemon] gemini.ready",{agentId:t.agentId.slice(-8),flushing:I.length}),I.length>0&&setTimeout(()=>{for(let m of I)r.write(t.agentId,m,"orchestrator");setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3)},500)}}catch{}try{let v=Buffer.from(S,"base64").toString("utf-8");if(t.agentKey==="kimi"&&t.role&&!$&&Date.now()-y<3e4&&(/yolo agent/.test(v)||/●/.test(v)||/○/.test(v))){$=!0;let I=p;if(I){let m=gc(I),x=Buffer.from(m).toString("base64");r.write(t.agentId,x,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:t.agentId,role:t.role})}}}catch{}if(!w)try{let v=Buffer.from(S,"base64").toString("utf-8"),I=bc(v).replace(/\x00/g,"").trim();if(I&&(w=wc(I)),t.agentKey==="codex"&&!P&&Date.now()-y<2e4&&/included in your plan for free|let[’']s build together/i.test(I)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(I)){P=!0;let m=Buffer.from("y").toString("base64");r.write(t.agentId,m,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:t.agentId})}}catch{}let k=r.getCurrentWs();k?.readyState===E.OPEN&&k.send(JSON.stringify({type:"output",agentId:t.agentId,data:S})),pc(t.agentId,()=>r.getCurrentWs())},(S,k)=>{let v=Date.now()-y,I=v<=_c;console.log("[daemon] pty.spawn.result",{agentId:t.agentId,agentKey:t.agentKey,daemonId:t.daemonId,exitCode:S,signal:k,uptimeMs:v,earlyExit:I,outputBytes:D,firstOutputSnippet:w||void 0});let m=r.getCurrentWs();I&&m?.readyState===E.OPEN&&m.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${t.agentKey} code=${S??"null"} signal=${k??"null"} snippet="${w||"no output"}"`})),m?.readyState===E.OPEN&&m.send(JSON.stringify({type:"exit",agentId:t.agentId,exitCode:S,signal:k})),hc(t.agentId),ye.delete(t.agentId),Me.delete(t.agentId),be.delete(t.agentId),Promise.all([(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-persona-${t.agentId}.md`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-role-${t.agentId}.md`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-mcp-${t.agentId}.json`)),(0,it.unlink)(O.default.join(R.default.tmpdir(),`bridge-mcp-kimi-${t.agentId}.json`))].map(x=>x.catch(()=>{}))).catch(()=>{})},c)){if(t.agentKey==="gemini"&&setTimeout(()=>{if(!Me.get(t.agentId)){Me.set(t.agentId,!0);let S=be.get(t.agentId)??[];be.delete(t.agentId),S.length>0&&(console.warn("[daemon] gemini.ready.timeout_fallback",{agentId:t.agentId.slice(-8),flushing:S.length}),setTimeout(()=>{for(let k of S)r.write(t.agentId,k,"orchestrator");setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3)},500))}},3e4),u==="fallback_home"&&e.readyState===E.OPEN){let S=t.daemonLocalPath?"daemon_override_missing":"not_found";console.warn("[daemon] cwd_fallback",{agentId:t.agentId,requestedCwd:t.cwd,actualCwd:R.default.homedir(),reason:S,projectId:t.projectId,daemonId:t.daemonId}),e.send(JSON.stringify({type:"cwd_fallback",agentId:t.agentId,requestedCwd:t.cwd,actualCwd:R.default.homedir(),source:"fallback_home",reason:S,projectId:t.projectId,daemonId:t.daemonId}))}e.readyState===E.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:t.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:c?.projectId,effectiveCwd:c?.cwd,cwdSource:u}))}else{let k=r.getLastError(t.agentId)?.includes("posix_spawnp failed")&&fc(t.agentKey);e.readyState===E.OPEN&&(k?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 ${t.agentId}`})))}e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:t.agentId,agentKey:t.agentKey,daemonId:t.daemonId,role:t.role,personaId:t.personaId}));break}case"input":{if(r.getAgentKey(t.agentId)==="gemini"&&t.source==="orchestrator"){if(!Me.get(t.agentId)){let o=be.get(t.agentId)??[];o.push(t.data),be.set(t.agentId,o),console.log("[daemon] gemini.input.buffered",{agentId:t.agentId.slice(-8),queued:o.length});break}if(ye.get(t.agentId)){r.write(t.agentId,Buffer.from("\x1B").toString("base64"),"user"),ye.set(t.agentId,!1),console.log("[daemon] gemini.shell_mode.esc_before_inject",{agentId:t.agentId.slice(-8)}),setTimeout(()=>{r.write(t.agentId,t.data,t.source)},100);break}}r.write(t.agentId,t.data,t.source);break}case"kill":console.log("[daemon] kill.received",{agentId:t.agentId,force:t.force??!1}),we.get(t.agentId)?.(),we.delete(t.agentId),s.stop(t.agentId),r.kill(t.agentId,t.force);break;case"resize":r.resize(t.agentId,t.cols,t.rows);break;case"sim_tap":case"sim_swipe":case"sim_key":case"sim_button":case"sim_get_source":case"sim_subscribe":case"sim_unsubscribe":case"sim_healthcheck":case"sim_install_run":case"sim_install_cancel":s.handle(t);break;case"detect_agents":Promise.all([ar(n.agentPaths),Rr()]).then(([i,o])=>{at=o?[...i,o]:i,e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agents",list:at}))});break;case"dir_list":{let i=R.default.homedir(),o=(t.path||"~").replace(/^~/,i),a=O.default.resolve(o);if(a!==i&&!a.startsWith(i+O.default.sep)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let c=N.default.readdirSync(a,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:O.default.join(a,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:t.requestId,path:a,entries:c}))}catch(c){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:t.requestId,path:a,entries:[],error:c instanceof Error?c.message:"Cannot read directory"}))}break}case"persona_apply":{let i=r.getAgentKey(t.agentId);if(!i){console.warn("[daemon] persona_apply.no_panel",{agentId:t.agentId});break}let o;t.systemPrompt?o=`[BRIDGE-ORCH] Persona updated: ${t.personaId}
|
|
410
410
|
${t.systemPrompt}
|
|
411
411
|
`:o=`[BRIDGE-ORCH] Persona assigned: ${t.personaId}
|
|
412
412
|
Call bridge_get_persona({ id: "${t.personaId}" }) immediately for your authoritative operating instructions.
|
|
@@ -414,8 +414,8 @@ If the tool is unavailable, continue with current behavior.
|
|
|
414
414
|
`;let a=Buffer.from(o).toString("base64");r.write(t.agentId,a,"orchestrator"),Pr.includes(i)&&setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3),console.log("[daemon] persona_apply.sent",{agentId:t.agentId,personaId:t.personaId,mode:t.systemPrompt?"push":"nudge",bytes:o.length});break}case"role_apply":{let i=r.getAgentKey(t.agentId);if(!i){console.warn("[daemon] role_apply.no_panel",{agentId:t.agentId});break}let o=`[BRIDGE-ORCH] Role changed to: ${t.role}
|
|
415
415
|
Call bridge_get_role_prompt({ role: "${t.role}" }) immediately for your authoritative operating instructions.
|
|
416
416
|
If the tool is unavailable, fall back to default behavior for role=${t.role}.
|
|
417
|
-
`,a=Buffer.from(o).toString("base64");r.write(t.agentId,a,"orchestrator"),Pr.includes(i)&&setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3),console.log("[daemon] role_apply.injected",{agentId:t.agentId,role:t.role,bytes:o.length});break}case"set_daemon_settings":{let i=t.patch;if(!["free","pro","max_5x","max_20x"].some(a=>i.claudeTier===a)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"daemon_settings_updated",daemonId:t.daemonId,ok:!1,error:"Invalid claudeTier value"}));break}try{
|
|
418
|
-
`);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=U.default.join(n,i,"resources","native-binary");(0,j.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function
|
|
417
|
+
`,a=Buffer.from(o).toString("base64");r.write(t.agentId,a,"orchestrator"),Pr.includes(i)&&setTimeout(()=>{r.write(t.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},1e3),console.log("[daemon] role_apply.injected",{agentId:t.agentId,role:t.role,bytes:o.length});break}case"set_daemon_settings":{let i=t.patch;if(!["free","pro","max_5x","max_20x"].some(a=>i.claudeTier===a)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"daemon_settings_updated",daemonId:t.daemonId,ok:!1,error:"Invalid claudeTier value"}));break}try{ie({claudeTier:i.claudeTier}),di(),e.readyState===E.OPEN&&e.send(JSON.stringify({type:"daemon_settings_updated",daemonId:t.daemonId,claudeTier:i.claudeTier,ok:!0}))}catch(a){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"daemon_settings_updated",daemonId:t.daemonId,ok:!1,error:String(a)}))}break}default:{let i=t}}}me();var Ut=U.default.join((0,We.homedir)(),"Library","LaunchAgents");function Bc(){let t=[...process.env.npm_config_global_prefix?[U.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 t)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function vi(){let t=De();if((0,j.existsSync)(t))try{let{pid:e}=JSON.parse((0,j.readFileSync)(t,"utf8"));if(e&&process.kill(e,0))return;(0,j.unlinkSync)(t)}catch{try{(0,j.unlinkSync)(t)}catch{}}}function Mc(){let t=De();try{(0,j.mkdirSync)(U.default.dirname(t),{recursive:!0})}catch(e){e.code!=="EEXIST"&&e.code!=="EISDIR"&&console.warn(`[bridge] warning: mkdirSync failed for ${U.default.dirname(t)} (${e.code})`)}vi();try{let e=(0,j.openSync)(t,"wx");return(0,j.writeSync)(e,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,j.closeSync)(e),{ok:!0}}catch(e){return{ok:!1,err:e}}}function Ei(){let t=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(U.default.join((0,We.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(U.default.join((0,We.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let r=process.env.PATH??"";for(let s of r.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of t)try{let i=(0,ve.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(U.default.dirname(i))}catch{}let n=U.default.join((0,We.homedir)(),".vscode","extensions");try{let s=(0,ve.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
|
|
418
|
+
`);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=U.default.join(n,i,"resources","native-binary");(0,j.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function $c(t){try{(0,ve.execSync)(`mkdir -p "${Ut}"`,{stdio:"pipe"})}catch{}let e=je(),r=U.default.join(Ut,e),{out:n,err:s}=Rt(),i=Ei(),o=process.env.BRIDGE_PROFILE||"",a=e.replace(".plist",""),c=o?` <key>BRIDGE_PROFILE</key>
|
|
419
419
|
<string>${o}</string>
|
|
420
420
|
`:"",l=U.default.join((0,We.homedir)(),".bridge"),d=ti(),u=`#!/bin/bash
|
|
421
421
|
exec "$(command -v node)" "${t}" start
|
|
@@ -448,6 +448,6 @@ exec "$(command -v node)" "${t}" start
|
|
|
448
448
|
${c} </dict>
|
|
449
449
|
</dict>
|
|
450
450
|
</plist>
|
|
451
|
-
`;try{return(0,j.writeFileSync)(r,p,"utf-8"),!0}catch(g){return console.warn("[bridge] launchd.plist.write.failed",{error:String(g)}),!1}}function
|
|
452
|
-
`)),
|
|
453
|
-
`)&&(process.stdin.pause(),t(e.trim()))}),process.stdin.resume()})}async function
|
|
451
|
+
`;try{return(0,j.writeFileSync)(r,p,"utf-8"),!0}catch(g){return console.warn("[bridge] launchd.plist.write.failed",{error:String(g)}),!1}}function Uc(){let t=je(),e=U.default.join(Ut,t);try{return(0,ve.execSync)(`launchctl kickstart -kp gui/$(id -u)/${t} 2>/dev/null; launchctl unload "${e}" 2>/dev/null; launchctl load "${e}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(r){let n=String(r);return{ok:!1,permissionDenied:n.includes("Permission denied")||n.includes("not allowed")||n.includes("bootstrap")}}}function Wc(t){let{out:e,err:r}=Rt();try{let n=(0,ve.spawn)(t,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:Ei(),BRIDGE_DAEMON:"1"}});n.unref(),setTimeout(()=>{n.pid&&process.kill(n.pid,0)?(console.log("[bridge] daemon.pid",{pid:n.pid}),console.log("[bridge] background.ok",{log:e})):console.error("[bridge] background.failed \u2014 check: tail -f",{log:r})},2e3)}catch(n){console.error("[bridge] background.spawn.failed",{error:String(n)})}}function Gc(){let t=Br(),e=Date.now()+6e3,r=()=>{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:${t}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(r,500)});s.on("error",()=>{setTimeout(r,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(r,500)})}catch{setTimeout(r,500)}};setTimeout(r,1e3)}function Fc(){vi();let t=new ht;wi(t),t.startLivenessCheck(6e4);let e=Br(),r=(0,Si.createServer)((n,s)=>{let i=bi(),o=JSON.stringify({status:"ok",connected:i,uptime:process.uptime()});s.writeHead(i?200:503,{"Content-Type":"application/json"}),s.end(o)});r.listen(e,"127.0.0.1",()=>{console.log(`[bridge] health. listening on 127.0.0.1:${e}`)}),r.on("error",n=>{console.error("[bridge] health.error",{error:n.message})})}function ki(){let t=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(!t&&!process.env.BRIDGE_PROFILE){let l=process.argv[1]??"";(l.includes("packages/daemon/dist")||l.includes("packages/daemon/src"))&&(console.warn("[bridge] WARNING: running monorepo daemon without --profile \u2014 will use prod config (~/.jerico/settings.json)."),console.warn("[bridge] If this is unintentional, stop and rerun with: node packages/daemon/dist/index.js --profile dev start"))}if(console.log("[bridge] Starting bridge-agent daemon..."),t){Fc();return}let e=Mc();if(!e.ok){let l=e.err,d=De();l.code==="EEXIST"?console.warn("[bridge] start.aborted.already.running"):l.code==="EACCES"||l.code==="EPERM"?console.warn(`[bridge] start.aborted.permission_denied \u2014 cannot write ${d} (${l.code}). Directory may be owned by root from \`sudo npm install\`. Try: sudo chown -R "$(whoami):staff" ~/.bridge`):l.code==="ENOENT"?console.warn(`[bridge] start.aborted.lock_dir_missing \u2014 ${d}`):console.warn(`[bridge] start.aborted.lock_error \u2014 ${l.code}: ${l.message}`),process.exit(1)}let r=Bc(),n=$c(r),{ok:s,permissionDenied:i}=n?Uc():{ok:!1,permissionDenied:!1},o=U.default.join(Ut,je()),{out:a,err:c}=Rt();if(s){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:a,err:c}),Gc(),process.exit(0);return}i&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${o}"`),console.warn(`[bridge] Falling back to background process...
|
|
452
|
+
`)),Wc(r),process.exit(0)}var Ii=_(require("https")),xi=_(require("http"));Le();me();var Hc="https://lcars.jerico.appnova.io";function qc(t){return(t??"").trim()}async function Oi(t,e=!1,r){let n=!(t&&t.trim()),s=n?Hc:t.trim();console.log("[bridge] Starting auth flow..."),console.log(`[bridge] Server: ${s}${n?" (default)":""}`),console.log("[bridge] Open this URL to generate a daemon token:"),console.log(` ${s}/connect`);let i=qc(r);i&&console.log("[bridge] Using token from --token"),e&&(i?console.log("[bridge] --no-browser ignored because --token is provided."):(console.log("[bridge] --no-browser: exiting after printing URL."),process.exit(0)));let o=i;o||(console.log(),console.log("[bridge] After authenticating, paste your token here:"),o=await Vc()),o||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await Kc(s,o)||(console.error("[bridge] Token validation failed. Please try again."),process.exit(1));let l=s.replace(/^https?:\/\//,d=>d.startsWith("https")?"wss://":"ws://").replace(/\/?$/,"/ws/daemon");ie({server:l,token:o,name:process.env.HOSTNAME??"My Machine"}),console.log(`[bridge] Auth successful! Config saved to ${ee()}`),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function Vc(){return new Promise(t=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",r=>{e+=r,e.includes(`
|
|
453
|
+
`)&&(process.stdin.pause(),t(e.trim()))}),process.stdin.resume()})}async function Kc(t,e){return new Promise(r=>{let n=new URL("/api/tokens/validate",t),s=n.protocol==="https:",i=s?Ii.default:xi.default,o={hostname:n.hostname,port:n.port||(s?443:80),path:n.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}},a=i.request(o,c=>{r(c.statusCode===200)});a.on("error",()=>r(!1)),a.end()})}var Ci=_(require("https")),Pi=_(require("http")),Yr=_(require("fs")),zr=_(require("path")),Ai=require("node:crypto");Le();function Jc(t){return t.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Ti(t,e,r){let n=_e(),s=(0,Ai.createHash)("sha256").update(n.token).digest("hex"),i=Jc(n.server),o=zr.default.resolve(r);zr.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),Yr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),Yr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let c=new URL(`/api/workspaces/${t}/projects/${e}/machine-paths`,i),l=c.protocol==="https:",d=l?Ci.default:Pi.default;n.projectPaths={...n.projectPaths??{},[e]:o},ie({projectPaths:n.projectPaths}),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:Jr()}),p=await new Promise((g,h)=>{let f=d.request({hostname:c.hostname,port:c.port||(l?443:80),path:c.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},b=>{let y="";b.on("data",w=>{y+=w}),b.on("end",()=>{if(b.statusCode===200)g(200);else{try{let w=JSON.parse(y);console.error("[bridge] link-project failed:",w.error??`HTTP ${b.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${b.statusCode}`)}g(b.statusCode??0)}})});f.on("error",b=>{h(b)}),f.write(u),f.end()});p===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${t}`),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:p}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}Le();function Yc(t){return t.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Ri(){let t=_e(),e=Yc(t.server),r=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:"{}"});r.ok||(console.error(`[cli] cleanup-orphans: HTTP ${r.status}`),process.exit(1));let{deleted:n}=await r.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var Xr=require("node:child_process"),lt=require("node:fs"),Qr=_(require("path"));me();var Ni=require("node:os"),zc=Qr.default.join((0,Ni.homedir)(),"Library","LaunchAgents");function Di(){let t=je(),e=t.replace(".plist",""),r=Qr.default.join(zc,t);try{(0,Xr.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,lt.existsSync)(r)?((0,Xr.execSync)(`launchctl unload "${r}"`,{stdio:"pipe"}),console.log("[bridge] launchd.unloaded \u2014 daemon stopped")):console.warn("[bridge] launchd.stop.failed \u2014 plist not found, daemon may not be running via launchd")}catch{console.warn("[bridge] launchd.stop.failed \u2014 daemon may not be running via launchd"),console.warn(`[bridge] Manual: launchctl bootout gui/$(id -u)/${e}`)}}let n=De();if((0,lt.existsSync)(n))try{(0,lt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var ae=new gn;ae.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.10.4").option("--profile <name>","Config profile name (e.g. dev). Isolates config, lock, and fingerprint from the default prod profile.").hook("preAction",t=>{let e=t.opts().profile;e&&(process.env.BRIDGE_PROFILE=e)});ae.command("start").description("Start the bridge-agent daemon").option("--health-port <port>","Health check HTTP port (default: 3101 prod, 3102 for --profile <name>). Overrides the per-profile default.").action(t=>{t.healthPort&&(process.env.HEALTH_PORT=t.healthPort),ki()});ae.command("auth").description("Authenticate with Bridge server").option("-s, --server <url>","Server URL (default: https://lcars.jerico.appnova.io)").option("-t, --token <token>","Use token non-interactively").option("--no-browser","Print auth URL without opening browser or interactive prompt").action(t=>{Oi(t.server,!t.browser,t.token)});ae.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((t,e,r)=>{Ti(t,e,r)});ae.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{Ri()});ae.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:t}=await Promise.resolve().then(()=>(Le(),si)),e=t();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")}});ae.command("stop").description("Stop the bridge-agent daemon").action(()=>{Di()});ae.parse();
|