bridge-agent 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1299,21 +1299,21 @@ var require_errors = __commonJS({
1299
1299
  function extendErrors({ gen, keyword, schemaValue, data, errsCount, it }) {
1300
1300
  if (errsCount === void 0)
1301
1301
  throw new Error("ajv implementation error");
1302
- const err4 = gen.name("err");
1302
+ const err5 = gen.name("err");
1303
1303
  gen.forRange("i", errsCount, names_1.default.errors, (i) => {
1304
- gen.const(err4, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`);
1305
- gen.if((0, codegen_1._)`${err4}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err4}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));
1306
- gen.assign((0, codegen_1._)`${err4}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`);
1304
+ gen.const(err5, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`);
1305
+ gen.if((0, codegen_1._)`${err5}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err5}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));
1306
+ gen.assign((0, codegen_1._)`${err5}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`);
1307
1307
  if (it.opts.verbose) {
1308
- gen.assign((0, codegen_1._)`${err4}.schema`, schemaValue);
1309
- gen.assign((0, codegen_1._)`${err4}.data`, data);
1308
+ gen.assign((0, codegen_1._)`${err5}.schema`, schemaValue);
1309
+ gen.assign((0, codegen_1._)`${err5}.data`, data);
1310
1310
  }
1311
1311
  });
1312
1312
  }
1313
1313
  exports2.extendErrors = extendErrors;
1314
1314
  function addError(gen, errObj) {
1315
- const err4 = gen.const("err", errObj);
1316
- gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err4}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err4})`);
1315
+ const err5 = gen.const("err", errObj);
1316
+ gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err5}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err5})`);
1317
1317
  gen.code((0, codegen_1._)`${names_1.default.errors}++`);
1318
1318
  }
