bridge-agent 0.4.6 → 0.4.8

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.
@@ -22260,9 +22260,11 @@ var StdioServerTransport = class {
22260
22260
  };
22261
22261
 
22262
22262
  // ../mcp-server/src/api.ts
22263
- function projectPath(ctx, suffix = "") {
22263
+ function projectPath(ctx, suffix = "", projectIdOverride) {
22264
22264
  const base = ctx.serverUrl.replace(/\/$/, "");
22265
- return `${base}/api/workspaces/${ctx.workspaceId}/projects/${ctx.projectId}${suffix}`;
22265
+ const trimmed = projectIdOverride?.trim();
22266
+ const pid = trimmed || ctx.projectId;
22267
+ return `${base}/api/workspaces/${ctx.workspaceId}/projects/${pid}${suffix}`;
22266
22268
  }
22267
22269
  function workspacePath(ctx, suffix = "") {
22268
22270
  const base = ctx.serverUrl.replace(/\/$/, "");
@@ -22387,6 +22389,31 @@ async function sendAgentInput(ctx, agentId, text) {
22387
22389
  async function getAgentIdle(ctx, agentId) {
22388
22390
  return request(ctx, "GET", projectPath(ctx, `/agents/${agentId}/idle`));
22389
22391
  }
22392
+ async function recordProjectEvent(ctx, params) {
22393
+ const { projectId, ...body } = params;
22394
+ return request(
22395
+ ctx,
22396
+ "POST",
22397
+ projectPath(ctx, "/events", projectId),
22398
+ { ...body, agentId: ctx.agentId }
22399
+ );
22400
+ }
22401
+ async function getProjectEvents(ctx, opts) {
22402
+ const params = new URLSearchParams();
22403
+ if (opts?.role) params.set("role", opts.role);
22404
+ if (opts?.eventType) params.set("eventType", opts.eventType);
22405
+ if (opts?.tags) params.set("tags", opts.tags);
22406
+ if (opts?.since) params.set("since", opts.since);
22407
+ if (opts?.search) params.set("search", opts.search);
22408
+ if (opts?.limit) params.set("limit", String(opts.limit));
22409
+ if (opts?.includeArchived) params.set("includeArchived", "true");
22410
+ const qs = params.toString();
22411
+ return request(
22412
+ ctx,
22413
+ "GET",
22414
+ projectPath(ctx, `/events${qs ? "?" + qs : ""}`, opts?.projectId)
22415
+ );
22416
+ }
22390
22417
 
22391
22418
  // ../mcp-server/src/tools/plan.ts
22392
22419
  function registerPlanTools(server, ctx) {
@@ -22637,6 +22664,35 @@ function registerOrchestrationTools(server, ctx) {
22637
22664
  { agentId: external_exports.string().describe("The agent ID to inspect") },
22638
22665
  ({ agentId }) => safe(() => getAgentIdle(ctx, agentId))
22639
22666
  );
22667
+ server.tool(
22668
+ "bridge_record_event",
22669
+ "Append an event to the project event log. Use to record decisions, discoveries, phase completions, or blockers so future agents and runs have durable context. Events are separate from run history \u2014 they persist across runs and are queryable by role/type/tag. Suggested eventTypes: decision, discovery, blocker, phase_complete, note, warning. Pass projectId to target a specific project (orchestrator must always pass it; per-project workers can omit).",
22670
+ {
22671
+ eventType: external_exports.string().min(1).max(64).describe("Free-form event type slug (e.g. decision, blocker, phase_complete)"),
22672
+ summary: external_exports.string().min(1).max(512).describe("Human-readable event summary (max 512 chars)"),
22673
+ projectId: external_exports.string().min(1).optional().describe("Target project ID. Defaults to caller panel's project. Required when called from the orchestrator (workspace scope)."),
22674
+ sessionId: external_exports.string().optional().describe("Orchestration session ID this event belongs to, if any"),
22675
+ payload: external_exports.record(external_exports.unknown()).optional().describe("Optional structured data attached to the event"),
22676
+ tags: external_exports.array(external_exports.string()).optional().describe('Free-form tags for filtering (e.g. ["auth", "security"])'),
22677
+ permanent: external_exports.boolean().optional().describe("Mark event as permanent \u2014 excluded from future archiving sweeps")
22678
+ },
22679
+ (params) => safe(() => recordProjectEvent(ctx, params))
22680
+ );
22681
+ server.tool(
22682
+ "bridge_get_project_events",
22683
+ "Query the project event log. Returns events newest-first. Use to recall decisions, discoveries, and blockers recorded by prior agents before starting new work. Filter by role or eventType to narrow results; use search for keyword lookup in summaries. Pass projectId to query a specific project (orchestrator must always pass it; per-project workers can omit).",
22684
+ {
22685
+ projectId: external_exports.string().min(1).optional().describe("Target project ID. Defaults to caller panel's project. Required when called from the orchestrator (workspace scope)."),
22686
+ role: external_exports.string().optional().describe("Filter by role (e.g. reviewer, developer)"),
22687
+ eventType: external_exports.string().optional().describe("Filter by eventType slug"),
22688
+ tags: external_exports.string().optional().describe('Comma-separated tag list \u2014 only events containing ALL listed tags (e.g. "auth,security")'),
22689
+ since: external_exports.string().optional().describe("ISO 8601 timestamp \u2014 only events after this date"),
22690
+ search: external_exports.string().optional().describe("Keyword search in event summaries (case-insensitive)"),
22691
+ limit: external_exports.number().int().min(1).max(200).optional().describe("Max events to return (default 50, max 200)"),
22692
+ includeArchived: external_exports.boolean().optional().describe("Include soft-archived events (default false)")
22693
+ },
22694
+ (opts) => safe(() => getProjectEvents(ctx, opts))
22695
+ );
22640
22696
  }
22641
22697
 
22642
22698
  // ../mcp-server/src/tools/messaging.ts
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var gi=Object.create;var Rt=Object.defineProperty;var mi=Object.getOwnPropertyDescriptor;var _i=Object.getOwnPropertyNames;var yi=Object.getPrototypeOf,bi=Object.prototype.hasOwnProperty;var Ur=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),wi=(r,e)=>{for(var t in e)Rt(r,t,{get:e[t],enumerable:!0})},Si=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _i(e))!bi.call(r,s)&&s!==t&&Rt(r,s,{get:()=>e[s],enumerable:!(n=mi(e,s))||n.enumerable});return r};var y=(r,e,t)=>(t=r!=null?gi(yi(r)):{},Si(e||!r||!r.__esModule?Rt(t,"default",{value:r,enumerable:!0}):t,r));var Te=O(Lt=>{var rt=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},jt=class extends rt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Lt.CommanderError=rt;Lt.InvalidArgumentError=jt});var nt=O($t=>{var{InvalidArgumentError:vi}=Te(),Mt=class{constructor(e,t){switch(this.description=t||"",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,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new vi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Ei(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}$t.Argument=Mt;$t.humanReadableArgName=Ei});var Wt=O(Fr=>{var{humanReadableArgName:ki}=nt(),Bt=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=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?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>ki(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function c(g,h){if(h){let m=`${g.padEnd(n+o)}${h}`;return t.wrap(m,s-i,n+o)}return g}function a(g){return g.join(`
2
+ "use strict";var gi=Object.create;var Rt=Object.defineProperty;var mi=Object.getOwnPropertyDescriptor;var _i=Object.getOwnPropertyNames;var yi=Object.getPrototypeOf,bi=Object.prototype.hasOwnProperty;var Wr=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),wi=(r,e)=>{for(var t in e)Rt(r,t,{get:e[t],enumerable:!0})},Si=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _i(e))!bi.call(r,s)&&s!==t&&Rt(r,s,{get:()=>e[s],enumerable:!(n=mi(e,s))||n.enumerable});return r};var y=(r,e,t)=>(t=r!=null?gi(yi(r)):{},Si(e||!r||!r.__esModule?Rt(t,"default",{value:r,enumerable:!0}):t,r));var Te=O(Lt=>{var rt=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},jt=class extends rt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Lt.CommanderError=rt;Lt.InvalidArgumentError=jt});var nt=O($t=>{var{InvalidArgumentError:vi}=Te(),Mt=class{constructor(e,t){switch(this.description=t||"",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,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new vi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function ki(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}$t.Argument=Mt;$t.humanReadableArgName=ki});var Ut=O(Fr=>{var{humanReadableArgName:Ei}=nt(),Bt=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=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?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!s&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let s=n.options.filter(i=>!i.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>Ei(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function c(g,h){if(h){let m=`${g.padEnd(n+o)}${h}`;return t.wrap(m,s-i,n+o)}return g}function a(g){return g.join(`
3
3
  `).replace(/^/gm," ".repeat(i))}let l=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(l=l.concat([t.wrap(d,s,0),""]));let u=t.visibleArguments(e).map(g=>c(t.argumentTerm(g),t.argumentDescription(g)));u.length>0&&(l=l.concat(["Arguments:",a(u),""]));let f=t.visibleOptions(e).map(g=>c(t.optionTerm(g),t.optionDescription(g)));if(f.length>0&&(l=l.concat(["Options:",a(f),""])),this.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(h=>c(t.optionTerm(h),t.optionDescription(h)));g.length>0&&(l=l.concat(["Global Options:",a(g),""]))}let p=t.visibleCommands(e).map(g=>c(t.subcommandTerm(g),t.subcommandDescription(g)));return p.length>0&&(l=l.concat(["Commands:",a(p),""])),l.join(`
4
4
  `)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,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 c=t-n;if(c<s)return e;let a=e.slice(0,n),l=e.slice(n).replace(`\r
5
5
  `,`
6
6
  `),d=" ".repeat(n),f="\\s\u200B",p=new RegExp(`
7
7
  |.{1,${c-1}}([${f}]|$)|[^${f}]+?([${f}]|$)`,"g"),g=l.match(p)||[];return a+g.map((h,m)=>h===`
8
8
  `?"":(m>0?d:"")+h.trimEnd()).join(`
9
- `)}};Fr.Help=Bt});var Gt=O(Ht=>{var{InvalidArgumentError:xi}=Te(),Ut=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Oi(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,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),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,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new xi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ii(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Ft=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Ii(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Oi(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}Ht.Option=Ut;Ht.DualOptions=Ft});var Gr=O(Hr=>{function Ci(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Pi(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.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 c=Ci(r,o),a=Math.max(r.length,o.length);(a-c)/a>i&&(c<s?(s=c,n=[o]):c===s&&n.push(o))}),n.sort((o,c)=>o.localeCompare(c)),t&&(n=n.map(o=>`--${o}`)),n.length>1?`
9
+ `)}};Fr.Help=Bt});var Gt=O(Ht=>{var{InvalidArgumentError:xi}=Te(),Wt=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Oi(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,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),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,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new xi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ii(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Ft=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Ii(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Oi(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}Ht.Option=Wt;Ht.DualOptions=Ft});var Gr=O(Hr=>{function Ci(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=r.length;s++){let i=1;r[s-1]===e[n-1]?i=0:i=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+i),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function Pi(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.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 c=Ci(r,o),a=Math.max(r.length,o.length);(a-c)/a>i&&(c<s?(s=c,n=[o]):c===s&&n.push(o))}),n.sort((o,c)=>o.localeCompare(c)),t&&(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]}?)`:""}Hr.suggestSimilar=Pi});var Yr=O(Kr=>{var Ai=require("node:events").EventEmitter,qt=require("node:child_process"),V=require("node:path"),Vt=require("node:fs"),C=require("node:process"),{Argument:Ti,humanReadableArgName:Ni}=nt(),{CommanderError:Jt}=Te(),{Help:Di}=Wt(),{Option:qr,DualOptions:Ri}=Gt(),{suggestSimilar:Vr}=Gr(),Kt=class r extends Ai{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:t=>C.stdout.write(t),writeErr:t=>C.stderr.write(t),getOutHelpWidth:()=>C.stdout.isTTY?C.stdout.columns:void 0,getErrHelpWidth:()=>C.stderr.isTTY?C.stderr.columns:void 0,outputError:(t,n)=>n(t)},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 t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,c]=e.match(/([^ ]+) *(.*)/),a=this.createCommand(o);return s&&(a.description(s),a._executableHandler=!0),i.isDefault&&(this._defaultCommandName=a._name),a._hidden=!!(i.noHelp||i.hidden),a._executableFile=i.executableFile||null,c&&a.arguments(c),this._registerCommand(a),a.parent=this,a.copyInheritedSettings(this),s?this:a}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Di,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,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
11
+ (Did you mean ${n[0]}?)`:""}Hr.suggestSimilar=Pi});var Yr=O(Kr=>{var Ai=require("node:events").EventEmitter,qt=require("node:child_process"),V=require("node:path"),Vt=require("node:fs"),C=require("node:process"),{Argument:Ti,humanReadableArgName:Ni}=nt(),{CommanderError:Jt}=Te(),{Help:Di}=Ut(),{Option:qr,DualOptions:Ri}=Gt(),{suggestSimilar:Vr}=Gr(),Kt=class r extends Ai{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:t=>C.stdout.write(t),writeErr:t=>C.stderr.write(t),getOutHelpWidth:()=>C.stdout.isTTY?C.stdout.columns:void 0,getErrHelpWidth:()=>C.stderr.isTTY?C.stderr.columns:void 0,outputError:(t,n)=>n(t)},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 t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,c]=e.match(/([^ ]+) *(.*)/),a=this.createCommand(o);return s&&(a.description(s),a._executableHandler=!0),i.isDefault&&(this._defaultCommandName=a._name),a._hidden=!!(i.noHelp||i.hidden),a._executableFile=i.executableFile||null,c&&a.arguments(c),this._registerCommand(a),a.parent=this,a.copyInheritedSettings(this),s?this:a}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Di,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,t){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 t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Ti(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.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,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"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,t){return typeof e!="object"?(this.helpCommand(e,t),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,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
13
  Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new Jt(e,t,n)),C.exit(e)}action(e){let t=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=t,this}createOption(e,t){return new qr(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,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 t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){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
14
  - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=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,c)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let a=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,a,o):i!==null&&e.variadic&&(i=e._concatValue(i,a)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,c)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,n,s,i){if(typeof t=="object"&&t instanceof qr)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let c=s;s=(a,l)=>{let d=c.exec(a);return d?d[0]:l},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,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,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){C.versions?.electron&&(t.from="electron");let s=C.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=C.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":C.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: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(d,u){let f=V.resolve(d,u);if(Vt.existsSync(f))return f;if(s.includes(V.extname(u)))return;let p=s.find(g=>Vt.existsSync(`${f}${g}`));if(p)return`${f}${p}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,c=this._executableDir||"";if(this._scriptPath){let d;try{d=Vt.realpathSync(this._scriptPath)}catch{d=this._scriptPath}c=V.resolve(V.dirname(d),c)}if(c){let d=i(c,o);if(!d&&!e._executableFile&&this._scriptPath){let u=V.basename(this._scriptPath,V.extname(this._scriptPath));u!==this._name&&(d=i(c,`${u}-${e._name}`))}o=d||o}n=s.includes(V.extname(o));let a;C.platform!=="win32"?n?(t.unshift(o),t=Jr(C.execArgv).concat(t),a=qt.spawn(C.argv[0],t,{stdio:"inherit"})):a=qt.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Jr(C.execArgv).concat(t),a=qt.spawn(C.execPath,t,{stdio:"inherit"})),a.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{C.on(u,()=>{a.killed===!1&&a.exitCode===null&&a.kill(u)})});let l=this._exitCallback;a.on("close",d=>{d=d??1,l?l(new Jt(d,"commander.executeSubCommandAsync","(close)")):C.exit(d)}),a.on("error",d=>{if(d.code==="ENOENT"){let u=c?`searched for local subcommand relative to directory '${c}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",f=`'${o}' does not exist
@@ -20,19 +20,19 @@ Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._life
20
20
  `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in C.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,C.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Ri(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let c=o.attributeName(),a=this.getOptionValue(c),l=this.options.find(u=>u.negate&&c===u.attributeName()),d=this.options.find(u=>!u.negate&&c===u.attributeName());return l&&(l.presetArg===void 0&&a===!1||l.presetArg!==void 0&&a===l.presetArg)?l:d||o},s=o=>{let c=n(o),a=c.attributeName();return this.getOptionValueSource(a)==="env"?`environment variable '${c.envVar}'`:`option '${c.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(c=>c.long).map(c=>c.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=Vr(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=Vr(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
21
  `),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>Ni(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=V.basename(e,V.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=C.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
22
  Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Jr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}Kr.Command=Kt});var Zr=O($=>{var{Argument:zr}=nt(),{Command:Yt}=Yr(),{CommanderError:ji,InvalidArgumentError:Xr}=Te(),{Help:Li}=Wt(),{Option:Qr}=Gt();$.program=new Yt;$.createCommand=r=>new Yt(r);$.createOption=(r,e)=>new Qr(r,e);$.createArgument=(r,e)=>new zr(r,e);$.Command=Yt;$.Option=Qr;$.Argument=zr;$.Help=Li;$.CommanderError=ji;$.InvalidArgumentError=Xr;$.InvalidOptionArgumentError=Xr});var cn=O(N=>{"use strict";var zt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Mi=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i(await(0,t.stat)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i((0,e.statSync)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(c,a)=>c.isFile()&&o(c,a),o=(c,a)=>{let l=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let f=new Set([u,...d]),p=c.mode,g=c.uid,h=c.gid,m=parseInt("100",8),k=parseInt("010",8),v=parseInt("001",8),P=m|k;return!!(p&v||p&k&&f.has(h)||p&m&&g===l||p&P&&l===0)}}),$i=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c(await(0,t.stat)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.isexe=s;var i=(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c((0,e.statSync)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.sync=i;var o=(a,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let f of u){let p=f.toLowerCase(),g=a.substring(a.length-p.length).toLowerCase();if(p&&g===p)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Bi=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),rn=N&&N.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Wi=N&&N.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),nn=N&&N.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&rn(t,e,n[s]);return Wi(t,e),t}})(),Ui=N&&N.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&rn(e,r,t)};Object.defineProperty(N,"__esModule",{value:!0});N.sync=N.isexe=N.posix=N.win32=void 0;var sn=nn(Mi());N.posix=sn;var on=nn($i());N.win32=on;Ui(Bi(),N);var Fi=process.env._ISEXE_TEST_PLATFORM_||process.platform,an=Fi==="win32"?on:sn;N.isexe=an.isexe;N.sync=an.sync});var yn=O((Jc,_n)=>{var{isexe:Hi,sync:Gi}=cn(),{join:qi,delimiter:Vi,sep:ln,posix:dn}=require("path"),un=process.platform==="win32",hn=new RegExp(`[${dn.sep}${ln===dn.sep?"":ln}]`.replace(/(\\)/g,"\\$1")),Ji=new RegExp(`^\\.${hn.source}`),pn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),fn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=Vi})=>{let s=r.match(hn)?[""]:[...un?[process.cwd()]:[],...(e||"").split(n)];if(un){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(c=>[c,c.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},gn=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&Ji.test(e)?e.slice(0,2):"")+qi(t,e)},mn=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(await Hi(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 pn(r)},Ki=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(Gi(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 pn(r)};_n.exports=mn;mn.sync=Ki});var J=O((Xc,xn)=>{"use strict";var En=["nodebuffer","arraybuffer","fragments"],kn=typeof Blob<"u";kn&&En.push("blob");xn.exports={BINARY_TYPES:En,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:kn,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Re=O((Qc,ct)=>{"use strict";var{EMPTY_BUFFER:Qi}=J(),Zt=Buffer[Symbol.species];function Zi(r,e){if(r.length===0)return Qi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new Zt(t.buffer,t.byteOffset,n):t}function In(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function On(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function eo(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function er(r){if(er.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new Zt(r):ArrayBuffer.isView(r)?e=new Zt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),er.readOnly=!1),e}ct.exports={concat:Zi,mask:In,toArrayBuffer:eo,toBuffer:er,unmask:On};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");ct.exports.mask=function(e,t,n,s,i){i<48?In(e,t,n,s,i):r.mask(e,t,n,s,i)},ct.exports.unmask=function(e,t){e.length<32?On(e,t):r.unmask(e,t)}}catch{}});var An=O((Zc,Pn)=>{"use strict";var Cn=Symbol("kDone"),tr=Symbol("kRun"),rr=class{constructor(e){this[Cn]=()=>{this.pending--,this[tr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[tr]()}[tr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Cn])}}};Pn.exports=rr});var me=O((el,Rn)=>{"use strict";var je=require("zlib"),Tn=Re(),to=An(),{kStatusCode:Nn}=J(),ro=Buffer[Symbol.species],no=Buffer.from([0,0,255,255]),dt=Symbol("permessage-deflate"),K=Symbol("total-length"),fe=Symbol("callback"),X=Symbol("buffers"),ge=Symbol("error"),lt,nr=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,!lt){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;lt=new to(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[fe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){lt.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){lt.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=je.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[dt]=this,this._inflate[K]=0,this._inflate[X]=[],this._inflate.on("error",io),this._inflate.on("data",Dn)}this._inflate[fe]=n,this._inflate.write(e),t&&this._inflate.write(no),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Tn.concat(this._inflate[X],this._inflate[K]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[K]=0,this._inflate[X]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=je.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[K]=0,this._deflate[X]=[],this._deflate.on("data",so)}this._deflate[fe]=n,this._deflate.write(e),this._deflate.flush(je.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Tn.concat(this._deflate[X],this._deflate[K]);t&&(i=new ro(i.buffer,i.byteOffset,i.length-4)),this._deflate[fe]=null,this._deflate[K]=0,this._deflate[X]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Rn.exports=nr;function so(r){this[X].push(r),this[K]+=r.length}function Dn(r){if(this[K]+=r.length,this[dt]._maxPayload<1||this[K]<=this[dt]._maxPayload){this[X].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][Nn]=1009,this.removeListener("data",Dn),this.reset()}function io(r){if(this[dt]._inflate=null,this[ge]){this[fe](this[ge]);return}r[Nn]=1007,this[fe](r)}});var _e=O((tl,ut)=>{"use strict";var{isUtf8:jn}=require("buffer"),{hasBlob:oo}=J(),ao=[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 co(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function sr(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function lo(r){return oo&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ut.exports={isBlob:lo,isValidStatusCode:co,isValidUTF8:sr,tokenChars:ao};if(jn)ut.exports.isValidUTF8=function(r){return r.length<24?sr(r):jn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ut.exports.isValidUTF8=function(e){return e.length<32?sr(e):r(e)}}catch{}});var lr=O((rl,Fn)=>{"use strict";var{Writable:uo}=require("stream"),Ln=me(),{BINARY_TYPES:ho,EMPTY_BUFFER:Mn,kStatusCode:po,kWebSocket:fo}=J(),{concat:ir,toArrayBuffer:go,unmask:mo}=Re(),{isValidStatusCode:_o,isValidUTF8:$n}=_e(),ht=Buffer[Symbol.species],B=0,Bn=1,Wn=2,Un=3,or=4,ar=5,pt=6,cr=class extends uo{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||ho[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[fo]=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=B}_write(e,t,n){if(this._opcode===8&&this._state==B)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 ht(n.buffer,n.byteOffset+e,n.length-e),new ht(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ht(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case B:this.getInfo(e);break;case Bn:this.getPayloadLength16(e);break;case Wn:this.getPayloadLength64(e);break;case Un:this.getMask();break;case or:this.getData(e);break;case ar:case pt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[Ln.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=Bn:this._payloadLength===127?this._state=Wn:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=Un:this._state=or}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=or}getData(e){let t=Mn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&mo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=ar,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Ln.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===B&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=B;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ir(n,t):this._binaryType==="arraybuffer"?s=go(ir(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=B):(this._state=pt,setImmediate(()=>{this.emit("message",s,!0),this._state=B,this.startLoop(e)}))}else{let s=ir(n,t);if(!this._skipUTF8Validation&&!$n(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ar||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=B):(this._state=pt,setImmediate(()=>{this.emit("message",s,!1),this._state=B,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Mn),this.end();else{let n=e.readUInt16BE(0);if(!_o(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ht(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!$n(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=B;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=B):(this._state=pt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=B,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[po]=s,o}};Fn.exports=cr});var hr=O((sl,qn)=>{"use strict";var{Duplex:nl}=require("stream"),{randomFillSync:yo}=require("crypto"),Hn=me(),{EMPTY_BUFFER:bo,kWebSocket:wo,NOOP:So}=J(),{isBlob:ye,isValidStatusCode:vo}=_e(),{mask:Gn,toBuffer:re}=Re(),W=Symbol("kByteLength"),Eo=Buffer.alloc(4),ft=8*1024,ne,be=ft,F=0,ko=1,xo=2,dr=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=F,this.onerror=So,this[wo]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Eo,t.generateMask?t.generateMask(n):(be===ft&&(ne===void 0&&(ne=Buffer.alloc(ft)),yo(ne,0,ft),be=0),n[0]=ne[be++],n[1]=ne[be++],n[2]=ne[be++],n[3]=ne[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[W]!==void 0?c=t[W]:(e=Buffer.from(e),c=e.length):(c=e.length,s=t.mask&&t.readOnly&&!o);let a=c;c>=65536?(i+=8,a=127):c>125&&(i+=2,a=126);let l=Buffer.allocUnsafe(s?c+i:i);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=a,a===126?l.writeUInt16BE(c,2):a===127&&(l[2]=l[3]=0,l.writeUIntBE(c,4,6)),t.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?(Gn(e,n,l,i,c),[l]):(Gn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=bo;else{if(typeof e!="number"||!vo(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let c=Buffer.byteLength(t);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+c),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[W]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==F?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=re(e),s=e.length,i=re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[W]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==F?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=re(e),s=e.length,i=re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[W]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==F?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Hn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):ye(e)?(c=e.size,a=!1):(e=re(e),c=e.length,a=re.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[W]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==F?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[W],this._state=xo,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(ur,this,c,s);return}this._bufferedBytes-=n[W];let o=re(i);t?this.dispatch(o,t,n,s):(this._state=F,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Io,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Hn.extensionName];this._bufferedBytes+=n[W],this._state=ko,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");ur(this,a,s);return}this._bufferedBytes-=n[W],this._state=F,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===F&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][W],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][W],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};qn.exports=dr;function ur(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Io(r,e,t){ur(r,e,t),r.onerror(e)}});var es=O((il,Zn)=>{"use strict";var{kForOnEventAttribute:Le,kListener:pr}=J(),Vn=Symbol("kCode"),Jn=Symbol("kData"),Kn=Symbol("kError"),Yn=Symbol("kMessage"),zn=Symbol("kReason"),we=Symbol("kTarget"),Xn=Symbol("kType"),Qn=Symbol("kWasClean"),Y=class{constructor(e){this[we]=null,this[Xn]=e}get target(){return this[we]}get type(){return this[Xn]}};Object.defineProperty(Y.prototype,"target",{enumerable:!0});Object.defineProperty(Y.prototype,"type",{enumerable:!0});var se=class extends Y{constructor(e,t={}){super(e),this[Vn]=t.code===void 0?0:t.code,this[zn]=t.reason===void 0?"":t.reason,this[Qn]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Vn]}get reason(){return this[zn]}get wasClean(){return this[Qn]}};Object.defineProperty(se.prototype,"code",{enumerable:!0});Object.defineProperty(se.prototype,"reason",{enumerable:!0});Object.defineProperty(se.prototype,"wasClean",{enumerable:!0});var Se=class extends Y{constructor(e,t={}){super(e),this[Kn]=t.error===void 0?null:t.error,this[Yn]=t.message===void 0?"":t.message}get error(){return this[Kn]}get message(){return this[Yn]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Me=class extends Y{constructor(e,t={}){super(e),this[Jn]=t.data===void 0?null:t.data}get data(){return this[Jn]}};Object.defineProperty(Me.prototype,"data",{enumerable:!0});var Oo={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Le]&&s[pr]===e&&!s[Le])return;let n;if(r==="message")n=function(i,o){let c=new Me("message",{data:o?i:i.toString()});c[we]=this,gt(e,this,c)};else if(r==="close")n=function(i,o){let c=new se("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[we]=this,gt(e,this,c)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,gt(e,this,o)};else if(r==="open")n=function(){let i=new Y("open");i[we]=this,gt(e,this,i)};else return;n[Le]=!!t[Le],n[pr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[pr]===e&&!t[Le]){this.removeListener(r,t);break}}};Zn.exports={CloseEvent:se,ErrorEvent:Se,Event:Y,EventTarget:Oo,MessageEvent:Me};function gt(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var mt=O((ol,ts)=>{"use strict";var{tokenChars:$e}=_e();function q(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Co(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,c,a=-1,l=-1,d=-1,u=0;for(;u<r.length;u++)if(l=r.charCodeAt(u),o===void 0)if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(u!==0&&(l===32||l===9))d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=r.slice(a,d);l===44?(q(e,p,t),t=Object.create(null)):o=p,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(l===32||l===9)d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),q(t,r.slice(a,d),!0),l===44&&(q(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(l===61&&a!==-1&&d===-1)c=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if($e[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if($e[l]===1)a===-1&&(a=u);else if(l===34&&a!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(a!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=r.slice(a,d);n&&(p=p.replace(/\\/g,""),n=!1),q(t,c,p),l===44&&(q(e,o,t),t=Object.create(null),o=void 0),c=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let f=r.slice(a,d);return o===void 0?q(e,f,t):(c===void 0?q(t,f,!0):n?q(t,c,f.replace(/\\/g,"")):q(t,c,f),q(e,o,t)),e}function Po(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}ts.exports={format:Po,parse:Co}});var wt=O((ll,ps)=>{"use strict";var Ao=require("events"),To=require("https"),No=require("http"),ss=require("net"),Do=require("tls"),{randomBytes:Ro,createHash:jo}=require("crypto"),{Duplex:al,Readable:cl}=require("stream"),{URL:fr}=require("url"),Q=me(),Lo=lr(),Mo=hr(),{isBlob:$o}=_e(),{BINARY_TYPES:rs,CLOSE_TIMEOUT:Bo,EMPTY_BUFFER:_t,GUID:Wo,kForOnEventAttribute:gr,kListener:Uo,kStatusCode:Fo,kWebSocket:D,NOOP:is}=J(),{EventTarget:{addEventListener:Ho,removeEventListener:Go}}=es(),{format:qo,parse:Vo}=mt(),{toBuffer:Jo}=Re(),os=Symbol("kAborted"),mr=[8,13],z=["CONNECTING","OPEN","CLOSING","CLOSED"],Ko=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,I=class r extends Ao{constructor(e,t,n){super(),this._binaryType=rs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=_t,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),as(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){rs.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new Lo({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Mo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[D]=this,i[D]=this,e[D]=this,s.on("conclude",Xo),s.on("drain",Qo),s.on("error",Zo),s.on("message",ea),s.on("ping",ta),s.on("pong",ra),i.onerror=na,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",ds),e.on("data",bt),e.on("end",us),e.on("error",hs),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Q.extensionName]&&this._extensions[Q.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){L(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),ls(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||_t,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||_t,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Q.extensionName]||(s.compress=!1),this._sender.send(e||_t,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){L(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(I,"CONNECTING",{enumerable:!0,value:z.indexOf("CONNECTING")});Object.defineProperty(I.prototype,"CONNECTING",{enumerable:!0,value:z.indexOf("CONNECTING")});Object.defineProperty(I,"OPEN",{enumerable:!0,value:z.indexOf("OPEN")});Object.defineProperty(I.prototype,"OPEN",{enumerable:!0,value:z.indexOf("OPEN")});Object.defineProperty(I,"CLOSING",{enumerable:!0,value:z.indexOf("CLOSING")});Object.defineProperty(I.prototype,"CLOSING",{enumerable:!0,value:z.indexOf("CLOSING")});Object.defineProperty(I,"CLOSED",{enumerable:!0,value:z.indexOf("CLOSED")});Object.defineProperty(I.prototype,"CLOSED",{enumerable:!0,value:z.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(I.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(I.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[gr])return e[Uo];return null},set(e){for(let t of this.listeners(r))if(t[gr]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[gr]:!0})}})});I.prototype.addEventListener=Ho;I.prototype.removeEventListener=Go;ps.exports=I;function as(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Bo,protocolVersion:mr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!mr.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${mr.join(", ")})`);let i;if(e instanceof fr)i=e;else try{i=new fr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",c=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!c?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:c&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let h=new SyntaxError(a);if(r._redirects===0)throw h;yt(r,h);return}let l=o?443:80,d=Ro(16).toString("base64"),u=o?To.request:No.request,f=new Set,p;if(s.createConnection=s.createConnection||(o?zo:Yo),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&&(p=new Q({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=qo({[Q.extensionName]:p.offer()})),t.length){for(let h of t){if(typeof h!="string"||!Ko.test(h)||f.has(h))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(h)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),c){let h=s.path.split(":");s.socketPath=h[0],s.path=h[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let h=n&&n.headers;if(n={...n,headers:{}},h)for(let[m,k]of Object.entries(h))n.headers[m.toLowerCase()]=k}else if(r.listenerCount("redirect")===0){let h=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!h||r._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")),g=r._req=u(s),r._redirects&&r.emit("redirect",r.url,g)}else g=r._req=u(s);s.timeout&&g.on("timeout",()=>{L(r,g,"Opening handshake has timed out")}),g.on("error",h=>{g===null||g[os]||(g=r._req=null,yt(r,h))}),g.on("response",h=>{let m=h.headers.location,k=h.statusCode;if(m&&s.followRedirects&&k>=300&&k<400){if(++r._redirects>s.maxRedirects){L(r,g,"Maximum redirects exceeded");return}g.abort();let v;try{v=new fr(m,e)}catch{let M=new SyntaxError(`Invalid URL: ${m}`);yt(r,M);return}as(r,v,t,n)}else r.emit("unexpected-response",g,h)||L(r,g,`Unexpected server response: ${h.statusCode}`)}),g.on("upgrade",(h,m,k)=>{if(r.emit("upgrade",h),r.readyState!==I.CONNECTING)return;g=r._req=null;let v=h.headers.upgrade;if(v===void 0||v.toLowerCase()!=="websocket"){L(r,m,"Invalid Upgrade header");return}let P=jo("sha1").update(d+Wo).digest("base64");if(h.headers["sec-websocket-accept"]!==P){L(r,m,"Invalid Sec-WebSocket-Accept header");return}let M=h.headers["sec-websocket-protocol"],w;if(M!==void 0?f.size?f.has(M)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":f.size&&(w="Server sent no subprotocol"),w){L(r,m,w);return}M&&(r._protocol=M);let x=h.headers["sec-websocket-extensions"];if(x!==void 0){if(!p){L(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S;try{S=Vo(x)}catch{L(r,m,"Invalid Sec-WebSocket-Extensions header");return}let b=Object.keys(S);if(b.length!==1||b[0]!==Q.extensionName){L(r,m,"Server indicated an extension that was not requested");return}try{p.accept(S[Q.extensionName])}catch{L(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Q.extensionName]=p}r.setSocket(m,k,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function yt(r,e){r._readyState=I.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Yo(r){return r.path=r.socketPath,ss.connect(r)}function zo(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=ss.isIP(r.host)?"":r.host),Do.connect(r)}function L(r,e,t){r._readyState=I.CLOSING;let n=new Error(t);Error.captureStackTrace(n,L),e.setHeader?(e[os]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(yt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function _r(r,e,t){if(e){let n=$o(e)?e.size:Jo(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${z[r.readyState]})`);process.nextTick(t,n)}}function Xo(r,e){let t=this[D];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[D]!==void 0&&(t._socket.removeListener("data",bt),process.nextTick(cs,t._socket),r===1005?t.close():t.close(r,e))}function Qo(){let r=this[D];r.isPaused||r._socket.resume()}function Zo(r){let e=this[D];e._socket[D]!==void 0&&(e._socket.removeListener("data",bt),process.nextTick(cs,e._socket),e.close(r[Fo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function ns(){this[D].emitClose()}function ea(r,e){this[D].emit("message",r,e)}function ta(r){let e=this[D];e._autoPong&&e.pong(r,!this._isServer,is),e.emit("ping",r)}function ra(r){this[D].emit("pong",r)}function cs(r){r.resume()}function na(r){let e=this[D];e.readyState!==I.CLOSED&&(e.readyState===I.OPEN&&(e._readyState=I.CLOSING,ls(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function ls(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function ds(){let r=this[D];if(this.removeListener("close",ds),this.removeListener("data",bt),this.removeListener("end",us),r._readyState=I.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[D]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",ns),r._receiver.on("finish",ns))}function bt(r){this[D]._receiver.write(r)||this.pause()}function us(){let r=this[D];r._readyState=I.CLOSING,r._receiver.end(),this.end()}function hs(){let r=this[D];this.removeListener("error",hs),this.on("error",is),r&&(r._readyState=I.CLOSING,this.destroy())}});var _s=O((ul,ms)=>{"use strict";var dl=wt(),{Duplex:sa}=require("stream");function fs(r){r.emit("close")}function ia(){!this.destroyed&&this._writableState.finished&&this.destroy()}function gs(r){this.removeListener("error",gs),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function oa(r,e){let t=!0,n=new sa({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let c=!o&&n._readableState.objectMode?i.toString():i;n.push(c)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(fs,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(fs,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",ia),n.on("error",gs),n}ms.exports=oa});var yr=O((hl,ys)=>{"use strict";var{tokenChars:aa}=_e();function ca(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&aa[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let c=r.slice(t,n);if(e.has(c))throw new SyntaxError(`The "${c}" subprotocol is duplicated`);e.add(c),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ys.exports={parse:ca}});var xs=O((fl,ks)=>{"use strict";var la=require("events"),St=require("http"),{Duplex:pl}=require("stream"),{createHash:da}=require("crypto"),bs=mt(),ie=me(),ua=yr(),ha=wt(),{CLOSE_TIMEOUT:pa,GUID:fa,kWebSocket:ga}=J(),ma=/^[+/0-9A-Za-z]{22}==$/,ws=0,Ss=1,Es=2,br=class extends la{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:pa,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ha,...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=St.createServer((n,s)=>{let i=St.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=_a(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=ws}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===Es){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Be,this);return}if(e&&this.once("close",e),this._state!==Ss)if(this._state=Ss,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(Be,this):process.nextTick(Be,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Be(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",vs);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){oe(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){oe(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!ma.test(i)){oe(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){oe(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){We(t,400);return}let a=e.headers["sec-websocket-protocol"],l=new Set;if(a!==void 0)try{l=ua.parse(a)}catch{oe(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let f=new ie({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=bs.parse(d);p[ie.extensionName]&&(f.accept(p[ie.extensionName]),u[ie.extensionName]=f)}catch{oe(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(p,g,h,m)=>{if(!p)return We(t,g||401,h,m);this.completeUpgrade(u,i,l,e,t,n,s)});return}if(!this.options.verifyClient(f))return We(t,401)}this.completeUpgrade(u,i,l,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,c){if(!i.readable||!i.writable)return i.destroy();if(i[ga])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ws)return We(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${da("sha1").update(t+fa).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[ie.extensionName]){let u=e[ie.extensionName].params,f=bs.format({[ie.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${f}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
23
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Jr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}Kr.Command=Kt});var Zr=O($=>{var{Argument:zr}=nt(),{Command:Yt}=Yr(),{CommanderError:ji,InvalidArgumentError:Xr}=Te(),{Help:Li}=Ut(),{Option:Qr}=Gt();$.program=new Yt;$.createCommand=r=>new Yt(r);$.createOption=(r,e)=>new Qr(r,e);$.createArgument=(r,e)=>new zr(r,e);$.Command=Yt;$.Option=Qr;$.Argument=zr;$.Help=Li;$.CommanderError=ji;$.InvalidArgumentError=Xr;$.InvalidOptionArgumentError=Xr});var cn=O(N=>{"use strict";var zt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Mi=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i(await(0,t.stat)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i((0,e.statSync)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(c,a)=>c.isFile()&&o(c,a),o=(c,a)=>{let l=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let f=new Set([u,...d]),p=c.mode,g=c.uid,h=c.gid,m=parseInt("100",8),E=parseInt("010",8),v=parseInt("001",8),P=m|E;return!!(p&v||p&E&&f.has(h)||p&m&&g===l||p&P&&l===0)}}),$i=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c(await(0,t.stat)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.isexe=s;var i=(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c((0,e.statSync)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.sync=i;var o=(a,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let f of u){let p=f.toLowerCase(),g=a.substring(a.length-p.length).toLowerCase();if(p&&g===p)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Bi=zt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),rn=N&&N.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Ui=N&&N.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),nn=N&&N.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&rn(t,e,n[s]);return Ui(t,e),t}})(),Wi=N&&N.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&rn(e,r,t)};Object.defineProperty(N,"__esModule",{value:!0});N.sync=N.isexe=N.posix=N.win32=void 0;var sn=nn(Mi());N.posix=sn;var on=nn($i());N.win32=on;Wi(Bi(),N);var Fi=process.env._ISEXE_TEST_PLATFORM_||process.platform,an=Fi==="win32"?on:sn;N.isexe=an.isexe;N.sync=an.sync});var yn=O((Jc,_n)=>{var{isexe:Hi,sync:Gi}=cn(),{join:qi,delimiter:Vi,sep:ln,posix:dn}=require("path"),un=process.platform==="win32",hn=new RegExp(`[${dn.sep}${ln===dn.sep?"":ln}]`.replace(/(\\)/g,"\\$1")),Ji=new RegExp(`^\\.${hn.source}`),pn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),fn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=Vi})=>{let s=r.match(hn)?[""]:[...un?[process.cwd()]:[],...(e||"").split(n)];if(un){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(c=>[c,c.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},gn=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&Ji.test(e)?e.slice(0,2):"")+qi(t,e)},mn=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(await Hi(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 pn(r)},Ki=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(Gi(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 pn(r)};_n.exports=mn;mn.sync=Ki});var J=O((Xc,xn)=>{"use strict";var kn=["nodebuffer","arraybuffer","fragments"],En=typeof Blob<"u";En&&kn.push("blob");xn.exports={BINARY_TYPES:kn,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:En,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Re=O((Qc,ct)=>{"use strict";var{EMPTY_BUFFER:Qi}=J(),Zt=Buffer[Symbol.species];function Zi(r,e){if(r.length===0)return Qi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new Zt(t.buffer,t.byteOffset,n):t}function In(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function On(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function eo(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function er(r){if(er.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new Zt(r):ArrayBuffer.isView(r)?e=new Zt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),er.readOnly=!1),e}ct.exports={concat:Zi,mask:In,toArrayBuffer:eo,toBuffer:er,unmask:On};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");ct.exports.mask=function(e,t,n,s,i){i<48?In(e,t,n,s,i):r.mask(e,t,n,s,i)},ct.exports.unmask=function(e,t){e.length<32?On(e,t):r.unmask(e,t)}}catch{}});var An=O((Zc,Pn)=>{"use strict";var Cn=Symbol("kDone"),tr=Symbol("kRun"),rr=class{constructor(e){this[Cn]=()=>{this.pending--,this[tr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[tr]()}[tr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Cn])}}};Pn.exports=rr});var me=O((el,Rn)=>{"use strict";var je=require("zlib"),Tn=Re(),to=An(),{kStatusCode:Nn}=J(),ro=Buffer[Symbol.species],no=Buffer.from([0,0,255,255]),dt=Symbol("permessage-deflate"),K=Symbol("total-length"),fe=Symbol("callback"),X=Symbol("buffers"),ge=Symbol("error"),lt,nr=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,!lt){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;lt=new to(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[fe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){lt.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){lt.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=je.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[dt]=this,this._inflate[K]=0,this._inflate[X]=[],this._inflate.on("error",io),this._inflate.on("data",Dn)}this._inflate[fe]=n,this._inflate.write(e),t&&this._inflate.write(no),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Tn.concat(this._inflate[X],this._inflate[K]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[K]=0,this._inflate[X]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=je.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[K]=0,this._deflate[X]=[],this._deflate.on("data",so)}this._deflate[fe]=n,this._deflate.write(e),this._deflate.flush(je.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Tn.concat(this._deflate[X],this._deflate[K]);t&&(i=new ro(i.buffer,i.byteOffset,i.length-4)),this._deflate[fe]=null,this._deflate[K]=0,this._deflate[X]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Rn.exports=nr;function so(r){this[X].push(r),this[K]+=r.length}function Dn(r){if(this[K]+=r.length,this[dt]._maxPayload<1||this[K]<=this[dt]._maxPayload){this[X].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][Nn]=1009,this.removeListener("data",Dn),this.reset()}function io(r){if(this[dt]._inflate=null,this[ge]){this[fe](this[ge]);return}r[Nn]=1007,this[fe](r)}});var _e=O((tl,ut)=>{"use strict";var{isUtf8:jn}=require("buffer"),{hasBlob:oo}=J(),ao=[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 co(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function sr(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function lo(r){return oo&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ut.exports={isBlob:lo,isValidStatusCode:co,isValidUTF8:sr,tokenChars:ao};if(jn)ut.exports.isValidUTF8=function(r){return r.length<24?sr(r):jn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ut.exports.isValidUTF8=function(e){return e.length<32?sr(e):r(e)}}catch{}});var lr=O((rl,Fn)=>{"use strict";var{Writable:uo}=require("stream"),Ln=me(),{BINARY_TYPES:ho,EMPTY_BUFFER:Mn,kStatusCode:po,kWebSocket:fo}=J(),{concat:ir,toArrayBuffer:go,unmask:mo}=Re(),{isValidStatusCode:_o,isValidUTF8:$n}=_e(),ht=Buffer[Symbol.species],B=0,Bn=1,Un=2,Wn=3,or=4,ar=5,pt=6,cr=class extends uo{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||ho[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[fo]=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=B}_write(e,t,n){if(this._opcode===8&&this._state==B)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 ht(n.buffer,n.byteOffset+e,n.length-e),new ht(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ht(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case B:this.getInfo(e);break;case Bn:this.getPayloadLength16(e);break;case Un:this.getPayloadLength64(e);break;case Wn:this.getMask();break;case or:this.getData(e);break;case ar:case pt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[Ln.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=Bn:this._payloadLength===127?this._state=Un:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=Wn:this._state=or}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=or}getData(e){let t=Mn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&mo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=ar,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Ln.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===B&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=B;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ir(n,t):this._binaryType==="arraybuffer"?s=go(ir(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=B):(this._state=pt,setImmediate(()=>{this.emit("message",s,!0),this._state=B,this.startLoop(e)}))}else{let s=ir(n,t);if(!this._skipUTF8Validation&&!$n(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===ar||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=B):(this._state=pt,setImmediate(()=>{this.emit("message",s,!1),this._state=B,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Mn),this.end();else{let n=e.readUInt16BE(0);if(!_o(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ht(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!$n(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=B;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=B):(this._state=pt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=B,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[po]=s,o}};Fn.exports=cr});var hr=O((sl,qn)=>{"use strict";var{Duplex:nl}=require("stream"),{randomFillSync:yo}=require("crypto"),Hn=me(),{EMPTY_BUFFER:bo,kWebSocket:wo,NOOP:So}=J(),{isBlob:ye,isValidStatusCode:vo}=_e(),{mask:Gn,toBuffer:re}=Re(),U=Symbol("kByteLength"),ko=Buffer.alloc(4),ft=8*1024,ne,be=ft,F=0,Eo=1,xo=2,dr=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=F,this.onerror=So,this[wo]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||ko,t.generateMask?t.generateMask(n):(be===ft&&(ne===void 0&&(ne=Buffer.alloc(ft)),yo(ne,0,ft),be=0),n[0]=ne[be++],n[1]=ne[be++],n[2]=ne[be++],n[3]=ne[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[U]!==void 0?c=t[U]:(e=Buffer.from(e),c=e.length):(c=e.length,s=t.mask&&t.readOnly&&!o);let a=c;c>=65536?(i+=8,a=127):c>125&&(i+=2,a=126);let l=Buffer.allocUnsafe(s?c+i:i);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=a,a===126?l.writeUInt16BE(c,2):a===127&&(l[2]=l[3]=0,l.writeUIntBE(c,4,6)),t.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?(Gn(e,n,l,i,c),[l]):(Gn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=bo;else{if(typeof e!="number"||!vo(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let c=Buffer.byteLength(t);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+c),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[U]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==F?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=re(e),s=e.length,i=re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[U]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==F?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=re(e),s=e.length,i=re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[U]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==F?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Hn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):ye(e)?(c=e.size,a=!1):(e=re(e),c=e.length,a=re.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[U]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==F?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==F?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[U],this._state=xo,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(ur,this,c,s);return}this._bufferedBytes-=n[U];let o=re(i);t?this.dispatch(o,t,n,s):(this._state=F,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Io,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Hn.extensionName];this._bufferedBytes+=n[U],this._state=Eo,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");ur(this,a,s);return}this._bufferedBytes-=n[U],this._state=F,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===F&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][U],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][U],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};qn.exports=dr;function ur(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Io(r,e,t){ur(r,e,t),r.onerror(e)}});var es=O((il,Zn)=>{"use strict";var{kForOnEventAttribute:Le,kListener:pr}=J(),Vn=Symbol("kCode"),Jn=Symbol("kData"),Kn=Symbol("kError"),Yn=Symbol("kMessage"),zn=Symbol("kReason"),we=Symbol("kTarget"),Xn=Symbol("kType"),Qn=Symbol("kWasClean"),Y=class{constructor(e){this[we]=null,this[Xn]=e}get target(){return this[we]}get type(){return this[Xn]}};Object.defineProperty(Y.prototype,"target",{enumerable:!0});Object.defineProperty(Y.prototype,"type",{enumerable:!0});var se=class extends Y{constructor(e,t={}){super(e),this[Vn]=t.code===void 0?0:t.code,this[zn]=t.reason===void 0?"":t.reason,this[Qn]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Vn]}get reason(){return this[zn]}get wasClean(){return this[Qn]}};Object.defineProperty(se.prototype,"code",{enumerable:!0});Object.defineProperty(se.prototype,"reason",{enumerable:!0});Object.defineProperty(se.prototype,"wasClean",{enumerable:!0});var Se=class extends Y{constructor(e,t={}){super(e),this[Kn]=t.error===void 0?null:t.error,this[Yn]=t.message===void 0?"":t.message}get error(){return this[Kn]}get message(){return this[Yn]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Me=class extends Y{constructor(e,t={}){super(e),this[Jn]=t.data===void 0?null:t.data}get data(){return this[Jn]}};Object.defineProperty(Me.prototype,"data",{enumerable:!0});var Oo={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Le]&&s[pr]===e&&!s[Le])return;let n;if(r==="message")n=function(i,o){let c=new Me("message",{data:o?i:i.toString()});c[we]=this,gt(e,this,c)};else if(r==="close")n=function(i,o){let c=new se("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[we]=this,gt(e,this,c)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,gt(e,this,o)};else if(r==="open")n=function(){let i=new Y("open");i[we]=this,gt(e,this,i)};else return;n[Le]=!!t[Le],n[pr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[pr]===e&&!t[Le]){this.removeListener(r,t);break}}};Zn.exports={CloseEvent:se,ErrorEvent:Se,Event:Y,EventTarget:Oo,MessageEvent:Me};function gt(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var mt=O((ol,ts)=>{"use strict";var{tokenChars:$e}=_e();function q(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Co(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,c,a=-1,l=-1,d=-1,u=0;for(;u<r.length;u++)if(l=r.charCodeAt(u),o===void 0)if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(u!==0&&(l===32||l===9))d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=r.slice(a,d);l===44?(q(e,p,t),t=Object.create(null)):o=p,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(l===32||l===9)d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),q(t,r.slice(a,d),!0),l===44&&(q(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(l===61&&a!==-1&&d===-1)c=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if($e[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if($e[l]===1)a===-1&&(a=u);else if(l===34&&a!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&$e[l]===1)a===-1&&(a=u);else if(a!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=r.slice(a,d);n&&(p=p.replace(/\\/g,""),n=!1),q(t,c,p),l===44&&(q(e,o,t),t=Object.create(null),o=void 0),c=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let f=r.slice(a,d);return o===void 0?q(e,f,t):(c===void 0?q(t,f,!0):n?q(t,c,f.replace(/\\/g,"")):q(t,c,f),q(e,o,t)),e}function Po(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}ts.exports={format:Po,parse:Co}});var wt=O((ll,ps)=>{"use strict";var Ao=require("events"),To=require("https"),No=require("http"),ss=require("net"),Do=require("tls"),{randomBytes:Ro,createHash:jo}=require("crypto"),{Duplex:al,Readable:cl}=require("stream"),{URL:fr}=require("url"),Q=me(),Lo=lr(),Mo=hr(),{isBlob:$o}=_e(),{BINARY_TYPES:rs,CLOSE_TIMEOUT:Bo,EMPTY_BUFFER:_t,GUID:Uo,kForOnEventAttribute:gr,kListener:Wo,kStatusCode:Fo,kWebSocket:D,NOOP:is}=J(),{EventTarget:{addEventListener:Ho,removeEventListener:Go}}=es(),{format:qo,parse:Vo}=mt(),{toBuffer:Jo}=Re(),os=Symbol("kAborted"),mr=[8,13],z=["CONNECTING","OPEN","CLOSING","CLOSED"],Ko=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,I=class r extends Ao{constructor(e,t,n){super(),this._binaryType=rs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=_t,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),as(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){rs.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new Lo({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Mo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[D]=this,i[D]=this,e[D]=this,s.on("conclude",Xo),s.on("drain",Qo),s.on("error",Zo),s.on("message",ea),s.on("ping",ta),s.on("pong",ra),i.onerror=na,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",ds),e.on("data",bt),e.on("end",us),e.on("error",hs),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Q.extensionName]&&this._extensions[Q.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){L(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),ls(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||_t,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||_t,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){_r(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Q.extensionName]||(s.compress=!1),this._sender.send(e||_t,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){L(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(I,"CONNECTING",{enumerable:!0,value:z.indexOf("CONNECTING")});Object.defineProperty(I.prototype,"CONNECTING",{enumerable:!0,value:z.indexOf("CONNECTING")});Object.defineProperty(I,"OPEN",{enumerable:!0,value:z.indexOf("OPEN")});Object.defineProperty(I.prototype,"OPEN",{enumerable:!0,value:z.indexOf("OPEN")});Object.defineProperty(I,"CLOSING",{enumerable:!0,value:z.indexOf("CLOSING")});Object.defineProperty(I.prototype,"CLOSING",{enumerable:!0,value:z.indexOf("CLOSING")});Object.defineProperty(I,"CLOSED",{enumerable:!0,value:z.indexOf("CLOSED")});Object.defineProperty(I.prototype,"CLOSED",{enumerable:!0,value:z.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(I.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(I.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[gr])return e[Wo];return null},set(e){for(let t of this.listeners(r))if(t[gr]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[gr]:!0})}})});I.prototype.addEventListener=Ho;I.prototype.removeEventListener=Go;ps.exports=I;function as(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Bo,protocolVersion:mr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!mr.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${mr.join(", ")})`);let i;if(e instanceof fr)i=e;else try{i=new fr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",c=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!c?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:c&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let h=new SyntaxError(a);if(r._redirects===0)throw h;yt(r,h);return}let l=o?443:80,d=Ro(16).toString("base64"),u=o?To.request:No.request,f=new Set,p;if(s.createConnection=s.createConnection||(o?zo:Yo),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&&(p=new Q({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=qo({[Q.extensionName]:p.offer()})),t.length){for(let h of t){if(typeof h!="string"||!Ko.test(h)||f.has(h))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(h)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),c){let h=s.path.split(":");s.socketPath=h[0],s.path=h[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let h=n&&n.headers;if(n={...n,headers:{}},h)for(let[m,E]of Object.entries(h))n.headers[m.toLowerCase()]=E}else if(r.listenerCount("redirect")===0){let h=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!h||r._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")),g=r._req=u(s),r._redirects&&r.emit("redirect",r.url,g)}else g=r._req=u(s);s.timeout&&g.on("timeout",()=>{L(r,g,"Opening handshake has timed out")}),g.on("error",h=>{g===null||g[os]||(g=r._req=null,yt(r,h))}),g.on("response",h=>{let m=h.headers.location,E=h.statusCode;if(m&&s.followRedirects&&E>=300&&E<400){if(++r._redirects>s.maxRedirects){L(r,g,"Maximum redirects exceeded");return}g.abort();let v;try{v=new fr(m,e)}catch{let M=new SyntaxError(`Invalid URL: ${m}`);yt(r,M);return}as(r,v,t,n)}else r.emit("unexpected-response",g,h)||L(r,g,`Unexpected server response: ${h.statusCode}`)}),g.on("upgrade",(h,m,E)=>{if(r.emit("upgrade",h),r.readyState!==I.CONNECTING)return;g=r._req=null;let v=h.headers.upgrade;if(v===void 0||v.toLowerCase()!=="websocket"){L(r,m,"Invalid Upgrade header");return}let P=jo("sha1").update(d+Uo).digest("base64");if(h.headers["sec-websocket-accept"]!==P){L(r,m,"Invalid Sec-WebSocket-Accept header");return}let M=h.headers["sec-websocket-protocol"],w;if(M!==void 0?f.size?f.has(M)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":f.size&&(w="Server sent no subprotocol"),w){L(r,m,w);return}M&&(r._protocol=M);let x=h.headers["sec-websocket-extensions"];if(x!==void 0){if(!p){L(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S;try{S=Vo(x)}catch{L(r,m,"Invalid Sec-WebSocket-Extensions header");return}let b=Object.keys(S);if(b.length!==1||b[0]!==Q.extensionName){L(r,m,"Server indicated an extension that was not requested");return}try{p.accept(S[Q.extensionName])}catch{L(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Q.extensionName]=p}r.setSocket(m,E,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function yt(r,e){r._readyState=I.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Yo(r){return r.path=r.socketPath,ss.connect(r)}function zo(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=ss.isIP(r.host)?"":r.host),Do.connect(r)}function L(r,e,t){r._readyState=I.CLOSING;let n=new Error(t);Error.captureStackTrace(n,L),e.setHeader?(e[os]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(yt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function _r(r,e,t){if(e){let n=$o(e)?e.size:Jo(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${z[r.readyState]})`);process.nextTick(t,n)}}function Xo(r,e){let t=this[D];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[D]!==void 0&&(t._socket.removeListener("data",bt),process.nextTick(cs,t._socket),r===1005?t.close():t.close(r,e))}function Qo(){let r=this[D];r.isPaused||r._socket.resume()}function Zo(r){let e=this[D];e._socket[D]!==void 0&&(e._socket.removeListener("data",bt),process.nextTick(cs,e._socket),e.close(r[Fo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function ns(){this[D].emitClose()}function ea(r,e){this[D].emit("message",r,e)}function ta(r){let e=this[D];e._autoPong&&e.pong(r,!this._isServer,is),e.emit("ping",r)}function ra(r){this[D].emit("pong",r)}function cs(r){r.resume()}function na(r){let e=this[D];e.readyState!==I.CLOSED&&(e.readyState===I.OPEN&&(e._readyState=I.CLOSING,ls(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function ls(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function ds(){let r=this[D];if(this.removeListener("close",ds),this.removeListener("data",bt),this.removeListener("end",us),r._readyState=I.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[D]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",ns),r._receiver.on("finish",ns))}function bt(r){this[D]._receiver.write(r)||this.pause()}function us(){let r=this[D];r._readyState=I.CLOSING,r._receiver.end(),this.end()}function hs(){let r=this[D];this.removeListener("error",hs),this.on("error",is),r&&(r._readyState=I.CLOSING,this.destroy())}});var _s=O((ul,ms)=>{"use strict";var dl=wt(),{Duplex:sa}=require("stream");function fs(r){r.emit("close")}function ia(){!this.destroyed&&this._writableState.finished&&this.destroy()}function gs(r){this.removeListener("error",gs),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function oa(r,e){let t=!0,n=new sa({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let c=!o&&n._readableState.objectMode?i.toString():i;n.push(c)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(fs,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(fs,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",ia),n.on("error",gs),n}ms.exports=oa});var yr=O((hl,ys)=>{"use strict";var{tokenChars:aa}=_e();function ca(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&aa[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let c=r.slice(t,n);if(e.has(c))throw new SyntaxError(`The "${c}" subprotocol is duplicated`);e.add(c),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ys.exports={parse:ca}});var xs=O((fl,Es)=>{"use strict";var la=require("events"),St=require("http"),{Duplex:pl}=require("stream"),{createHash:da}=require("crypto"),bs=mt(),ie=me(),ua=yr(),ha=wt(),{CLOSE_TIMEOUT:pa,GUID:fa,kWebSocket:ga}=J(),ma=/^[+/0-9A-Za-z]{22}==$/,ws=0,Ss=1,ks=2,br=class extends la{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:pa,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ha,...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=St.createServer((n,s)=>{let i=St.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=_a(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=ws}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===ks){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Be,this);return}if(e&&this.once("close",e),this._state!==Ss)if(this._state=Ss,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(Be,this):process.nextTick(Be,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Be(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",vs);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){oe(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){oe(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!ma.test(i)){oe(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){oe(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Ue(t,400);return}let a=e.headers["sec-websocket-protocol"],l=new Set;if(a!==void 0)try{l=ua.parse(a)}catch{oe(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let f=new ie({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=bs.parse(d);p[ie.extensionName]&&(f.accept(p[ie.extensionName]),u[ie.extensionName]=f)}catch{oe(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(p,g,h,m)=>{if(!p)return Ue(t,g||401,h,m);this.completeUpgrade(u,i,l,e,t,n,s)});return}if(!this.options.verifyClient(f))return Ue(t,401)}this.completeUpgrade(u,i,l,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,c){if(!i.readable||!i.writable)return i.destroy();if(i[ga])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ws)return Ue(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${da("sha1").update(t+fa).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[ie.extensionName]){let u=e[ie.extensionName].params,f=bs.format({[ie.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${f}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
24
24
  `).join(`\r
25
- `)),i.removeListener("error",vs),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(Be,this)})),c(d,s)}};ks.exports=br;function _a(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Be(r){r._state=Es,r.emit("close")}function vs(){this.destroy()}function We(r,e,t,n){t=t||St.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${St.STATUS_CODES[e]}\r
25
+ `)),i.removeListener("error",vs),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(Be,this)})),c(d,s)}};Es.exports=br;function _a(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Be(r){r._state=ks,r.emit("close")}function vs(){this.destroy()}function Ue(r,e,t,n){t=t||St.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${St.STATUS_CODES[e]}\r
26
26
  `+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
27
27
  `)+`\r
28
28
  \r
29
- `+t)}function oe(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,oe),r.emit("wsClientError",o,t,e)}else We(t,n,s,i)}});function He(){return process.env.BRIDGE_PROFILE||void 0}function xt(){let r=He();return r?ae.default.join($s,"profiles",r,"settings.json"):ae.default.join($s,"settings.json")}function Ge(){let r=He(),e=r?`${r}.daemon.lock`:"daemon.lock";return ae.default.join((0,Fe.homedir)(),".bridge",e)}function ke(){let r=He();return r?`com.jerico.bridge-agent.${r}.plist`:"com.jerico.bridge-agent.plist"}function It(){let r=He(),e=r?`-${r}`:"";return{out:ae.default.join((0,Fe.homedir)(),`bridge-daemon${e}.log`),err:ae.default.join((0,Fe.homedir)(),`bridge-daemon${e}.err.log`)}}function Bs(){let r=He();return r?`:profile:${r}`:""}var Fe,ae,$s,qe=Ur(()=>{"use strict";Fe=require("node:os"),ae=y(require("path")),$s=ae.default.join((0,Fe.homedir)(),".jerico")});var Us={};wi(Us,{getConfigPath:()=>xt,loadConfig:()=>ce,loadProjectSettings:()=>xr,saveConfig:()=>le});function Ve(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function ce(){let r=xt(),e=H.default.existsSync(r)?r:Ca;if(!H.default.existsSync(e)){let p=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${p}`),process.exit(1)}let t=H.default.readFileSync(e,"utf-8"),n;try{n=JSON.parse(t)}catch{console.error("[bridge] Invalid config file at",e),process.exit(1)}(!n||typeof n!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let s=n,i=typeof s.server=="string"?s.server:"",o=typeof s.token=="string"?s.token:"",c=typeof s.name=="string"?s.name:"bridge-agent",a=[/23-88-110-113\.sslip\.io/i,/23\.88\.110\.113:443\/ws\/daemon$/,/23\.88\.110\.113:3100\/ws\/daemon$/],l="wss://lcars.jerico.appnova.io/ws/daemon";if(i&&a.some(p=>p.test(i))){console.warn(`[daemon] config.url_migration: migrating stale URL ${i} \u2192 ${l}`),i=l,s.server=i;try{H.default.writeFileSync(e,JSON.stringify(s,null,2),{mode:384}),H.default.chmodSync(e,384)}catch(p){console.warn("[daemon] config.url_migration: failed to save migrated config",String(p))}}(!i||!o)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let d={server:i,token:o,name:c},u=Ve(s,"agentPaths"),f=Ve(s,"projectPaths");return u&&(d.agentPaths=u),f&&(d.projectPaths=f),d}function le(r){let e=xt(),t=Ot.default.dirname(e);H.default.existsSync(t)||H.default.mkdirSync(t,{recursive:!0}),H.default.writeFileSync(e,JSON.stringify(r,null,2),{mode:384})}function xr(r){let e=Ot.default.join(r??process.cwd(),".jerico","settings.json");if(!H.default.existsSync(e))return{};try{let t=H.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=Ve(s,"hooks"),c=Ve(s,"env"),a=Ve(s,"agentPaths");return o&&(i.hooks=o),c&&(i.env=c),a&&(i.agentPaths=a),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var H,Ot,Ws,Ca,xe=Ur(()=>{"use strict";H=y(require("fs")),Ot=y(require("path")),Ws=y(require("os"));qe();Ca=Ot.default.join(Ws.default.homedir(),".bridge","config.json")});var en=y(Zr(),1),{program:jc,createCommand:Lc,createArgument:Mc,createOption:$c,CommanderError:Bc,InvalidArgumentError:Wc,InvalidOptionArgumentError:Uc,Command:tn,Argument:Fc,Option:Hc,Help:Gc}=en.default;var ti=require("node:http"),ue=require("node:child_process"),T=require("node:fs"),Pe=require("node:os"),j=y(require("path"));var vn=y(require("node-pty"));var Xt=y(yn()),he=y(require("fs")),De=y(require("path")),wn=y(require("net")),Sn=require("child_process"),st=r=>r+`
29
+ `+t)}function oe(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,oe),r.emit("wsClientError",o,t,e)}else Ue(t,n,s,i)}});function He(){return process.env.BRIDGE_PROFILE||void 0}function xt(){let r=He();return r?ae.default.join($s,"profiles",r,"settings.json"):ae.default.join($s,"settings.json")}function Ge(){let r=He(),e=r?`${r}.daemon.lock`:"daemon.lock";return ae.default.join((0,Fe.homedir)(),".bridge",e)}function Ee(){let r=He();return r?`com.jerico.bridge-agent.${r}.plist`:"com.jerico.bridge-agent.plist"}function It(){let r=He(),e=r?`-${r}`:"";return{out:ae.default.join((0,Fe.homedir)(),`bridge-daemon${e}.log`),err:ae.default.join((0,Fe.homedir)(),`bridge-daemon${e}.err.log`)}}function Bs(){let r=He();return r?`:profile:${r}`:""}var Fe,ae,$s,qe=Wr(()=>{"use strict";Fe=require("node:os"),ae=y(require("path")),$s=ae.default.join((0,Fe.homedir)(),".jerico")});var Ws={};wi(Ws,{getConfigPath:()=>xt,loadConfig:()=>ce,loadProjectSettings:()=>xr,saveConfig:()=>le});function Ve(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function ce(){let r=xt(),e=H.default.existsSync(r)?r:Ca;if(!H.default.existsSync(e)){let p=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${p}`),process.exit(1)}let t=H.default.readFileSync(e,"utf-8"),n;try{n=JSON.parse(t)}catch{console.error("[bridge] Invalid config file at",e),process.exit(1)}(!n||typeof n!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let s=n,i=typeof s.server=="string"?s.server:"",o=typeof s.token=="string"?s.token:"",c=typeof s.name=="string"?s.name:"bridge-agent",a=[/23-88-110-113\.sslip\.io/i,/23\.88\.110\.113:443\/ws\/daemon$/,/23\.88\.110\.113:3100\/ws\/daemon$/],l="wss://lcars.jerico.appnova.io/ws/daemon";if(i&&a.some(p=>p.test(i))){console.warn(`[daemon] config.url_migration: migrating stale URL ${i} \u2192 ${l}`),i=l,s.server=i;try{H.default.writeFileSync(e,JSON.stringify(s,null,2),{mode:384}),H.default.chmodSync(e,384)}catch(p){console.warn("[daemon] config.url_migration: failed to save migrated config",String(p))}}(!i||!o)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let d={server:i,token:o,name:c},u=Ve(s,"agentPaths"),f=Ve(s,"projectPaths");return u&&(d.agentPaths=u),f&&(d.projectPaths=f),d}function le(r){let e=xt(),t=Ot.default.dirname(e);H.default.existsSync(t)||H.default.mkdirSync(t,{recursive:!0}),H.default.writeFileSync(e,JSON.stringify(r,null,2),{mode:384})}function xr(r){let e=Ot.default.join(r??process.cwd(),".jerico","settings.json");if(!H.default.existsSync(e))return{};try{let t=H.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=Ve(s,"hooks"),c=Ve(s,"env"),a=Ve(s,"agentPaths");return o&&(i.hooks=o),c&&(i.env=c),a&&(i.agentPaths=a),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var H,Ot,Us,Ca,xe=Wr(()=>{"use strict";H=y(require("fs")),Ot=y(require("path")),Us=y(require("os"));qe();Ca=Ot.default.join(Us.default.homedir(),".bridge","config.json")});var en=y(Zr(),1),{program:jc,createCommand:Lc,createArgument:Mc,createOption:$c,CommanderError:Bc,InvalidArgumentError:Uc,InvalidOptionArgumentError:Wc,Command:tn,Argument:Fc,Option:Hc,Help:Gc}=en.default;var ti=require("node:http"),ue=require("node:child_process"),T=require("node:fs"),Pe=require("node:os"),j=y(require("path"));var vn=y(require("node-pty"));var Xt=y(yn()),he=y(require("fs")),De=y(require("path")),wn=y(require("net")),Sn=require("child_process"),st=r=>r+`
30
30
  `,Ne=r=>r.replace(/[\r\n]+$/,"")+"\r",pe=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:st},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>it(".claude")||te("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>te("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:Ne},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>it(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>te("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:st},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>Xi(11434),formatInput:st},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>te("OPENAI_API_KEY")||te("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:st},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>it(".kimi")||te("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["-r",r,"--yolo"],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]},{key:"forge",displayName:"Forge",binary:"forge",checkAuth:async()=>it(".forge/.credentials.json")||te("FORGE_API_KEY"),assignSessionId:!0,resumeArgs:r=>["--conversation-id",r],supportsMcpConfig:!0,formatInput:Ne}];var bn=process.env.HOME??"/Users/unknown";function ot(r){try{let e=(0,Sn.spawnSync)(r,["--version"],{timeout:5e3});return e.status!==0?void 0:(e.stdout??e.stderr??Buffer.from("")).toString("utf8").split(`
31
- `)[0].trim()||void 0}catch{return}}function Yi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=De.default.join(bn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=he.default.readdirSync(s)}catch{}i.sort((o,c)=>c.localeCompare(o));for(let o of i){let c=De.default.join(s,o,r.binary);if(he.default.existsSync(c)){let a=ot(c);e.push({path:c,version:a})}}}else{let i=De.default.join(bn,n);if(he.default.existsSync(i)){let o=ot(i);e.push({path:i,version:o})}}}return e}async function zi(r,e={}){if(e[r.key]){let n=e[r.key],s=ot(n);if(s)return{path:n,version:s}}try{let n=await(0,Xt.default)(r.binary);if(n&&he.default.existsSync(n)){let s=ot(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=Yi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Xt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Qt(r={}){let e=[];for(let t of pe)try{let{path:n,version:s}=await zi(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:pe.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function it(r){return he.default.existsSync(De.default.join(process.env.HOME??"",r))}function te(r){return!!process.env[r]}async function Xi(r){return new Promise(e=>{let t=wn.default.createConnection(r,"127.0.0.1");t.setTimeout(200),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}var at=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[t,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:t,pid:n.pid}),this.handles.delete(t),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,t,n,s,i,o,c,a,l){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:t}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),f=Math.max(1,Math.min(500,o)),p={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(p.BRIDGE_SERVER_URL=l.serverUrl,p.BRIDGE_TOKEN=l.token,p.BRIDGE_WORKSPACE_ID=l.workspaceId,p.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(p,l.projectEnv));let g=process.env.BRIDGE_MCP_URL;g&&(p.BRIDGE_MCP_URL=g);let h;try{h=vn.spawn(n,s,{name:"xterm-256color",cols:u,rows:f,cwd:l?.cwd,env:p})}catch(v){let P=v instanceof Error?v.message:String(v);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:P}),!1}let m=this.nextInstanceId++,k={agentId:e,agentKey:t,process:h,pid:h.pid,killed:!1,instanceId:m,onExit:a};return h.onData(v=>{let P=this.handles.get(e);!P||P.instanceId!==m||k.killed||c(Buffer.from(v).toString("base64"))}),h.onExit(({exitCode:v,signal:P})=>{let M=this.handles.get(e);!M||M.instanceId!==m||k.killed||k.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:v,signal:P}),a(v??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,k),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:l?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:t.length});return}let i=Buffer.from(t,"base64").toString(),o=pe.find(a=>a.key===s.agentKey),c=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(c)}kill(e,t=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(t){try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}setTimeout(()=>{try{process.kill(-s,"SIGKILL")}catch{}},2e3)}else try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}console.log("[daemon] pty.kill",{agentId:e,force:t})}resize(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,t)),o=Math.max(1,Math.min(500,n));s.process.resize(i,o)}getLastError(e){return this.lastErrors.get(e)}killAll(){for(let e of this.handles.values())try{process.kill(-e.pid,"SIGTERM")}catch{e.process.kill()}this.handles.clear()}getLiveAgentIds(){return[...this.handles.keys()]}};var ya=y(_s(),1),ba=y(mt(),1),wa=y(me(),1),Sa=y(lr(),1),va=y(hr(),1),Ea=y(yr(),1),Is=y(wt(),1),ka=y(xs(),1);var E=Is.default;var G=y(require("fs")),R=y(require("path")),U=y(require("os")),Ce=require("node:child_process"),Ze=require("node:crypto");var Os=r=>r;var Cs=r=>r,Ps=r=>r,As=3e3;function wr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}var Ts=y(require("os"));async function Sr(){return Ts.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var Ee=require("child_process"),Ls=require("fs/promises"),Ms=require("crypto"),ve=y(require("fs")),Et=y(require("path")),Er=y(require("os"));var Ue=require("child_process"),Ns=require("fs/promises"),Ds=y(require("path")),Rs=y(require("os"));async function xa(){return new Promise(r=>{let e=(0,Ue.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r(null);return}try{let s=JSON.parse(t);for(let i of Object.values(s.devices)){let o=i.find(c=>c.state==="Booted");if(o){r(o.udid);return}}r(null)}catch{r(null)}}),e.on("error",()=>r(null))})}async function Ia(){return new Promise(r=>{let e=(0,Ue.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r([]);return}try{let s=JSON.parse(t),i=[];for(let[o,c]of Object.entries(s.devices)){for(let a of c){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${a.name} (${l})`),i.length>=3)break}if(i.length>=3)break}r(i)}catch{r([])}}),e.on("error",()=>r([]))})}async function vr(r){let e=[],t=null,n=await new Promise(i=>{let o=(0,Ue.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",c=>i(c===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=Ds.default.join(Rs.default.homedir(),".local/bin/idb");s=await(0,Ns.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 c=(0,Ue.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});c.on("close",a=>o(a===0)),c.on("error",()=>o(!1)),c.stdout?.resume(),c.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(t=await xa(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Ia();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:t}}var kr=Et.default.join(Er.default.homedir(),".local/bin/idb");async function js(r){try{let e=await new Promise((i,o)=>{let c=(0,Ee.spawn)(kr,["describe","--udid",r,"--json"],{timeout:1e4}),a="",l="";c.stdout.on("data",d=>{a+=d.toString("utf8")}),c.stderr.on("data",d=>{l+=d.toString("utf8")}),c.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(a)}),c.on("error",d=>o(d))}),t=JSON.parse(e),n=t.screen_dimensions?.width_points,s=t.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:r,error:String(e)})}return{}}function Oa(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,Ee.spawn)("xcrun",["simctl","io",r,"screenshot",t],{stdio:["ignore","ignore","ignore"]});s.on("close",async i=>{if(i!==0){n(null);return}try{n(await(0,Ls.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function vt(r,e){return new Promise((t,n)=>{let s=(0,Ee.spawn)(kr,[...e,"--udid",r],{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}`)):t()}),s.on("error",o=>n(o))})}var kt=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=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:t,udid:n}=await vr(e);if(this.sendSimHealth(e,t),t.find(d=>d.status==="fail"))return;if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(d=>d.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 c=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let a=await js(n);a.width!=null&&a.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:a.width,logicalHeight:a.height});let l={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:c,logicalWidth:a.width,logicalHeight:a.height,lastDescribeAt:Date.now()};if(this.sessions.set(e,l),this.pendingUdids.delete(n),l.frameInterval=setInterval(async()=>{if(!(!l.subscribed||l.capturing)){l.capturing=!0;try{Date.now()-l.lastDescribeAt>=5e3&&(l.lastDescribeAt=Date.now(),js(n).then(u=>{u.width!=null&&u.height!=null&&(u.width!==l.logicalWidth||u.height!==l.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:l.logicalWidth,logicalHeight:l.logicalHeight},to:u}),l.logicalWidth=u.width,l.logicalHeight=u.height)}).catch(()=>{}));let d=await Oa(n,e);d&&this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_frame",agentId:e,image:d.toString("base64"),width:l.logicalWidth,height:l.logicalHeight}))}catch(d){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(d)})}finally{l.capturing=!1}}},200),this.ws&&this.ws.readyState===E.OPEN){let d=(0,Ms.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:d})),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 t=this.sessions.get(e);if(!t){for(let[n,s]of this.pendingUdids)if(s===e){this.pendingUdids.delete(n);break}return}t.frameInterval&&clearInterval(t.frameInterval),this.sessions.delete(e),this.pendingUdids.delete(t.udid),this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null}))}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e);for(let[e,t]of this.installProc)t.kill("SIGTERM"),this.installProc.delete(e)}subscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!0)}unsubscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!1)}async handle(e){let t=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){t?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),t&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await vr(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(!t){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await vt(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await vt(t.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 vt(t.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:t.udid}),await vt(t.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,Ee.spawn)(kr,["ui","describe-all","--udid",t.udid],{timeout:15e3}),c="",a="";o.stdout.on("data",l=>{c+=l.toString("utf8")}),o.stderr.on("data",l=>{a+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(a||`idb exited ${l}`)):s(c)}),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,t,n,s){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"error",code:t,message:n,agentId:e,...s}))}sendSimHealth(e,t){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:t}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let t=Et.default.join(Er.default.homedir(),".bridge/install-sim-prereqs.sh");if(ve.default.existsSync(t))return t;let n=Et.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return ve.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 t=this.resolveSimInstallScript();if(!t){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{ve.default.accessSync(t,ve.default.constants.F_OK|ve.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,Ee.spawn)("bash",["-lc",t],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",c=>{i+=c.toString("utf8");let a;for(;(a=i.indexOf(`
31
+ `)[0].trim()||void 0}catch{return}}function Yi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=De.default.join(bn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=he.default.readdirSync(s)}catch{}i.sort((o,c)=>c.localeCompare(o));for(let o of i){let c=De.default.join(s,o,r.binary);if(he.default.existsSync(c)){let a=ot(c);e.push({path:c,version:a})}}}else{let i=De.default.join(bn,n);if(he.default.existsSync(i)){let o=ot(i);e.push({path:i,version:o})}}}return e}async function zi(r,e={}){if(e[r.key]){let n=e[r.key],s=ot(n);if(s)return{path:n,version:s}}try{let n=await(0,Xt.default)(r.binary);if(n&&he.default.existsSync(n)){let s=ot(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=Yi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Xt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Qt(r={}){let e=[];for(let t of pe)try{let{path:n,version:s}=await zi(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:pe.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function it(r){return he.default.existsSync(De.default.join(process.env.HOME??"",r))}function te(r){return!!process.env[r]}async function Xi(r){return new Promise(e=>{let t=wn.default.createConnection(r,"127.0.0.1");t.setTimeout(200),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}var at=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[t,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:t,pid:n.pid}),this.handles.delete(t),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,t,n,s,i,o,c,a,l){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:t}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),f=Math.max(1,Math.min(500,o)),p={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(p.BRIDGE_SERVER_URL=l.serverUrl,p.BRIDGE_TOKEN=l.token,p.BRIDGE_WORKSPACE_ID=l.workspaceId,p.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(p,l.projectEnv));let g=process.env.BRIDGE_MCP_URL;g&&(p.BRIDGE_MCP_URL=g);let h;try{h=vn.spawn(n,s,{name:"xterm-256color",cols:u,rows:f,cwd:l?.cwd,env:p})}catch(v){let P=v instanceof Error?v.message:String(v);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:P}),!1}let m=this.nextInstanceId++,E={agentId:e,agentKey:t,process:h,pid:h.pid,killed:!1,instanceId:m,onExit:a};return h.onData(v=>{let P=this.handles.get(e);!P||P.instanceId!==m||E.killed||c(Buffer.from(v).toString("base64"))}),h.onExit(({exitCode:v,signal:P})=>{let M=this.handles.get(e);!M||M.instanceId!==m||E.killed||E.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:v,signal:P}),a(v??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,E),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:l?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:t.length});return}let i=Buffer.from(t,"base64").toString(),o=pe.find(a=>a.key===s.agentKey),c=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(c)}kill(e,t=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(t){try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}setTimeout(()=>{try{process.kill(-s,"SIGKILL")}catch{}},2e3)}else try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}console.log("[daemon] pty.kill",{agentId:e,force:t})}resize(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,t)),o=Math.max(1,Math.min(500,n));s.process.resize(i,o)}getLastError(e){return this.lastErrors.get(e)}killAll(){for(let e of this.handles.values())try{process.kill(-e.pid,"SIGTERM")}catch{e.process.kill()}this.handles.clear()}getLiveAgentIds(){return[...this.handles.keys()]}};var ya=y(_s(),1),ba=y(mt(),1),wa=y(me(),1),Sa=y(lr(),1),va=y(hr(),1),ka=y(yr(),1),Is=y(wt(),1),Ea=y(xs(),1);var k=Is.default;var G=y(require("fs")),R=y(require("path")),W=y(require("os")),Ce=require("node:child_process"),Ze=require("node:crypto");var Os=r=>r;var Cs=r=>r,Ps=r=>r,As=3e3;function wr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}var Ts=y(require("os"));async function Sr(){return Ts.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var ke=require("child_process"),Ls=require("fs/promises"),Ms=require("crypto"),ve=y(require("fs")),kt=y(require("path")),kr=y(require("os"));var We=require("child_process"),Ns=require("fs/promises"),Ds=y(require("path")),Rs=y(require("os"));async function xa(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r(null);return}try{let s=JSON.parse(t);for(let i of Object.values(s.devices)){let o=i.find(c=>c.state==="Booted");if(o){r(o.udid);return}}r(null)}catch{r(null)}}),e.on("error",()=>r(null))})}async function Ia(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r([]);return}try{let s=JSON.parse(t),i=[];for(let[o,c]of Object.entries(s.devices)){for(let a of c){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${a.name} (${l})`),i.length>=3)break}if(i.length>=3)break}r(i)}catch{r([])}}),e.on("error",()=>r([]))})}async function vr(r){let e=[],t=null,n=await new Promise(i=>{let o=(0,We.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",c=>i(c===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=Ds.default.join(Rs.default.homedir(),".local/bin/idb");s=await(0,Ns.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 c=(0,We.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});c.on("close",a=>o(a===0)),c.on("error",()=>o(!1)),c.stdout?.resume(),c.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(t=await xa(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Ia();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:t}}var Er=kt.default.join(kr.default.homedir(),".local/bin/idb");async function js(r){try{let e=await new Promise((i,o)=>{let c=(0,ke.spawn)(Er,["describe","--udid",r,"--json"],{timeout:1e4}),a="",l="";c.stdout.on("data",d=>{a+=d.toString("utf8")}),c.stderr.on("data",d=>{l+=d.toString("utf8")}),c.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(a)}),c.on("error",d=>o(d))}),t=JSON.parse(e),n=t.screen_dimensions?.width_points,s=t.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:r,error:String(e)})}return{}}function Oa(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,ke.spawn)("xcrun",["simctl","io",r,"screenshot",t],{stdio:["ignore","ignore","ignore"]});s.on("close",async i=>{if(i!==0){n(null);return}try{n(await(0,Ls.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function vt(r,e){return new Promise((t,n)=>{let s=(0,ke.spawn)(Er,[...e,"--udid",r],{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}`)):t()}),s.on("error",o=>n(o))})}var Et=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=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:t,udid:n}=await vr(e);if(this.sendSimHealth(e,t),t.find(d=>d.status==="fail"))return;if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(d=>d.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 c=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let a=await js(n);a.width!=null&&a.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:a.width,logicalHeight:a.height});let l={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:c,logicalWidth:a.width,logicalHeight:a.height,lastDescribeAt:Date.now()};if(this.sessions.set(e,l),this.pendingUdids.delete(n),l.frameInterval=setInterval(async()=>{if(!(!l.subscribed||l.capturing)){l.capturing=!0;try{Date.now()-l.lastDescribeAt>=5e3&&(l.lastDescribeAt=Date.now(),js(n).then(u=>{u.width!=null&&u.height!=null&&(u.width!==l.logicalWidth||u.height!==l.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:l.logicalWidth,logicalHeight:l.logicalHeight},to:u}),l.logicalWidth=u.width,l.logicalHeight=u.height)}).catch(()=>{}));let d=await Oa(n,e);d&&this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_frame",agentId:e,image:d.toString("base64"),width:l.logicalWidth,height:l.logicalHeight}))}catch(d){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(d)})}finally{l.capturing=!1}}},200),this.ws&&this.ws.readyState===k.OPEN){let d=(0,Ms.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:d})),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 t=this.sessions.get(e);if(!t){for(let[n,s]of this.pendingUdids)if(s===e){this.pendingUdids.delete(n);break}return}t.frameInterval&&clearInterval(t.frameInterval),this.sessions.delete(e),this.pendingUdids.delete(t.udid),this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null}))}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e);for(let[e,t]of this.installProc)t.kill("SIGTERM"),this.installProc.delete(e)}subscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!0)}unsubscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!1)}async handle(e){let t=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){t?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),t&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await vr(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(!t){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await vt(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await vt(t.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 vt(t.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:t.udid}),await vt(t.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,ke.spawn)(Er,["ui","describe-all","--udid",t.udid],{timeout:15e3}),c="",a="";o.stdout.on("data",l=>{c+=l.toString("utf8")}),o.stderr.on("data",l=>{a+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(a||`idb exited ${l}`)):s(c)}),o.on("error",l=>i(l))});this.ws&&this.ws.readyState===k.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,t,n,s){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"error",code:t,message:n,agentId:e,...s}))}sendSimHealth(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:t}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let t=kt.default.join(kr.default.homedir(),".bridge/install-sim-prereqs.sh");if(ve.default.existsSync(t))return t;let n=kt.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return ve.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 t=this.resolveSimInstallScript();if(!t){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{ve.default.accessSync(t,ve.default.constants.F_OK|ve.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,ke.spawn)("bash",["-lc",t],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",c=>{i+=c.toString("utf8");let a;for(;(a=i.indexOf(`
32
32
  `))!==-1;){let l=i.slice(0,a);i=i.slice(a+1),l&&(l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l}))}}),n.stderr?.on("data",c=>{o+=c.toString("utf8");let a;for(;(a=o.indexOf(`
33
- `))!==-1;){let l=o.slice(0,a);o=o.slice(a+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",c=>{if(this.installProc.delete(e),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 a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&(c===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:c??void 0,error:`install script exited with code ${c}`}))}),n.on("error",c=>{this.installProc.delete(e);let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&this.sendInstallProgress(e,{step:"error",error:String(c)})})}handleSimInstallCancel(e){let t=this.installProc.get(e);t&&(this.cancelledInstalls.add(e),t.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"}))}sendInstallProgress(e,t){this.ws&&this.ws.readyState===E.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...t}))}};xe();qe();var Je=y(require("fs")),Ir=y(require("path")),Fs=y(require("os")),Pa=2e5;function Aa(r){let e=Ir.default.join(Fs.default.homedir(),".claude","projects");if(Je.default.existsSync(e))try{let t=Je.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Ir.default.join(e,n.name,`${r}.jsonl`);if(Je.default.existsSync(s))return s}}catch{}}function Ta(r){try{let t=Je.default.readFileSync(r,"utf-8").trim().split(`
33
+ `))!==-1;){let l=o.slice(0,a);o=o.slice(a+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",c=>{if(this.installProc.delete(e),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 a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&(c===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:c??void 0,error:`install script exited with code ${c}`}))}),n.on("error",c=>{this.installProc.delete(e);let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&this.sendInstallProgress(e,{step:"error",error:String(c)})})}handleSimInstallCancel(e){let t=this.installProc.get(e);t&&(this.cancelledInstalls.add(e),t.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"}))}sendInstallProgress(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...t}))}};xe();qe();var Je=y(require("fs")),Ir=y(require("path")),Fs=y(require("os")),Pa=2e5;function Aa(r){let e=Ir.default.join(Fs.default.homedir(),".claude","projects");if(Je.default.existsSync(e))try{let t=Je.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Ir.default.join(e,n.name,`${r}.jsonl`);if(Je.default.existsSync(s))return s}}catch{}}function Ta(r){try{let t=Je.default.readFileSync(r,"utf-8").trim().split(`
34
34
  `);for(let n=t.length-1;n>=0;n--){let s=t[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let c=o,a=(c.input_tokens??0)+(c.cache_creation_input_tokens??0)+(c.cache_read_input_tokens??0);if(a===0)continue;return{usedPct:Math.min(100,Math.round(a/Pa*100)),usedTokens:a}}catch{continue}}}catch{}return null}function Or(r,e,t){let n,s=-1,i=()=>{if(n||(n=Aa(e)),!n)return;let a=Ta(n);a&&a.usedTokens!==s&&(s=a.usedTokens,t(r,a.usedPct,a.usedTokens))},o=setTimeout(i,2e3),c=setInterval(i,3e3);return()=>{clearTimeout(o),clearInterval(c)}}var Z=y(require("fs")),Ke=y(require("path")),Cr=y(require("os")),Hs=300*60*1e3,Gs={free:10,pro:40,max_5x:200,max_20x:200};function Na(){let r=Ke.default.join(Cr.default.homedir(),".jerico","settings.json");try{if(!Z.default.existsSync(r))return"pro";let t=JSON.parse(Z.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in Gs)return t}catch{}return"pro"}function Da(){let r=Ke.default.join(Cr.default.homedir(),".claude","projects");if(!Z.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-Hs,n=1/0,s=0;try{let o=Z.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Ke.default.join(r,c.name),l;try{l=Z.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Ke.default.join(a,d),f;try{if(Z.default.statSync(u).size>20*1024*1024)continue;f=Z.default.readFileSync(u,"utf-8")}catch{continue}for(let p of f.split(`
35
- `)){let g=p.trim();if(g)try{let h=JSON.parse(g);if(h.type!=="user"||h.message?.role!=="user"||h.userType!==void 0&&h.userType!=="external")continue;let k=h.timestamp;if(typeof k!="string")continue;let v=Date.parse(k);if(isNaN(v)||v<t)continue;s++,v<n&&(n=v)}catch{continue}}}}}catch{}let i=isFinite(n)?n+Hs:0;return{prompts5h:s,resetAt:i}}function qs(r){let e=()=>{let n=Na(),s=Gs[n]??40,{prompts5h:i,resetAt:o}=Da();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var Ie=y(require("os")),Ct=y(require("fs")),Ar=require("node:child_process");function Js(){let r=0,e=0;for(let t of Ie.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var Pr=Js();function Ra(){let r=Js(),e=r.idle-Pr.idle,t=r.total-Pr.total;return Pr=r,t===0?0:Math.round((1-e/t)*100)}function ja(){let r=Ie.default.totalmem(),e=Ie.default.freemem(),t=0;try{let n=(0,Ar.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 c=s?parseInt(s[1],10):4096;t=(parseInt(i[1],10)+parseInt(o[1],10))*c}}}catch{}return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:Math.round(t/1024/1024)}}function La(){if(process.platform==="darwin")return ja();let r=Ie.default.totalmem(),e=Ie.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Ma(){try{let r=(0,Ar.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(r.status!==0||!r.stdout)return;let e=r.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let t=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:t,charging:n}}catch{return}}function $a(){try{let r="/sys/class/power_supply",e=Ct.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(Ct.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=Ct.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Vs(){let r=process.platform;if(r==="darwin")return Ma();if(r==="linux")return $a()}var Ba=1e4,Wa=3;function Ks(r){let e=0,t=Vs(),n=setInterval(()=>{e++,e%Wa===0&&(t=Vs());let s=La();r({cpu:Ra(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Ba);return()=>clearInterval(n)}var Pt=y(require("fs")),At=y(require("path")),Ys=y(require("node-pty"));function Ua(){try{let r=require.resolve("node-pty"),e=At.default.resolve(At.default.dirname(r),"..");return At.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function zs(){let r=Ua();if(!r||!Pt.default.existsSync(r))return!0;try{Pt.default.accessSync(r,Pt.default.constants.X_OK)}catch{return!1}try{Ys.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var de=new Map,Xe=new Map;function Fa(r,e){let t=Date.now(),n=Xe.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Xe.set(r,n),s=!0),s&&e()?.send(JSON.stringify({type:"panel_state",agentId:r,state:"working",lastOutputAt:t})),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(()=>{let i=Xe.get(r);if(i&&i.currentState==="working"){i.currentState="idle";let o=e();o?.readyState===E.OPEN&&o.send(JSON.stringify({type:"panel_state",agentId:r,state:"idle",lastOutputAt:i.lastOutputAt}))}},As)}function Ha(r){let e=Xe.get(r);e?.timer&&clearTimeout(e.timer),Xe.delete(r)}var Tr,Tt;function jr(){try{return(0,Ze.createHash)("sha256").update(U.default.hostname()+":"+U.default.userInfo().username+Bs()).digest("hex")}catch{return"unknown"}}var Ye=[];function Ga(r){let e=Date.now(),t=e-3e4;for(;Ye.length&&Ye[0].ts<t;)Ye.shift();return Ye.push({agentKey:r,ts:e}),new Set(Ye.map(s=>s.agentKey)).size>=2}var qa=r=>r.replace(/[\r\n]+$/,"")+"\r",Dr=null,Va=qs(r=>{Dr=r}),Ja=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,Ka=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,Ya=5e3,za=400;function Xa(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function Qa(r,e=za){return r.length<=e?r:`${r.slice(0,e)}...`}function Za(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function et(){let r=G.default.realpathSync(process.argv[1]??""),e=R.default.dirname(r);return[R.default.resolve(e,"../../mcp-server/dist/index.cjs"),R.default.resolve(e,"bridge-mcp.cjs"),R.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>G.default.existsSync(n))??"bridge-mcp"}function ec(r){try{let e=process.env.BRIDGE_MCP_URL,t=r.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${t}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:et(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:t,BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},s=R.default.join(U.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return G.default.writeFileSync(s,JSON.stringify(n,null,2)+`
35
+ `)){let g=p.trim();if(g)try{let h=JSON.parse(g);if(h.type!=="user"||h.message?.role!=="user"||h.userType!==void 0&&h.userType!=="external")continue;let E=h.timestamp;if(typeof E!="string")continue;let v=Date.parse(E);if(isNaN(v)||v<t)continue;s++,v<n&&(n=v)}catch{continue}}}}}catch{}let i=isFinite(n)?n+Hs:0;return{prompts5h:s,resetAt:i}}function qs(r){let e=()=>{let n=Na(),s=Gs[n]??40,{prompts5h:i,resetAt:o}=Da();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var Ie=y(require("os")),Ct=y(require("fs")),Ar=require("node:child_process");function Js(){let r=0,e=0;for(let t of Ie.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var Pr=Js();function Ra(){let r=Js(),e=r.idle-Pr.idle,t=r.total-Pr.total;return Pr=r,t===0?0:Math.round((1-e/t)*100)}function ja(){let r=Ie.default.totalmem(),e=Ie.default.freemem(),t=0;try{let n=(0,Ar.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 c=s?parseInt(s[1],10):4096;t=(parseInt(i[1],10)+parseInt(o[1],10))*c}}}catch{}return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:Math.round(t/1024/1024)}}function La(){if(process.platform==="darwin")return ja();let r=Ie.default.totalmem(),e=Ie.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Ma(){try{let r=(0,Ar.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(r.status!==0||!r.stdout)return;let e=r.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let t=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:t,charging:n}}catch{return}}function $a(){try{let r="/sys/class/power_supply",e=Ct.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(Ct.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=Ct.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Vs(){let r=process.platform;if(r==="darwin")return Ma();if(r==="linux")return $a()}var Ba=1e4,Ua=3;function Ks(r){let e=0,t=Vs(),n=setInterval(()=>{e++,e%Ua===0&&(t=Vs());let s=La();r({cpu:Ra(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Ba);return()=>clearInterval(n)}var Pt=y(require("fs")),At=y(require("path")),Ys=y(require("node-pty"));function Wa(){try{let r=require.resolve("node-pty"),e=At.default.resolve(At.default.dirname(r),"..");return At.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function zs(){let r=Wa();if(!r||!Pt.default.existsSync(r))return!0;try{Pt.default.accessSync(r,Pt.default.constants.X_OK)}catch{return!1}try{Ys.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var de=new Map,Xe=new Map;function Fa(r,e){let t=Date.now(),n=Xe.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Xe.set(r,n),s=!0),s&&e()?.send(JSON.stringify({type:"panel_state",agentId:r,state:"working",lastOutputAt:t})),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(()=>{let i=Xe.get(r);if(i&&i.currentState==="working"){i.currentState="idle";let o=e();o?.readyState===k.OPEN&&o.send(JSON.stringify({type:"panel_state",agentId:r,state:"idle",lastOutputAt:i.lastOutputAt}))}},As)}function Ha(r){let e=Xe.get(r);e?.timer&&clearTimeout(e.timer),Xe.delete(r)}var Tr,Tt;function jr(){try{return(0,Ze.createHash)("sha256").update(W.default.hostname()+":"+W.default.userInfo().username+Bs()).digest("hex")}catch{return"unknown"}}var Ye=[];function Ga(r){let e=Date.now(),t=e-3e4;for(;Ye.length&&Ye[0].ts<t;)Ye.shift();return Ye.push({agentKey:r,ts:e}),new Set(Ye.map(s=>s.agentKey)).size>=2}var qa=r=>r.replace(/[\r\n]+$/,"")+"\r",Dr=null,Va=qs(r=>{Dr=r}),Ja=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,Ka=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,Ya=5e3,za=400;function Xa(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function Qa(r,e=za){return r.length<=e?r:`${r.slice(0,e)}...`}function Za(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function et(){let r=G.default.realpathSync(process.argv[1]??""),e=R.default.dirname(r);return[R.default.resolve(e,"../../mcp-server/dist/index.cjs"),R.default.resolve(e,"bridge-mcp.cjs"),R.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>G.default.existsSync(n))??"bridge-mcp"}function ec(r){try{let e=process.env.BRIDGE_MCP_URL,t=r.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${t}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:et(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:t,BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},s=R.default.join(W.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return G.default.writeFileSync(s,JSON.stringify(n,null,2)+`
36
36
  `,"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 tc={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"};function Oe(...r){return`
37
37
 
38
38
  **Available MCP tools:** ${r.join(", ")}`}function rc(...r){return`
@@ -380,11 +380,11 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
380
380
  - Decide solely based on (todo.retryCount ?? 0) > 0
381
381
  - This is a signaling mechanic test, not a code quality review
382
382
 
383
- ${Oe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function Qs(r){let e=process.env.BRIDGE_TEST_SCRIPTED_REVIEW,t=r==="reviewer"&&e==="1";return console.log("[daemon] getRoleSystemPrompt.called",{role:r,envFlag:e,returning:t?"SCRIPTED":"NORMAL"}),t?sc:nc[r]}function ic(r,e,t,n,s,i){if(!e)return[];let o=Qs(e);if(!o)return[];let c=o.replaceAll("{{PANEL_ID}}",t).replaceAll("{{WORKSPACE_ID}}",n??"unknown").replaceAll("{{PROJECT_ID}}",s??"none").replaceAll("{{GROUP_ID}}",i??"none");if(r==="claude")try{let a=R.default.join(U.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(a,c+`
384
- `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:a}),["--append-system-prompt-file",a]}catch(a){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,role:e,error:String(a)}),[]}if(r==="qwen")return["--append-system-prompt",c];if(r==="aider")try{let a=R.default.join(U.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(a,c+`
385
- `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:a,agentKey:"aider"}),["--read",a]}catch(a){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,role:e,agentKey:"aider",error:String(a)}),[]}return r==="codex"?[]:[]}function ze(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function oc(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId||"workspace"}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:et(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},n=R.default.join(U.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return G.default.writeFileSync(n,JSON.stringify(t,null,2)+`
386
- `,"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 ac(r){try{let e=et(),t=`{BRIDGE_SERVER_URL=${ze(r.serverUrl)},BRIDGE_TOKEN=${ze(r.token)},BRIDGE_WORKSPACE_ID=${ze(r.workspaceId)},BRIDGE_PROJECT_ID=${ze(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${ze(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function cc(r){try{return G.default.statSync(r).isDirectory()}catch{return!1}}function Nr(r,e){try{return e(r)}catch{return!1}}function lc(r,e,t,n,s=cc){let i=n?.[r];if(i&&Nr(i,s))return{path:i,source:"local_override"};if(t){if(Nr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}if(e&&Nr(e,s))return{path:e,source:"server_project"};let c=!r||r.trim()===""?"Missing projectId in spawn message \u2014 server-side bug, file issue at https://github.com/alperduzgun/jerico/issues":`Set projectPaths["${r}"] in ~/.jerico/settings.json`;return console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:c}),{path:U.default.homedir(),source:"fallback_home"}}function dc(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=et(),t=JSON.stringify({mcpServers:{bridge:{command:e,args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Ce.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Ce.spawnSync)("forge",["mcp","import",t,"--scope","local"],n);return s.status===0?(console.log("[daemon] forge.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] forge.mcp.setup.failed",{cwd:r.cwd,projectId:r.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:r.projectId}),!1}}function uc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=et(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=R.default.resolve(r.cwd)===R.default.resolve(U.default.homedir()),s=n?"user":"project";n&&console.warn("[daemon] qwen.mcp.home_dir_fallback",{cwd:r.cwd,projectId:r.projectId||"workspace",scope:"user"}),(0,Ce.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Ce.spawnSync)("qwen",["mcp","add","--scope",s,"-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return i.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.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:r.projectId}),!1}}var Qe=[],Rr=!1,Xs=!1;function Zs(){return Rr}function ei(r){if(Xs)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(Xs=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let p=R.default.join(U.default.homedir(),".jerico","settings.json");G.default.existsSync(p)&&JSON.parse(G.default.readFileSync(p,"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=ce(),t=(0,Ze.createHash)("sha256").update(e.token).digest("hex"),n=new kt(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let p=Date.now(),g=process.hrtime.bigint();s=new E(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let h=s,m=(0,Ze.randomUUID)();Tr=m;let k=U.default.networkInterfaces(),v=Object.entries(k).flatMap(([b,_])=>(_||[]).filter(A=>!A.internal).map(A=>({iface:b,address:A.address,family:A.family}))),P=JSON.stringify(v);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:v,connectionId:m})),Tt&&Tt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Tt,current:P,connectionId:m})),Tt=P;let M=h.send.bind(h);h.send=function(b){if(h.readyState!==E.OPEN){let _="unknown";try{_=JSON.parse(b).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:_,readyState:h.readyState,connectionId:m}));return}return M(b)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let w=null,x=0,S=null;h.on("open",()=>{Rr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{h.readyState===E.OPEN&&(h.ping(),x=Date.now(),S&&clearTimeout(S),S=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),h.terminate()},Ka))},Ja),r.setCurrentWs(h);let b=!zs();h.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:b,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:jr(),connectionId:m})),n.updateWs(h),Promise.all([Qt(e.agentPaths),Sr()]).then(([_,A])=>{Qe=A?[..._,A]:_,h.readyState===E.OPEN&&h.send(JSON.stringify({type:"agents",list:Qe}))}),w=Ks(_=>{h.readyState===E.OPEN&&h.send(JSON.stringify({type:"system_metrics",daemonId:t,..._}))})}),h.on("message",b=>{let _;try{_=JSON.parse(b.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}hc(_,h,r,e,n)}),h.on("pong",()=>{S&&(clearTimeout(S),S=null);let b=Date.now()-x;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:b,connectionId:m}))}),h.on("close",(b,_)=>{Rr=!1,o&&(clearInterval(o),o=null),S&&(clearTimeout(S),S=null),w?.(),w=null,b===1008?(c++,c>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:c})):c=0;let A=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:b,reason:_?.toString()||void 0,uptimeMs:A,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let Ae=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&Ae<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let Dt=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),Wr=Math.round(Dt+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:Wr,reconnectCount:a,connectionId:m})),i=setTimeout(d,Wr)}),h.on("error",b=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:b.message,code:b.code,connectionId:m}))})}function u(){o&&(clearInterval(o),o=null),r.stopLivenessCheck(),Va();for(let p of de.values())p();n.stopAll(),r.killAll(),s?.close()}function f(p){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:p,connectionId:Tr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",p=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(p),stack:p.stack,connectionId:Tr})),r.killAll(),process.exit(1)}),d()}function hc(r,e,t,n,s){switch(r.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role}),r.agentKey==="sim_ios"){s.start(r.agentId);return}let i=Qe.find(w=>w.key===r.agentKey);if(!i){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let o=pe.find(w=>w.key===r.agentKey),c=[];if(r.sessionId&&o?.resumeArgs)c=o.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(de.get(r.agentId)?.(),de.set(r.agentId,Or(r.agentId,r.sessionId,(w,x,S)=>{let b=t.getCurrentWs();b?.readyState===E.OPEN&&b.send(JSON.stringify({type:"panel_token_usage",agentId:w,usedPct:x,usedTokens:S,...Dr}))})));else if(o?.assignSessionId){let w=crypto.randomUUID(),x=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],x,w],e.readyState===E.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:w})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:w})),r.agentKey==="claude"&&(de.get(r.agentId)?.(),de.set(r.agentId,Or(r.agentId,w,(S,b,_)=>{let A=t.getCurrentWs();A?.readyState===E.OPEN&&A.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:b,usedTokens:_,...Dr}))})))}else e.readyState===E.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let a,l=!1,d,u;if(r.workspaceId){let w=Za(n.server),x=lc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),S=x.path;u=x.source;let b=xr(S);if(a={serverUrl:w,token:n.token,workspaceId:Cs(r.workspaceId),projectId:r.projectId?Ps(r.projectId):void 0,agentId:r.agentId?Os(r.agentId):void 0,cwd:S,projectEnv:b.env},r.agentKey==="claude"){let _=ec(a);l=_.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,..._]}else if(r.agentKey==="codex"){let _=ac(a);l=_.length>0,d="stdio",c=[...c,..._]}else if(r.agentKey==="qwen")l=uc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let _=oc(a);l=_.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,..._]}else r.agentKey==="forge"?(l=dc(a),d=l?"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"}));if(wr("phase2a.verified_at")&&(x.source==="daemon_override"||x.source==="server_project")){let _=`${w}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(_,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(A=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(A)})})}if(wr("phase2a.auto_register")&&(x.source==="daemon_override"||x.source==="server_project"))try{let _=(0,Ce.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(_.status===0&&_.stdout&&_.stdout.trim()){let A=_.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,le(n));let Ae=`${w}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(Ae,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:A})}).catch(Dt=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(Dt)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:A})}}catch(_){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(_)})}}let f=ic(r.agentKey,r.role,r.agentId,r.workspaceId,r.projectId,r.groupId);f.length>0&&(c=[...c,...f]);let p=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),h=Date.now(),m="",k=0,v=!1,P=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,p,g,w=>{k+=w.length;try{let S=Buffer.from(w,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!P&&Date.now()-h<3e4&&(/yolo agent/.test(S)||/●/.test(S)||/○/.test(S))){P=!0;let b=Qs(r.role);if(b){let _=b.replaceAll("{{PANEL_ID}}",r.agentId).replaceAll("{{WORKSPACE_ID}}",r.workspaceId??"unknown").replaceAll("{{PROJECT_ID}}",r.projectId??"none").replaceAll("{{GROUP_ID}}",r.groupId??"none"),A=qa(_),Ae=Buffer.from(A).toString("base64");t.write(r.agentId,Ae,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!m)try{let S=Buffer.from(w,"base64").toString("utf-8"),b=Xa(S).replace(/\x00/g,"").trim();if(b&&(m=Qa(b)),r.agentKey==="codex"&&!v&&Date.now()-h<2e4&&/included in your plan for free|let[’']s build together/i.test(b)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(b)){v=!0;let _=Buffer.from("y").toString("base64");t.write(r.agentId,_,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let x=t.getCurrentWs();x?.readyState===E.OPEN&&x.send(JSON.stringify({type:"output",agentId:r.agentId,data:w})),Fa(r.agentId,()=>t.getCurrentWs())},(w,x)=>{let S=Date.now()-h,b=S<=Ya;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:w,signal:x,uptimeMs:S,earlyExit:b,outputBytes:k,firstOutputSnippet:m||void 0});let _=t.getCurrentWs();b&&_?.readyState===E.OPEN&&_.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${w??"null"} signal=${x??"null"} snippet="${m||"no output"}"`})),_?.readyState===E.OPEN&&_.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:w,signal:x})),Ha(r.agentId)},a))e.readyState===E.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:a?.projectId,effectiveCwd:a?.cwd,cwdSource:u}));else{let x=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Ga(r.agentKey);e.readyState===E.OPEN&&(x?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":de.get(r.agentId)?.(),de.delete(r.agentId),s.stop(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.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(r);break;case"detect_agents":Promise.all([Qt(n.agentPaths),Sr()]).then(([i,o])=>{Qe=o?[...i,o]:i,e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agents",list:Qe}))});break;case"dir_list":{let i=U.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=R.default.resolve(o);if(c!==i&&!c.startsWith(i+R.default.sep)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let a=G.default.readdirSync(c,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:R.default.join(c,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:a}))}catch(a){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:[],error:a instanceof Error?a.message:"Cannot read directory"}))}break}default:{let i=r}}}qe();var Nt=j.default.join((0,Pe.homedir)(),"Library","LaunchAgents");function pc(){let r=[...process.env.npm_config_global_prefix?[j.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function ri(){let r=Ge();if((0,T.existsSync)(r))try{let{pid:e}=JSON.parse((0,T.readFileSync)(r,"utf8"));if(e&&process.kill(e,0))return;(0,T.unlinkSync)(r)}catch{try{(0,T.unlinkSync)(r)}catch{}}}function fc(){let r=Ge();try{(0,T.mkdirSync)(j.default.dirname(r),{recursive:!0})}catch{}ri();try{let e=(0,T.openSync)(r,"wx");return(0,T.writeSync)(e,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,T.closeSync)(e),!0}catch{return!1}}function ni(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(j.default.join((0,Pe.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(j.default.join((0,Pe.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,ue.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(j.default.dirname(i))}catch{}let n=j.default.join((0,Pe.homedir)(),".vscode","extensions");try{let s=(0,ue.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
387
- `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=j.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function gc(r){try{(0,ue.execSync)(`mkdir -p "${Nt}"`,{stdio:"pipe"})}catch{}let e=ke(),t=j.default.join(Nt,e),{out:n,err:s}=It(),i=ni(),o=process.env.BRIDGE_PROFILE||"",c=e.replace(".plist",""),a=o?` <key>BRIDGE_PROFILE</key>
383
+ ${Oe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function Qs(r){let e=process.env.BRIDGE_TEST_SCRIPTED_REVIEW,t=r==="reviewer"&&e==="1";return console.log("[daemon] getRoleSystemPrompt.called",{role:r,envFlag:e,returning:t?"SCRIPTED":"NORMAL"}),t?sc:nc[r]}function ic(r,e,t,n,s,i){if(!e)return[];let o=Qs(e);if(!o)return[];let c=o.replaceAll("{{PANEL_ID}}",t).replaceAll("{{WORKSPACE_ID}}",n??"unknown").replaceAll("{{PROJECT_ID}}",s??"none").replaceAll("{{GROUP_ID}}",i??"none");if(r==="claude")try{let a=R.default.join(W.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(a,c+`
384
+ `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:a}),["--append-system-prompt-file",a]}catch(a){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,role:e,error:String(a)}),[]}if(r==="qwen")return["--append-system-prompt",c];if(r==="aider")try{let a=R.default.join(W.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(a,c+`
385
+ `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:a,agentKey:"aider"}),["--read",a]}catch(a){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,role:e,agentKey:"aider",error:String(a)}),[]}return r==="codex"?[]:[]}function ze(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function oc(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId||"workspace"}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:et(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},n=R.default.join(W.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return G.default.writeFileSync(n,JSON.stringify(t,null,2)+`
386
+ `,"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 ac(r){try{let e=et(),t=`{BRIDGE_SERVER_URL=${ze(r.serverUrl)},BRIDGE_TOKEN=${ze(r.token)},BRIDGE_WORKSPACE_ID=${ze(r.workspaceId)},BRIDGE_PROJECT_ID=${ze(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${ze(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function cc(r){try{return G.default.statSync(r).isDirectory()}catch{return!1}}function Nr(r,e){try{return e(r)}catch{return!1}}function lc(r,e,t,n,s=cc){let i=n?.[r];if(i&&Nr(i,s))return{path:i,source:"local_override"};if(t){if(Nr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}if(e&&Nr(e,s))return{path:e,source:"server_project"};let c=!r||r.trim()===""?"Missing projectId in spawn message \u2014 server-side bug, file issue at https://github.com/alperduzgun/jerico/issues":`Set projectPaths["${r}"] in ~/.jerico/settings.json`;return console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:c}),{path:W.default.homedir(),source:"fallback_home"}}function dc(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=et(),t=JSON.stringify({mcpServers:{bridge:{command:e,args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Ce.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Ce.spawnSync)("forge",["mcp","import",t,"--scope","local"],n);return s.status===0?(console.log("[daemon] forge.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] forge.mcp.setup.failed",{cwd:r.cwd,projectId:r.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:r.projectId}),!1}}function uc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=et(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=R.default.resolve(r.cwd)===R.default.resolve(W.default.homedir()),s=n?"user":"project";n&&console.warn("[daemon] qwen.mcp.home_dir_fallback",{cwd:r.cwd,projectId:r.projectId||"workspace",scope:"user"}),(0,Ce.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Ce.spawnSync)("qwen",["mcp","add","--scope",s,"-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return i.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.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:r.projectId}),!1}}var Qe=[],Rr=!1,Xs=!1;function Zs(){return Rr}function ei(r){if(Xs)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(Xs=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let p=R.default.join(W.default.homedir(),".jerico","settings.json");G.default.existsSync(p)&&JSON.parse(G.default.readFileSync(p,"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=ce(),t=(0,Ze.createHash)("sha256").update(e.token).digest("hex"),n=new Et(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let p=Date.now(),g=process.hrtime.bigint();s=new k(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let h=s,m=(0,Ze.randomUUID)();Tr=m;let E=W.default.networkInterfaces(),v=Object.entries(E).flatMap(([b,_])=>(_||[]).filter(A=>!A.internal).map(A=>({iface:b,address:A.address,family:A.family}))),P=JSON.stringify(v);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:v,connectionId:m})),Tt&&Tt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Tt,current:P,connectionId:m})),Tt=P;let M=h.send.bind(h);h.send=function(b){if(h.readyState!==k.OPEN){let _="unknown";try{_=JSON.parse(b).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:_,readyState:h.readyState,connectionId:m}));return}return M(b)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let w=null,x=0,S=null;h.on("open",()=>{Rr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{h.readyState===k.OPEN&&(h.ping(),x=Date.now(),S&&clearTimeout(S),S=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),h.terminate()},Ka))},Ja),r.setCurrentWs(h);let b=!zs();h.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:b,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:jr(),connectionId:m})),n.updateWs(h),Promise.all([Qt(e.agentPaths),Sr()]).then(([_,A])=>{Qe=A?[..._,A]:_,h.readyState===k.OPEN&&h.send(JSON.stringify({type:"agents",list:Qe}))}),w=Ks(_=>{h.readyState===k.OPEN&&h.send(JSON.stringify({type:"system_metrics",daemonId:t,..._}))})}),h.on("message",b=>{let _;try{_=JSON.parse(b.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}hc(_,h,r,e,n)}),h.on("pong",()=>{S&&(clearTimeout(S),S=null);let b=Date.now()-x;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:b,connectionId:m}))}),h.on("close",(b,_)=>{Rr=!1,o&&(clearInterval(o),o=null),S&&(clearTimeout(S),S=null),w?.(),w=null,b===1008?(c++,c>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:c})):c=0;let A=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:b,reason:_?.toString()||void 0,uptimeMs:A,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let Ae=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&Ae<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let Dt=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),Ur=Math.round(Dt+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:Ur,reconnectCount:a,connectionId:m})),i=setTimeout(d,Ur)}),h.on("error",b=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:b.message,code:b.code,connectionId:m}))})}function u(){o&&(clearInterval(o),o=null),r.stopLivenessCheck(),Va();for(let p of de.values())p();n.stopAll(),r.killAll(),s?.close()}function f(p){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:p,connectionId:Tr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",p=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(p),stack:p.stack,connectionId:Tr})),r.killAll(),process.exit(1)}),d()}function hc(r,e,t,n,s){switch(r.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role}),r.agentKey==="sim_ios"){s.start(r.agentId);return}let i=Qe.find(w=>w.key===r.agentKey);if(!i){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let o=pe.find(w=>w.key===r.agentKey),c=[];if(r.sessionId&&o?.resumeArgs)c=o.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(de.get(r.agentId)?.(),de.set(r.agentId,Or(r.agentId,r.sessionId,(w,x,S)=>{let b=t.getCurrentWs();b?.readyState===k.OPEN&&b.send(JSON.stringify({type:"panel_token_usage",agentId:w,usedPct:x,usedTokens:S,...Dr}))})));else if(o?.assignSessionId){let w=crypto.randomUUID(),x=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],x,w],e.readyState===k.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:w})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:w})),r.agentKey==="claude"&&(de.get(r.agentId)?.(),de.set(r.agentId,Or(r.agentId,w,(S,b,_)=>{let A=t.getCurrentWs();A?.readyState===k.OPEN&&A.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:b,usedTokens:_,...Dr}))})))}else e.readyState===k.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let a,l=!1,d,u;if(r.workspaceId){let w=Za(n.server),x=lc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),S=x.path;u=x.source;let b=xr(S);if(a={serverUrl:w,token:n.token,workspaceId:Cs(r.workspaceId),projectId:r.projectId?Ps(r.projectId):void 0,agentId:r.agentId?Os(r.agentId):void 0,cwd:S,projectEnv:b.env},r.agentKey==="claude"){let _=ec(a);l=_.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,..._]}else if(r.agentKey==="codex"){let _=ac(a);l=_.length>0,d="stdio",c=[...c,..._]}else if(r.agentKey==="qwen")l=uc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let _=oc(a);l=_.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,..._]}else r.agentKey==="forge"?(l=dc(a),d=l?"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"}));if(wr("phase2a.verified_at")&&(x.source==="daemon_override"||x.source==="server_project")){let _=`${w}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(_,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(A=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(A)})})}if(wr("phase2a.auto_register")&&(x.source==="daemon_override"||x.source==="server_project"))try{let _=(0,Ce.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(_.status===0&&_.stdout&&_.stdout.trim()){let A=_.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,le(n));let Ae=`${w}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(Ae,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:A})}).catch(Dt=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(Dt)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:A})}}catch(_){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(_)})}}let f=ic(r.agentKey,r.role,r.agentId,r.workspaceId,r.projectId,r.groupId);f.length>0&&(c=[...c,...f]);let p=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),h=Date.now(),m="",E=0,v=!1,P=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,p,g,w=>{E+=w.length;try{let S=Buffer.from(w,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!P&&Date.now()-h<3e4&&(/yolo agent/.test(S)||/●/.test(S)||/○/.test(S))){P=!0;let b=Qs(r.role);if(b){let _=b.replaceAll("{{PANEL_ID}}",r.agentId).replaceAll("{{WORKSPACE_ID}}",r.workspaceId??"unknown").replaceAll("{{PROJECT_ID}}",r.projectId??"none").replaceAll("{{GROUP_ID}}",r.groupId??"none"),A=qa(_),Ae=Buffer.from(A).toString("base64");t.write(r.agentId,Ae,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!m)try{let S=Buffer.from(w,"base64").toString("utf-8"),b=Xa(S).replace(/\x00/g,"").trim();if(b&&(m=Qa(b)),r.agentKey==="codex"&&!v&&Date.now()-h<2e4&&/included in your plan for free|let[’']s build together/i.test(b)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(b)){v=!0;let _=Buffer.from("y").toString("base64");t.write(r.agentId,_,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let x=t.getCurrentWs();x?.readyState===k.OPEN&&x.send(JSON.stringify({type:"output",agentId:r.agentId,data:w})),Fa(r.agentId,()=>t.getCurrentWs())},(w,x)=>{let S=Date.now()-h,b=S<=Ya;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:w,signal:x,uptimeMs:S,earlyExit:b,outputBytes:E,firstOutputSnippet:m||void 0});let _=t.getCurrentWs();b&&_?.readyState===k.OPEN&&_.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${w??"null"} signal=${x??"null"} snippet="${m||"no output"}"`})),_?.readyState===k.OPEN&&_.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:w,signal:x})),Ha(r.agentId)},a))e.readyState===k.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:a?.projectId,effectiveCwd:a?.cwd,cwdSource:u}));else{let x=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Ga(r.agentKey);e.readyState===k.OPEN&&(x?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":de.get(r.agentId)?.(),de.delete(r.agentId),s.stop(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.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(r);break;case"detect_agents":Promise.all([Qt(n.agentPaths),Sr()]).then(([i,o])=>{Qe=o?[...i,o]:i,e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agents",list:Qe}))});break;case"dir_list":{let i=W.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=R.default.resolve(o);if(c!==i&&!c.startsWith(i+R.default.sep)){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let a=G.default.readdirSync(c,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:R.default.join(c,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:a}))}catch(a){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:[],error:a instanceof Error?a.message:"Cannot read directory"}))}break}default:{let i=r}}}qe();var Nt=j.default.join((0,Pe.homedir)(),"Library","LaunchAgents");function pc(){let r=[...process.env.npm_config_global_prefix?[j.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function ri(){let r=Ge();if((0,T.existsSync)(r))try{let{pid:e}=JSON.parse((0,T.readFileSync)(r,"utf8"));if(e&&process.kill(e,0))return;(0,T.unlinkSync)(r)}catch{try{(0,T.unlinkSync)(r)}catch{}}}function fc(){let r=Ge();try{(0,T.mkdirSync)(j.default.dirname(r),{recursive:!0})}catch{}ri();try{let e=(0,T.openSync)(r,"wx");return(0,T.writeSync)(e,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,T.closeSync)(e),!0}catch{return!1}}function ni(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(j.default.join((0,Pe.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(j.default.join((0,Pe.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,ue.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(j.default.dirname(i))}catch{}let n=j.default.join((0,Pe.homedir)(),".vscode","extensions");try{let s=(0,ue.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
387
+ `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=j.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function gc(r){try{(0,ue.execSync)(`mkdir -p "${Nt}"`,{stdio:"pipe"})}catch{}let e=Ee(),t=j.default.join(Nt,e),{out:n,err:s}=It(),i=ni(),o=process.env.BRIDGE_PROFILE||"",c=e.replace(".plist",""),a=o?` <key>BRIDGE_PROFILE</key>
388
388
  <string>${o}</string>
389
389
  `:"",l=j.default.join((0,Pe.homedir)(),".bridge"),d=j.default.join(l,"bridge-agent-wrapper.sh"),u=`#!/bin/bash
390
390
  exec "$(command -v node)" "${r}" start
@@ -417,6 +417,6 @@ exec "$(command -v node)" "${r}" start
417
417
  ${a} </dict>
418
418
  </dict>
419
419
  </plist>
420
- `;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(p){return console.warn("[bridge] launchd.plist.write.failed",{error:String(p)}),!1}}function mc(){let r=ke(),e=j.default.join(Nt,r);try{return(0,ue.execSync)(`launchctl kickstart -kp gui/$(id -u)/${r} 2>/dev/null; launchctl unload "${e}" 2>/dev/null; launchctl load "${e}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(t){let n=String(t);return{ok:!1,permissionDenied:n.includes("Permission denied")||n.includes("not allowed")||n.includes("bootstrap")}}}function _c(r){let{out:e,err:t}=It();try{let n=(0,ue.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:ni(),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:t})},2e3)}catch(n){console.error("[bridge] background.spawn.failed",{error:String(n)})}}function yc(){let r=parseInt(process.env.HEALTH_PORT??"3101",10),e=Date.now()+6e3,t=()=>{if(Date.now()>e){console.error("[bridge] health.verify.timeout \u2014 daemon may have crashed immediately");return}try{let s=require("node:http").get(`http://127.0.0.1:${r}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(t,500)});s.on("error",()=>{setTimeout(t,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(t,500)})}catch{setTimeout(t,500)}};setTimeout(t,1e3)}function bc(){ri();let r=new at;ei(r),r.startLivenessCheck(6e4);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,ti.createServer)((n,s)=>{let i=Zs(),o=JSON.stringify({status:"ok",connected:i,uptime:process.uptime()});s.writeHead(i?200:503,{"Content-Type":"application/json"}),s.end(o)});t.listen(e,"127.0.0.1",()=>{console.log(`[bridge] health. listening on 127.0.0.1:${e}`)}),t.on("error",n=>{console.error("[bridge] health.error",{error:n.message})})}function si(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(!r&&!process.env.BRIDGE_PROFILE){let a=process.argv[1]??"";(a.includes("packages/daemon/dist")||a.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..."),r){bc();return}fc()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=pc(),t=gc(e),{ok:n,permissionDenied:s}=t?mc():{ok:!1,permissionDenied:!1},i=j.default.join(Nt,ke()),{out:o,err:c}=It();if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:o,err:c}),yc(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${i}"`),console.warn(`[bridge] Falling back to background process...
421
- `)),_c(e),process.exit(0)}var ii=y(require("https")),oi=y(require("http"));xe();var wc="https://lcars.jerico.appnova.io";function Sc(r){return(r??"").trim()}async function ai(r,e=!1,t){let n=!(r&&r.trim()),s=n?wc:r.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=Sc(t);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 Ec(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");le({server:l,token:o,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function vc(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
422
- `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function Ec(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?ii.default:oi.default,o={hostname:n.hostname,port:n.port||(s?443:80),path:n.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}},c=i.request(o,a=>{t(a.statusCode===200)});c.on("error",()=>t(!1)),c.end()})}var ci=y(require("https")),li=y(require("http")),Lr=y(require("fs")),Mr=y(require("path")),di=require("node:crypto");xe();function kc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function ui(r,e,t){let n=ce(),s=(0,di.createHash)("sha256").update(n.token).digest("hex"),i=kc(n.server),o=Mr.default.resolve(t);Mr.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),Lr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),Lr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let a=new URL(`/api/workspaces/${r}/projects/${e}/machine-paths`,i),l=a.protocol==="https:",d=l?ci.default:li.default;n.projectPaths={...n.projectPaths??{},[e]:o},le(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:jr()}),f=await new Promise((p,g)=>{let h=d.request({hostname:a.hostname,port:a.port||(l?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let k="";m.on("data",v=>{k+=v}),m.on("end",()=>{if(m.statusCode===200)p(200);else{try{let v=JSON.parse(k);console.error("[bridge] link-project failed:",v.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}p(m.statusCode??0)}})});h.on("error",m=>{g(m)}),h.write(u),h.end()});f===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:f}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}xe();function xc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function hi(){let r=ce(),e=xc(r.server),t=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:"{}"});t.ok||(console.error(`[cli] cleanup-orphans: HTTP ${t.status}`),process.exit(1));let{deleted:n}=await t.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var $r=require("node:child_process"),tt=require("node:fs"),Br=y(require("path"));qe();var pi=require("node:os"),Ic=Br.default.join((0,pi.homedir)(),"Library","LaunchAgents");function fi(){let r=ke(),e=r.replace(".plist",""),t=Br.default.join(Ic,r);try{(0,$r.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,tt.existsSync)(t)?((0,$r.execSync)(`launchctl unload "${t}"`,{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=Ge();if((0,tt.existsSync)(n))try{(0,tt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var ee=new tn;ee.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.4.6").option("--profile <name>","Config profile name (e.g. dev). Isolates config, lock, and fingerprint from the default prod profile.").hook("preAction",r=>{let e=r.opts().profile;e&&(process.env.BRIDGE_PROFILE=e)});ee.command("start").description("Start the bridge-agent daemon").option("--health-port <port>","Health check HTTP port (default: 3101, or 3101+offset per profile)").action(r=>{r.healthPort&&(process.env.HEALTH_PORT=r.healthPort),si()});ee.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(r=>{ai(r.server,!r.browser,r.token)});ee.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{ui(r,e,t)});ee.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{hi()});ee.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(xe(),Us)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});ee.command("stop").description("Stop the bridge-agent daemon").action(()=>{fi()});ee.parse();
420
+ `;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(p){return console.warn("[bridge] launchd.plist.write.failed",{error:String(p)}),!1}}function mc(){let r=Ee(),e=j.default.join(Nt,r);try{return(0,ue.execSync)(`launchctl kickstart -kp gui/$(id -u)/${r} 2>/dev/null; launchctl unload "${e}" 2>/dev/null; launchctl load "${e}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(t){let n=String(t);return{ok:!1,permissionDenied:n.includes("Permission denied")||n.includes("not allowed")||n.includes("bootstrap")}}}function _c(r){let{out:e,err:t}=It();try{let n=(0,ue.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:ni(),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:t})},2e3)}catch(n){console.error("[bridge] background.spawn.failed",{error:String(n)})}}function yc(){let r=parseInt(process.env.HEALTH_PORT??"3101",10),e=Date.now()+6e3,t=()=>{if(Date.now()>e){console.error("[bridge] health.verify.timeout \u2014 daemon may have crashed immediately");return}try{let s=require("node:http").get(`http://127.0.0.1:${r}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(t,500)});s.on("error",()=>{setTimeout(t,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(t,500)})}catch{setTimeout(t,500)}};setTimeout(t,1e3)}function bc(){ri();let r=new at;ei(r),r.startLivenessCheck(6e4);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,ti.createServer)((n,s)=>{let i=Zs(),o=JSON.stringify({status:"ok",connected:i,uptime:process.uptime()});s.writeHead(i?200:503,{"Content-Type":"application/json"}),s.end(o)});t.listen(e,"127.0.0.1",()=>{console.log(`[bridge] health. listening on 127.0.0.1:${e}`)}),t.on("error",n=>{console.error("[bridge] health.error",{error:n.message})})}function si(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(!r&&!process.env.BRIDGE_PROFILE){let a=process.argv[1]??"";(a.includes("packages/daemon/dist")||a.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..."),r){bc();return}fc()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=pc(),t=gc(e),{ok:n,permissionDenied:s}=t?mc():{ok:!1,permissionDenied:!1},i=j.default.join(Nt,Ee()),{out:o,err:c}=It();if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:o,err:c}),yc(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${i}"`),console.warn(`[bridge] Falling back to background process...
421
+ `)),_c(e),process.exit(0)}var ii=y(require("https")),oi=y(require("http"));xe();var wc="https://lcars.jerico.appnova.io";function Sc(r){return(r??"").trim()}async function ai(r,e=!1,t){let n=!(r&&r.trim()),s=n?wc:r.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=Sc(t);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");le({server:l,token:o,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function vc(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
422
+ `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function kc(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?ii.default:oi.default,o={hostname:n.hostname,port:n.port||(s?443:80),path:n.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}},c=i.request(o,a=>{t(a.statusCode===200)});c.on("error",()=>t(!1)),c.end()})}var ci=y(require("https")),li=y(require("http")),Lr=y(require("fs")),Mr=y(require("path")),di=require("node:crypto");xe();function Ec(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function ui(r,e,t){let n=ce(),s=(0,di.createHash)("sha256").update(n.token).digest("hex"),i=Ec(n.server),o=Mr.default.resolve(t);Mr.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),Lr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),Lr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let a=new URL(`/api/workspaces/${r}/projects/${e}/machine-paths`,i),l=a.protocol==="https:",d=l?ci.default:li.default;n.projectPaths={...n.projectPaths??{},[e]:o},le(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:jr()}),f=await new Promise((p,g)=>{let h=d.request({hostname:a.hostname,port:a.port||(l?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let E="";m.on("data",v=>{E+=v}),m.on("end",()=>{if(m.statusCode===200)p(200);else{try{let v=JSON.parse(E);console.error("[bridge] link-project failed:",v.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}p(m.statusCode??0)}})});h.on("error",m=>{g(m)}),h.write(u),h.end()});f===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:f}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}xe();function xc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function hi(){let r=ce(),e=xc(r.server),t=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:"{}"});t.ok||(console.error(`[cli] cleanup-orphans: HTTP ${t.status}`),process.exit(1));let{deleted:n}=await t.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var $r=require("node:child_process"),tt=require("node:fs"),Br=y(require("path"));qe();var pi=require("node:os"),Ic=Br.default.join((0,pi.homedir)(),"Library","LaunchAgents");function fi(){let r=Ee(),e=r.replace(".plist",""),t=Br.default.join(Ic,r);try{(0,$r.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,tt.existsSync)(t)?((0,$r.execSync)(`launchctl unload "${t}"`,{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=Ge();if((0,tt.existsSync)(n))try{(0,tt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var ee=new tn;ee.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.4.8").option("--profile <name>","Config profile name (e.g. dev). Isolates config, lock, and fingerprint from the default prod profile.").hook("preAction",r=>{let e=r.opts().profile;e&&(process.env.BRIDGE_PROFILE=e)});ee.command("start").description("Start the bridge-agent daemon").option("--health-port <port>","Health check HTTP port (default: 3101, or 3101+offset per profile)").action(r=>{r.healthPort&&(process.env.HEALTH_PORT=r.healthPort),si()});ee.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(r=>{ai(r.server,!r.browser,r.token)});ee.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{ui(r,e,t)});ee.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{hi()});ee.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(xe(),Ws)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});ee.command("stop").description("Stop the bridge-agent daemon").action(()=>{fi()});ee.parse();
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bridge-agent",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "description": "Bridge local agent — connects your AI tools to Jerico",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -19,6 +19,13 @@
19
19
  "engines": {
20
20
  "node": ">=20"
21
21
  },
22
+ "scripts": {
23
+ "build": "tsc --noEmit && node scripts/build.mjs",
24
+ "dev": "tsc --watch",
25
+ "typecheck": "tsc --noEmit",
26
+ "prepublishOnly": "npm run build",
27
+ "postinstall": "node scripts/postinstall.mjs"
28
+ },
22
29
  "keywords": [
23
30
  "jerico",
24
31
  "bridge",
@@ -48,12 +55,6 @@
48
55
  "typescript": "^5.4.0",
49
56
  "which": "^4.0.0",
50
57
  "ws": "^8.17.0",
51
- "@jerico/shared": "1.0.0"
52
- },
53
- "scripts": {
54
- "build": "tsc --noEmit && node scripts/build.mjs",
55
- "dev": "tsc --watch",
56
- "typecheck": "tsc --noEmit",
57
- "postinstall": "node scripts/postinstall.mjs"
58
+ "@jerico/shared": "workspace:*"
58
59
  }
59
- }
60
+ }