1319
1319
  function returnErrors(it, errs) {
@@ -7541,8 +7541,8 @@ var ZodType = class {
7541
7541
  } : {
7542
7542
  issues: ctx.common.issues
7543
7543
  };
7544
- } catch (err4) {
7545
- if (err4?.message?.toLowerCase()?.includes("encountered")) {
7544
+ } catch (err5) {
7545
+ if (err5?.message?.toLowerCase()?.includes("encountered")) {
7546
7546
  this["~standard"].async = true;
7547
7547
  }
7548
7548
  ctx.common = {
@@ -21243,16 +21243,16 @@ var handleFetchError = (e) => new Response(null, {
21243
21243
  status: e instanceof Error && (e.name === "TimeoutError" || e.constructor.name === "TimeoutError") ? 504 : 500
21244
21244
  });
21245
21245
  var handleResponseError = (e, outgoing) => {
21246
- const err4 = e instanceof Error ? e : new Error("unknown error", { cause: e });
21247
- if (err4.code === "ERR_STREAM_PREMATURE_CLOSE") {
21246
+ const err5 = e instanceof Error ? e : new Error("unknown error", { cause: e });
21247
+ if (err5.code === "ERR_STREAM_PREMATURE_CLOSE") {
21248
21248
  console.info("The user aborted a request.");
21249
21249
  } else {
21250
21250
  console.error(e);
21251
21251
  if (!outgoing.headersSent) {
21252
21252
  outgoing.writeHead(500, { "Content-Type": "text/plain" });
21253
21253
  }
21254
- outgoing.end(`Error: ${err4.message}`);
21255
- outgoing.destroy(err4);
21254
+ outgoing.end(`Error: ${err5.message}`);
21255
+ outgoing.destroy(err5);
21256
21256
  }
21257
21257
  };
21258
21258
  var flushHeaders = (outgoing) => {
@@ -21309,8 +21309,8 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
21309
21309
  if (options.errorHandler) {
21310
21310
  try {
21311
21311
  res = await res;
21312
- } catch (err4) {
21313
- const errRes = await options.errorHandler(err4);
21312
+ } catch (err5) {
21313
+ const errRes = await options.errorHandler(err5);
21314
21314
  if (!errRes) {
21315
21315
  return;
21316
21316
  }
@@ -22460,18 +22460,21 @@ async function applyPersona(ctx, params) {
22460
22460
  personaId: params.personaId
22461
22461
  });
22462
22462
  }
22463
+ async function listRolePrompts(ctx) {
22464
+ return request(ctx, "GET", workspacePath(ctx, "/prompts"));
22465
+ }
22466
+ async function getRolePrompt(ctx, role) {
22467
+ return request(ctx, "GET", workspacePath(ctx, `/prompts/${encodeURIComponent(role)}`));
22468
+ }
22469
+ async function updateRolePrompt(ctx, role, content) {
22470
+ return request(ctx, "PUT", workspacePath(ctx, `/prompts/${encodeURIComponent(role)}`), { content });
22471
+ }
22472
+ async function deleteRolePrompt(ctx, role) {
22473
+ return request(ctx, "DELETE", workspacePath(ctx, `/prompts/${encodeURIComponent(role)}`));
22474
+ }
22463
22475
 
22464
22476
  // ../mcp-server/src/tools/plan.ts
22465
22477
  function registerPlanTools(server, ctx) {
22466
- server.tool(
22467
- "bridge_get_project",
22468
- "Get project metadata: name, cwd (working directory), machineId, and current plan.",
22469
- {},
22470
- async () => {
22471
- const project = await getProject(ctx);
22472
- return { content: [{ type: "text", text: JSON.stringify(project) }] };
22473
- }
22474
- );
22475
22478
  server.tool(
22476
22479
  "bridge_get_execution_status",
22477
22480
  "Get the execution run history and status for this project. Returns recent runs with todo completion counts.",
@@ -22992,6 +22995,60 @@ function registerPersonaTools(server, ctx) {
22992
22995
  );
22993
22996
  }
22994
22997
 
22998
+ // ../mcp-server/src/tools/role-prompts.ts
22999
+ function ok4(data) {
23000
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
23001
+ }
23002
+ function err4(message) {
23003
+ return { content: [{ type: "text", text: JSON.stringify({ ok: false, error: message }) }] };
23004
+ }
23005
+ async function safe4(fn) {
23006
+ try {
23007
+ return ok4(await fn());
23008
+ } catch (e) {
23009
+ const message = e instanceof Error ? e.message : String(e);
23010
+ if (e instanceof Error && (e.name === "TypeError" || e.name === "ReferenceError")) {
23011
+ console.error("[mcp-bridge] unexpected error in role-prompt tool handler", { name: e.name, message, stack: e.stack });
23012
+ }
23013
+ return err4(message);
23014
+ }
23015
+ }
23016
+ var ROLE_PROMPT_KEYS = AGENT_ROLES;
23017
+ var ListRolePromptsSchema = external_exports.object({});
23018
+ var GetRolePromptSchema = external_exports.object({
23019
+ role: external_exports.enum(ROLE_PROMPT_KEYS).describe("Role name: developer, reviewer, planner, executor, shell, runner, or orchestrator")
23020
+ });
23021
+ var UpdateRolePromptSchema = external_exports.object({
23022
+ role: external_exports.enum(ROLE_PROMPT_KEYS).describe("Role name to update"),
23023
+ content: external_exports.string().min(1).describe("New system prompt content")
23024
+ });
23025
+ function registerRolePromptTools(server, ctx) {
23026
+ server.tool(
23027
+ "bridge_list_role_prompts",
23028
+ "List all role prompts for the current workspace. Returns 7 entries (developer, reviewer, planner, executor, shell, runner, orchestrator) with merged workspace overrides or global defaults.",
23029
+ ListRolePromptsSchema.shape,
23030
+ () => safe4(() => listRolePrompts(ctx))
23031
+ );
23032
+ server.tool(
23033
+ "bridge_get_role_prompt",
23034
+ "Fetch the system prompt for a specific role. Falls back to global default if no workspace override exists.",
23035
+ GetRolePromptSchema.shape,
23036
+ (params) => safe4(() => getRolePrompt(ctx, params.role))
23037
+ );
23038
+ server.tool(
23039
+ "bridge_update_role_prompt",
23040
+ "Update the workspace-specific system prompt for a role. Creates a workspace override; does not mutate the global default.",
23041
+ UpdateRolePromptSchema.shape,
23042
+ (params) => safe4(() => updateRolePrompt(ctx, params.role, params.content))
23043
+ );
23044
+ server.tool(
23045
+ "bridge_delete_role_prompt",
23046
+ "Revert a workspace role prompt to the global default. Removes the workspace-specific row; subsequent fetches return the system default content.",
23047
+ GetRolePromptSchema.shape,
23048
+ (params) => safe4(() => deleteRolePrompt(ctx, params.role))
23049
+ );
23050
+ }
23051
+
22995
23052
  // ../mcp-server/src/index.ts
22996
23053
  var sessions = /* @__PURE__ */ new Map();
22997
23054
  function buildMcpServer(ctx) {
@@ -23002,6 +23059,7 @@ function buildMcpServer(ctx) {
23002
23059
  registerMessagingTools(srv, ctx);
23003
23060
  registerWorkspaceTools(srv, ctx);
23004
23061
  registerPersonaTools(srv, ctx);
23062
+ registerRolePromptTools(srv, ctx);
23005
23063
  return srv;
23006
23064
  }
23007
23065
  async function parseBody(req) {
@@ -23106,8 +23164,8 @@ function startHttpServer() {
23106
23164
  const mcpServer = buildMcpServer(ctx);
23107
23165
  await mcpServer.connect(transport);
23108
23166
  await transport.handleRequest(req, res, body);
23109
- } catch (err4) {
23110
- console.error("[bridge-mcp] request error:", err4);
23167
+ } catch (err5) {
23168
+ console.error("[bridge-mcp] request error:", err5);
23111
23169
  if (!res.headersSent) {
23112
23170
  res.writeHead(500, { "Content-Type": "application/json" });
23113
23171
  res.end(JSON.stringify({ error: "Internal server error" }));
@@ -23142,8 +23200,8 @@ async function startStdioServer() {
23142
23200
  if (process.env["HTTP_MODE"] !== "false") {
23143
23201
  startHttpServer();
23144
23202
  } else {
23145
- startStdioServer().catch((err4) => {
23146
- console.error("[bridge-mcp] fatal:", err4);
23203
+ startStdioServer().catch((err5) => {
23204
+ console.error("[bridge-mcp] fatal:", err5);
23147
23205
  process.exit(1);
23148
23206
  });
23149
23207
  }
package/dist/index.js CHANGED
@@ -1,48 +1,34 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var yi=Object.create;var Lt=Object.defineProperty;var bi=Object.getOwnPropertyDescriptor;var wi=Object.getOwnPropertyNames;var Si=Object.getPrototypeOf,vi=Object.prototype.hasOwnProperty;var Fr=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ki=(r,e)=>{for(var t in e)Lt(r,t,{get:e[t],enumerable:!0})},Ei=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of wi(e))!vi.call(r,s)&&s!==t&&Lt(r,s,{get:()=>e[s],enumerable:!(n=bi(e,s))||n.enumerable});return r};var _=(r,e,t)=>(t=r!=null?yi(Si(r)):{},Ei(e||!r||!r.__esModule?Lt(t,"default",{value:r,enumerable:!0}):t,r));var Ne=O($t=>{var it=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}},Mt=class extends it{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};$t.CommanderError=it;$t.InvalidArgumentError=Mt});var ot=O(Ut=>{var{InvalidArgumentError:Ii}=Ne(),Bt=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 Ii(`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 xi(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}Ut.Argument=Bt;Ut.humanReadableArgName=xi});var Ft=O(Gr=>{var{humanReadableArgName:Oi}=ot(),Wt=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=>Oi(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,p){if(p){let m=`${g.padEnd(n+o)}${p}`;return t.wrap(m,s-i,n+o)}return g}function a(g){return g.join(`
2
+ "use strict";var bi=Object.create;var jt=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var vi=Object.getPrototypeOf,ki=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),Ei=(r,e)=>{for(var t in e)jt(r,t,{get:e[t],enumerable:!0})},Ii=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Si(e))!ki.call(r,s)&&s!==t&&jt(r,s,{get:()=>e[s],enumerable:!(n=wi(e,s))||n.enumerable});return r};var _=(r,e,t)=>(t=r!=null?bi(vi(r)):{},Ii(e||!r||!r.__esModule?jt(t,"default",{value:r,enumerable:!0}):t,r));var Te=O(Mt=>{var st=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}},Lt=class extends st{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Mt.CommanderError=st;Mt.InvalidArgumentError=Lt});var it=O($t=>{var{InvalidArgumentError:xi}=Te(),Bt=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 xi(`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 Oi(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}$t.Argument=Bt;$t.humanReadableArgName=Oi});var Wt=O(Fr=>{var{humanReadableArgName:Ci}=it(),Ut=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=>Ci(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,p){if(p){let m=`${g.padEnd(n+o)}${p}`;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(p=>c(t.optionTerm(p),t.optionDescription(p)));g.length>0&&(l=l.concat(["Global Options:",a(g),""]))}let h=t.visibleCommands(e).map(g=>c(t.subcommandTerm(g),t.subcommandDescription(g)));return h.length>0&&(l=l.concat(["Commands:",a(h),""])),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",h=new RegExp(`
7
7
  |.{1,${c-1}}([${f}]|$)|[^${f}]+?([${f}]|$)`,"g"),g=l.match(h)||[];return a+g.map((p,m)=>p===`
8
8
  `?"":(m>0?d:"")+p.trimEnd()).join(`
9
- `)}};Gr.Help=Wt});var Vt=O(qt=>{var{InvalidArgumentError:Ci}=Ne(),Gt=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=Ai(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 Ci(`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 Pi(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Ht=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 Pi(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ai(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}}qt.Option=Gt;qt.DualOptions=Ht});var qr=O(Hr=>{function Ti(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 Ni(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=Ti(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=Ut});var qt=O(Ht=>{var{InvalidArgumentError:Pi}=Te(),Ft=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=Ti(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 Pi(`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 Ai(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Gt=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 Ai(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ti(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=Ft;Ht.DualOptions=Gt});var Hr=O(Gr=>{function Ni(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 Ri(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=Ni(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=Ni});var zr=O(Jr=>{var Ri=require("node:events").EventEmitter,Kt=require("node:child_process"),K=require("node:path"),Yt=require("node:fs"),C=require("node:process"),{Argument:Di,humanReadableArgName:ji}=ot(),{CommanderError:Jt}=Ne(),{Help:Li}=Ft(),{Option:Vr,DualOptions:Mi}=Vt(),{suggestSimilar:Kr}=qr(),zt=class r extends Ri{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 Li,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
- - 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 Di(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
- 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 Vr(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
- - 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 Vr)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=K.resolve(d,u);if(Yt.existsSync(f))return f;if(s.includes(K.extname(u)))return;let h=s.find(g=>Yt.existsSync(`${f}${g}`));if(h)return`${f}${h}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,c=this._executableDir||"";if(this._scriptPath){let d;try{d=Yt.realpathSync(this._scriptPath)}catch{d=this._scriptPath}c=K.resolve(K.dirname(d),c)}if(c){let d=i(c,o);if(!d&&!e._executableFile&&this._scriptPath){let u=K.basename(this._scriptPath,K.extname(this._scriptPath));u!==this._name&&(d=i(c,`${u}-${e._name}`))}o=d||o}n=s.includes(K.extname(o));let a;C.platform!=="win32"?n?(t.unshift(o),t=Yr(C.execArgv).concat(t),a=Kt.spawn(C.argv[0],t,{stdio:"inherit"})):a=Kt.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Yr(C.execArgv).concat(t),a=Kt.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
11
+ (Did you mean ${n[0]}?)`:""}Gr.suggestSimilar=Ri});var Jr=O(Yr=>{var Di=require("node:events").EventEmitter,Vt=require("node:child_process"),K=require("node:path"),Kt=require("node:fs"),C=require("node:process"),{Argument:ji,humanReadableArgName:Li}=it(),{CommanderError:Yt}=Te(),{Help:Mi}=Wt(),{Option:qr,DualOptions:Bi}=qt(),{suggestSimilar:Vr}=Hr(),Jt=class r extends Di{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 Mi,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
+ - 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 ji(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
+ 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 Yt(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
+ - 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=K.resolve(d,u);if(Kt.existsSync(f))return f;if(s.includes(K.extname(u)))return;let h=s.find(g=>Kt.existsSync(`${f}${g}`));if(h)return`${f}${h}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,c=this._executableDir||"";if(this._scriptPath){let d;try{d=Kt.realpathSync(this._scriptPath)}catch{d=this._scriptPath}c=K.resolve(K.dirname(d),c)}if(c){let d=i(c,o);if(!d&&!e._executableFile&&this._scriptPath){let u=K.basename(this._scriptPath,K.extname(this._scriptPath));u!==this._name&&(d=i(c,`${u}-${e._name}`))}o=d||o}n=s.includes(K.extname(o));let a;C.platform!=="win32"?n?(t.unshift(o),t=Kr(C.execArgv).concat(t),a=Vt.spawn(C.argv[0],t,{stdio:"inherit"})):a=Vt.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Kr(C.execArgv).concat(t),a=Vt.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 Yt(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
15
15
  - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
16
16
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
17
- - ${u}`;throw new Error(f)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)C.exit(1);else{let u=new Jt(1,"commander.executeSubCommandAsync","(error)");u.nestedError=d,l(u)}}),this.runningCommand=a}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let c=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,c)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,c)=>e(n,c,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(a){return a.length>1&&a[0]==="-"}let c=null;for(;i.length;){let a=i.shift();if(a==="--"){s===n&&s.push(a),s.push(...i);break}if(c&&!o(a)){this.emit(`option:${c.name()}`,a);continue}if(c=null,o(a)){let l=this._findOption(a);if(l){if(l.required){let d=i.shift();d===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,d)}else if(l.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${l.name()}`,d)}else this.emit(`option:${l.name()}`);c=l.variadic?l:null;continue}}if(a.length>2&&a[0]==="-"&&a[1]!=="-"){let l=this._findOption(`-${a[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,a.slice(2)):(this.emit(`option:${l.name()}`),i.unshift(`-${a.slice(2)}`));continue}}if(/^--[^=]+=/.test(a)){let l=a.indexOf("="),d=this._findOption(a.slice(0,l));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,a.slice(l+1));continue}}if(o(a)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(a)){t.push(a),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&a===this._getHelpCommand().name()){t.push(a),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(a),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(a),i.length>0&&s.push(...i);break}s.push(a)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
17
+ - ${u}`;throw new Error(f)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)C.exit(1);else{let u=new Yt(1,"commander.executeSubCommandAsync","(error)");u.nestedError=d,l(u)}}),this.runningCommand=a}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let c=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,c)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,c)=>e(n,c,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(a){return a.length>1&&a[0]==="-"}let c=null;for(;i.length;){let a=i.shift();if(a==="--"){s===n&&s.push(a),s.push(...i);break}if(c&&!o(a)){this.emit(`option:${c.name()}`,a);continue}if(c=null,o(a)){let l=this._findOption(a);if(l){if(l.required){let d=i.shift();d===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,d)}else if(l.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${l.name()}`,d)}else this.emit(`option:${l.name()}`);c=l.variadic?l:null;continue}}if(a.length>2&&a[0]==="-"&&a[1]!=="-"){let l=this._findOption(`-${a[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,a.slice(2)):(this.emit(`option:${l.name()}`),i.unshift(`-${a.slice(2)}`));continue}}if(/^--[^=]+=/.test(a)){let l=a.indexOf("="),d=this._findOption(a.slice(0,l));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,a.slice(l+1));continue}}if(o(a)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(a)){t.push(a),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&a===this._getHelpCommand().name()){t.push(a),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(a),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(a),i.length>0&&s.push(...i);break}s.push(a)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
18
18
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
19
19
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
20
- `),this.outputHelp({error:!0}));let n=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 Mi(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=Kr(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=Kr(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
- `),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=>ji(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=K.basename(e,K.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.
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 Bi(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
+ `),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=>Li(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=K.basename(e,K.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 Yr(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})}Jr.Command=zt});var en=O(B=>{var{Argument:Xr}=ot(),{Command:Xt}=zr(),{CommanderError:$i,InvalidArgumentError:Qr}=Ne(),{Help:Bi}=Ft(),{Option:Zr}=Vt();B.program=new Xt;B.createCommand=r=>new Xt(r);B.createOption=(r,e)=>new Zr(r,e);B.createArgument=(r,e)=>new Xr(r,e);B.Command=Xt;B.Option=Zr;B.Argument=Xr;B.Help=Bi;B.CommanderError=$i;B.InvalidArgumentError=Qr;B.InvalidOptionArgumentError=Qr});var ln=O(N=>{"use strict";var Qt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ui=Qt(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]),h=c.mode,g=c.uid,p=c.gid,m=parseInt("100",8),I=parseInt("010",8),v=parseInt("001",8),P=m|I;return!!(h&v||h&I&&f.has(p)||h&m&&g===l||h&P&&l===0)}}),Wi=Qt(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 h=f.toLowerCase(),g=a.substring(a.length-h.length).toLowerCase();if(h&&g===h)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Fi=Qt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),nn=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]})),Gi=N&&N.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),sn=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"&&nn(t,e,n[s]);return Gi(t,e),t}})(),Hi=N&&N.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&nn(e,r,t)};Object.defineProperty(N,"__esModule",{value:!0});N.sync=N.isexe=N.posix=N.win32=void 0;var on=sn(Ui());N.posix=on;var an=sn(Wi());N.win32=an;Hi(Fi(),N);var qi=process.env._ISEXE_TEST_PLATFORM_||process.platform,cn=qi==="win32"?an:on;N.isexe=cn.isexe;N.sync=cn.sync});var bn=O((zc,yn)=>{var{isexe:Vi,sync:Ki}=ln(),{join:Yi,delimiter:Ji,sep:dn,posix:un}=require("path"),pn=process.platform==="win32",hn=new RegExp(`[${un.sep}${dn===un.sep?"":dn}]`.replace(/(\\)/g,"\\$1")),zi=new RegExp(`^\\.${hn.source}`),fn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),gn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=Ji})=>{let s=r.match(hn)?[""]:[...pn?[process.cwd()]:[],...(e||"").split(n)];if(pn){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:[""]}},mn=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&zi.test(e)?e.slice(0,2):"")+Yi(t,e)},_n=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=gn(r,e),i=[];for(let o of t){let c=mn(o,r);for(let a of n){let l=c+a;if(await Vi(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 fn(r)},Xi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=gn(r,e),i=[];for(let o of t){let c=mn(o,r);for(let a of n){let l=c+a;if(Ki(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 fn(r)};yn.exports=_n;_n.sync=Xi});var Y=O((el,xn)=>{"use strict";var En=["nodebuffer","arraybuffer","fragments"],In=typeof Blob<"u";In&&En.push("blob");xn.exports={BINARY_TYPES:En,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:In,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var je=O((tl,ut)=>{"use strict";var{EMPTY_BUFFER:to}=Y(),tr=Buffer[Symbol.species];function ro(r,e){if(r.length===0)return to;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 tr(t.buffer,t.byteOffset,n):t}function On(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function Cn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function no(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function rr(r){if(rr.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new tr(r):ArrayBuffer.isView(r)?e=new tr(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),rr.readOnly=!1),e}ut.exports={concat:ro,mask:On,toArrayBuffer:no,toBuffer:rr,unmask:Cn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");ut.exports.mask=function(e,t,n,s,i){i<48?On(e,t,n,s,i):r.mask(e,t,n,s,i)},ut.exports.unmask=function(e,t){e.length<32?Cn(e,t):r.unmask(e,t)}}catch{}});var Tn=O((rl,An)=>{"use strict";var Pn=Symbol("kDone"),nr=Symbol("kRun"),sr=class{constructor(e){this[Pn]=()=>{this.pending--,this[nr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[nr]()}[nr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Pn])}}};An.exports=sr});var ye=O((nl,jn)=>{"use strict";var Le=require("zlib"),Nn=je(),so=Tn(),{kStatusCode:Rn}=Y(),io=Buffer[Symbol.species],oo=Buffer.from([0,0,255,255]),ht=Symbol("permessage-deflate"),J=Symbol("total-length"),me=Symbol("callback"),Q=Symbol("buffers"),_e=Symbol("error"),pt,ir=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,!pt){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;pt=new so(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[me];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){pt.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){pt.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"?Le.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Le.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[ht]=this,this._inflate[J]=0,this._inflate[Q]=[],this._inflate.on("error",co),this._inflate.on("data",Dn)}this._inflate[me]=n,this._inflate.write(e),t&&this._inflate.write(oo),this._inflate.flush(()=>{let i=this._inflate[_e];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Nn.concat(this._inflate[Q],this._inflate[J]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[J]=0,this._inflate[Q]=[],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"?Le.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Le.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[J]=0,this._deflate[Q]=[],this._deflate.on("data",ao)}this._deflate[me]=n,this._deflate.write(e),this._deflate.flush(Le.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Nn.concat(this._deflate[Q],this._deflate[J]);t&&(i=new io(i.buffer,i.byteOffset,i.length-4)),this._deflate[me]=null,this._deflate[J]=0,this._deflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};jn.exports=ir;function ao(r){this[Q].push(r),this[J]+=r.length}function Dn(r){if(this[J]+=r.length,this[ht]._maxPayload<1||this[J]<=this[ht]._maxPayload){this[Q].push(r);return}this[_e]=new RangeError("Max payload size exceeded"),this[_e].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[_e][Rn]=1009,this.removeListener("data",Dn),this.reset()}function co(r){if(this[ht]._inflate=null,this[_e]){this[me](this[_e]);return}r[Rn]=1007,this[me](r)}});var be=O((sl,ft)=>{"use strict";var{isUtf8:Ln}=require("buffer"),{hasBlob:lo}=Y(),uo=[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 po(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function or(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 ho(r){return lo&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ft.exports={isBlob:ho,isValidStatusCode:po,isValidUTF8:or,tokenChars:uo};if(Ln)ft.exports.isValidUTF8=function(r){return r.length<24?or(r):Ln(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ft.exports.isValidUTF8=function(e){return e.length<32?or(e):r(e)}}catch{}});var ur=O((il,Gn)=>{"use strict";var{Writable:fo}=require("stream"),Mn=ye(),{BINARY_TYPES:go,EMPTY_BUFFER:$n,kStatusCode:mo,kWebSocket:_o}=Y(),{concat:ar,toArrayBuffer:yo,unmask:bo}=je(),{isValidStatusCode:wo,isValidUTF8:Bn}=be(),gt=Buffer[Symbol.species],U=0,Un=1,Wn=2,Fn=3,cr=4,lr=5,mt=6,dr=class extends fo{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||go[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[_o]=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=U}_write(e,t,n){if(this._opcode===8&&this._state==U)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 gt(n.buffer,n.byteOffset+e,n.length-e),new gt(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 gt(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 U:this.getInfo(e);break;case Un:this.getPayloadLength16(e);break;case Wn:this.getPayloadLength64(e);break;case Fn:this.getMask();break;case cr:this.getData(e);break;case lr:case mt: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[Mn.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=Un: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=Fn:this._state=cr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=cr}getData(e){let t=$n;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&&bo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=lr,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Mn.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===U&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=U;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=ar(n,t):this._binaryType==="arraybuffer"?s=yo(ar(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=U):(this._state=mt,setImmediate(()=>{this.emit("message",s,!0),this._state=U,this.startLoop(e)}))}else{let s=ar(n,t);if(!this._skipUTF8Validation&&!Bn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===lr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=U):(this._state=mt,setImmediate(()=>{this.emit("message",s,!1),this._state=U,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,$n),this.end();else{let n=e.readUInt16BE(0);if(!wo(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new gt(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Bn(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=U;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=U):(this._state=mt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=U,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[mo]=s,o}};Gn.exports=dr});var fr=O((al,Vn)=>{"use strict";var{Duplex:ol}=require("stream"),{randomFillSync:So}=require("crypto"),Hn=ye(),{EMPTY_BUFFER:vo,kWebSocket:ko,NOOP:Eo}=Y(),{isBlob:we,isValidStatusCode:Io}=be(),{mask:qn,toBuffer:ne}=je(),W=Symbol("kByteLength"),xo=Buffer.alloc(4),_t=8*1024,se,Se=_t,G=0,Oo=1,Co=2,pr=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=G,this.onerror=Eo,this[ko]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||xo,t.generateMask?t.generateMask(n):(Se===_t&&(se===void 0&&(se=Buffer.alloc(_t)),So(se,0,_t),Se=0),n[0]=se[Se++],n[1]=se[Se++],n[2]=se[Se++],n[3]=se[Se++]),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?(qn(e,n,l,i,c),[l]):(qn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=vo;else{if(typeof e!="number"||!Io(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!==G?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):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.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};we(e)?this._state!==G?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==G?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):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.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};we(e)?this._state!==G?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==G?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):we(e)?(c=e.size,a=!1):(e=ne(e),c=e.length,a=ne.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};we(e)?this._state!==G?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==G?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=Co,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(hr,this,c,s);return}this._bufferedBytes-=n[W];let o=ne(i);t?this.dispatch(o,t,n,s):(this._state=G,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Po,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=Oo,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");hr(this,a,s);return}this._bufferedBytes-=n[W],this._state=G,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===G&&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)}};Vn.exports=pr;function hr(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 Po(r,e,t){hr(r,e,t),r.onerror(e)}});var ts=O((cl,es)=>{"use strict";var{kForOnEventAttribute:Me,kListener:gr}=Y(),Kn=Symbol("kCode"),Yn=Symbol("kData"),Jn=Symbol("kError"),zn=Symbol("kMessage"),Xn=Symbol("kReason"),ve=Symbol("kTarget"),Qn=Symbol("kType"),Zn=Symbol("kWasClean"),z=class{constructor(e){this[ve]=null,this[Qn]=e}get target(){return this[ve]}get type(){return this[Qn]}};Object.defineProperty(z.prototype,"target",{enumerable:!0});Object.defineProperty(z.prototype,"type",{enumerable:!0});var ie=class extends z{constructor(e,t={}){super(e),this[Kn]=t.code===void 0?0:t.code,this[Xn]=t.reason===void 0?"":t.reason,this[Zn]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Kn]}get reason(){return this[Xn]}get wasClean(){return this[Zn]}};Object.defineProperty(ie.prototype,"code",{enumerable:!0});Object.defineProperty(ie.prototype,"reason",{enumerable:!0});Object.defineProperty(ie.prototype,"wasClean",{enumerable:!0});var ke=class extends z{constructor(e,t={}){super(e),this[Jn]=t.error===void 0?null:t.error,this[zn]=t.message===void 0?"":t.message}get error(){return this[Jn]}get message(){return this[zn]}};Object.defineProperty(ke.prototype,"error",{enumerable:!0});Object.defineProperty(ke.prototype,"message",{enumerable:!0});var $e=class extends z{constructor(e,t={}){super(e),this[Yn]=t.data===void 0?null:t.data}get data(){return this[Yn]}};Object.defineProperty($e.prototype,"data",{enumerable:!0});var Ao={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Me]&&s[gr]===e&&!s[Me])return;let n;if(r==="message")n=function(i,o){let c=new $e("message",{data:o?i:i.toString()});c[ve]=this,yt(e,this,c)};else if(r==="close")n=function(i,o){let c=new ie("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[ve]=this,yt(e,this,c)};else if(r==="error")n=function(i){let o=new ke("error",{error:i,message:i.message});o[ve]=this,yt(e,this,o)};else if(r==="open")n=function(){let i=new z("open");i[ve]=this,yt(e,this,i)};else return;n[Me]=!!t[Me],n[gr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[gr]===e&&!t[Me]){this.removeListener(r,t);break}}};es.exports={CloseEvent:ie,ErrorEvent:ke,Event:z,EventTarget:Ao,MessageEvent:$e};function yt(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var bt=O((ll,rs)=>{"use strict";var{tokenChars:Be}=be();function V(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function To(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&&Be[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 h=r.slice(a,d);l===44?(V(e,h,t),t=Object.create(null)):o=h,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&Be[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),V(t,r.slice(a,d),!0),l===44&&(V(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(Be[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Be[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&&Be[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 h=r.slice(a,d);n&&(h=h.replace(/\\/g,""),n=!1),V(t,c,h),l===44&&(V(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?V(e,f,t):(c===void 0?V(t,f,!0):n?V(t,c,f.replace(/\\/g,"")):V(t,c,f),V(e,o,t)),e}function No(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(", ")}rs.exports={format:No,parse:To}});var kt=O((pl,fs)=>{"use strict";var Ro=require("events"),Do=require("https"),jo=require("http"),is=require("net"),Lo=require("tls"),{randomBytes:Mo,createHash:$o}=require("crypto"),{Duplex:dl,Readable:ul}=require("stream"),{URL:mr}=require("url"),Z=ye(),Bo=ur(),Uo=fr(),{isBlob:Wo}=be(),{BINARY_TYPES:ns,CLOSE_TIMEOUT:Fo,EMPTY_BUFFER:wt,GUID:Go,kForOnEventAttribute:_r,kListener:Ho,kStatusCode:qo,kWebSocket:R,NOOP:os}=Y(),{EventTarget:{addEventListener:Vo,removeEventListener:Ko}}=ts(),{format:Yo,parse:Jo}=bt(),{toBuffer:zo}=je(),as=Symbol("kAborted"),yr=[8,13],X=["CONNECTING","OPEN","CLOSING","CLOSED"],Xo=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,x=class r extends Ro{constructor(e,t,n){super(),this._binaryType=ns[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=wt,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]),cs(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){ns.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 Bo({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Uo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[R]=this,i[R]=this,e[R]=this,s.on("conclude",ea),s.on("drain",ta),s.on("error",ra),s.on("message",na),s.on("ping",sa),s.on("pong",ia),i.onerror=oa,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",us),e.on("data",vt),e.on("end",ps),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[Z.extensionName]&&this._extensions[Z.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){$(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())}),ds(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){br(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||wt,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){br(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||wt,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){br(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Z.extensionName]||(s.compress=!1),this._sender.send(e||wt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){$(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(x.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(x.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[_r])return e[Ho];return null},set(e){for(let t of this.listeners(r))if(t[_r]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[_r]:!0})}})});x.prototype.addEventListener=Vo;x.prototype.removeEventListener=Ko;fs.exports=x;function cs(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Fo,protocolVersion:yr[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,!yr.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${yr.join(", ")})`);let i;if(e instanceof mr)i=e;else try{i=new mr(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 p=new SyntaxError(a);if(r._redirects===0)throw p;St(r,p);return}let l=o?443:80,d=Mo(16).toString("base64"),u=o?Do.request:jo.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?Zo:Qo),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&&(h=new Z({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Yo({[Z.extensionName]:h.offer()})),t.length){for(let p of t){if(typeof p!="string"||!Xo.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}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 p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let p=n&&n.headers;if(n={...n,headers:{}},p)for(let[m,I]of Object.entries(p))n.headers[m.toLowerCase()]=I}else if(r.listenerCount("redirect")===0){let p=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!p||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||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",()=>{$(r,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[as]||(g=r._req=null,St(r,p))}),g.on("response",p=>{let m=p.headers.location,I=p.statusCode;if(m&&s.followRedirects&&I>=300&&I<400){if(++r._redirects>s.maxRedirects){$(r,g,"Maximum redirects exceeded");return}g.abort();let v;try{v=new mr(m,e)}catch{let j=new SyntaxError(`Invalid URL: ${m}`);St(r,j);return}cs(r,v,t,n)}else r.emit("unexpected-response",g,p)||$(r,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,I)=>{if(r.emit("upgrade",p),r.readyState!==x.CONNECTING)return;g=r._req=null;let v=p.headers.upgrade;if(v===void 0||v.toLowerCase()!=="websocket"){$(r,m,"Invalid Upgrade header");return}let P=$o("sha1").update(d+Go).digest("base64");if(p.headers["sec-websocket-accept"]!==P){$(r,m,"Invalid Sec-WebSocket-Accept header");return}let j=p.headers["sec-websocket-protocol"],q;if(j!==void 0?f.size?f.has(j)||(q="Server sent an invalid subprotocol"):q="Server sent a subprotocol but none was requested":f.size&&(q="Server sent no subprotocol"),q){$(r,m,q);return}j&&(r._protocol=j);let k=p.headers["sec-websocket-extensions"];if(k!==void 0){if(!h){$(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S;try{S=Jo(k)}catch{$(r,m,"Invalid Sec-WebSocket-Extensions header");return}let b=Object.keys(S);if(b.length!==1||b[0]!==Z.extensionName){$(r,m,"Server indicated an extension that was not requested");return}try{h.accept(S[Z.extensionName])}catch{$(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Z.extensionName]=h}r.setSocket(m,I,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function St(r,e){r._readyState=x.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Qo(r){return r.path=r.socketPath,is.connect(r)}function Zo(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=is.isIP(r.host)?"":r.host),Lo.connect(r)}function $(r,e,t){r._readyState=x.CLOSING;let n=new Error(t);Error.captureStackTrace(n,$),e.setHeader?(e[as]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(St,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function br(r,e,t){if(e){let n=Wo(e)?e.size:zo(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${X[r.readyState]})`);process.nextTick(t,n)}}function ea(r,e){let t=this[R];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[R]!==void 0&&(t._socket.removeListener("data",vt),process.nextTick(ls,t._socket),r===1005?t.close():t.close(r,e))}function ta(){let r=this[R];r.isPaused||r._socket.resume()}function ra(r){let e=this[R];e._socket[R]!==void 0&&(e._socket.removeListener("data",vt),process.nextTick(ls,e._socket),e.close(r[qo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function ss(){this[R].emitClose()}function na(r,e){this[R].emit("message",r,e)}function sa(r){let e=this[R];e._autoPong&&e.pong(r,!this._isServer,os),e.emit("ping",r)}function ia(r){this[R].emit("pong",r)}function ls(r){r.resume()}function oa(r){let e=this[R];e.readyState!==x.CLOSED&&(e.readyState===x.OPEN&&(e._readyState=x.CLOSING,ds(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function ds(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function us(){let r=this[R];if(this.removeListener("close",us),this.removeListener("data",vt),this.removeListener("end",ps),r._readyState=x.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[R]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",ss),r._receiver.on("finish",ss))}function vt(r){this[R]._receiver.write(r)||this.pause()}function ps(){let r=this[R];r._readyState=x.CLOSING,r._receiver.end(),this.end()}function hs(){let r=this[R];this.removeListener("error",hs),this.on("error",os),r&&(r._readyState=x.CLOSING,this.destroy())}});var ys=O((fl,_s)=>{"use strict";var hl=kt(),{Duplex:aa}=require("stream");function gs(r){r.emit("close")}function ca(){!this.destroyed&&this._writableState.finished&&this.destroy()}function ms(r){this.removeListener("error",ms),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function la(r,e){let t=!0,n=new aa({...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(gs,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(gs,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",ca),n.on("error",ms),n}_s.exports=la});var wr=O((gl,bs)=>{"use strict";var{tokenChars:da}=be();function ua(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&&da[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}bs.exports={parse:ua}});var xs=O((_l,Is)=>{"use strict";var pa=require("events"),Et=require("http"),{Duplex:ml}=require("stream"),{createHash:ha}=require("crypto"),ws=bt(),oe=ye(),fa=wr(),ga=kt(),{CLOSE_TIMEOUT:ma,GUID:_a,kWebSocket:ya}=Y(),ba=/^[+/0-9A-Za-z]{22}==$/,Ss=0,vs=1,Es=2,Sr=class extends pa{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:ma,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ga,...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=Et.createServer((n,s)=>{let i=Et.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=wa(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=Ss}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(Ue,this);return}if(e&&this.once("close",e),this._state!==vs)if(this._state=vs,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(Ue,this):process.nextTick(Ue,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Ue(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",ks);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){ae(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){ae(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!ba.test(i)){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){ae(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=fa.parse(a)}catch{ae(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 oe({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let h=ws.parse(d);h[oe.extensionName]&&(f.accept(h[oe.extensionName]),u[oe.extensionName]=f)}catch{ae(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,(h,g,p,m)=>{if(!h)return We(t,g||401,p,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[ya])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Ss)return We(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ha("sha1").update(t+_a).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[oe.extensionName]){let u=e[oe.extensionName].params,f=ws.format({[oe.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 Kr(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})}Yr.Command=Jt});var Zr=O(U=>{var{Argument:zr}=it(),{Command:zt}=Jr(),{CommanderError:$i,InvalidArgumentError:Xr}=Te(),{Help:Ui}=Wt(),{Option:Qr}=qt();U.program=new zt;U.createCommand=r=>new zt(r);U.createOption=(r,e)=>new Qr(r,e);U.createArgument=(r,e)=>new zr(r,e);U.Command=zt;U.Option=Qr;U.Argument=zr;U.Help=Ui;U.CommanderError=$i;U.InvalidArgumentError=Xr;U.InvalidOptionArgumentError=Xr});var cn=O(N=>{"use strict";var Xt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Wi=Xt(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]),h=c.mode,g=c.uid,p=c.gid,m=parseInt("100",8),I=parseInt("010",8),S=parseInt("001",8),P=m|I;return!!(h&S||h&I&&f.has(p)||h&m&&g===l||h&P&&l===0)}}),Fi=Xt(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 h=f.toLowerCase(),g=a.substring(a.length-h.length).toLowerCase();if(h&&g===h)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Gi=Xt(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]})),Hi=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 Hi(t,e),t}})(),qi=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(Wi());N.posix=sn;var on=nn(Fi());N.win32=on;qi(Gi(),N);var Vi=process.env._ISEXE_TEST_PLATFORM_||process.platform,an=Vi==="win32"?on:sn;N.isexe=an.isexe;N.sync=an.sync});var yn=O((Qc,_n)=>{var{isexe:Ki,sync:Yi}=cn(),{join:Ji,delimiter:zi,sep:ln,posix:dn}=require("path"),un=process.platform==="win32",pn=new RegExp(`[${dn.sep}${ln===dn.sep?"":ln}]`.replace(/(\\)/g,"\\$1")),Xi=new RegExp(`^\\.${pn.source}`),hn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),fn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=zi})=>{let s=r.match(pn)?[""]:[...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&&Xi.test(e)?e.slice(0,2):"")+Ji(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 Ki(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 hn(r)},Qi=(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(Yi(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 hn(r)};_n.exports=mn;mn.sync=Qi});var Y=O((rl,In)=>{"use strict";var kn=["nodebuffer","arraybuffer","fragments"],En=typeof Blob<"u";En&&kn.push("blob");In.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 De=O((nl,dt)=>{"use strict";var{EMPTY_BUFFER:ro}=Y(),er=Buffer[Symbol.species];function no(r,e){if(r.length===0)return ro;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 er(t.buffer,t.byteOffset,n):t}function xn(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 so(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function tr(r){if(tr.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new er(r):ArrayBuffer.isView(r)?e=new er(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),tr.readOnly=!1),e}dt.exports={concat:no,mask:xn,toArrayBuffer:so,toBuffer:tr,unmask:On};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");dt.exports.mask=function(e,t,n,s,i){i<48?xn(e,t,n,s,i):r.mask(e,t,n,s,i)},dt.exports.unmask=function(e,t){e.length<32?On(e,t):r.unmask(e,t)}}catch{}});var An=O((sl,Pn)=>{"use strict";var Cn=Symbol("kDone"),rr=Symbol("kRun"),nr=class{constructor(e){this[Cn]=()=>{this.pending--,this[rr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[rr]()}[rr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Cn])}}};Pn.exports=nr});var ye=O((il,Dn)=>{"use strict";var je=require("zlib"),Tn=De(),io=An(),{kStatusCode:Nn}=Y(),oo=Buffer[Symbol.species],ao=Buffer.from([0,0,255,255]),pt=Symbol("permessage-deflate"),J=Symbol("total-length"),me=Symbol("callback"),Q=Symbol("buffers"),_e=Symbol("error"),ut,sr=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,!ut){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ut=new io(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[me];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){ut.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){ut.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[pt]=this,this._inflate[J]=0,this._inflate[Q]=[],this._inflate.on("error",lo),this._inflate.on("data",Rn)}this._inflate[me]=n,this._inflate.write(e),t&&this._inflate.write(ao),this._inflate.flush(()=>{let i=this._inflate[_e];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Tn.concat(this._inflate[Q],this._inflate[J]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[J]=0,this._inflate[Q]=[],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[J]=0,this._deflate[Q]=[],this._deflate.on("data",co)}this._deflate[me]=n,this._deflate.write(e),this._deflate.flush(je.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Tn.concat(this._deflate[Q],this._deflate[J]);t&&(i=new oo(i.buffer,i.byteOffset,i.length-4)),this._deflate[me]=null,this._deflate[J]=0,this._deflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Dn.exports=sr;function co(r){this[Q].push(r),this[J]+=r.length}function Rn(r){if(this[J]+=r.length,this[pt]._maxPayload<1||this[J]<=this[pt]._maxPayload){this[Q].push(r);return}this[_e]=new RangeError("Max payload size exceeded"),this[_e].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[_e][Nn]=1009,this.removeListener("data",Rn),this.reset()}function lo(r){if(this[pt]._inflate=null,this[_e]){this[me](this[_e]);return}r[Nn]=1007,this[me](r)}});var be=O((ol,ht)=>{"use strict";var{isUtf8:jn}=require("buffer"),{hasBlob:uo}=Y(),po=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function ho(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function ir(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 fo(r){return uo&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ht.exports={isBlob:fo,isValidStatusCode:ho,isValidUTF8:ir,tokenChars:po};if(jn)ht.exports.isValidUTF8=function(r){return r.length<24?ir(r):jn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ht.exports.isValidUTF8=function(e){return e.length<32?ir(e):r(e)}}catch{}});var dr=O((al,Fn)=>{"use strict";var{Writable:go}=require("stream"),Ln=ye(),{BINARY_TYPES:mo,EMPTY_BUFFER:Mn,kStatusCode:_o,kWebSocket:yo}=Y(),{concat:or,toArrayBuffer:bo,unmask:wo}=De(),{isValidStatusCode:So,isValidUTF8:Bn}=be(),ft=Buffer[Symbol.species],W=0,$n=1,Un=2,Wn=3,ar=4,cr=5,gt=6,lr=class extends go{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||mo[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[yo]=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=W}_write(e,t,n){if(this._opcode===8&&this._state==W)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 ft(n.buffer,n.byteOffset+e,n.length-e),new ft(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 ft(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 W:this.getInfo(e);break;case $n:this.getPayloadLength16(e);break;case Un:this.getPayloadLength64(e);break;case Wn:this.getMask();break;case ar:this.getData(e);break;case cr:case gt: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=$n: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=ar}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=ar}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&&wo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=cr,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===W&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=W;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=or(n,t):this._binaryType==="arraybuffer"?s=bo(or(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!0),this._state=W,this.startLoop(e)}))}else{let s=or(n,t);if(!this._skipUTF8Validation&&!Bn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===cr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!1),this._state=W,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(!So(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ft(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Bn(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=W;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=W):(this._state=gt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=W,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[_o]=s,o}};Fn.exports=lr});var hr=O((ll,qn)=>{"use strict";var{Duplex:cl}=require("stream"),{randomFillSync:vo}=require("crypto"),Gn=ye(),{EMPTY_BUFFER:ko,kWebSocket:Eo,NOOP:Io}=Y(),{isBlob:we,isValidStatusCode:xo}=be(),{mask:Hn,toBuffer:ne}=De(),F=Symbol("kByteLength"),Oo=Buffer.alloc(4),mt=8*1024,se,Se=mt,H=0,Co=1,Po=2,ur=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=H,this.onerror=Io,this[Eo]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Oo,t.generateMask?t.generateMask(n):(Se===mt&&(se===void 0&&(se=Buffer.alloc(mt)),vo(se,0,mt),Se=0),n[0]=se[Se++],n[1]=se[Se++],n[2]=se[Se++],n[3]=se[Se++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[F]!==void 0?c=t[F]:(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?(Hn(e,n,l,i,c),[l]):(Hn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=ko;else{if(typeof e!="number"||!xo(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={[F]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==H?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):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?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):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Gn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):we(e)?(c=e.size,a=!1):(e=ne(e),c=e.length,a=ne.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={[F]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==H?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[F],this._state=Po,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(pr,this,c,s);return}this._bufferedBytes-=n[F];let o=ne(i);t?this.dispatch(o,t,n,s):(this._state=H,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Ao,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Gn.extensionName];this._bufferedBytes+=n[F],this._state=Co,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");pr(this,a,s);return}this._bufferedBytes-=n[F],this._state=H,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===H&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][F],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][F],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=ur;function pr(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 Ao(r,e,t){pr(r,e,t),r.onerror(e)}});var es=O((dl,Zn)=>{"use strict";var{kForOnEventAttribute:Le,kListener:fr}=Y(),Vn=Symbol("kCode"),Kn=Symbol("kData"),Yn=Symbol("kError"),Jn=Symbol("kMessage"),zn=Symbol("kReason"),ve=Symbol("kTarget"),Xn=Symbol("kType"),Qn=Symbol("kWasClean"),z=class{constructor(e){this[ve]=null,this[Xn]=e}get target(){return this[ve]}get type(){return this[Xn]}};Object.defineProperty(z.prototype,"target",{enumerable:!0});Object.defineProperty(z.prototype,"type",{enumerable:!0});var ie=class extends z{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(ie.prototype,"code",{enumerable:!0});Object.defineProperty(ie.prototype,"reason",{enumerable:!0});Object.defineProperty(ie.prototype,"wasClean",{enumerable:!0});var ke=class extends z{constructor(e,t={}){super(e),this[Yn]=t.error===void 0?null:t.error,this[Jn]=t.message===void 0?"":t.message}get error(){return this[Yn]}get message(){return this[Jn]}};Object.defineProperty(ke.prototype,"error",{enumerable:!0});Object.defineProperty(ke.prototype,"message",{enumerable:!0});var Me=class extends z{constructor(e,t={}){super(e),this[Kn]=t.data===void 0?null:t.data}get data(){return this[Kn]}};Object.defineProperty(Me.prototype,"data",{enumerable:!0});var To={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Le]&&s[fr]===e&&!s[Le])return;let n;if(r==="message")n=function(i,o){let c=new Me("message",{data:o?i:i.toString()});c[ve]=this,_t(e,this,c)};else if(r==="close")n=function(i,o){let c=new ie("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[ve]=this,_t(e,this,c)};else if(r==="error")n=function(i){let o=new ke("error",{error:i,message:i.message});o[ve]=this,_t(e,this,o)};else if(r==="open")n=function(){let i=new z("open");i[ve]=this,_t(e,this,i)};else return;n[Le]=!!t[Le],n[fr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[fr]===e&&!t[Le]){this.removeListener(r,t);break}}};Zn.exports={CloseEvent:ie,ErrorEvent:ke,Event:z,EventTarget:To,MessageEvent:Me};function _t(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var yt=O((ul,ts)=>{"use strict";var{tokenChars:Be}=be();function V(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function No(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&&Be[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 h=r.slice(a,d);l===44?(V(e,h,t),t=Object.create(null)):o=h,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&Be[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),V(t,r.slice(a,d),!0),l===44&&(V(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(Be[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Be[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&&Be[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 h=r.slice(a,d);n&&(h=h.replace(/\\/g,""),n=!1),V(t,c,h),l===44&&(V(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?V(e,f,t):(c===void 0?V(t,f,!0):n?V(t,c,f.replace(/\\/g,"")):V(t,c,f),V(e,o,t)),e}function Ro(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:Ro,parse:No}});var vt=O((fl,hs)=>{"use strict";var Do=require("events"),jo=require("https"),Lo=require("http"),ss=require("net"),Mo=require("tls"),{randomBytes:Bo,createHash:$o}=require("crypto"),{Duplex:pl,Readable:hl}=require("stream"),{URL:gr}=require("url"),Z=ye(),Uo=dr(),Wo=hr(),{isBlob:Fo}=be(),{BINARY_TYPES:rs,CLOSE_TIMEOUT:Go,EMPTY_BUFFER:bt,GUID:Ho,kForOnEventAttribute:mr,kListener:qo,kStatusCode:Vo,kWebSocket:R,NOOP:is}=Y(),{EventTarget:{addEventListener:Ko,removeEventListener:Yo}}=es(),{format:Jo,parse:zo}=yt(),{toBuffer:Xo}=De(),os=Symbol("kAborted"),_r=[8,13],X=["CONNECTING","OPEN","CLOSING","CLOSED"],Qo=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,x=class r extends Do{constructor(e,t,n){super(),this._binaryType=rs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=bt,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 Uo({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Wo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[R]=this,i[R]=this,e[R]=this,s.on("conclude",ta),s.on("drain",ra),s.on("error",na),s.on("message",sa),s.on("ping",ia),s.on("pong",oa),i.onerror=aa,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",ds),e.on("data",St),e.on("end",us),e.on("error",ps),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[Z.extensionName]&&this._extensions[Z.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){B(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){yr(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||bt,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){yr(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||bt,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){yr(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Z.extensionName]||(s.compress=!1),this._sender.send(e||bt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){B(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(x.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(x.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[mr])return e[qo];return null},set(e){for(let t of this.listeners(r))if(t[mr]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[mr]:!0})}})});x.prototype.addEventListener=Ko;x.prototype.removeEventListener=Yo;hs.exports=x;function as(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Go,protocolVersion:_r[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,!_r.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${_r.join(", ")})`);let i;if(e instanceof gr)i=e;else try{i=new gr(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 p=new SyntaxError(a);if(r._redirects===0)throw p;wt(r,p);return}let l=o?443:80,d=Bo(16).toString("base64"),u=o?jo.request:Lo.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?ea:Zo),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&&(h=new Z({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Jo({[Z.extensionName]:h.offer()})),t.length){for(let p of t){if(typeof p!="string"||!Qo.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}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 p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let p=n&&n.headers;if(n={...n,headers:{}},p)for(let[m,I]of Object.entries(p))n.headers[m.toLowerCase()]=I}else if(r.listenerCount("redirect")===0){let p=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!p||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||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",()=>{B(r,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[os]||(g=r._req=null,wt(r,p))}),g.on("response",p=>{let m=p.headers.location,I=p.statusCode;if(m&&s.followRedirects&&I>=300&&I<400){if(++r._redirects>s.maxRedirects){B(r,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new gr(m,e)}catch{let j=new SyntaxError(`Invalid URL: ${m}`);wt(r,j);return}as(r,S,t,n)}else r.emit("unexpected-response",g,p)||B(r,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,I)=>{if(r.emit("upgrade",p),r.readyState!==x.CONNECTING)return;g=r._req=null;let S=p.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){B(r,m,"Invalid Upgrade header");return}let P=$o("sha1").update(d+Ho).digest("base64");if(p.headers["sec-websocket-accept"]!==P){B(r,m,"Invalid Sec-WebSocket-Accept header");return}let j=p.headers["sec-websocket-protocol"],$;if(j!==void 0?f.size?f.has(j)||($="Server sent an invalid subprotocol"):$="Server sent a subprotocol but none was requested":f.size&&($="Server sent no subprotocol"),$){B(r,m,$);return}j&&(r._protocol=j);let he=p.headers["sec-websocket-extensions"];if(he!==void 0){if(!h){B(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let b;try{b=zo(he)}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}let y=Object.keys(b);if(y.length!==1||y[0]!==Z.extensionName){B(r,m,"Server indicated an extension that was not requested");return}try{h.accept(b[Z.extensionName])}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Z.extensionName]=h}r.setSocket(m,I,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function wt(r,e){r._readyState=x.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Zo(r){return r.path=r.socketPath,ss.connect(r)}function ea(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=ss.isIP(r.host)?"":r.host),Mo.connect(r)}function B(r,e,t){r._readyState=x.CLOSING;let n=new Error(t);Error.captureStackTrace(n,B),e.setHeader?(e[os]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(wt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function yr(r,e,t){if(e){let n=Fo(e)?e.size:Xo(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${X[r.readyState]})`);process.nextTick(t,n)}}function ta(r,e){let t=this[R];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[R]!==void 0&&(t._socket.removeListener("data",St),process.nextTick(cs,t._socket),r===1005?t.close():t.close(r,e))}function ra(){let r=this[R];r.isPaused||r._socket.resume()}function na(r){let e=this[R];e._socket[R]!==void 0&&(e._socket.removeListener("data",St),process.nextTick(cs,e._socket),e.close(r[Vo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function ns(){this[R].emitClose()}function sa(r,e){this[R].emit("message",r,e)}function ia(r){let e=this[R];e._autoPong&&e.pong(r,!this._isServer,is),e.emit("ping",r)}function oa(r){this[R].emit("pong",r)}function cs(r){r.resume()}function aa(r){let e=this[R];e.readyState!==x.CLOSED&&(e.readyState===x.OPEN&&(e._readyState=x.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[R];if(this.removeListener("close",ds),this.removeListener("data",St),this.removeListener("end",us),r._readyState=x.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[R]=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 St(r){this[R]._receiver.write(r)||this.pause()}function us(){let r=this[R];r._readyState=x.CLOSING,r._receiver.end(),this.end()}function ps(){let r=this[R];this.removeListener("error",ps),this.on("error",is),r&&(r._readyState=x.CLOSING,this.destroy())}});var _s=O((ml,ms)=>{"use strict";var gl=vt(),{Duplex:ca}=require("stream");function fs(r){r.emit("close")}function la(){!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 da(r,e){let t=!0,n=new ca({...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",la),n.on("error",gs),n}ms.exports=da});var br=O((_l,ys)=>{"use strict";var{tokenChars:ua}=be();function pa(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&&ua[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:pa}});var Is=O((bl,Es)=>{"use strict";var ha=require("events"),kt=require("http"),{Duplex:yl}=require("stream"),{createHash:fa}=require("crypto"),bs=yt(),oe=ye(),ga=br(),ma=vt(),{CLOSE_TIMEOUT:_a,GUID:ya,kWebSocket:ba}=Y(),wa=/^[+/0-9A-Za-z]{22}==$/,ws=0,Ss=1,ks=2,wr=class extends ha{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:_a,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ma,...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=kt.createServer((n,s)=>{let i=kt.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=Sa(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($e,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($e,this):process.nextTick($e,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{$e(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"){ae(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){ae(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!wa.test(i)){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){ae(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=ga.parse(a)}catch{ae(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 oe({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let h=bs.parse(d);h[oe.extensionName]&&(f.accept(h[oe.extensionName]),u[oe.extensionName]=f)}catch{ae(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,(h,g,p,m)=>{if(!h)return Ue(t,g||401,p,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[ba])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: ${fa("sha1").update(t+ya).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[oe.extensionName]){let u=e[oe.extensionName].params,f=bs.format({[oe.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",ks),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(Ue,this)})),c(d,s)}};Is.exports=Sr;function wa(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 Ue(r){r._state=Es,r.emit("close")}function ks(){this.destroy()}function We(r,e,t,n){t=t||Et.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} ${Et.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($e,this)})),c(d,s)}};Es.exports=wr;function Sa(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 $e(r){r._state=ks,r.emit("close")}function vs(){this.destroy()}function Ue(r,e,t,n){t=t||kt.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} ${kt.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 ae(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,ae),r.emit("wsClientError",o,t,e)}else We(t,n,s,i)}});function He(){return process.env.BRIDGE_PROFILE||void 0}function Ct(){let r=He();return r?ce.default.join(Us,"profiles",r,"settings.json"):ce.default.join(Us,"settings.json")}function qe(){let r=He(),e=r?`${r}.daemon.lock`:"daemon.lock";return ce.default.join((0,Ge.homedir)(),".bridge",e)}function xe(){let r=He();return r?`com.jerico.bridge-agent.${r}.plist`:"com.jerico.bridge-agent.plist"}function Pt(){let r=He(),e=r?`-${r}`:"";return{out:ce.default.join((0,Ge.homedir)(),`bridge-daemon${e}.log`),err:ce.default.join((0,Ge.homedir)(),`bridge-daemon${e}.err.log`)}}function Ws(){let r=He();return r?`:profile:${r}`:""}var Ge,ce,Us,Ve=Fr(()=>{"use strict";Ge=require("node:os"),ce=_(require("path")),Us=ce.default.join((0,Ge.homedir)(),".jerico")});var Gs={};ki(Gs,{getConfigPath:()=>Ct,loadConfig:()=>le,loadProjectSettings:()=>Or,saveConfig:()=>de});function Ke(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 le(){let r=Ct(),e=H.default.existsSync(r)?r:Ta;if(!H.default.existsSync(e)){let h=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${h}`),process.exit(1)}let 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(h=>h.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(h){console.warn("[daemon] config.url_migration: failed to save migrated config",String(h))}}(!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=Ke(s,"agentPaths"),f=Ke(s,"projectPaths");return u&&(d.agentPaths=u),f&&(d.projectPaths=f),d}function de(r){let e=Ct(),t=At.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 Or(r){let e=At.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=Ke(s,"hooks"),c=Ke(s,"env"),a=Ke(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,At,Fs,Ta,Oe=Fr(()=>{"use strict";H=_(require("fs")),At=_(require("path")),Fs=_(require("os"));Ve();Ta=At.default.join(Fs.default.homedir(),".bridge","config.json")});var tn=_(en(),1),{program:$c,createCommand:Bc,createArgument:Uc,createOption:Wc,CommanderError:Fc,InvalidArgumentError:Gc,InvalidOptionArgumentError:Hc,Command:rn,Argument:qc,Option:Vc,Help:Kc}=tn.default;var si=require("node:http"),he=require("node:child_process"),T=require("node:fs"),Ae=require("node:os"),L=_(require("path"));var kn=_(require("node-pty"));var Zt=_(bn()),fe=_(require("fs")),De=_(require("path")),Sn=_(require("net")),vn=require("child_process"),at=r=>r+`
30
- `,Re=r=>r.replace(/[\r\n]+$/,"")+"\r",ge=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:at},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>ct(".claude")||re("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:Re,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>re("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:Re},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>ct(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:Re,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>re("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:at},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>eo(11434),formatInput:at},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>re("OPENAI_API_KEY")||re("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:at},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>ct(".kimi")||re("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["-r",r,"--yolo"],supportsMcpConfig:!0,formatInput:Re,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]},{key:"forge",displayName:"Forge",binary:"forge",checkAuth:async()=>ct(".forge/.credentials.json")||re("FORGE_API_KEY"),assignSessionId:!0,resumeArgs:r=>["--conversation-id",r],supportsMcpConfig:!0,formatInput:Re}];var wn=process.env.HOME??"/Users/unknown";function lt(r){try{let e=(0,vn.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 Qi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=De.default.join(wn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=fe.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(fe.default.existsSync(c)){let a=lt(c);e.push({path:c,version:a})}}}else{let i=De.default.join(wn,n);if(fe.default.existsSync(i)){let o=lt(i);e.push({path:i,version:o})}}}return e}async function Zi(r,e={}){if(e[r.key]){let n=e[r.key],s=lt(n);if(s)return{path:n,version:s}}try{let n=await(0,Zt.default)(r.binary);if(n&&fe.default.existsSync(n)){let s=lt(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=Qi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Zt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function er(r={}){let e=[];for(let t of ge)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:ge.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function ct(r){return fe.default.existsSync(De.default.join(process.env.HOME??"",r))}function re(r){return!!process.env[r]}async function eo(r){return new Promise(e=>{let t=Sn.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 dt=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)),h={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(h.BRIDGE_SERVER_URL=l.serverUrl,h.BRIDGE_TOKEN=l.token,h.BRIDGE_WORKSPACE_ID=l.workspaceId,h.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(h,l.projectEnv));let g=process.env.BRIDGE_MCP_URL;g&&(h.BRIDGE_MCP_URL=g);let p;try{p=kn.spawn(n,s,{name:"xterm-256color",cols:u,rows:f,cwd:l?.cwd,env:h})}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++,I={agentId:e,agentKey:t,process:p,pid:p.pid,killed:!1,instanceId:m,onExit:a};return p.onData(v=>{let P=this.handles.get(e);!P||P.instanceId!==m||I.killed||c(Buffer.from(v).toString("base64"))}),p.onExit(({exitCode:v,signal:P})=>{let j=this.handles.get(e);!j||j.instanceId!==m||I.killed||I.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,I),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=ge.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 Sa=_(ys(),1),va=_(bt(),1),ka=_(ye(),1),Ea=_(ur(),1),Ia=_(fr(),1),xa=_(wr(),1),Os=_(kt(),1),Oa=_(xs(),1);var E=Os.default;var F=_(require("fs")),Qe=require("node:fs/promises"),A=_(require("path")),D=_(require("os")),Pe=require("node:child_process"),tt=require("node:crypto");var Cs=["developer","reviewer","planner","executor","shell","runner","orchestrator"],bl=Cs.filter(r=>r!=="orchestrator"),wl=[...Cs,"system"];var Ps=r=>r;var As=r=>r,Ts=r=>r,Ns=3e3;function vr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}var Rs=_(require("os"));async function kr(){return Rs.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var Ie=require("child_process"),$s=require("fs/promises"),Bs=require("crypto"),Ee=_(require("fs")),xt=_(require("path")),Ir=_(require("os"));var Fe=require("child_process"),Ds=require("fs/promises"),js=_(require("path")),Ls=_(require("os"));async function Ca(){return new Promise(r=>{let e=(0,Fe.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 Pa(){return new Promise(r=>{let e=(0,Fe.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 Er(r){let e=[],t=null,n=await new Promise(i=>{let o=(0,Fe.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=js.default.join(Ls.default.homedir(),".local/bin/idb");s=await(0,Ds.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,Fe.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 Ca(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Pa();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 xr=xt.default.join(Ir.default.homedir(),".local/bin/idb");async function Ms(r){try{let e=await new Promise((i,o)=>{let c=(0,Ie.spawn)(xr,["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 Aa(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,Ie.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,$s.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function It(r,e){return new Promise((t,n)=>{let s=(0,Ie.spawn)(xr,[...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 Ot=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 Er(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 Ms(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(),Ms(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 Aa(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,Bs.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 Er(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 It(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await It(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 It(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 It(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,Ie.spawn)(xr,["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=xt.default.join(Ir.default.homedir(),".bridge/install-sim-prereqs.sh");if(Ee.default.existsSync(t))return t;let n=xt.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Ee.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{Ee.default.accessSync(t,Ee.default.constants.F_OK|Ee.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,Ie.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
- `))!==-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}))}};Oe();Ve();var Ye=_(require("fs")),Cr=_(require("path")),Hs=_(require("os")),Na=2e5;function Ra(r){let e=Cr.default.join(Hs.default.homedir(),".claude","projects");if(Ye.default.existsSync(e))try{let t=Ye.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Cr.default.join(e,n.name,`${r}.jsonl`);if(Ye.default.existsSync(s))return s}}catch{}}function Da(r){try{let t=Ye.default.readFileSync(r,"utf-8").trim().split(`
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/Na*100)),usedTokens:a}}catch{continue}}}catch{}return null}function Pr(r,e,t){let n,s=-1,i=()=>{if(n||(n=Ra(e)),!n)return;let a=Da(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 ee=_(require("fs")),Je=_(require("path")),Ar=_(require("os")),qs=300*60*1e3,Vs={free:10,pro:40,max_5x:200,max_20x:200};function ja(){let r=Je.default.join(Ar.default.homedir(),".jerico","settings.json");try{if(!ee.default.existsSync(r))return"pro";let t=JSON.parse(ee.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in Vs)return t}catch{}return"pro"}function La(){let r=Je.default.join(Ar.default.homedir(),".claude","projects");if(!ee.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-qs,n=1/0,s=0;try{let o=ee.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Je.default.join(r,c.name),l;try{l=ee.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Je.default.join(a,d),f;try{if(ee.default.statSync(u).size>20*1024*1024)continue;f=ee.default.readFileSync(u,"utf-8")}catch{continue}for(let h of f.split(`
35
- `)){let g=h.trim();if(g)try{let p=JSON.parse(g);if(p.type!=="user"||p.message?.role!=="user"||p.userType!==void 0&&p.userType!=="external")continue;let I=p.timestamp;if(typeof I!="string")continue;let v=Date.parse(I);if(isNaN(v)||v<t)continue;s++,v<n&&(n=v)}catch{continue}}}}}catch{}let i=isFinite(n)?n+qs:0;return{prompts5h:s,resetAt:i}}function Ks(r){let e=()=>{let n=ja(),s=Vs[n]??40,{prompts5h:i,resetAt:o}=La();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 Ce=_(require("os")),Tt=_(require("fs")),Nr=require("node:child_process");function Js(){let r=0,e=0;for(let t of Ce.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 Tr=Js();function Ma(){let r=Js(),e=r.idle-Tr.idle,t=r.total-Tr.total;return Tr=r,t===0?0:Math.round((1-e/t)*100)}function $a(){let r=Ce.default.totalmem(),e=Ce.default.freemem(),t=0;try{let n=(0,Nr.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 Ba(){if(process.platform==="darwin")return $a();let r=Ce.default.totalmem(),e=Ce.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Ua(){try{let r=(0,Nr.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 Wa(){try{let r="/sys/class/power_supply",e=Tt.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(Tt.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=Tt.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Ys(){let r=process.platform;if(r==="darwin")return Ua();if(r==="linux")return Wa()}var Fa=1e4,Ga=3;function zs(r){let e=0,t=Ys(),n=setInterval(()=>{e++,e%Ga===0&&(t=Ys());let s=Ba();r({cpu:Ma(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Fa);return()=>clearInterval(n)}var Nt=_(require("fs")),Rt=_(require("path")),Xs=_(require("node-pty"));function Ha(){try{let r=require.resolve("node-pty"),e=Rt.default.resolve(Rt.default.dirname(r),"..");return Rt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function Qs(){let r=Ha();if(!r||!Nt.default.existsSync(r))return!0;try{Nt.default.accessSync(r,Nt.default.constants.X_OK)}catch{return!1}try{Xs.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ue=new Map,Ze=new Map;function qa(r,e){let t=Date.now(),n=Ze.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Ze.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=Ze.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}))}},Ns)}function Va(r){let e=Ze.get(r);e?.timer&&clearTimeout(e.timer),Ze.delete(r)}var Rr,Dt;function Mr(){try{return(0,tt.createHash)("sha256").update(D.default.hostname()+":"+D.default.userInfo().username+Ws()).digest("hex")}catch{return"unknown"}}var ze=[];function Ka(r){let e=Date.now(),t=e-3e4;for(;ze.length&&ze[0].ts<t;)ze.shift();return ze.push({agentKey:r,ts:e}),new Set(ze.map(s=>s.agentKey)).size>=2}var Zs=r=>r.replace(/[\r\n]+$/,"")+"\r",jr=null,Ya=Ks(r=>{jr=r}),Ja=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,za=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,Xa=5e3,Qa=400;function Za(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function ec(r,e=Qa){return r.length<=e?r:`${r.slice(0,e)}...`}function tc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function rt(){let r=F.default.realpathSync(process.argv[1]??""),e=A.default.dirname(r);return[A.default.resolve(e,"../../mcp-server/dist/index.cjs"),A.default.resolve(e,"bridge-mcp.cjs"),A.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>F.default.existsSync(n))??"bridge-mcp"}function rc(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??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:rt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},s=A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return F.default.writeFileSync(s,JSON.stringify(n,null,2)+`
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 nc={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 pe(...r){return`
37
-
38
- **Available MCP tools:** ${r.join(", ")}`}function sc(...r){return`
39
-
40
- ## Tool reference (only call tools listed here)
41
-
42
- | Tool | Purpose |
43
- |------|---------|
44
- ${r.map(t=>`| \`${t}\` | ${nc[t]} |`).join(`
45
- `)}`}var ic={developer:`# Bridge Worker \u2014 Developer Role
29
+ `+t)}function ae(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,ae),r.emit("wsClientError",o,t,e)}else Ue(t,n,s,i)}});function Ge(){return process.env.BRIDGE_PROFILE||void 0}function Ot(){let r=Ge();return r?ce.default.join(Us,"profiles",r,"settings.json"):ce.default.join(Us,"settings.json")}function He(){let r=Ge(),e=r?`${r}.daemon.lock`:"daemon.lock";return ce.default.join((0,Fe.homedir)(),".bridge",e)}function xe(){let r=Ge();return r?`com.jerico.bridge-agent.${r}.plist`:"com.jerico.bridge-agent.plist"}function Ct(){let r=Ge(),e=r?`-${r}`:"";return{out:ce.default.join((0,Fe.homedir)(),`bridge-daemon${e}.log`),err:ce.default.join((0,Fe.homedir)(),`bridge-daemon${e}.err.log`)}}function Ws(){let r=Ge();return r?`:profile:${r}`:""}var Fe,ce,Us,qe=Wr(()=>{"use strict";Fe=require("node:os"),ce=_(require("path")),Us=ce.default.join((0,Fe.homedir)(),".jerico")});var Gs={};Ei(Gs,{getConfigPath:()=>Ot,loadConfig:()=>le,loadProjectSettings:()=>xr,saveConfig:()=>de});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 le(){let r=Ot(),e=q.default.existsSync(r)?r:Na;if(!q.default.existsSync(e)){let h=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${h}`),process.exit(1)}let t=q.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(h=>h.test(i))){console.warn(`[daemon] config.url_migration: migrating stale URL ${i} \u2192 ${l}`),i=l,s.server=i;try{q.default.writeFileSync(e,JSON.stringify(s,null,2),{mode:384}),q.default.chmodSync(e,384)}catch(h){console.warn("[daemon] config.url_migration: failed to save migrated config",String(h))}}(!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 de(r){let e=Ot(),t=Pt.default.dirname(e);q.default.existsSync(t)||q.default.mkdirSync(t,{recursive:!0}),q.default.writeFileSync(e,JSON.stringify(r,null,2),{mode:384})}function xr(r){let e=Pt.default.join(r??process.cwd(),".jerico","settings.json");if(!q.default.existsSync(e))return{};try{let t=q.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 q,Pt,Fs,Na,Oe=Wr(()=>{"use strict";q=_(require("fs")),Pt=_(require("path")),Fs=_(require("os"));qe();Na=Pt.default.join(Fs.default.homedir(),".bridge","config.json")});var en=_(Zr(),1),{program:Uc,createCommand:Wc,createArgument:Fc,createOption:Gc,CommanderError:Hc,InvalidArgumentError:qc,InvalidOptionArgumentError:Vc,Command:tn,Argument:Kc,Option:Yc,Help:Jc}=en.default;var si=require("node:http"),pe=require("node:child_process"),T=require("node:fs"),Ae=require("node:os"),L=_(require("path"));var vn=_(require("node-pty"));var Qt=_(yn()),fe=_(require("fs")),Re=_(require("path")),wn=_(require("net")),Sn=require("child_process"),ot=r=>r+`
30
+ `,Ne=r=>r.replace(/[\r\n]+$/,"")+"\r",ge=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:ot},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>at(".claude")||re("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()=>re("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:Ne},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>at(".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()=>re("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:ot},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>to(11434),formatInput:ot},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>re("OPENAI_API_KEY")||re("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:ot},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>at(".kimi")||re("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()=>at(".forge/.credentials.json")||re("FORGE_API_KEY"),assignSessionId:!0,resumeArgs:r=>["--conversation-id",r],supportsMcpConfig:!0,formatInput:Ne}];var bn=process.env.HOME??"/Users/unknown";function ct(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 Zi(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=Re.default.join(bn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=fe.default.readdirSync(s)}catch{}i.sort((o,c)=>c.localeCompare(o));for(let o of i){let c=Re.default.join(s,o,r.binary);if(fe.default.existsSync(c)){let a=ct(c);e.push({path:c,version:a})}}}else{let i=Re.default.join(bn,n);if(fe.default.existsSync(i)){let o=ct(i);e.push({path:i,version:o})}}}return e}async function eo(r,e={}){if(e[r.key]){let n=e[r.key],s=ct(n);if(s)return{path:n,version:s}}try{let n=await(0,Qt.default)(r.binary);if(n&&fe.default.existsSync(n)){let s=ct(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=Zi(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Qt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Zt(r={}){let e=[];for(let t of ge)try{let{path:n,version:s}=await eo(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:ge.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function at(r){return fe.default.existsSync(Re.default.join(process.env.HOME??"",r))}function re(r){return!!process.env[r]}async function to(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 lt=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)),h={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(h.BRIDGE_SERVER_URL=l.serverUrl,h.BRIDGE_TOKEN=l.token,h.BRIDGE_WORKSPACE_ID=l.workspaceId,h.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(h,l.projectEnv));let g=process.env.BRIDGE_MCP_URL;g&&(h.BRIDGE_MCP_URL=g);let p;try{p=vn.spawn(n,s,{name:"xterm-256color",cols:u,rows:f,cwd:l?.cwd,env:h})}catch(S){let P=S instanceof Error?S.message:String(S);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:P}),!1}let m=this.nextInstanceId++,I={agentId:e,agentKey:t,process:p,pid:p.pid,killed:!1,instanceId:m,onExit:a};return p.onData(S=>{let P=this.handles.get(e);!P||P.instanceId!==m||I.killed||c(Buffer.from(S).toString("base64"))}),p.onExit(({exitCode:S,signal:P})=>{let j=this.handles.get(e);!j||j.instanceId!==m||I.killed||I.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:S,signal:P}),a(S??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,I),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=ge.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 va=_(_s(),1),ka=_(yt(),1),Ea=_(ye(),1),Ia=_(dr(),1),xa=_(hr(),1),Oa=_(br(),1),xs=_(vt(),1),Ca=_(Is(),1);var k=xs.default;var G=_(require("fs")),Xe=require("node:fs/promises"),A=_(require("path")),D=_(require("os")),Pe=require("node:child_process"),et=require("node:crypto");var Os=["developer","reviewer","planner","executor","shell","runner","orchestrator"],Sl=Os.filter(r=>r!=="orchestrator"),vl=[...Os,"system"];var Cs=r=>r;var Ps=r=>r,As=r=>r,Ts=3e3;function Sr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}var Ns={developer:`# Bridge Worker \u2014 Developer Role
46
32
 
47
33
  You are a **Developer** worker in a multi-agent orchestration system called Bridge.
48
34
 
@@ -55,7 +41,7 @@ You are a **Developer** worker in a multi-agent orchestration system called Brid
55
41
  - After making changes, check the runner agent (role:'runner' in bridge_list_agents) for build errors: bridge_get_agent_output(runnerAgentId)
56
42
  - Trigger hot reload after file changes: bridge_send_input(runnerAgentId, "r")
57
43
 
58
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context","bridge_get_todos","bridge_list_agents","bridge_get_agent_output","bridge_send_input")}`,reviewer:`# Bridge Worker \u2014 Reviewer Role
44
+ **Available MCP tools:** bridge_get_my_task, bridge_complete_task, bridge_fail_task, bridge_get_todo_context, bridge_get_todos, bridge_list_agents, bridge_get_agent_output, bridge_send_input`,reviewer:`# Bridge Worker \u2014 Reviewer Role
59
45
 
60
46
  You are a **Quality-Obsessed Tech Lead** reviewing code changes in a multi-agent system called Bridge.
61
47
  Your identity: Agile, pragmatic, anti-fragile. You ship with confidence or you send it back.
@@ -139,7 +125,7 @@ If a runner agent exists (bridge_list_agents \u2192 role:'runner'), call bridge_
139
125
  - One \`bridge_fail_task\` per review cycle \u2014 consolidate all issues into a single message
140
126
  - If unsure whether something is a bug or intentional design: flag it as a question, don't reject
141
127
 
142
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context","bridge_get_todos","bridge_list_agents","bridge_get_agent_output")}`,planner:`# Bridge Worker \u2014 Planner Role
128
+ **Available MCP tools:** bridge_get_my_task, bridge_complete_task, bridge_fail_task, bridge_get_todo_context, bridge_get_todos, bridge_list_agents, bridge_get_agent_output`,planner:`# Bridge Worker \u2014 Planner Role
143
129
 
144
130
  You are a **Planner** in Bridge. Your job: understand the project, listen to the user, then create a well-structured and verified execution plan.
145
131
 
@@ -229,7 +215,7 @@ Show the complete todo list with types and dependency chain. Then stop.
229
215
  - To close a stale open todo that's already done: \`bridge_complete_task\` with its ID
230
216
  - Todo titles must be specific: name the files, endpoints, components \u2014 no vague verbs
231
217
 
232
- ${pe("bridge_get_plan","bridge_get_project_history","bridge_get_todos","bridge_add_todo","bridge_complete_task","bridge_fail_task")}`,executor:`# Bridge Worker \u2014 Executor Role
218
+ **Available MCP tools:** bridge_get_plan, bridge_get_project_history, bridge_get_todos, bridge_add_todo, bridge_complete_task, bridge_fail_task`,executor:`# Bridge Worker \u2014 Executor Role
233
219
 
234
220
  You are an **Executor** worker in a multi-agent orchestration system called Bridge.
235
221
 
@@ -239,7 +225,7 @@ You are an **Executor** worker in a multi-agent orchestration system called Brid
239
225
  - Capture and report all relevant output
240
226
  - Call \`bridge_complete_task\` on success, \`bridge_fail_task\` with error details on failure
241
227
 
242
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context","bridge_list_agents","bridge_get_agent_output","bridge_send_input")}`,shell:`# Bridge Worker \u2014 Shell Role
228
+ **Available MCP tools:** bridge_get_my_task, bridge_complete_task, bridge_fail_task, bridge_get_todo_context, bridge_list_agents, bridge_get_agent_output, bridge_send_input`,shell:`# Bridge Worker \u2014 Shell Role
243
229
 
244
230
  You are a **Shell** worker in a multi-agent orchestration system called Bridge.
245
231
 
@@ -249,7 +235,7 @@ You are a **Shell** worker in a multi-agent orchestration system called Bridge.
249
235
  - Call \`bridge_complete_task\` when the command exits cleanly
250
236
  - Call \`bridge_fail_task\` with the error output if the command fails
251
237
 
252
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task")}`,runner:`# Bridge Worker \u2014 Runner Role
238
+ **Available MCP tools:** bridge_get_my_task, bridge_complete_task, bridge_fail_task`,runner:`# Bridge Worker \u2014 Runner Role
253
239
 
254
240
  You are a **Runner** worker in a multi-agent orchestration system called Bridge.
255
241
 
@@ -259,7 +245,7 @@ You are a **Runner** worker in a multi-agent orchestration system called Bridge.
259
245
  - Report build errors, compilation failures, and runtime exceptions as they occur
260
246
  - When asked to restart: kill the existing process cleanly, then start fresh
261
247
 
262
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_send_input")}`,orchestrator:`# Bridge Orchestrator
248
+ **Available MCP tools:** bridge_get_my_task, bridge_complete_task, bridge_fail_task, bridge_send_input`,orchestrator:`# Bridge Orchestrator
263
249
 
264
250
  You are a **Bridge Orchestrator**. Your sole purpose is to decompose specs into todos, delegate them to worker agents, and report results. Nothing else.
265
251
 
@@ -371,7 +357,21 @@ Summarize: todos completed, failed, any blockers. List what workers did.
371
357
 
372
358
  ---
373
359
 
374
- ${sc("bridge_get_project","bridge_get_plan","bridge_get_todos","bridge_add_todo","bridge_cancel_run","bridge_get_project_history","bridge_get_execution_status","bridge_list_agents","bridge_get_agent_status","bridge_spawn_worker","bridge_assign_task","bridge_get_todo_context","bridge_get_agent_output","bridge_kill_agent","bridge_list_groups","bridge_get_group_status","bridge_dispatch_to_group","bridge_list_workspace_projects","bridge_query_workspace","bridge_list_active_runs","bridge_peek_panel","bridge_status_panel")}`},oc=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
360
+ {{TOOL_TABLE}}`};var Rs=_(require("os"));async function vr(){return Rs.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var Ie=require("child_process"),Bs=require("fs/promises"),$s=require("crypto"),Ee=_(require("fs")),It=_(require("path")),Er=_(require("os"));var We=require("child_process"),Ds=require("fs/promises"),js=_(require("path")),Ls=_(require("os"));async function Pa(){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 Aa(){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 kr(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=js.default.join(Ls.default.homedir(),".local/bin/idb");s=await(0,Ds.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 Pa(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Aa();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 Ir=It.default.join(Er.default.homedir(),".local/bin/idb");async function Ms(r){try{let e=await new Promise((i,o)=>{let c=(0,Ie.spawn)(Ir,["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 Ta(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,Ie.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,Bs.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function Et(r,e){return new Promise((t,n)=>{let s=(0,Ie.spawn)(Ir,[...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 xt=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 kr(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 Ms(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(),Ms(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 Ta(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,$s.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 kr(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 Et(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await Et(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 Et(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 Et(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,Ie.spawn)(Ir,["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=It.default.join(Er.default.homedir(),".bridge/install-sim-prereqs.sh");if(Ee.default.existsSync(t))return t;let n=It.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Ee.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{Ee.default.accessSync(t,Ee.default.constants.F_OK|Ee.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,Ie.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(`
361
+ `))!==-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(`
362
+ `))!==-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}))}};Oe();qe();var Ke=_(require("fs")),Or=_(require("path")),Hs=_(require("os")),Ra=2e5;function Da(r){let e=Or.default.join(Hs.default.homedir(),".claude","projects");if(Ke.default.existsSync(e))try{let t=Ke.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Or.default.join(e,n.name,`${r}.jsonl`);if(Ke.default.existsSync(s))return s}}catch{}}function ja(r){try{let t=Ke.default.readFileSync(r,"utf-8").trim().split(`
363
+ `);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/Ra*100)),usedTokens:a}}catch{continue}}}catch{}return null}function Cr(r,e,t){let n,s=-1,i=()=>{if(n||(n=Da(e)),!n)return;let a=ja(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 ee=_(require("fs")),Ye=_(require("path")),Pr=_(require("os")),qs=300*60*1e3,Vs={free:10,pro:40,max_5x:200,max_20x:200};function La(){let r=Ye.default.join(Pr.default.homedir(),".jerico","settings.json");try{if(!ee.default.existsSync(r))return"pro";let t=JSON.parse(ee.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in Vs)return t}catch{}return"pro"}function Ma(){let r=Ye.default.join(Pr.default.homedir(),".claude","projects");if(!ee.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-qs,n=1/0,s=0;try{let o=ee.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Ye.default.join(r,c.name),l;try{l=ee.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Ye.default.join(a,d),f;try{if(ee.default.statSync(u).size>20*1024*1024)continue;f=ee.default.readFileSync(u,"utf-8")}catch{continue}for(let h of f.split(`
364
+ `)){let g=h.trim();if(g)try{let p=JSON.parse(g);if(p.type!=="user"||p.message?.role!=="user"||p.userType!==void 0&&p.userType!=="external")continue;let I=p.timestamp;if(typeof I!="string")continue;let S=Date.parse(I);if(isNaN(S)||S<t)continue;s++,S<n&&(n=S)}catch{continue}}}}}catch{}let i=isFinite(n)?n+qs:0;return{prompts5h:s,resetAt:i}}function Ks(r){let e=()=>{let n=La(),s=Vs[n]??40,{prompts5h:i,resetAt:o}=Ma();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 Ce=_(require("os")),At=_(require("fs")),Tr=require("node:child_process");function Js(){let r=0,e=0;for(let t of Ce.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 Ar=Js();function Ba(){let r=Js(),e=r.idle-Ar.idle,t=r.total-Ar.total;return Ar=r,t===0?0:Math.round((1-e/t)*100)}function $a(){let r=Ce.default.totalmem(),e=Ce.default.freemem(),t=0;try{let n=(0,Tr.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 Ua(){if(process.platform==="darwin")return $a();let r=Ce.default.totalmem(),e=Ce.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Wa(){try{let r=(0,Tr.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 Fa(){try{let r="/sys/class/power_supply",e=At.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(At.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=At.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Ys(){let r=process.platform;if(r==="darwin")return Wa();if(r==="linux")return Fa()}var Ga=1e4,Ha=3;function zs(r){let e=0,t=Ys(),n=setInterval(()=>{e++,e%Ha===0&&(t=Ys());let s=Ua();r({cpu:Ba(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Ga);return()=>clearInterval(n)}var Tt=_(require("fs")),Nt=_(require("path")),Xs=_(require("node-pty"));function qa(){try{let r=require.resolve("node-pty"),e=Nt.default.resolve(Nt.default.dirname(r),"..");return Nt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function Qs(){let r=qa();if(!r||!Tt.default.existsSync(r))return!0;try{Tt.default.accessSync(r,Tt.default.constants.X_OK)}catch{return!1}try{Xs.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ue=new Map,Qe=new Map;function Va(r,e){let t=Date.now(),n=Qe.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Qe.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=Qe.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}))}},Ts)}function Ka(r){let e=Qe.get(r);e?.timer&&clearTimeout(e.timer),Qe.delete(r)}var Nr,Rt;function Lr(){try{return(0,et.createHash)("sha256").update(D.default.hostname()+":"+D.default.userInfo().username+Ws()).digest("hex")}catch{return"unknown"}}var Je=[];function Ya(r){let e=Date.now(),t=e-3e4;for(;Je.length&&Je[0].ts<t;)Je.shift();return Je.push({agentKey:r,ts:e}),new Set(Je.map(s=>s.agentKey)).size>=2}var Zs=r=>r.replace(/[\r\n]+$/,"")+"\r",Dr=null,Ja=Ks(r=>{Dr=r}),za=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,Xa=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,Qa=5e3,Za=400;function ec(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function tc(r,e=Za){return r.length<=e?r:`${r.slice(0,e)}...`}function rc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function tt(){let r=G.default.realpathSync(process.argv[1]??""),e=A.default.dirname(r);return[A.default.resolve(e,"../../mcp-server/dist/index.cjs"),A.default.resolve(e,"bridge-mcp.cjs"),A.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>G.default.existsSync(n))??"bridge-mcp"}function nc(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??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:tt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},s=A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return G.default.writeFileSync(s,JSON.stringify(n,null,2)+`
365
+ `,"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 ti={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 sc(...r){return`
366
+
367
+ **Available MCP tools:** ${r.join(", ")}`}function ic(...r){return`
368
+
369
+ ## Tool reference (only call tools listed here)
370
+
371
+ | Tool | Purpose |
372
+ |------|---------|
373
+ ${r.map(t=>`| \`${t}\` | ${ti[t]} |`).join(`
374
+ `)}`}function oc(){let r=Object.keys(ti);return ic(...r)}var ac=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
375
375
 
376
376
  You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rule below.
377
377
 
@@ -390,14 +390,14 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
390
390
  - Decide solely based on (todo.retryCount ?? 0) > 0
391
391
  - This is a signaling mechanic test, not a code quality review
392
392
 
393
- ${pe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function ti(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?oc:ic[r]}function ac(r,e,t,n,s,i){if(!e)return[];let o=ti(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=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return F.default.writeFileSync(a,c+`
394
- `,"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=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return F.default.writeFileSync(a,c+`
395
- `,"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 cc(r,e,t){if(!e||!e.trim())return[];if(r==="claude")try{let n=A.default.join(D.default.tmpdir(),`bridge-persona-${t}.md`);return F.default.writeFileSync(n,e.trim()+`
396
- `,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:t,error:String(n)}),[]}return r==="qwen"?["--append-system-prompt",e.trim()]:[]}function Xe(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function lc(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??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:rt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},n=A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return F.default.writeFileSync(n,JSON.stringify(t,null,2)+`
397
- `,"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 dc(r){try{let e=rt(),t=`{BRIDGE_SERVER_URL=${Xe(r.serverUrl)},BRIDGE_TOKEN=${Xe(r.token)},BRIDGE_WORKSPACE_ID=${Xe(r.workspaceId)},BRIDGE_PROJECT_ID=${Xe(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${Xe(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 uc(r){try{return F.default.statSync(r).isDirectory()}catch{return!1}}function Dr(r,e){try{return e(r)}catch{return!1}}function pc(r,e,t,n,s=uc){let i=n?.[r];if(i&&Dr(i,s))return{path:i,source:"local_override"};if(t){if(Dr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}if(e&&Dr(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:D.default.homedir(),source:"fallback_home"}}function hc(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=rt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Pe.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Pe.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 fc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=rt(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=A.default.resolve(r.cwd)===A.default.resolve(D.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,Pe.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Pe.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",`BRIDGE_PERSONA_ID=${r.personaId??""}`,"-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 et=[],Lr=!1,ei=!1;function ri(){return Lr}function ni(r){if(ei)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(ei=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let h=A.default.join(D.default.homedir(),".jerico","settings.json");F.default.existsSync(h)&&JSON.parse(F.default.readFileSync(h,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=le(),t=(0,tt.createHash)("sha256").update(e.token).digest("hex"),n=new Ot(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let h=Date.now(),g=process.hrtime.bigint();s=new E(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let p=s,m=(0,tt.randomUUID)();Rr=m;let I=D.default.networkInterfaces(),v=Object.entries(I).flatMap(([b,w])=>(w||[]).filter(y=>!y.internal).map(y=>({iface:b,address:y.address,family:y.family}))),P=JSON.stringify(v);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:v,connectionId:m})),Dt&&Dt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Dt,current:P,connectionId:m})),Dt=P;let j=p.send.bind(p);p.send=function(b){if(p.readyState!==E.OPEN){let w="unknown";try{w=JSON.parse(b).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:w,readyState:p.readyState,connectionId:m}));return}return j(b)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let q=null,k=0,S=null;p.on("open",()=>{Lr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{p.readyState===E.OPEN&&(p.ping(),k=Date.now(),S&&clearTimeout(S),S=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),p.terminate()},za))},Ja),r.setCurrentWs(p);let b=!Qs();p.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:b,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:Mr(),connectionId:m})),n.updateWs(p),Promise.all([er(e.agentPaths),kr()]).then(([w,y])=>{et=y?[...w,y]:w,p.readyState===E.OPEN&&p.send(JSON.stringify({type:"agents",list:et}))}),q=zs(w=>{p.readyState===E.OPEN&&p.send(JSON.stringify({type:"system_metrics",daemonId:t,...w}))})}),p.on("message",b=>{let w;try{w=JSON.parse(b.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}gc(w,p,r,e,n)}),p.on("pong",()=>{S&&(clearTimeout(S),S=null);let b=Date.now()-k;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:b,connectionId:m}))}),p.on("close",(b,w)=>{Lr=!1,o&&(clearInterval(o),o=null),S&&(clearTimeout(S),S=null),q?.(),q=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 y=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:b,reason:w?.toString()||void 0,uptimeMs:y,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let M=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&M<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let Te=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),st=Math.round(Te+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:st,reconnectCount:a,connectionId:m})),i=setTimeout(d,st)}),p.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(),Ya();for(let h of ue.values())h();n.stopAll(),r.killAll(),s?.close()}function f(h){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:h,connectionId:Rr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",h=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(h),stack:h.stack,connectionId:Rr})),r.killAll(),process.exit(1)}),d()}function gc(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=et.find(k=>k.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=ge.find(k=>k.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"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Pr(r.agentId,r.sessionId,(k,S,b)=>{let w=t.getCurrentWs();w?.readyState===E.OPEN&&w.send(JSON.stringify({type:"panel_token_usage",agentId:k,usedPct:S,usedTokens:b,...jr}))})));else if(o?.assignSessionId){let k=crypto.randomUUID(),S=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],S,k],e.readyState===E.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:k})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:k})),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Pr(r.agentId,k,(b,w,y)=>{let M=t.getCurrentWs();M?.readyState===E.OPEN&&M.send(JSON.stringify({type:"panel_token_usage",agentId:b,usedPct:w,usedTokens:y,...jr}))})))}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 k=tc(n.server),S=pc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),b=S.path;u=S.source;let w=Or(b);if(a={serverUrl:k,token:n.token,workspaceId:As(r.workspaceId),projectId:r.projectId?Ts(r.projectId):void 0,agentId:r.agentId?Ps(r.agentId):void 0,personaId:r.personaId,cwd:b,projectEnv:w.env},r.agentKey==="claude"){let y=rc(a);l=y.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...y]}else if(r.agentKey==="codex"){let y=dc(a);l=y.length>0,d="stdio",c=[...c,...y]}else if(r.agentKey==="qwen")l=fc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let y=lc(a);l=y.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...y]}else r.agentKey==="forge"?(l=hc(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(vr("phase2a.verified_at")&&(S.source==="daemon_override"||S.source==="server_project")){let y=`${k}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(y,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(M=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(M)})})}if(vr("phase2a.auto_register")&&(S.source==="daemon_override"||S.source==="server_project"))try{let y=(0,Pe.spawnSync)("git",["remote","get-url","origin"],{cwd:b,timeout:5e3,encoding:"utf-8"});if(y.status===0&&y.stdout&&y.stdout.trim()){let M=y.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=b,de(n));let Te=`${k}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(Te,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:b,repoUrl:M})}).catch(st=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(st)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:b,repoUrl:M})}}catch(y){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(y)})}}let f=ac(r.agentKey,r.role,r.agentId,r.workspaceId,r.projectId,r.groupId);f.length>0&&(c=[...c,...f]);let h=cc(r.agentKey,r.systemPrompt,r.agentId);h.length>0&&(c=[...c,...h]);let g=Math.max(1,Math.min(500,r.cols)),p=Math.max(1,Math.min(500,r.rows)),m=Date.now(),I="",v=0,P=!1,j=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,g,p,k=>{v+=k.length;try{let b=Buffer.from(k,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!j&&Date.now()-m<3e4&&(/yolo agent/.test(b)||/●/.test(b)||/○/.test(b))){j=!0;let w=ti(r.role);if(w){let y=w.replaceAll("{{PANEL_ID}}",r.agentId).replaceAll("{{WORKSPACE_ID}}",r.workspaceId??"unknown").replaceAll("{{PROJECT_ID}}",r.projectId??"none").replaceAll("{{GROUP_ID}}",r.groupId??"none"),M=Zs(y),Te=Buffer.from(M).toString("base64");t.write(r.agentId,Te,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!I)try{let b=Buffer.from(k,"base64").toString("utf-8"),w=Za(b).replace(/\x00/g,"").trim();if(w&&(I=ec(w)),r.agentKey==="codex"&&!P&&Date.now()-m<2e4&&/included in your plan for free|let[’']s build together/i.test(w)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(w)){P=!0;let y=Buffer.from("y").toString("base64");t.write(r.agentId,y,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let S=t.getCurrentWs();S?.readyState===E.OPEN&&S.send(JSON.stringify({type:"output",agentId:r.agentId,data:k})),qa(r.agentId,()=>t.getCurrentWs())},(k,S)=>{let b=Date.now()-m,w=b<=Xa;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:k,signal:S,uptimeMs:b,earlyExit:w,outputBytes:v,firstOutputSnippet:I||void 0});let y=t.getCurrentWs();w&&y?.readyState===E.OPEN&&y.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${k??"null"} signal=${S??"null"} snippet="${I||"no output"}"`})),y?.readyState===E.OPEN&&y.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:k,signal:S})),Va(r.agentId),Promise.all([(0,Qe.unlink)(A.default.join(D.default.tmpdir(),`bridge-persona-${r.agentId}.md`)),(0,Qe.unlink)(A.default.join(D.default.tmpdir(),`bridge-role-${r.agentId}.md`)),(0,Qe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId}.json`)),(0,Qe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId}.json`))].map(M=>M.catch(()=>{}))).catch(()=>{})},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 S=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Ka(r.agentKey);e.readyState===E.OPEN&&(S?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,personaId:r.personaId}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ue.get(r.agentId)?.(),ue.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([er(n.agentPaths),kr()]).then(([i,o])=>{et=o?[...i,o]:i,e.readyState===E.OPEN&&e.send(JSON.stringify({type:"agents",list:et}))});break;case"dir_list":{let i=D.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=A.default.resolve(o);if(c!==i&&!c.startsWith(i+A.default.sep)){e.readyState===E.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let a=F.default.readdirSync(c,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:A.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}case"persona_apply":{if(!(t.getLiveAgentIds().includes(r.agentId)?{agentId:r.agentId}:null)){console.warn("[daemon] persona_apply.no_panel",{agentId:r.agentId});break}let o=`[SYSTEM CONTEXT UPDATE \u2014 new persona applied]
393
+ ${sc("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function cc(r,e,t,n,s,i){if(!r)return;let o=e;if(!o){let c=process.env.BRIDGE_TEST_SCRIPTED_REVIEW,a=r==="reviewer"&&c==="1";console.log("[daemon] resolveSystemPrompt.fallback",{role:r,envFlag:c,returning:a?"SCRIPTED":"DEFAULT"}),a?o=ac:o=Ns[r]}if(o)return o.includes("{{TOOL_TABLE}}")&&(o=o.replace("{{TOOL_TABLE}}",oc())),o.replaceAll("{{PANEL_ID}}",t).replaceAll("{{WORKSPACE_ID}}",n??"unknown").replaceAll("{{PROJECT_ID}}",s??"none").replaceAll("{{GROUP_ID}}",i??"none")}function lc(r,e,t){if(!e)return[];if(r==="claude")try{let n=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(n,e+`
394
+ `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,error:String(n)}),[]}if(r==="qwen")return["--append-system-prompt",e];if(r==="aider")try{let n=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(n,e+`
395
+ `,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,tmpPath:n,agentKey:"aider"}),["--read",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,agentKey:"aider",error:String(n)}),[]}return r==="codex"?[]:[]}function dc(r,e,t){if(!e||!e.trim())return[];if(r==="claude")try{let n=A.default.join(D.default.tmpdir(),`bridge-persona-${t}.md`);return G.default.writeFileSync(n,e.trim()+`
396
+ `,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:t,error:String(n)}),[]}return r==="qwen"?["--append-system-prompt",e.trim()]:[]}function ze(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function uc(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??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:tt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},n=A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return G.default.writeFileSync(n,JSON.stringify(t,null,2)+`
397
+ `,"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 pc(r){try{let e=tt(),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 hc(r){try{return G.default.statSync(r).isDirectory()}catch{return!1}}function Rr(r,e){try{return e(r)}catch{return!1}}function fc(r,e,t,n,s=hc){let i=n?.[r];if(i&&Rr(i,s))return{path:i,source:"local_override"};if(t){if(Rr(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&&Rr(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:D.default.homedir(),source:"fallback_home"}}function gc(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),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??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Pe.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Pe.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 mc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=A.default.resolve(r.cwd)===A.default.resolve(D.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,Pe.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Pe.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",`BRIDGE_PERSONA_ID=${r.personaId??""}`,"-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 Ze=[],jr=!1,ei=!1;function ri(){return jr}function ni(r){if(ei)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(ei=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let h=A.default.join(D.default.homedir(),".jerico","settings.json");G.default.existsSync(h)&&JSON.parse(G.default.readFileSync(h,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=le(),t=(0,et.createHash)("sha256").update(e.token).digest("hex"),n=new xt(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let h=Date.now(),g=process.hrtime.bigint();s=new k(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let p=s,m=(0,et.randomUUID)();Nr=m;let I=D.default.networkInterfaces(),S=Object.entries(I).flatMap(([y,w])=>(w||[]).filter(E=>!E.internal).map(E=>({iface:y,address:E.address,family:E.family}))),P=JSON.stringify(S);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:S,connectionId:m})),Rt&&Rt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Rt,current:P,connectionId:m})),Rt=P;let j=p.send.bind(p);p.send=function(y){if(p.readyState!==k.OPEN){let w="unknown";try{w=JSON.parse(y).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:w,readyState:p.readyState,connectionId:m}));return}return j(y)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let $=null,he=0,b=null;p.on("open",()=>{jr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{p.readyState===k.OPEN&&(p.ping(),he=Date.now(),b&&clearTimeout(b),b=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),p.terminate()},Xa))},za),r.setCurrentWs(p);let y=!Qs();p.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:y,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:Lr(),connectionId:m})),n.updateWs(p),Promise.all([Zt(e.agentPaths),vr()]).then(([w,E])=>{Ze=E?[...w,E]:w,p.readyState===k.OPEN&&p.send(JSON.stringify({type:"agents",list:Ze}))}),$=zs(w=>{p.readyState===k.OPEN&&p.send(JSON.stringify({type:"system_metrics",daemonId:t,...w}))})}),p.on("message",y=>{let w;try{w=JSON.parse(y.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}_c(w,p,r,e,n)}),p.on("pong",()=>{b&&(clearTimeout(b),b=null);let y=Date.now()-he;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:y,connectionId:m}))}),p.on("close",(y,w)=>{jr=!1,o&&(clearInterval(o),o=null),b&&(clearTimeout(b),b=null),$?.(),$=null,y===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 E=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:y,reason:w?.toString()||void 0,uptimeMs:E,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let v=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&v<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let M=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),nt=Math.round(M+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:nt,reconnectCount:a,connectionId:m})),i=setTimeout(d,nt)}),p.on("error",y=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:y.message,code:y.code,connectionId:m}))})}function u(){o&&(clearInterval(o),o=null),r.stopLivenessCheck(),Ja();for(let h of ue.values())h();n.stopAll(),r.killAll(),s?.close()}function f(h){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:h,connectionId:Nr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",h=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(h),stack:h.stack,connectionId:Nr})),r.killAll(),process.exit(1)}),d()}function _c(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=Ze.find(b=>b.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=ge.find(b=>b.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"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Cr(r.agentId,r.sessionId,(b,y,w)=>{let E=t.getCurrentWs();E?.readyState===k.OPEN&&E.send(JSON.stringify({type:"panel_token_usage",agentId:b,usedPct:y,usedTokens:w,...Dr}))})));else if(o?.assignSessionId){let b=crypto.randomUUID(),y=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],y,b],e.readyState===k.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:b})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:b})),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Cr(r.agentId,b,(w,E,v)=>{let M=t.getCurrentWs();M?.readyState===k.OPEN&&M.send(JSON.stringify({type:"panel_token_usage",agentId:w,usedPct:E,usedTokens:v,...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 b=rc(n.server),y=fc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),w=y.path;u=y.source;let E=xr(w);if(a={serverUrl:b,token:n.token,workspaceId:Ps(r.workspaceId),projectId:r.projectId?As(r.projectId):void 0,agentId:r.agentId?Cs(r.agentId):void 0,personaId:r.personaId,cwd:w,projectEnv:E.env},r.agentKey==="claude"){let v=nc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else if(r.agentKey==="codex"){let v=pc(a);l=v.length>0,d="stdio",c=[...c,...v]}else if(r.agentKey==="qwen")l=mc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let v=uc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else r.agentKey==="forge"?(l=gc(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(Sr("phase2a.verified_at")&&(y.source==="daemon_override"||y.source==="server_project")){let v=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(v,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(M=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(M)})})}if(Sr("phase2a.auto_register")&&(y.source==="daemon_override"||y.source==="server_project"))try{let v=(0,Pe.spawnSync)("git",["remote","get-url","origin"],{cwd:w,timeout:5e3,encoding:"utf-8"});if(v.status===0&&v.stdout&&v.stdout.trim()){let M=v.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=w,de(n));let nt=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(nt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:w,repoUrl:M})}).catch(yi=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(yi)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:w,repoUrl:M})}}catch(v){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(v)})}}let f=cc(r.role,r.systemPrompt,r.agentId,r.workspaceId,r.projectId,r.groupId),h=lc(r.agentKey,f,r.agentId);h.length>0&&(c=[...c,...h]);let g=dc(r.agentKey,r.systemPrompt,r.agentId);g.length>0&&(c=[...c,...g]);let p=Math.max(1,Math.min(500,r.cols)),m=Math.max(1,Math.min(500,r.rows)),I=Date.now(),S="",P=0,j=!1,$=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,p,m,b=>{P+=b.length;try{let w=Buffer.from(b,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!$&&Date.now()-I<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){$=!0;let E=f;if(E){let v=Zs(E),M=Buffer.from(v).toString("base64");t.write(r.agentId,M,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!S)try{let w=Buffer.from(b,"base64").toString("utf-8"),E=ec(w).replace(/\x00/g,"").trim();if(E&&(S=tc(E)),r.agentKey==="codex"&&!j&&Date.now()-I<2e4&&/included in your plan for free|let[’']s build together/i.test(E)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(E)){j=!0;let v=Buffer.from("y").toString("base64");t.write(r.agentId,v,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let y=t.getCurrentWs();y?.readyState===k.OPEN&&y.send(JSON.stringify({type:"output",agentId:r.agentId,data:b})),Va(r.agentId,()=>t.getCurrentWs())},(b,y)=>{let w=Date.now()-I,E=w<=Qa;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:b,signal:y,uptimeMs:w,earlyExit:E,outputBytes:P,firstOutputSnippet:S||void 0});let v=t.getCurrentWs();E&&v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${b??"null"} signal=${y??"null"} snippet="${S||"no output"}"`})),v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:b,signal:y})),Ka(r.agentId),Promise.all([(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-persona-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-role-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId}.json`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId}.json`))].map(M=>M.catch(()=>{}))).catch(()=>{})},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 y=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Ya(r.agentKey);e.readyState===k.OPEN&&(y?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,personaId:r.personaId}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ue.get(r.agentId)?.(),ue.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([Zt(n.agentPaths),vr()]).then(([i,o])=>{Ze=o?[...i,o]:i,e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agents",list:Ze}))});break;case"dir_list":{let i=D.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=A.default.resolve(o);if(c!==i&&!c.startsWith(i+A.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:A.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}case"persona_apply":{if(!(t.getLiveAgentIds().includes(r.agentId)?{agentId:r.agentId}:null)){console.warn("[daemon] persona_apply.no_panel",{agentId:r.agentId});break}let o=`[SYSTEM CONTEXT UPDATE \u2014 new persona applied]
398
398
  ${r.systemPrompt}
399
- [/SYSTEM CONTEXT UPDATE]`,c=Zs(o),a=Buffer.from(c).toString("base64");t.write(r.agentId,a,"orchestrator"),console.log("[daemon] persona_apply.injected",{agentId:r.agentId,promptLength:r.systemPrompt.length});break}default:{let i=r}}}Ve();var jt=L.default.join((0,Ae.homedir)(),"Library","LaunchAgents");function mc(){let r=[...process.env.npm_config_global_prefix?[L.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 ii(){let r=qe();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 _c(){let r=qe();try{(0,T.mkdirSync)(L.default.dirname(r),{recursive:!0})}catch{}ii();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 oi(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(L.default.join((0,Ae.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(L.default.join((0,Ae.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,he.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(L.default.dirname(i))}catch{}let n=L.default.join((0,Ae.homedir)(),".vscode","extensions");try{let s=(0,he.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
400
- `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=L.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function yc(r){try{(0,he.execSync)(`mkdir -p "${jt}"`,{stdio:"pipe"})}catch{}let e=xe(),t=L.default.join(jt,e),{out:n,err:s}=Pt(),i=oi(),o=process.env.BRIDGE_PROFILE||"",c=e.replace(".plist",""),a=o?` <key>BRIDGE_PROFILE</key>
399
+ [/SYSTEM CONTEXT UPDATE]`,c=Zs(o),a=Buffer.from(c).toString("base64");t.write(r.agentId,a,"orchestrator"),console.log("[daemon] persona_apply.injected",{agentId:r.agentId,promptLength:r.systemPrompt.length});break}default:{let i=r}}}qe();var Dt=L.default.join((0,Ae.homedir)(),"Library","LaunchAgents");function yc(){let r=[...process.env.npm_config_global_prefix?[L.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 ii(){let r=He();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 bc(){let r=He();try{(0,T.mkdirSync)(L.default.dirname(r),{recursive:!0})}catch{}ii();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 oi(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(L.default.join((0,Ae.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(L.default.join((0,Ae.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,pe.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(L.default.dirname(i))}catch{}let n=L.default.join((0,Ae.homedir)(),".vscode","extensions");try{let s=(0,pe.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
400
+ `);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=L.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function wc(r){try{(0,pe.execSync)(`mkdir -p "${Dt}"`,{stdio:"pipe"})}catch{}let e=xe(),t=L.default.join(Dt,e),{out:n,err:s}=Ct(),i=oi(),o=process.env.BRIDGE_PROFILE||"",c=e.replace(".plist",""),a=o?` <key>BRIDGE_PROFILE</key>
401
401
  <string>${o}</string>
402
402
  `:"",l=L.default.join((0,Ae.homedir)(),".bridge"),d=L.default.join(l,"bridge-agent-wrapper.sh"),u=`#!/bin/bash
403
403
  exec "$(command -v node)" "${r}" start
@@ -430,6 +430,6 @@ exec "$(command -v node)" "${r}" start
430
430
  ${a} </dict>
431
431
  </dict>
432
432
  </plist>
433
- `;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(h){return console.warn("[bridge] launchd.plist.write.failed",{error:String(h)}),!1}}function bc(){let r=xe(),e=L.default.join(jt,r);try{return(0,he.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 wc(r){let{out:e,err:t}=Pt();try{let n=(0,he.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:oi(),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 Sc(){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 vc(){ii();let r=new dt;ni(r),r.startLivenessCheck(6e4);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,si.createServer)((n,s)=>{let i=ri(),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 ai(){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){vc();return}_c()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=mc(),t=yc(e),{ok:n,permissionDenied:s}=t?bc():{ok:!1,permissionDenied:!1},i=L.default.join(jt,xe()),{out:o,err:c}=Pt();if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:o,err:c}),Sc(),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...
434
- `)),wc(e),process.exit(0)}var ci=_(require("https")),li=_(require("http"));Oe();var kc="https://lcars.jerico.appnova.io";function Ec(r){return(r??"").trim()}async function di(r,e=!1,t){let n=!(r&&r.trim()),s=n?kc: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=Ec(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 Ic()),o||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await xc(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");de({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 Ic(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
435
- `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function xc(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?ci.default:li.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 ui=_(require("https")),pi=_(require("http")),$r=_(require("fs")),Br=_(require("path")),hi=require("node:crypto");Oe();function Oc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function fi(r,e,t){let n=le(),s=(0,hi.createHash)("sha256").update(n.token).digest("hex"),i=Oc(n.server),o=Br.default.resolve(t);Br.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),$r.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),$r.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?ui.default:pi.default;n.projectPaths={...n.projectPaths??{},[e]:o},de(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:Mr()}),f=await new Promise((h,g)=>{let p=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 I="";m.on("data",v=>{I+=v}),m.on("end",()=>{if(m.statusCode===200)h(200);else{try{let v=JSON.parse(I);console.error("[bridge] link-project failed:",v.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}h(m.statusCode??0)}})});p.on("error",m=>{g(m)}),p.write(u),p.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))}Oe();function Cc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function gi(){let r=le(),e=Cc(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 Ur=require("node:child_process"),nt=require("node:fs"),Wr=_(require("path"));Ve();var mi=require("node:os"),Pc=Wr.default.join((0,mi.homedir)(),"Library","LaunchAgents");function _i(){let r=xe(),e=r.replace(".plist",""),t=Wr.default.join(Pc,r);try{(0,Ur.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,nt.existsSync)(t)?((0,Ur.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=qe();if((0,nt.existsSync)(n))try{(0,nt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var te=new rn;te.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.6.0").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)});te.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),ai()});te.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=>{di(r.server,!r.browser,r.token)});te.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)=>{fi(r,e,t)});te.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{gi()});te.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Oe(),Gs)),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")}});te.command("stop").description("Stop the bridge-agent daemon").action(()=>{_i()});te.parse();
433
+ `;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(h){return console.warn("[bridge] launchd.plist.write.failed",{error:String(h)}),!1}}function Sc(){let r=xe(),e=L.default.join(Dt,r);try{return(0,pe.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 vc(r){let{out:e,err:t}=Ct();try{let n=(0,pe.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:oi(),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 kc(){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 Ec(){ii();let r=new lt;ni(r),r.startLivenessCheck(6e4);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,si.createServer)((n,s)=>{let i=ri(),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 ai(){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){Ec();return}bc()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=yc(),t=wc(e),{ok:n,permissionDenied:s}=t?Sc():{ok:!1,permissionDenied:!1},i=L.default.join(Dt,xe()),{out:o,err:c}=Ct();if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:o,err:c}),kc(),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...
434
+ `)),vc(e),process.exit(0)}var ci=_(require("https")),li=_(require("http"));Oe();var Ic="https://lcars.jerico.appnova.io";function xc(r){return(r??"").trim()}async function di(r,e=!1,t){let n=!(r&&r.trim()),s=n?Ic: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=xc(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 Oc()),o||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await Cc(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");de({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 Oc(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
435
+ `)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function Cc(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?ci.default:li.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 ui=_(require("https")),pi=_(require("http")),Mr=_(require("fs")),Br=_(require("path")),hi=require("node:crypto");Oe();function Pc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function fi(r,e,t){let n=le(),s=(0,hi.createHash)("sha256").update(n.token).digest("hex"),i=Pc(n.server),o=Br.default.resolve(t);Br.default.isAbsolute(o)||(console.error("[bridge] link-project: path must be absolute"),process.exit(1)),Mr.default.existsSync(o)||(console.error("[bridge] link-project: path does not exist:",o),process.exit(1)),Mr.default.statSync(o).isDirectory()||(console.error("[bridge] link-project: path must be a directory:",o),process.exit(1));let a=new URL(`/api/workspaces/${r}/projects/${e}/machine-paths`,i),l=a.protocol==="https:",d=l?ui.default:pi.default;n.projectPaths={...n.projectPaths??{},[e]:o},de(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:Lr()}),f=await new Promise((h,g)=>{let p=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 I="";m.on("data",S=>{I+=S}),m.on("end",()=>{if(m.statusCode===200)h(200);else{try{let S=JSON.parse(I);console.error("[bridge] link-project failed:",S.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}h(m.statusCode??0)}})});p.on("error",m=>{g(m)}),p.write(u),p.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))}Oe();function Ac(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function gi(){let r=le(),e=Ac(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"),rt=require("node:fs"),Ur=_(require("path"));qe();var mi=require("node:os"),Tc=Ur.default.join((0,mi.homedir)(),"Library","LaunchAgents");function _i(){let r=xe(),e=r.replace(".plist",""),t=Ur.default.join(Tc,r);try{(0,$r.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,rt.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=He();if((0,rt.existsSync)(n))try{(0,rt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var te=new tn;te.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.7.0").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)});te.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),ai()});te.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=>{di(r.server,!r.browser,r.token)});te.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)=>{fi(r,e,t)});te.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{gi()});te.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Oe(),Gs)),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")}});te.command("stop").description("Stop the bridge-agent daemon").action(()=>{_i()});te.parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bridge-agent",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
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",