bridge-agent 0.3.5 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bridge-mcp.cjs +115 -23
- package/dist/index.js +57 -37
- package/package.json +1 -1
package/dist/bridge-mcp.cjs
CHANGED
|
@@ -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
|
|
1302
|
+
const err3 = gen.name("err");
|
|
1303
1303
|
gen.forRange("i", errsCount, names_1.default.errors, (i) => {
|
|
1304
|
-
gen.const(
|
|
1305
|
-
gen.if((0, codegen_1._)`${
|
|
1306
|
-
gen.assign((0, codegen_1._)`${
|
|
1304
|
+
gen.const(err3, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`);
|
|
1305
|
+
gen.if((0, codegen_1._)`${err3}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err3}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));
|
|
1306
|
+
gen.assign((0, codegen_1._)`${err3}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`);
|
|
1307
1307
|
if (it.opts.verbose) {
|
|
1308
|
-
gen.assign((0, codegen_1._)`${
|
|
1309
|
-
gen.assign((0, codegen_1._)`${
|
|
1308
|
+
gen.assign((0, codegen_1._)`${err3}.schema`, schemaValue);
|
|
1309
|
+
gen.assign((0, codegen_1._)`${err3}.data`, data);
|
|
1310
1310
|
}
|
|
1311
1311
|
});
|
|
1312
1312
|
}
|
|
1313
1313
|
exports2.extendErrors = extendErrors;
|
|
1314
1314
|
function addError(gen, errObj) {
|
|
1315
|
-
const
|
|
1316
|
-
gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${
|
|
1315
|
+
const err3 = gen.const("err", errObj);
|
|
1316
|
+
gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err3}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err3})`);
|
|
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 (
|
|
7545
|
-
if (
|
|
7544
|
+
} catch (err3) {
|
|
7545
|
+
if (err3?.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
|
|
21247
|
-
if (
|
|
21246
|
+
const err3 = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
21247
|
+
if (err3.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: ${
|
|
21255
|
-
outgoing.destroy(
|
|
21254
|
+
outgoing.end(`Error: ${err3.message}`);
|
|
21255
|
+
outgoing.destroy(err3);
|
|
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 (
|
|
21313
|
-
const errRes = await options.errorHandler(
|
|
21312
|
+
} catch (err3) {
|
|
21313
|
+
const errRes = await options.errorHandler(err3);
|
|
21314
21314
|
if (!errRes) {
|
|
21315
21315
|
return;
|
|
21316
21316
|
}
|
|
@@ -22264,6 +22264,10 @@ function projectPath(ctx, suffix = "") {
|
|
|
22264
22264
|
const base = ctx.serverUrl.replace(/\/$/, "");
|
|
22265
22265
|
return `${base}/api/workspaces/${ctx.workspaceId}/projects/${ctx.projectId}${suffix}`;
|
|
22266
22266
|
}
|
|
22267
|
+
function workspacePath(ctx, suffix = "") {
|
|
22268
|
+
const base = ctx.serverUrl.replace(/\/$/, "");
|
|
22269
|
+
return `${base}/api/workspaces/${ctx.workspaceId}${suffix}`;
|
|
22270
|
+
}
|
|
22267
22271
|
async function request(ctx, method, url, body) {
|
|
22268
22272
|
const res = await fetch(url, {
|
|
22269
22273
|
method,
|
|
@@ -22653,6 +22657,81 @@ function registerMessagingTools(server, ctx) {
|
|
|
22653
22657
|
);
|
|
22654
22658
|
}
|
|
22655
22659
|
|
|
22660
|
+
// ../mcp-server/src/tools/workspace.ts
|
|
22661
|
+
function ok2(data) {
|
|
22662
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
22663
|
+
}
|
|
22664
|
+
function err2(message) {
|
|
22665
|
+
return { content: [{ type: "text", text: JSON.stringify({ ok: false, error: message }) }] };
|
|
22666
|
+
}
|
|
22667
|
+
async function safe2(fn) {
|
|
22668
|
+
try {
|
|
22669
|
+
return ok2(await fn());
|
|
22670
|
+
} catch (e) {
|
|
22671
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
22672
|
+
if (e instanceof Error && (e.name === "TypeError" || e.name === "ReferenceError")) {
|
|
22673
|
+
console.error("[mcp-bridge] unexpected error in workspace tool handler", { name: e.name, message, stack: e.stack });
|
|
22674
|
+
}
|
|
22675
|
+
return err2(message);
|
|
22676
|
+
}
|
|
22677
|
+
}
|
|
22678
|
+
function registerWorkspaceTools(server, ctx) {
|
|
22679
|
+
server.tool(
|
|
22680
|
+
"bridge_list_groups",
|
|
22681
|
+
"List all agent groups in the workspace. Returns groupId, member agentIds, and agent count.",
|
|
22682
|
+
{},
|
|
22683
|
+
() => safe2(() => request(ctx, "GET", workspacePath(ctx, "/groups")))
|
|
22684
|
+
);
|
|
22685
|
+
server.tool(
|
|
22686
|
+
"bridge_get_group_status",
|
|
22687
|
+
"Get all agents in a group with their current status and last output line.",
|
|
22688
|
+
{ groupId: external_exports.string().describe("The group ID to inspect") },
|
|
22689
|
+
({ groupId }) => safe2(() => request(ctx, "GET", workspacePath(ctx, `/groups/${groupId}`)))
|
|
22690
|
+
);
|
|
22691
|
+
server.tool(
|
|
22692
|
+
"bridge_dispatch_to_group",
|
|
22693
|
+
"Send a text message or command to every agent in a group via PTY stdin.",
|
|
22694
|
+
{
|
|
22695
|
+
groupId: external_exports.string().describe("The target group ID"),
|
|
22696
|
+
text: external_exports.string().min(1).max(4096).describe("Text to send to all group members")
|
|
22697
|
+
},
|
|
22698
|
+
({ groupId, text }) => safe2(() => request(ctx, "POST", workspacePath(ctx, `/groups/${groupId}/broadcast`), { text }))
|
|
22699
|
+
);
|
|
22700
|
+
server.tool(
|
|
22701
|
+
"bridge_list_workspace_projects",
|
|
22702
|
+
"List all projects in the workspace with name, cwd, and machineId.",
|
|
22703
|
+
{},
|
|
22704
|
+
() => safe2(() => request(ctx, "GET", workspacePath(ctx, "/projects")))
|
|
22705
|
+
);
|
|
22706
|
+
server.tool(
|
|
22707
|
+
"bridge_query_workspace",
|
|
22708
|
+
"Natural-language query about orchestration state (runs, todos, failures). No LLM involved \u2014 deterministic answer.",
|
|
22709
|
+
{ q: external_exports.string().min(1).max(500).describe('Natural language query, e.g. "what failed last time?"') },
|
|
22710
|
+
({ q }) => safe2(() => request(ctx, "GET", workspacePath(ctx, `/orchestration/query?q=${encodeURIComponent(q)}`)))
|
|
22711
|
+
);
|
|
22712
|
+
server.tool(
|
|
22713
|
+
"bridge_list_active_runs",
|
|
22714
|
+
"All active orchestration runs across workspace projects with todo progress.",
|
|
22715
|
+
{},
|
|
22716
|
+
() => safe2(() => request(ctx, "GET", workspacePath(ctx, "/runs/active")))
|
|
22717
|
+
);
|
|
22718
|
+
server.tool(
|
|
22719
|
+
"bridge_peek_panel",
|
|
22720
|
+
"Read the last N lines of any panel's terminal output, workspace-wide (no project boundary). Use this to check what a specific agent is doing.",
|
|
22721
|
+
{
|
|
22722
|
+
agentId: external_exports.string().describe("The panel/agent ID to peek at"),
|
|
22723
|
+
lines: external_exports.number().int().min(1).max(300).optional().describe("Trailing lines to return (default 50, max 300)")
|
|
22724
|
+
},
|
|
22725
|
+
({ agentId, lines }) => safe2(() => request(ctx, "GET", workspacePath(ctx, `/agents/${agentId}/output${lines !== void 0 ? `?lines=${lines}` : ""}`)))
|
|
22726
|
+
);
|
|
22727
|
+
server.tool(
|
|
22728
|
+
"bridge_status_panel",
|
|
22729
|
+
"Get current status of any panel in the workspace, regardless of project. Returns agentKey, status, daemonId, role, projectId.",
|
|
22730
|
+
{ agentId: external_exports.string().describe("The panel/agent ID to inspect") },
|
|
22731
|
+
({ agentId }) => safe2(() => request(ctx, "GET", workspacePath(ctx, `/agents/${agentId}`)))
|
|
22732
|
+
);
|
|
22733
|
+
}
|
|
22734
|
+
|
|
22656
22735
|
// ../mcp-server/src/index.ts
|
|
22657
22736
|
var sessions = /* @__PURE__ */ new Map();
|
|
22658
22737
|
function buildMcpServer(ctx) {
|
|
@@ -22661,6 +22740,7 @@ function buildMcpServer(ctx) {
|
|
|
22661
22740
|
registerTodoTools(srv, ctx);
|
|
22662
22741
|
registerOrchestrationTools(srv, ctx);
|
|
22663
22742
|
registerMessagingTools(srv, ctx);
|
|
22743
|
+
registerWorkspaceTools(srv, ctx);
|
|
22664
22744
|
return srv;
|
|
22665
22745
|
}
|
|
22666
22746
|
async function parseBody(req) {
|
|
@@ -22733,9 +22813,21 @@ function startHttpServer() {
|
|
|
22733
22813
|
return;
|
|
22734
22814
|
}
|
|
22735
22815
|
if (!preflight.ok) {
|
|
22736
|
-
|
|
22737
|
-
|
|
22738
|
-
|
|
22816
|
+
if (projectId === "workspace" && preflight.status === 404) {
|
|
22817
|
+
const wsPreflight = await fetch(
|
|
22818
|
+
`${bridgeServerUrl.replace(/\/$/, "")}/api/workspaces/${workspaceId}`,
|
|
22819
|
+
{ headers: { Authorization: `Bearer ${token}` } }
|
|
22820
|
+
).catch(() => null);
|
|
22821
|
+
if (!wsPreflight?.ok) {
|
|
22822
|
+
res.writeHead(wsPreflight?.status ?? 500, { "Content-Type": "application/json" });
|
|
22823
|
+
res.end(JSON.stringify({ error: "Workspace not found or server error" }));
|
|
22824
|
+
return;
|
|
22825
|
+
}
|
|
22826
|
+
} else {
|
|
22827
|
+
res.writeHead(preflight.status, { "Content-Type": "application/json" });
|
|
22828
|
+
res.end(JSON.stringify({ error: "Project not found or server error" }));
|
|
22829
|
+
return;
|
|
22830
|
+
}
|
|
22739
22831
|
}
|
|
22740
22832
|
const agentId = (req.headers["x-panel-id"] ?? "") || void 0;
|
|
22741
22833
|
const ctx = { serverUrl: bridgeServerUrl, token, workspaceId, projectId, agentId };
|
|
@@ -22752,8 +22844,8 @@ function startHttpServer() {
|
|
|
22752
22844
|
const mcpServer = buildMcpServer(ctx);
|
|
22753
22845
|
await mcpServer.connect(transport);
|
|
22754
22846
|
await transport.handleRequest(req, res, body);
|
|
22755
|
-
} catch (
|
|
22756
|
-
console.error("[bridge-mcp] request error:",
|
|
22847
|
+
} catch (err3) {
|
|
22848
|
+
console.error("[bridge-mcp] request error:", err3);
|
|
22757
22849
|
if (!res.headersSent) {
|
|
22758
22850
|
res.writeHead(500, { "Content-Type": "application/json" });
|
|
22759
22851
|
res.end(JSON.stringify({ error: "Internal server error" }));
|
|
@@ -22787,8 +22879,8 @@ async function startStdioServer() {
|
|
|
22787
22879
|
if (process.env["HTTP_MODE"] !== "false") {
|
|
22788
22880
|
startHttpServer();
|
|
22789
22881
|
} else {
|
|
22790
|
-
startStdioServer().catch((
|
|
22791
|
-
console.error("[bridge-mcp] fatal:",
|
|
22882
|
+
startStdioServer().catch((err3) => {
|
|
22883
|
+
console.error("[bridge-mcp] fatal:", err3);
|
|
22792
22884
|
process.exit(1);
|
|
22793
22885
|
});
|
|
22794
22886
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`).replace(/^/gm," ".repeat(i))}let
|
|
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
|
|
2
|
+
"use strict";var Ls=Object.create;var gt=Object.defineProperty;var Ms=Object.getOwnPropertyDescriptor;var $s=Object.getOwnPropertyNames;var Bs=Object.getPrototypeOf,Us=Object.prototype.hasOwnProperty;var Ws=(r,e)=>()=>(r&&(e=r(r=0)),e);var x=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Fs=(r,e)=>{for(var t in e)gt(r,t,{get:e[t],enumerable:!0})},qs=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of $s(e))!Us.call(r,s)&&s!==t&>(r,s,{get:()=>e[s],enumerable:!(n=Ms(e,s))||n.enumerable});return r};var _=(r,e,t)=>(t=r!=null?Ls(Bs(r)):{},qs(e||!r||!r.__esModule?gt(t,"default",{value:r,enumerable:!0}):t,r));var xe=x(_t=>{var Ue=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 Ue{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};_t.CommanderError=Ue;_t.InvalidArgumentError=mt});var We=x(bt=>{var{InvalidArgumentError:Hs}=xe(),yt=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 Hs(`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 Gs(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}bt.Argument=yt;bt.humanReadableArgName=Gs});var St=x(br=>{var{humanReadableArgName:Vs}=We(),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=>Vs(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(p,f){if(f){let m=`${p.padEnd(n+o)}${f}`;return t.wrap(m,s-i,n+o)}return p}function a(p){return p.join(`
|
|
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(p=>c(t.argumentTerm(p),t.argumentDescription(p)));u.length>0&&(l=l.concat(["Arguments:",a(u),""]));let h=t.visibleOptions(e).map(p=>c(t.optionTerm(p),t.optionDescription(p)));if(h.length>0&&(l=l.concat(["Options:",a(h),""])),this.showGlobalOptions){let p=t.visibleGlobalOptions(e).map(f=>c(t.optionTerm(f),t.optionDescription(f)));p.length>0&&(l=l.concat(["Global Options:",a(p),""]))}let g=t.visibleCommands(e).map(p=>c(t.subcommandTerm(p),t.subcommandDescription(p)));return g.length>0&&(l=l.concat(["Commands:",a(g),""])),l.join(`
|
|
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),h="\\s\u200B",g=new RegExp(`
|
|
7
|
-
|.{1,${
|
|
7
|
+
|.{1,${c-1}}([${h}]|$)|[^${h}]+?([${h}]|$)`,"g"),p=l.match(g)||[];return a+p.map((f,m)=>f===`
|
|
8
8
|
`?"":(m>0?d:"")+f.trimEnd()).join(`
|
|
9
|
-
`)}};
|
|
9
|
+
`)}};br.Help=wt});var xt=x(kt=>{var{InvalidArgumentError:Ks}=xe(),Et=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=Ys(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 Ks(`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 Js(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},vt=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 Js(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ys(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}}kt.Option=Et;kt.DualOptions=vt});var Sr=x(wr=>{function zs(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 Xs(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=zs(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]}?)`:""}
|
|
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
|
|
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 It(e,t,n)),O.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
|
|
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,
|
|
11
|
+
(Did you mean ${n[0]}?)`:""}wr.suggestSimilar=Xs});var Or=x(xr=>{var Qs=require("node:events").EventEmitter,Ot=require("node:child_process"),H=require("node:path"),Ct=require("node:fs"),O=require("node:process"),{Argument:Zs,humanReadableArgName:ei}=We(),{CommanderError:It}=xe(),{Help:ti}=St(),{Option:Er,DualOptions:ri}=xt(),{suggestSimilar:vr}=Sr(),At=class r extends Qs{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=>O.stdout.write(t),writeErr:t=>O.stderr.write(t),getOutHelpWidth:()=>O.stdout.isTTY?O.stdout.columns:void 0,getErrHelpWidth:()=>O.stderr.isTTY?O.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 ti,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 Zs(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 It(e,t,n)),O.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 Er(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 Er)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){O.versions?.electron&&(t.from="electron");let s=O.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=O.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":O.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 h=H.resolve(d,u);if(Ct.existsSync(h))return h;if(s.includes(H.extname(u)))return;let g=s.find(p=>Ct.existsSync(`${h}${p}`));if(g)return`${h}${g}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,c=this._executableDir||"";if(this._scriptPath){let d;try{d=Ct.realpathSync(this._scriptPath)}catch{d=this._scriptPath}c=H.resolve(H.dirname(d),c)}if(c){let d=i(c,o);if(!d&&!e._executableFile&&this._scriptPath){let u=H.basename(this._scriptPath,H.extname(this._scriptPath));u!==this._name&&(d=i(c,`${u}-${e._name}`))}o=d||o}n=s.includes(H.extname(o));let a;O.platform!=="win32"?n?(t.unshift(o),t=kr(O.execArgv).concat(t),a=Ot.spawn(O.argv[0],t,{stdio:"inherit"})):a=Ot.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=kr(O.execArgv).concat(t),a=Ot.spawn(O.execPath,t,{stdio:"inherit"})),a.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{O.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 It(d,"commander.executeSubCommandAsync","(close)")):O.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",h=`'${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(h)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!
|
|
17
|
+
- ${u}`;throw new Error(h)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)O.exit(1);else{let u=new It(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 O.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,O.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new
|
|
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=>
|
|
20
|
+
`),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in O.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,O.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new ri(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=o=>{let c=o.attributeName(),a=this.getOptionValue(c),l=this.options.find(u=>u.negate&&c===u.attributeName()),d=this.options.find(u=>!u.negate&&c===u.attributeName());return l&&(l.presetArg===void 0&&a===!1||l.presetArg!==void 0&&a===l.presetArg)?l:d||o},s=o=>{let c=n(o),a=c.attributeName();return this.getOptionValueSource(a)==="env"?`environment variable '${c.envVar}'`:`option '${c.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(c=>c.long).map(c=>c.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=vr(e,s)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=vr(e,s)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
21
|
+
`),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=>ei(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=H.basename(e,H.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=O.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
22
22
|
Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
|
|
23
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function vr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}xr.Command=At});var Ar=k(j=>{var{Argument:Or}=We(),{Command:Tt}=kr(),{CommanderError:ri,InvalidArgumentError:Cr}=ke(),{Help:ni}=St(),{Option:Ir}=kt();j.program=new Tt;j.createCommand=r=>new Tt(r);j.createOption=(r,e)=>new Ir(r,e);j.createArgument=(r,e)=>new Or(r,e);j.Command=Tt;j.Option=Ir;j.Argument=Or;j.Help=ni;j.CommanderError=ri;j.InvalidArgumentError=Cr;j.InvalidOptionArgumentError=Cr});var Mr=k(C=>{"use strict";var Pt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),si=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i(await(0,t.stat)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(l,a={})=>{let{ignoreErrors:c=!1}=a;try{return i((0,e.statSync)(l),a)}catch(d){let u=d;if(c||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(l,a)=>l.isFile()&&o(l,a),o=(l,a)=>{let c=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(c===void 0||u===void 0)throw new Error("cannot get uid or gid");let h=new Set([u,...d]),g=l.mode,p=l.uid,f=l.gid,m=parseInt("100",8),x=parseInt("010",8),b=parseInt("001",8),P=m|x;return!!(g&b||g&x&&h.has(f)||g&m&&p===c||g&P&&c===0)}}),ii=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l(await(0,t.stat)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.isexe=s;var i=(a,c={})=>{let{ignoreErrors:d=!1}=c;try{return l((0,e.statSync)(a),a,c)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.sync=i;var o=(a,c)=>{let{pathExt:d=process.env.PATHEXT||""}=c,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let h of u){let g=h.toLowerCase(),p=a.substring(a.length-g.length).toLowerCase();if(g&&p===g)return!0}return!1},l=(a,c,d)=>a.isFile()&&o(c,d)}),oi=Pt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),Nr=C&&C.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),ai=C&&C.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Rr=C&&C.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&Nr(t,e,n[s]);return ai(t,e),t}})(),ci=C&&C.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Nr(e,r,t)};Object.defineProperty(C,"__esModule",{value:!0});C.sync=C.isexe=C.posix=C.win32=void 0;var Dr=Rr(si());C.posix=Dr;var jr=Rr(ii());C.win32=jr;ci(oi(),C);var li=process.env._ISEXE_TEST_PLATFORM_||process.platform,Lr=li==="win32"?jr:Dr;C.isexe=Lr.isexe;C.sync=Lr.sync});var Kr=k((ic,Gr)=>{var{isexe:di,sync:ui}=Mr(),{join:hi,delimiter:fi,sep:$r,posix:Br}=require("path"),Ur=process.platform==="win32",Wr=new RegExp(`[${Br.sep}${$r===Br.sep?"":$r}]`.replace(/(\\)/g,"\\$1")),pi=new RegExp(`^\\.${Wr.source}`),Fr=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),Hr=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=fi})=>{let s=r.match(Wr)?[""]:[...Ur?[process.cwd()]:[],...(e||"").split(n)];if(Ur){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(l=>[l,l.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},qr=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&pi.test(e)?e.slice(0,2):"")+hi(t,e)},Vr=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(await di(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)},gi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let l=qr(o,r);for(let a of n){let c=l+a;if(ui(c,{pathExt:s,ignoreErrors:!0})){if(!e.all)return c;i.push(c)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw Fr(r)};Gr.exports=Vr;Vr.sync=gi});var q=k((lc,en)=>{"use strict";var Qr=["nodebuffer","arraybuffer","fragments"],Zr=typeof Blob<"u";Zr&&Qr.push("blob");en.exports={BINARY_TYPES:Qr,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Zr,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ce=k((dc,Ge)=>{"use strict";var{EMPTY_BUFFER:bi}=q(),jt=Buffer[Symbol.species];function wi(r,e){if(r.length===0)return bi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new jt(t.buffer,t.byteOffset,n):t}function tn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function rn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Si(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Lt(r){if(Lt.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new jt(r):ArrayBuffer.isView(r)?e=new jt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Lt.readOnly=!1),e}Ge.exports={concat:wi,mask:tn,toArrayBuffer:Si,toBuffer:Lt,unmask:rn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Ge.exports.mask=function(e,t,n,s,i){i<48?tn(e,t,n,s,i):r.mask(e,t,n,s,i)},Ge.exports.unmask=function(e,t){e.length<32?rn(e,t):r.unmask(e,t)}}catch{}});var on=k((uc,sn)=>{"use strict";var nn=Symbol("kDone"),Mt=Symbol("kRun"),$t=class{constructor(e){this[nn]=()=>{this.pending--,this[Mt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Mt]()}[Mt](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[nn])}}};sn.exports=$t});var me=k((hc,dn)=>{"use strict";var Ie=require("zlib"),an=Ce(),Ei=on(),{kStatusCode:cn}=q(),vi=Buffer[Symbol.species],xi=Buffer.from([0,0,255,255]),Ye=Symbol("permessage-deflate"),V=Symbol("total-length"),pe=Symbol("callback"),z=Symbol("buffers"),ge=Symbol("error"),Ke,Bt=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Ke){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ke=new Ei(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[pe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ke.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ke.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ie.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Ye]=this,this._inflate[V]=0,this._inflate[z]=[],this._inflate.on("error",Oi),this._inflate.on("data",ln)}this._inflate[pe]=n,this._inflate.write(e),t&&this._inflate.write(xi),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=an.concat(this._inflate[z],this._inflate[V]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[V]=0,this._inflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ie.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[V]=0,this._deflate[z]=[],this._deflate.on("data",ki)}this._deflate[pe]=n,this._deflate.write(e),this._deflate.flush(Ie.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=an.concat(this._deflate[z],this._deflate[V]);t&&(i=new vi(i.buffer,i.byteOffset,i.length-4)),this._deflate[pe]=null,this._deflate[V]=0,this._deflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};dn.exports=Bt;function ki(r){this[z].push(r),this[V]+=r.length}function ln(r){if(this[V]+=r.length,this[Ye]._maxPayload<1||this[V]<=this[Ye]._maxPayload){this[z].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][cn]=1009,this.removeListener("data",ln),this.reset()}function Oi(r){if(this[Ye]._inflate=null,this[ge]){this[pe](this[ge]);return}r[cn]=1007,this[pe](r)}});var _e=k((fc,Je)=>{"use strict";var{isUtf8:un}=require("buffer"),{hasBlob:Ci}=q(),Ii=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Ai(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Ut(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Ti(r){return Ci&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Je.exports={isBlob:Ti,isValidStatusCode:Ai,isValidUTF8:Ut,tokenChars:Ii};if(un)Je.exports.isValidUTF8=function(r){return r.length<24?Ut(r):un(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Je.exports.isValidUTF8=function(e){return e.length<32?Ut(e):r(e)}}catch{}});var Vt=k((pc,yn)=>{"use strict";var{Writable:Pi}=require("stream"),hn=me(),{BINARY_TYPES:Ni,EMPTY_BUFFER:fn,kStatusCode:Ri,kWebSocket:Di}=q(),{concat:Wt,toArrayBuffer:ji,unmask:Li}=Ce(),{isValidStatusCode:Mi,isValidUTF8:pn}=_e(),ze=Buffer[Symbol.species],L=0,gn=1,mn=2,_n=3,Ft=4,Ht=5,Xe=6,qt=class extends Pi{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ni[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Di]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=L}_write(e,t,n){if(this._opcode===8&&this._state==L)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e),new ze(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case L:this.getInfo(e);break;case gn:this.getPayloadLength16(e);break;case mn:this.getPayloadLength64(e);break;case _n:this.getMask();break;case Ft:this.getData(e);break;case Ht:case Xe:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[hn.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=gn:this._payloadLength===127?this._state=mn:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=_n:this._state=Ft}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ft}getData(e){let t=fn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Li(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ht,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[hn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===L&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=L;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Wt(n,t):this._binaryType==="arraybuffer"?s=ji(Wt(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!0),this._state=L,this.startLoop(e)}))}else{let s=Wt(n,t);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ht||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!1),this._state=L,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,fn),this.end();else{let n=e.readUInt16BE(0);if(!Mi(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ze(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!pn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=L;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=L):(this._state=Xe,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=L,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[Ri]=s,o}};yn.exports=qt});var Yt=k((mc,Sn)=>{"use strict";var{Duplex:gc}=require("stream"),{randomFillSync:$i}=require("crypto"),bn=me(),{EMPTY_BUFFER:Bi,kWebSocket:Ui,NOOP:Wi}=q(),{isBlob:ye,isValidStatusCode:Fi}=_e(),{mask:wn,toBuffer:ee}=Ce(),M=Symbol("kByteLength"),Hi=Buffer.alloc(4),Qe=8*1024,te,be=Qe,B=0,qi=1,Vi=2,Gt=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=B,this.onerror=Wi,this[Ui]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Hi,t.generateMask?t.generateMask(n):(be===Qe&&(te===void 0&&(te=Buffer.alloc(Qe)),$i(te,0,Qe),be=0),n[0]=te[be++],n[1]=te[be++],n[2]=te[be++],n[3]=te[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let l;typeof e=="string"?(!t.mask||o)&&t[M]!==void 0?l=t[M]:(e=Buffer.from(e),l=e.length):(l=e.length,s=t.mask&&t.readOnly&&!o);let a=l;l>=65536?(i+=8,a=127):l>125&&(i+=2,a=126);let c=Buffer.allocUnsafe(s?l+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=a,a===126?c.writeUInt16BE(l,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(l,4,6)),t.mask?(c[1]|=128,c[i-4]=n[0],c[i-3]=n[1],c[i-2]=n[2],c[i-1]=n[3],o?[c,e]:s?(wn(e,n,c,i,l),[c]):(wn(e,n,e,0,l),[c,e])):[c,e]}close(e,t,n,s){let i;if(e===void 0)i=Bi;else{if(typeof e!="number"||!Fi(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let l=Buffer.byteLength(t);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+l),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[M]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==B?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[M]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[bn.extensionName],i=t.binary?2:1,o=t.compress,l,a;typeof e=="string"?(l=Buffer.byteLength(e),a=!1):ye(e)?(l=e.size,a=!1):(e=ee(e),l=e.length,a=ee.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[M]:l,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,this._compress,c,n]):this.getBlobData(e,this._compress,c,n):this._state!==B?this.enqueue([this.dispatch,e,this._compress,c,n]):this.dispatch(e,this._compress,c,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[M],this._state=Vi,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Kt,this,l,s);return}this._bufferedBytes-=n[M];let o=ee(i);t?this.dispatch(o,t,n,s):(this._state=B,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Gi,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[bn.extensionName];this._bufferedBytes+=n[M],this._state=qi,i.compress(e,n.fin,(o,l)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");Kt(this,a,s);return}this._bufferedBytes-=n[M],this._state=B,n.readOnly=!1,this.sendFrame(r.frame(l,n),s),this.dequeue()})}dequeue(){for(;this._state===B&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][M],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][M],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Sn.exports=Gt;function Kt(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Gi(r,e,t){Kt(r,e,t),r.onerror(e)}});var Tn=k((_c,An)=>{"use strict";var{kForOnEventAttribute:Ae,kListener:Jt}=q(),En=Symbol("kCode"),vn=Symbol("kData"),xn=Symbol("kError"),kn=Symbol("kMessage"),On=Symbol("kReason"),we=Symbol("kTarget"),Cn=Symbol("kType"),In=Symbol("kWasClean"),G=class{constructor(e){this[we]=null,this[Cn]=e}get target(){return this[we]}get type(){return this[Cn]}};Object.defineProperty(G.prototype,"target",{enumerable:!0});Object.defineProperty(G.prototype,"type",{enumerable:!0});var re=class extends G{constructor(e,t={}){super(e),this[En]=t.code===void 0?0:t.code,this[On]=t.reason===void 0?"":t.reason,this[In]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[En]}get reason(){return this[On]}get wasClean(){return this[In]}};Object.defineProperty(re.prototype,"code",{enumerable:!0});Object.defineProperty(re.prototype,"reason",{enumerable:!0});Object.defineProperty(re.prototype,"wasClean",{enumerable:!0});var Se=class extends G{constructor(e,t={}){super(e),this[xn]=t.error===void 0?null:t.error,this[kn]=t.message===void 0?"":t.message}get error(){return this[xn]}get message(){return this[kn]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Te=class extends G{constructor(e,t={}){super(e),this[vn]=t.data===void 0?null:t.data}get data(){return this[vn]}};Object.defineProperty(Te.prototype,"data",{enumerable:!0});var Ki={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Ae]&&s[Jt]===e&&!s[Ae])return;let n;if(r==="message")n=function(i,o){let l=new Te("message",{data:o?i:i.toString()});l[we]=this,Ze(e,this,l)};else if(r==="close")n=function(i,o){let l=new re("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[we]=this,Ze(e,this,l)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,Ze(e,this,o)};else if(r==="open")n=function(){let i=new G("open");i[we]=this,Ze(e,this,i)};else return;n[Ae]=!!t[Ae],n[Jt]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Jt]===e&&!t[Ae]){this.removeListener(r,t);break}}};An.exports={CloseEvent:re,ErrorEvent:Se,Event:G,EventTarget:Ki,MessageEvent:Te};function Ze(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var et=k((yc,Pn)=>{"use strict";var{tokenChars:Pe}=_e();function W(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Yi(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,l,a=-1,c=-1,d=-1,u=0;for(;u<r.length;u++)if(c=r.charCodeAt(u),o===void 0)if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(u!==0&&(c===32||c===9))d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);c===44?(W(e,g,t),t=Object.create(null)):o=g,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===void 0)if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(c===32||c===9)d===-1&&a!==-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),W(t,r.slice(a,d),!0),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(c===61&&a!==-1&&d===-1)l=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(Pe[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Pe[c]===1)a===-1&&(a=u);else if(c===34&&a!==-1)i=!1,d=u;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Pe[c]===1)a===-1&&(a=u);else if(a!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let g=r.slice(a,d);n&&(g=g.replace(/\\/g,""),n=!1),W(t,l,g),c===44&&(W(e,o,t),t=Object.create(null),o=void 0),l=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=r.slice(a,d);return o===void 0?W(e,h,t):(l===void 0?W(t,h,!0):n?W(t,l,h.replace(/\\/g,"")):W(t,l,h),W(e,o,t)),e}function Ji(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Pn.exports={format:Ji,parse:Yi}});var st=k((Sc,Hn)=>{"use strict";var zi=require("events"),Xi=require("https"),Qi=require("http"),Dn=require("net"),Zi=require("tls"),{randomBytes:eo,createHash:to}=require("crypto"),{Duplex:bc,Readable:wc}=require("stream"),{URL:zt}=require("url"),X=me(),ro=Vt(),no=Yt(),{isBlob:so}=_e(),{BINARY_TYPES:Nn,CLOSE_TIMEOUT:io,EMPTY_BUFFER:tt,GUID:oo,kForOnEventAttribute:Xt,kListener:ao,kStatusCode:co,kWebSocket:A,NOOP:jn}=q(),{EventTarget:{addEventListener:lo,removeEventListener:uo}}=Tn(),{format:ho,parse:fo}=et(),{toBuffer:po}=Ce(),Ln=Symbol("kAborted"),Qt=[8,13],K=["CONNECTING","OPEN","CLOSING","CLOSED"],go=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,v=class r extends zi{constructor(e,t,n){super(),this._binaryType=Nn[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=tt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),Mn(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Nn.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new ro({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new no(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[A]=this,i[A]=this,e[A]=this,s.on("conclude",yo),s.on("drain",bo),s.on("error",wo),s.on("message",So),s.on("ping",Eo),s.on("pong",vo),i.onerror=xo,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Un),e.on("data",nt),e.on("end",Wn),e.on("error",Fn),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[X.extensionName]&&this._extensions[X.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bn(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||tt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||tt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[X.extensionName]||(s.compress=!1),this._sender.send(e||tt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(v,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v.prototype,"CONNECTING",{enumerable:!0,value:K.indexOf("CONNECTING")});Object.defineProperty(v,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v.prototype,"OPEN",{enumerable:!0,value:K.indexOf("OPEN")});Object.defineProperty(v,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v.prototype,"CLOSING",{enumerable:!0,value:K.indexOf("CLOSING")});Object.defineProperty(v,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});Object.defineProperty(v.prototype,"CLOSED",{enumerable:!0,value:K.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(v.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(v.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Xt])return e[ao];return null},set(e){for(let t of this.listeners(r))if(t[Xt]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Xt]:!0})}})});v.prototype.addEventListener=lo;v.prototype.removeEventListener=uo;Hn.exports=v;function Mn(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:io,protocolVersion:Qt[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Qt.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Qt.join(", ")})`);let i;if(e instanceof zt)i=e;else try{i=new zt(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",l=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!l?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let f=new SyntaxError(a);if(r._redirects===0)throw f;rt(r,f);return}let c=o?443:80,d=eo(16).toString("base64"),u=o?Xi.request:Qi.request,h=new Set,g;if(s.createConnection=s.createConnection||(o?_o:mo),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(g=new X({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=ho({[X.extensionName]:g.offer()})),t.length){for(let f of t){if(typeof f!="string"||!go.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),l){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let p;if(s.followRedirects){if(r._redirects===0){r._originalIpc=l,r._originalSecure=o,r._originalHostOrSocketPath=l?s.socketPath:i.host;let f=n&&n.headers;if(n={...n,headers:{}},f)for(let[m,x]of Object.entries(f))n.headers[m.toLowerCase()]=x}else if(r.listenerCount("redirect")===0){let f=l?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!f||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),p=r._req=u(s),r._redirects&&r.emit("redirect",r.url,p)}else p=r._req=u(s);s.timeout&&p.on("timeout",()=>{R(r,p,"Opening handshake has timed out")}),p.on("error",f=>{p===null||p[Ln]||(p=r._req=null,rt(r,f))}),p.on("response",f=>{let m=f.headers.location,x=f.statusCode;if(m&&s.followRedirects&&x>=300&&x<400){if(++r._redirects>s.maxRedirects){R(r,p,"Maximum redirects exceeded");return}p.abort();let b;try{b=new zt(m,e)}catch{let y=new SyntaxError(`Invalid URL: ${m}`);rt(r,y);return}Mn(r,b,t,n)}else r.emit("unexpected-response",p,f)||R(r,p,`Unexpected server response: ${f.statusCode}`)}),p.on("upgrade",(f,m,x)=>{if(r.emit("upgrade",f),r.readyState!==v.CONNECTING)return;p=r._req=null;let b=f.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){R(r,m,"Invalid Upgrade header");return}let P=to("sha1").update(d+oo).digest("base64");if(f.headers["sec-websocket-accept"]!==P){R(r,m,"Invalid Sec-WebSocket-Accept header");return}let y=f.headers["sec-websocket-protocol"],w;if(y!==void 0?h.size?h.has(y)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":h.size&&(w="Server sent no subprotocol"),w){R(r,m,w);return}y&&(r._protocol=y);let S=f.headers["sec-websocket-extensions"];if(S!==void 0){if(!g){R(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let N;try{N=fo(S)}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}let E=Object.keys(N);if(E.length!==1||E[0]!==X.extensionName){R(r,m,"Server indicated an extension that was not requested");return}try{g.accept(N[X.extensionName])}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[X.extensionName]=g}r.setSocket(m,x,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(p,r):p.end()}function rt(r,e){r._readyState=v.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function mo(r){return r.path=r.socketPath,Dn.connect(r)}function _o(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Dn.isIP(r.host)?"":r.host),Zi.connect(r)}function R(r,e,t){r._readyState=v.CLOSING;let n=new Error(t);Error.captureStackTrace(n,R),e.setHeader?(e[Ln]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(rt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Zt(r,e,t){if(e){let n=so(e)?e.size:po(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${K[r.readyState]})`);process.nextTick(t,n)}}function yo(r,e){let t=this[A];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[A]!==void 0&&(t._socket.removeListener("data",nt),process.nextTick($n,t._socket),r===1005?t.close():t.close(r,e))}function bo(){let r=this[A];r.isPaused||r._socket.resume()}function wo(r){let e=this[A];e._socket[A]!==void 0&&(e._socket.removeListener("data",nt),process.nextTick($n,e._socket),e.close(r[co])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Rn(){this[A].emitClose()}function So(r,e){this[A].emit("message",r,e)}function Eo(r){let e=this[A];e._autoPong&&e.pong(r,!this._isServer,jn),e.emit("ping",r)}function vo(r){this[A].emit("pong",r)}function $n(r){r.resume()}function xo(r){let e=this[A];e.readyState!==v.CLOSED&&(e.readyState===v.OPEN&&(e._readyState=v.CLOSING,Bn(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Bn(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Un(){let r=this[A];if(this.removeListener("close",Un),this.removeListener("data",nt),this.removeListener("end",Wn),r._readyState=v.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[A]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Rn),r._receiver.on("finish",Rn))}function nt(r){this[A]._receiver.write(r)||this.pause()}function Wn(){let r=this[A];r._readyState=v.CLOSING,r._receiver.end(),this.end()}function Fn(){let r=this[A];this.removeListener("error",Fn),this.on("error",jn),r&&(r._readyState=v.CLOSING,this.destroy())}});var Kn=k((vc,Gn)=>{"use strict";var Ec=st(),{Duplex:ko}=require("stream");function qn(r){r.emit("close")}function Oo(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Vn(r){this.removeListener("error",Vn),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Co(r,e){let t=!0,n=new ko({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let l=!o&&n._readableState.objectMode?i.toString():i;n.push(l)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(qn,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(qn,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",Oo),n.on("error",Vn),n}Gn.exports=Co});var er=k((xc,Yn)=>{"use strict";var{tokenChars:Io}=_e();function Ao(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&Io[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let l=r.slice(t,n);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Yn.exports={parse:Ao}});var ts=k((Oc,es)=>{"use strict";var To=require("events"),it=require("http"),{Duplex:kc}=require("stream"),{createHash:Po}=require("crypto"),Jn=et(),ne=me(),No=er(),Ro=st(),{CLOSE_TIMEOUT:Do,GUID:jo,kWebSocket:Lo}=q(),Mo=/^[+/0-9A-Za-z]{22}==$/,zn=0,Xn=1,Zn=2,tr=class extends To{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Do,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Ro,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=it.createServer((n,s)=>{let i=it.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=$o(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=zn}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Zn){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Ne,this);return}if(e&&this.once("close",e),this._state!==Xn)if(this._state=Xn,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Ne,this):process.nextTick(Ne,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Ne(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",Qn);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){se(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){se(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Mo.test(i)){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Re(t,400);return}let a=e.headers["sec-websocket-protocol"],c=new Set;if(a!==void 0)try{c=No.parse(a)}catch{se(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new ne({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=Jn.parse(d);g[ne.extensionName]&&(h.accept(g[ne.extensionName]),u[ne.extensionName]=h)}catch{se(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(g,p,f,m)=>{if(!g)return Re(t,p||401,f,m);this.completeUpgrade(u,i,c,e,t,n,s)});return}if(!this.options.verifyClient(h))return Re(t,401)}this.completeUpgrade(u,i,c,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,l){if(!i.readable||!i.writable)return i.destroy();if(i[Lo])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>zn)return Re(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Po("sha1").update(t+jo).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let u=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[ne.extensionName]){let u=e[ne.extensionName].params,h=Jn.format({[ne.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
|
|
23
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function 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})}xr.Command=At});var Pr=x(L=>{var{Argument:Cr}=We(),{Command:Pt}=Or(),{CommanderError:ni,InvalidArgumentError:Ir}=xe(),{Help:si}=St(),{Option:Ar}=xt();L.program=new Pt;L.createCommand=r=>new Pt(r);L.createOption=(r,e)=>new Ar(r,e);L.createArgument=(r,e)=>new Cr(r,e);L.Command=Pt;L.Option=Ar;L.Argument=Cr;L.Help=si;L.CommanderError=ni;L.InvalidArgumentError=Ir;L.InvalidOptionArgumentError=Ir});var $r=x(I=>{"use strict";var Tt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ii=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=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 h=new Set([u,...d]),g=c.mode,p=c.uid,f=c.gid,m=parseInt("100",8),k=parseInt("010",8),b=parseInt("001",8),T=m|k;return!!(g&b||g&k&&h.has(f)||g&m&&p===l||g&T&&l===0)}}),oi=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c(await(0,t.stat)(a),a,l)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};r.isexe=s;var i=(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c((0,e.statSync)(a),a,l)}catch(u){let h=u;if(d||h.code==="EACCES")return!1;throw h}};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 h of u){let g=h.toLowerCase(),p=a.substring(a.length-g.length).toLowerCase();if(g&&p===g)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),ai=Tt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),Rr=I&&I.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),ci=I&&I.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),Dr=I&&I.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&Rr(t,e,n[s]);return ci(t,e),t}})(),li=I&&I.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Rr(e,r,t)};Object.defineProperty(I,"__esModule",{value:!0});I.sync=I.isexe=I.posix=I.win32=void 0;var jr=Dr(ii());I.posix=jr;var Lr=Dr(oi());I.win32=Lr;li(ai(),I);var di=process.env._ISEXE_TEST_PLATFORM_||process.platform,Mr=di==="win32"?Lr:jr;I.isexe=Mr.isexe;I.sync=Mr.sync});var Jr=x((ic,Kr)=>{var{isexe:ui,sync:hi}=$r(),{join:fi,delimiter:pi,sep:Br,posix:Ur}=require("path"),Wr=process.platform==="win32",Fr=new RegExp(`[${Ur.sep}${Br===Ur.sep?"":Br}]`.replace(/(\\)/g,"\\$1")),gi=new RegExp(`^\\.${Fr.source}`),qr=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),Hr=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=pi})=>{let s=r.match(Fr)?[""]:[...Wr?[process.cwd()]:[],...(e||"").split(n)];if(Wr){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:[""]}},Gr=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&gi.test(e)?e.slice(0,2):"")+fi(t,e)},Vr=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let c=Gr(o,r);for(let a of n){let l=c+a;if(await ui(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 qr(r)},mi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=Hr(r,e),i=[];for(let o of t){let c=Gr(o,r);for(let a of n){let l=c+a;if(hi(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw qr(r)};Kr.exports=Vr;Vr.sync=mi});var G=x((lc,tn)=>{"use strict";var Zr=["nodebuffer","arraybuffer","fragments"],en=typeof Blob<"u";en&&Zr.push("blob");tn.exports={BINARY_TYPES:Zr,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 Ce=x((dc,Ve)=>{"use strict";var{EMPTY_BUFFER:wi}=G(),jt=Buffer[Symbol.species];function Si(r,e){if(r.length===0)return wi;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new jt(t.buffer,t.byteOffset,n):t}function rn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function nn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function Ei(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Lt(r){if(Lt.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new jt(r):ArrayBuffer.isView(r)?e=new jt(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Lt.readOnly=!1),e}Ve.exports={concat:Si,mask:rn,toArrayBuffer:Ei,toBuffer:Lt,unmask:nn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");Ve.exports.mask=function(e,t,n,s,i){i<48?rn(e,t,n,s,i):r.mask(e,t,n,s,i)},Ve.exports.unmask=function(e,t){e.length<32?nn(e,t):r.unmask(e,t)}}catch{}});var an=x((uc,on)=>{"use strict";var sn=Symbol("kDone"),Mt=Symbol("kRun"),$t=class{constructor(e){this[sn]=()=>{this.pending--,this[Mt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Mt]()}[Mt](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[sn])}}};on.exports=$t});var me=x((hc,un)=>{"use strict";var Ie=require("zlib"),cn=Ce(),vi=an(),{kStatusCode:ln}=G(),ki=Buffer[Symbol.species],xi=Buffer.from([0,0,255,255]),Je=Symbol("permessage-deflate"),V=Symbol("total-length"),pe=Symbol("callback"),z=Symbol("buffers"),ge=Symbol("error"),Ke,Bt=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Ke){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Ke=new vi(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[pe];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){Ke.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){Ke.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ie.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Je]=this,this._inflate[V]=0,this._inflate[z]=[],this._inflate.on("error",Ci),this._inflate.on("data",dn)}this._inflate[pe]=n,this._inflate.write(e),t&&this._inflate.write(xi),this._inflate.flush(()=>{let i=this._inflate[ge];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=cn.concat(this._inflate[z],this._inflate[V]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[V]=0,this._inflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?Ie.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ie.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[V]=0,this._deflate[z]=[],this._deflate.on("data",Oi)}this._deflate[pe]=n,this._deflate.write(e),this._deflate.flush(Ie.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=cn.concat(this._deflate[z],this._deflate[V]);t&&(i=new ki(i.buffer,i.byteOffset,i.length-4)),this._deflate[pe]=null,this._deflate[V]=0,this._deflate[z]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};un.exports=Bt;function Oi(r){this[z].push(r),this[V]+=r.length}function dn(r){if(this[V]+=r.length,this[Je]._maxPayload<1||this[V]<=this[Je]._maxPayload){this[z].push(r);return}this[ge]=new RangeError("Max payload size exceeded"),this[ge].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ge][ln]=1009,this.removeListener("data",dn),this.reset()}function Ci(r){if(this[Je]._inflate=null,this[ge]){this[pe](this[ge]);return}r[ln]=1007,this[pe](r)}});var _e=x((fc,Ye)=>{"use strict";var{isUtf8:hn}=require("buffer"),{hasBlob:Ii}=G(),Ai=[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 Pi(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Ut(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function Ti(r){return Ii&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}Ye.exports={isBlob:Ti,isValidStatusCode:Pi,isValidUTF8:Ut,tokenChars:Ai};if(hn)Ye.exports.isValidUTF8=function(r){return r.length<24?Ut(r):hn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");Ye.exports.isValidUTF8=function(e){return e.length<32?Ut(e):r(e)}}catch{}});var Gt=x((pc,bn)=>{"use strict";var{Writable:Ni}=require("stream"),fn=me(),{BINARY_TYPES:Ri,EMPTY_BUFFER:pn,kStatusCode:Di,kWebSocket:ji}=G(),{concat:Wt,toArrayBuffer:Li,unmask:Mi}=Ce(),{isValidStatusCode:$i,isValidUTF8:gn}=_e(),ze=Buffer[Symbol.species],M=0,mn=1,_n=2,yn=3,Ft=4,qt=5,Xe=6,Ht=class extends Ni{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Ri[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[ji]=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=M}_write(e,t,n){if(this._opcode===8&&this._state==M)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e),new ze(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ze(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case M:this.getInfo(e);break;case mn:this.getPayloadLength16(e);break;case _n:this.getPayloadLength64(e);break;case yn:this.getMask();break;case Ft:this.getData(e);break;case qt:case Xe:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[fn.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=mn:this._payloadLength===127?this._state=_n: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=yn:this._state=Ft}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ft}getData(e){let t=pn;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&&Mi(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=qt,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[fn.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===M&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=M;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Wt(n,t):this._binaryType==="arraybuffer"?s=Li(Wt(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=M):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!0),this._state=M,this.startLoop(e)}))}else{let s=Wt(n,t);if(!this._skipUTF8Validation&&!gn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===qt||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=M):(this._state=Xe,setImmediate(()=>{this.emit("message",s,!1),this._state=M,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,pn),this.end();else{let n=e.readUInt16BE(0);if(!$i(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ze(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!gn(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=M;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=M):(this._state=Xe,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=M,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[Di]=s,o}};bn.exports=Ht});var Jt=x((mc,En)=>{"use strict";var{Duplex:gc}=require("stream"),{randomFillSync:Bi}=require("crypto"),wn=me(),{EMPTY_BUFFER:Ui,kWebSocket:Wi,NOOP:Fi}=G(),{isBlob:ye,isValidStatusCode:qi}=_e(),{mask:Sn,toBuffer:ee}=Ce(),$=Symbol("kByteLength"),Hi=Buffer.alloc(4),Qe=8*1024,te,be=Qe,B=0,Gi=1,Vi=2,Vt=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=B,this.onerror=Fi,this[Wi]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Hi,t.generateMask?t.generateMask(n):(be===Qe&&(te===void 0&&(te=Buffer.alloc(Qe)),Bi(te,0,Qe),be=0),n[0]=te[be++],n[1]=te[be++],n[2]=te[be++],n[3]=te[be++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[$]!==void 0?c=t[$]:(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?(Sn(e,n,l,i,c),[l]):(Sn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=Ui;else{if(typeof e!="number"||!qi(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={[$]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==B?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[$]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):ye(e)?(s=e.size,i=!1):(e=ee(e),s=e.length,i=ee.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[$]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==B?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[wn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):ye(e)?(c=e.size,a=!1):(e=ee(e),c=e.length,a=ee.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[$]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};ye(e)?this._state!==B?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==B?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[$],this._state=Vi,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(Kt,this,c,s);return}this._bufferedBytes-=n[$];let o=ee(i);t?this.dispatch(o,t,n,s):(this._state=B,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Ki,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[wn.extensionName];this._bufferedBytes+=n[$],this._state=Gi,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");Kt(this,a,s);return}this._bufferedBytes-=n[$],this._state=B,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===B&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][$],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][$],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)}};En.exports=Vt;function Kt(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Ki(r,e,t){Kt(r,e,t),r.onerror(e)}});var Tn=x((_c,Pn)=>{"use strict";var{kForOnEventAttribute:Ae,kListener:Yt}=G(),vn=Symbol("kCode"),kn=Symbol("kData"),xn=Symbol("kError"),On=Symbol("kMessage"),Cn=Symbol("kReason"),we=Symbol("kTarget"),In=Symbol("kType"),An=Symbol("kWasClean"),K=class{constructor(e){this[we]=null,this[In]=e}get target(){return this[we]}get type(){return this[In]}};Object.defineProperty(K.prototype,"target",{enumerable:!0});Object.defineProperty(K.prototype,"type",{enumerable:!0});var re=class extends K{constructor(e,t={}){super(e),this[vn]=t.code===void 0?0:t.code,this[Cn]=t.reason===void 0?"":t.reason,this[An]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[vn]}get reason(){return this[Cn]}get wasClean(){return this[An]}};Object.defineProperty(re.prototype,"code",{enumerable:!0});Object.defineProperty(re.prototype,"reason",{enumerable:!0});Object.defineProperty(re.prototype,"wasClean",{enumerable:!0});var Se=class extends K{constructor(e,t={}){super(e),this[xn]=t.error===void 0?null:t.error,this[On]=t.message===void 0?"":t.message}get error(){return this[xn]}get message(){return this[On]}};Object.defineProperty(Se.prototype,"error",{enumerable:!0});Object.defineProperty(Se.prototype,"message",{enumerable:!0});var Pe=class extends K{constructor(e,t={}){super(e),this[kn]=t.data===void 0?null:t.data}get data(){return this[kn]}};Object.defineProperty(Pe.prototype,"data",{enumerable:!0});var Ji={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Ae]&&s[Yt]===e&&!s[Ae])return;let n;if(r==="message")n=function(i,o){let c=new Pe("message",{data:o?i:i.toString()});c[we]=this,Ze(e,this,c)};else if(r==="close")n=function(i,o){let c=new re("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[we]=this,Ze(e,this,c)};else if(r==="error")n=function(i){let o=new Se("error",{error:i,message:i.message});o[we]=this,Ze(e,this,o)};else if(r==="open")n=function(){let i=new K("open");i[we]=this,Ze(e,this,i)};else return;n[Ae]=!!t[Ae],n[Yt]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Yt]===e&&!t[Ae]){this.removeListener(r,t);break}}};Pn.exports={CloseEvent:re,ErrorEvent:Se,Event:K,EventTarget:Ji,MessageEvent:Pe};function Ze(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var et=x((yc,Nn)=>{"use strict";var{tokenChars:Te}=_e();function F(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Yi(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,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&&Te[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 g=r.slice(a,d);l===44?(F(e,g,t),t=Object.create(null)):o=g,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&Te[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),F(t,r.slice(a,d),!0),l===44&&(F(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(Te[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Te[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&&Te[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 g=r.slice(a,d);n&&(g=g.replace(/\\/g,""),n=!1),F(t,c,g),l===44&&(F(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 h=r.slice(a,d);return o===void 0?F(e,h,t):(c===void 0?F(t,h,!0):n?F(t,c,h.replace(/\\/g,"")):F(t,c,h),F(e,o,t)),e}function zi(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(", ")}Nn.exports={format:zi,parse:Yi}});var st=x((Sc,Hn)=>{"use strict";var Xi=require("events"),Qi=require("https"),Zi=require("http"),jn=require("net"),eo=require("tls"),{randomBytes:to,createHash:ro}=require("crypto"),{Duplex:bc,Readable:wc}=require("stream"),{URL:zt}=require("url"),X=me(),no=Gt(),so=Jt(),{isBlob:io}=_e(),{BINARY_TYPES:Rn,CLOSE_TIMEOUT:oo,EMPTY_BUFFER:tt,GUID:ao,kForOnEventAttribute:Xt,kListener:co,kStatusCode:lo,kWebSocket:A,NOOP:Ln}=G(),{EventTarget:{addEventListener:uo,removeEventListener:ho}}=Tn(),{format:fo,parse:po}=et(),{toBuffer:go}=Ce(),Mn=Symbol("kAborted"),Qt=[8,13],J=["CONNECTING","OPEN","CLOSING","CLOSED"],mo=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,v=class r extends Xi{constructor(e,t,n){super(),this._binaryType=Rn[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=tt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),$n(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Rn.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 no({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new so(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[A]=this,i[A]=this,e[A]=this,s.on("conclude",bo),s.on("drain",wo),s.on("error",So),s.on("message",Eo),s.on("ping",vo),s.on("pong",ko),i.onerror=xo,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Wn),e.on("data",nt),e.on("end",Fn),e.on("error",qn),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[X.extensionName]&&this._extensions[X.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Un(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||tt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||tt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){Zt(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[X.extensionName]||(s.compress=!1),this._sender.send(e||tt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){R(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(v,"CONNECTING",{enumerable:!0,value:J.indexOf("CONNECTING")});Object.defineProperty(v.prototype,"CONNECTING",{enumerable:!0,value:J.indexOf("CONNECTING")});Object.defineProperty(v,"OPEN",{enumerable:!0,value:J.indexOf("OPEN")});Object.defineProperty(v.prototype,"OPEN",{enumerable:!0,value:J.indexOf("OPEN")});Object.defineProperty(v,"CLOSING",{enumerable:!0,value:J.indexOf("CLOSING")});Object.defineProperty(v.prototype,"CLOSING",{enumerable:!0,value:J.indexOf("CLOSING")});Object.defineProperty(v,"CLOSED",{enumerable:!0,value:J.indexOf("CLOSED")});Object.defineProperty(v.prototype,"CLOSED",{enumerable:!0,value:J.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(v.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(v.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Xt])return e[co];return null},set(e){for(let t of this.listeners(r))if(t[Xt]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Xt]:!0})}})});v.prototype.addEventListener=uo;v.prototype.removeEventListener=ho;Hn.exports=v;function $n(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:oo,protocolVersion:Qt[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!Qt.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Qt.join(", ")})`);let i;if(e instanceof zt)i=e;else try{i=new zt(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",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 f=new SyntaxError(a);if(r._redirects===0)throw f;rt(r,f);return}let l=o?443:80,d=to(16).toString("base64"),u=o?Qi.request:Zi.request,h=new Set,g;if(s.createConnection=s.createConnection||(o?yo:_o),s.defaultPort=s.defaultPort||l,s.port=i.port||l,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(g=new X({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=fo({[X.extensionName]:g.offer()})),t.length){for(let f of t){if(typeof f!="string"||!mo.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),c){let f=s.path.split(":");s.socketPath=f[0],s.path=f[1]}let p;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let f=n&&n.headers;if(n={...n,headers:{}},f)for(let[m,k]of Object.entries(f))n.headers[m.toLowerCase()]=k}else if(r.listenerCount("redirect")===0){let f=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!f||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,f||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),p=r._req=u(s),r._redirects&&r.emit("redirect",r.url,p)}else p=r._req=u(s);s.timeout&&p.on("timeout",()=>{R(r,p,"Opening handshake has timed out")}),p.on("error",f=>{p===null||p[Mn]||(p=r._req=null,rt(r,f))}),p.on("response",f=>{let m=f.headers.location,k=f.statusCode;if(m&&s.followRedirects&&k>=300&&k<400){if(++r._redirects>s.maxRedirects){R(r,p,"Maximum redirects exceeded");return}p.abort();let b;try{b=new zt(m,e)}catch{let y=new SyntaxError(`Invalid URL: ${m}`);rt(r,y);return}$n(r,b,t,n)}else r.emit("unexpected-response",p,f)||R(r,p,`Unexpected server response: ${f.statusCode}`)}),p.on("upgrade",(f,m,k)=>{if(r.emit("upgrade",f),r.readyState!==v.CONNECTING)return;p=r._req=null;let b=f.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){R(r,m,"Invalid Upgrade header");return}let T=ro("sha1").update(d+ao).digest("base64");if(f.headers["sec-websocket-accept"]!==T){R(r,m,"Invalid Sec-WebSocket-Accept header");return}let y=f.headers["sec-websocket-protocol"],w;if(y!==void 0?h.size?h.has(y)||(w="Server sent an invalid subprotocol"):w="Server sent a subprotocol but none was requested":h.size&&(w="Server sent no subprotocol"),w){R(r,m,w);return}y&&(r._protocol=y);let S=f.headers["sec-websocket-extensions"];if(S!==void 0){if(!g){R(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let N;try{N=po(S)}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}let E=Object.keys(N);if(E.length!==1||E[0]!==X.extensionName){R(r,m,"Server indicated an extension that was not requested");return}try{g.accept(N[X.extensionName])}catch{R(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[X.extensionName]=g}r.setSocket(m,k,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(p,r):p.end()}function rt(r,e){r._readyState=v.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function _o(r){return r.path=r.socketPath,jn.connect(r)}function yo(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=jn.isIP(r.host)?"":r.host),eo.connect(r)}function R(r,e,t){r._readyState=v.CLOSING;let n=new Error(t);Error.captureStackTrace(n,R),e.setHeader?(e[Mn]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(rt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function Zt(r,e,t){if(e){let n=io(e)?e.size:go(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${J[r.readyState]})`);process.nextTick(t,n)}}function bo(r,e){let t=this[A];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[A]!==void 0&&(t._socket.removeListener("data",nt),process.nextTick(Bn,t._socket),r===1005?t.close():t.close(r,e))}function wo(){let r=this[A];r.isPaused||r._socket.resume()}function So(r){let e=this[A];e._socket[A]!==void 0&&(e._socket.removeListener("data",nt),process.nextTick(Bn,e._socket),e.close(r[lo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Dn(){this[A].emitClose()}function Eo(r,e){this[A].emit("message",r,e)}function vo(r){let e=this[A];e._autoPong&&e.pong(r,!this._isServer,Ln),e.emit("ping",r)}function ko(r){this[A].emit("pong",r)}function Bn(r){r.resume()}function xo(r){let e=this[A];e.readyState!==v.CLOSED&&(e.readyState===v.OPEN&&(e._readyState=v.CLOSING,Un(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Un(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Wn(){let r=this[A];if(this.removeListener("close",Wn),this.removeListener("data",nt),this.removeListener("end",Fn),r._readyState=v.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[A]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Dn),r._receiver.on("finish",Dn))}function nt(r){this[A]._receiver.write(r)||this.pause()}function Fn(){let r=this[A];r._readyState=v.CLOSING,r._receiver.end(),this.end()}function qn(){let r=this[A];this.removeListener("error",qn),this.on("error",Ln),r&&(r._readyState=v.CLOSING,this.destroy())}});var Jn=x((vc,Kn)=>{"use strict";var Ec=st(),{Duplex:Oo}=require("stream");function Gn(r){r.emit("close")}function Co(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Vn(r){this.removeListener("error",Vn),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function Io(r,e){let t=!0,n=new Oo({...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(Gn,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(Gn,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",Co),n.on("error",Vn),n}Kn.exports=Io});var er=x((kc,Yn)=>{"use strict";var{tokenChars:Ao}=_e();function Po(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&&Ao[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}Yn.exports={parse:Po}});var rs=x((Oc,ts)=>{"use strict";var To=require("events"),it=require("http"),{Duplex:xc}=require("stream"),{createHash:No}=require("crypto"),zn=et(),ne=me(),Ro=er(),Do=st(),{CLOSE_TIMEOUT:jo,GUID:Lo,kWebSocket:Mo}=G(),$o=/^[+/0-9A-Za-z]{22}==$/,Xn=0,Qn=1,es=2,tr=class extends To{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:jo,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Do,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=it.createServer((n,s)=>{let i=it.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Bo(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=Xn}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(Ne,this);return}if(e&&this.once("close",e),this._state!==Qn)if(this._state=Qn,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Ne,this):process.nextTick(Ne,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Ne(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",Zn);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){se(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){se(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!$o.test(i)){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){se(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Re(t,400);return}let a=e.headers["sec-websocket-protocol"],l=new Set;if(a!==void 0)try{l=Ro.parse(a)}catch{se(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new ne({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=zn.parse(d);g[ne.extensionName]&&(h.accept(g[ne.extensionName]),u[ne.extensionName]=h)}catch{se(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(g,p,f,m)=>{if(!g)return Re(t,p||401,f,m);this.completeUpgrade(u,i,l,e,t,n,s)});return}if(!this.options.verifyClient(h))return Re(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[Mo])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Xn)return Re(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${No("sha1").update(t+Lo).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[ne.extensionName]){let u=e[ne.extensionName].params,h=zn.format({[ne.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
24
24
|
`).join(`\r
|
|
25
|
-
`)),i.removeListener("error",
|
|
25
|
+
`)),i.removeListener("error",Zn),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Ne,this)})),c(d,s)}};ts.exports=tr;function Bo(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function Ne(r){r._state=es,r.emit("close")}function Zn(){this.destroy()}function Re(r,e,t,n){t=t||it.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${it.STATUS_CODES[e]}\r
|
|
26
26
|
`+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
|
|
27
27
|
`)+`\r
|
|
28
28
|
\r
|
|
29
|
-
`+t)}function se(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,se),r.emit("wsClientError",o,t,e)}else Re(t,n,s,i)}});var
|
|
30
|
-
`,
|
|
31
|
-
`)[0].trim()||void 0}catch{return}}function
|
|
32
|
-
`);for(let n=t.length-1;n>=0;n--){let s=t[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let
|
|
33
|
-
`)){let p=g.trim();if(p)try{let f=JSON.parse(p);if(f.type!=="user"||f.message?.role!=="user"||f.userType!==void 0&&f.userType!=="external")continue;let
|
|
34
|
-
`,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:
|
|
29
|
+
`+t)}function se(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,se),r.emit("wsClientError",o,t,e)}else Re(t,n,s,i)}});var cs={};Fs(cs,{loadConfig:()=>ie,loadProjectSettings:()=>sr,saveConfig:()=>oe});function De(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function ie(){let r=Y.default.existsSync(ot)?ot:as;Y.default.existsSync(r)||(console.error("[bridge] Config not found. Run: bridge-agent auth"),process.exit(1));let e=Y.default.readFileSync(r,"utf-8"),t;try{t=JSON.parse(e)}catch{console.error("[bridge] Invalid config file at",as),process.exit(1)}(!t||typeof t!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let n=t,s=typeof n.server=="string"?n.server:"",i=typeof n.token=="string"?n.token:"",o=typeof n.name=="string"?n.name:"bridge-agent";(!s||!i)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let c={server:s,token:i,name:o},a=De(n,"agentPaths"),l=De(n,"projectPaths");return a&&(c.agentPaths=a),l&&(c.projectPaths=l),c}function oe(r){let e=je.default.dirname(ot);Y.default.existsSync(e)||Y.default.mkdirSync(e,{recursive:!0}),Y.default.writeFileSync(ot,JSON.stringify(r,null,2),{mode:384})}function sr(r){let e=je.default.join(r??process.cwd(),".jerico","settings.json");if(!Y.default.existsSync(e))return{};try{let t=Y.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=De(s,"hooks"),c=De(s,"env"),a=De(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 Y,je,nr,ot,as,Ee=Ws(()=>{"use strict";Y=_(require("fs")),je=_(require("path")),nr=_(require("os"));ot=je.default.join(nr.default.homedir(),".jerico","settings.json"),as=je.default.join(nr.default.homedir(),".bridge","config.json")});var Tr=_(Pr(),1),{program:Ka,createCommand:Ja,createArgument:Ya,createOption:za,CommanderError:Xa,InvalidArgumentError:Qa,InvalidOptionArgumentError:Za,Command:Nr,Argument:ec,Option:tc,Help:rc}=Tr.default;var Es=require("node:http"),le=require("node:child_process"),P=require("node:fs"),Z=require("node:os"),j=_(require("path"));var Qr=_(require("node-pty"));var Rt=_(Jr()),he=_(require("fs")),Oe=_(require("path")),zr=_(require("net")),Xr=require("child_process"),Fe=r=>r+`
|
|
30
|
+
`,qe=r=>r.replace(/[\r\n]+$/,"")+"\r",fe=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:Fe},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>Nt(".claude")||ue("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:qe,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>ue("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:qe},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>Nt(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:qe,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>ue("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:Fe},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>bi(11434),formatInput:Fe},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>ue("OPENAI_API_KEY")||ue("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:Fe},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>Nt(".kimi")||ue("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["-r",r,"--yolo"],supportsMcpConfig:!0,formatInput:qe,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]}];var Yr=process.env.HOME??"/Users/unknown";function He(r){try{let e=(0,Xr.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 _i(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=Oe.default.join(Yr,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=he.default.readdirSync(s)}catch{}i.sort((o,c)=>c.localeCompare(o));for(let o of i){let c=Oe.default.join(s,o,r.binary);if(he.default.existsSync(c)){let a=He(c);e.push({path:c,version:a})}}}else{let i=Oe.default.join(Yr,n);if(he.default.existsSync(i)){let o=He(i);e.push({path:i,version:o})}}}return e}async function yi(r,e={}){if(e[r.key]){let n=e[r.key],s=He(n);if(s)return{path:n,version:s}}try{let n=await(0,Rt.default)(r.binary);if(n&&he.default.existsSync(n)){let s=He(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=_i(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Rt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function Dt(r={}){let e=[];for(let t of fe)try{let{path:n,version:s}=await yi(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:fe.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function Nt(r){return he.default.existsSync(Oe.default.join(process.env.HOME??"",r))}function ue(r){return!!process.env[r]}async function bi(r){return new Promise(e=>{let t=zr.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 Ge=class{handles=new Map;nextInstanceId=1;lastErrors=new Map;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)),h=Math.max(1,Math.min(500,o)),g={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(g.BRIDGE_SERVER_URL=l.serverUrl,g.BRIDGE_TOKEN=l.token,g.BRIDGE_WORKSPACE_ID=l.workspaceId,g.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(g,l.projectEnv));let p=process.env.BRIDGE_MCP_URL;p&&(g.BRIDGE_MCP_URL=p);let f;try{f=Qr.spawn(n,s,{name:"xterm-256color",cols:u,rows:h,cwd:l?.cwd,env:g})}catch(b){let T=b instanceof Error?b.message:String(b);return this.lastErrors.set(e,T),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:T}),!1}let m=this.nextInstanceId++,k={agentId:e,agentKey:t,process:f,pid:f.pid,killed:!1,instanceId:m};return f.onData(b=>{let T=this.handles.get(e);!T||T.instanceId!==m||k.killed||c(Buffer.from(b).toString("base64"))}),f.onExit(({exitCode:b,signal:T})=>{let y=this.handles.get(e);!y||y.instanceId!==m||k.killed||k.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:b,signal:T}),a(b??null,T?String(T):null))}),this.lastErrors.delete(e),this.handles.set(e,k),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:l?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:t.length});return}let i=Buffer.from(t,"base64").toString(),o=fe.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 Uo=_(Jn(),1),Wo=_(et(),1),Fo=_(me(),1),qo=_(Gt(),1),Ho=_(Jt(),1),Go=_(er(),1),ns=_(st(),1),Vo=_(rs(),1);var C=ns.default;var U=_(require("fs")),D=_(require("path")),q=_(require("os")),dt=require("node:child_process"),fr=require("node:crypto");var ss=r=>r;var is=r=>r,os=r=>r;function rr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}Ee();var Le=_(require("fs")),ir=_(require("path")),ls=_(require("os")),Ko=2e5;function Jo(r){let e=ir.default.join(ls.default.homedir(),".claude","projects");if(Le.default.existsSync(e))try{let t=Le.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=ir.default.join(e,n.name,`${r}.jsonl`);if(Le.default.existsSync(s))return s}}catch{}}function Yo(r){try{let t=Le.default.readFileSync(r,"utf-8").trim().split(`
|
|
32
|
+
`);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/Ko*100)),usedTokens:a}}catch{continue}}}catch{}return null}function or(r,e,t){let n,s=-1,i=()=>{if(n||(n=Jo(e)),!n)return;let a=Yo(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 Q=_(require("fs")),Me=_(require("path")),ar=_(require("os")),ds=300*60*1e3,us={free:10,pro:40,max_5x:200,max_20x:200};function zo(){let r=Me.default.join(ar.default.homedir(),".jerico","settings.json");try{if(!Q.default.existsSync(r))return"pro";let t=JSON.parse(Q.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in us)return t}catch{}return"pro"}function Xo(){let r=Me.default.join(ar.default.homedir(),".claude","projects");if(!Q.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-ds,n=1/0,s=0;try{let o=Q.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Me.default.join(r,c.name),l;try{l=Q.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Me.default.join(a,d),h;try{if(Q.default.statSync(u).size>20*1024*1024)continue;h=Q.default.readFileSync(u,"utf-8")}catch{continue}for(let g of h.split(`
|
|
33
|
+
`)){let p=g.trim();if(p)try{let f=JSON.parse(p);if(f.type!=="user"||f.message?.role!=="user"||f.userType!==void 0&&f.userType!=="external")continue;let k=f.timestamp;if(typeof k!="string")continue;let b=Date.parse(k);if(isNaN(b)||b<t)continue;s++,b<n&&(n=b)}catch{continue}}}}}catch{}let i=isFinite(n)?n+ds:0;return{prompts5h:s,resetAt:i}}function hs(r){let e=()=>{let n=zo(),s=us[n]??40,{prompts5h:i,resetAt:o}=Xo();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var ve=_(require("os")),at=_(require("fs")),lr=require("node:child_process");function ps(){let r=0,e=0;for(let t of ve.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var cr=ps();function Qo(){let r=ps(),e=r.idle-cr.idle,t=r.total-cr.total;return cr=r,t===0?0:Math.round((1-e/t)*100)}function Zo(){let r=ve.default.totalmem(),e=ve.default.freemem(),t=0;try{let n=(0,lr.spawnSync)("vm_stat",["-c","10"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(n.status===0&&n.stdout){let s=n.stdout.match(/page size of (\d+) bytes/),i=n.stdout.match(/Pages speculative:\s*(\d+)/),o=n.stdout.match(/Pages inactive:\s*(\d+)/);if(i&&o){let 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 ea(){if(process.platform==="darwin")return Zo();let r=ve.default.totalmem(),e=ve.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function ta(){try{let r=(0,lr.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(r.status!==0||!r.stdout)return;let e=r.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let t=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:t,charging:n}}catch{return}}function ra(){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 fs(){let r=process.platform;if(r==="darwin")return ta();if(r==="linux")return ra()}var na=1e4,sa=3;function gs(r){let e=0,t=fs(),n=setInterval(()=>{e++,e%sa===0&&(t=fs());let s=ea();r({cpu:Qo(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},na);return()=>clearInterval(n)}var ct=_(require("fs")),lt=_(require("path")),ms=_(require("node-pty"));function ia(){try{let r=require.resolve("node-pty"),e=lt.default.resolve(lt.default.dirname(r),"..");return lt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function _s(){let r=ia();if(!r||!ct.default.existsSync(r))return!0;try{ct.default.accessSync(r,ct.default.constants.X_OK)}catch{return!1}try{ms.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ae=new Map;function pr(){try{return(0,fr.createHash)("sha256").update(q.default.hostname()+":"+q.default.userInfo().username).digest("hex")}catch{return"unknown"}}var $e=[];function oa(r){let e=Date.now(),t=e-3e4;for(;$e.length&&$e[0].ts<t;)$e.shift();return $e.push({agentKey:r,ts:e}),new Set($e.map(s=>s.agentKey)).size>=2}var aa=r=>r.replace(/[\r\n]+$/,"")+"\r",ur=null,ca=hs(r=>{ur=r}),la=3e4,da=5e3,ua=400;function ha(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function fa(r,e=ua){return r.length<=e?r:`${r.slice(0,e)}...`}function pa(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function ht(){let r=U.default.realpathSync(process.argv[1]??""),e=D.default.dirname(r);return[D.default.resolve(e,"../../mcp-server/dist/index.cjs"),D.default.resolve(e,"bridge-mcp.cjs"),D.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>U.default.existsSync(n))??"bridge-mcp"}function ga(r){try{let e=process.env.BRIDGE_MCP_URL,t=r.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${t}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:ht(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:t,BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},s=D.default.join(q.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return U.default.writeFileSync(s,JSON.stringify(n,null,2)+`
|
|
34
|
+
`,"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 ma={bridge_get_project:"Project metadata: name, cwd, machineId",bridge_get_plan:"Read project spec/description",bridge_update_plan:"Update project spec/description",bridge_get_project_history:"Past run history and failure patterns",bridge_get_execution_status:"Run history with todo completion counts",bridge_get_todos:"List todos + session state for this project",bridge_add_todo:"Create a new todo (title, todoType, dependsOn)",bridge_update_todo:"Update a todo title or status",bridge_cancel_run:"Cancel active run (use before restarting a stale plan)",bridge_list_agents:"All agents: role, status, inRun flag",bridge_get_agent_status:"Single agent status check",bridge_spawn_worker:"Spawn a new worker agent (agentKey, role)",bridge_kill_agent:"Terminate a stuck or dead agent",bridge_get_agent_output:"Read terminal output of any agent",bridge_send_input:"Send text input to an agent PTY",bridge_get_my_task:"Get the task assigned to this agent",bridge_complete_task:"Signal task completion",bridge_fail_task:"Signal task failure with a specific reason",bridge_get_todo_context:"Read todo output/error for a specific todo",bridge_assign_task:"Assign a pending todo to a specific agent",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 ke(...r){return`
|
|
35
35
|
|
|
36
36
|
**Available MCP tools:** ${r.join(", ")}`}function _a(...r){return`
|
|
37
37
|
|
|
@@ -53,7 +53,7 @@ You are a **Developer** worker in a multi-agent orchestration system called Brid
|
|
|
53
53
|
- After making changes, check the runner agent (role:'runner' in bridge_list_agents) for build errors: bridge_get_agent_output(runnerAgentId)
|
|
54
54
|
- Trigger hot reload after file changes: bridge_send_input(runnerAgentId, "r")
|
|
55
55
|
|
|
56
|
-
${
|
|
56
|
+
${ke("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
|
|
57
57
|
|
|
58
58
|
You are a **Quality-Obsessed Tech Lead** reviewing code changes in a multi-agent system called Bridge.
|
|
59
59
|
Your identity: Agile, pragmatic, anti-fragile. You ship with confidence or you send it back.
|
|
@@ -137,7 +137,7 @@ If a runner agent exists (bridge_list_agents \u2192 role:'runner'), call bridge_
|
|
|
137
137
|
- One \`bridge_fail_task\` per review cycle \u2014 consolidate all issues into a single message
|
|
138
138
|
- If unsure whether something is a bug or intentional design: flag it as a question, don't reject
|
|
139
139
|
|
|
140
|
-
${
|
|
140
|
+
${ke("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
|
|
141
141
|
|
|
142
142
|
You are a **Planner** in Bridge. Your job: understand the project, listen to the user, then create a well-structured and verified execution plan.
|
|
143
143
|
|
|
@@ -227,7 +227,7 @@ Show the complete todo list with types and dependency chain. Then stop.
|
|
|
227
227
|
- To close a stale open todo that's already done: \`bridge_complete_task\` with its ID
|
|
228
228
|
- Todo titles must be specific: name the files, endpoints, components \u2014 no vague verbs
|
|
229
229
|
|
|
230
|
-
${
|
|
230
|
+
${ke("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
|
|
231
231
|
|
|
232
232
|
You are an **Executor** worker in a multi-agent orchestration system called Bridge.
|
|
233
233
|
|
|
@@ -237,7 +237,7 @@ You are an **Executor** worker in a multi-agent orchestration system called Brid
|
|
|
237
237
|
- Capture and report all relevant output
|
|
238
238
|
- Call \`bridge_complete_task\` on success, \`bridge_fail_task\` with error details on failure
|
|
239
239
|
|
|
240
|
-
${
|
|
240
|
+
${ke("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
|
|
241
241
|
|
|
242
242
|
You are a **Shell** worker in a multi-agent orchestration system called Bridge.
|
|
243
243
|
|
|
@@ -247,7 +247,7 @@ You are a **Shell** worker in a multi-agent orchestration system called Bridge.
|
|
|
247
247
|
- Call \`bridge_complete_task\` when the command exits cleanly
|
|
248
248
|
- Call \`bridge_fail_task\` with the error output if the command fails
|
|
249
249
|
|
|
250
|
-
${
|
|
250
|
+
${ke("bridge_get_my_task","bridge_complete_task","bridge_fail_task")}`,orchestrator:`# Bridge Orchestrator
|
|
251
251
|
|
|
252
252
|
You are a **Bridge Orchestrator**. Your sole purpose is to decompose specs into todos, delegate them to worker agents, and report results. Nothing else.
|
|
253
253
|
|
|
@@ -255,10 +255,29 @@ You are a **Bridge Orchestrator**. Your sole purpose is to decompose specs into
|
|
|
255
255
|
|
|
256
256
|
## Identity constraints (absolute)
|
|
257
257
|
|
|
258
|
-
- Do NOT
|
|
258
|
+
- Do NOT browse files, run bash, or use mem0
|
|
259
259
|
- Do NOT call any tool not listed in the tool reference below \u2014 if a tool isn't listed, it does not exist
|
|
260
260
|
- Do NOT ask "should I start?" / "shall I proceed?" \u2014 if you have work and workers, act
|
|
261
|
-
- If a user asks you
|
|
261
|
+
- If a user asks you for IMPLEMENTATION work outside orchestration, respond: "I'm an orchestrator. Give me a task spec and I'll delegate it to workers."
|
|
262
|
+
|
|
263
|
+
## Workspace queries (exception to the no-questions rule)
|
|
264
|
+
When the user asks about workspace topology \u2014 groups, agents, runs, projects \u2014 answer directly using the workspace tools below. Do NOT delegate these queries to workers.
|
|
265
|
+
|
|
266
|
+
Examples of answerable queries:
|
|
267
|
+
- "What groups are there?" \u2192 bridge_list_groups
|
|
268
|
+
- "What are workers in group X doing?" \u2192 bridge_get_group_status
|
|
269
|
+
- "What runs are active?" \u2192 bridge_list_active_runs
|
|
270
|
+
- "What failed last time?" \u2192 bridge_query_workspace
|
|
271
|
+
- "What is agent-X doing?" \u2192 bridge_peek_panel(agentId, 50)
|
|
272
|
+
- "Show me agent-X status" \u2192 bridge_status_panel(agentId)
|
|
273
|
+
|
|
274
|
+
Only delegate when the user asks for IMPLEMENTATION work (code changes, deployments).
|
|
275
|
+
|
|
276
|
+
## Runtime context
|
|
277
|
+
Workspace: {{WORKSPACE_ID}}
|
|
278
|
+
Project: {{PROJECT_ID}}
|
|
279
|
+
Group: {{GROUP_ID}}
|
|
280
|
+
Your panel ID: {{PANEL_ID}}
|
|
262
281
|
|
|
263
282
|
**Your own agent ID: \`{{PANEL_ID}}\`**
|
|
264
283
|
Never call \`bridge_kill_agent\` with this ID \u2014 killing yourself terminates the orchestration session.
|
|
@@ -340,7 +359,7 @@ Summarize: todos completed, failed, any blockers. List what workers did.
|
|
|
340
359
|
|
|
341
360
|
---
|
|
342
361
|
|
|
343
|
-
${_a("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")}`},ba=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
|
|
362
|
+
${_a("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")}`},ba=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
|
|
344
363
|
|
|
345
364
|
You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rule below.
|
|
346
365
|
|
|
@@ -359,10 +378,11 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
|
|
|
359
378
|
- Decide solely based on (todo.retryCount ?? 0) > 0
|
|
360
379
|
- This is a signaling mechanic test, not a code quality review
|
|
361
380
|
|
|
362
|
-
${
|
|
363
|
-
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,role:e,tmpPath:
|
|
364
|
-
`,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function Ea(r){try{let e=ht(),t=`{BRIDGE_SERVER_URL=${Be(r.serverUrl)},BRIDGE_TOKEN=${Be(r.token)},BRIDGE_WORKSPACE_ID=${Be(r.workspaceId)},BRIDGE_PROJECT_ID=${Be(r.projectId)},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${Be(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function va(r){try{return F.default.statSync(r).isDirectory()}catch{return!1}}function dr(r,e){try{return e(r)}catch{return!1}}function xa(r,e,t,n,s=va){let i=n?.[r];if(i&&dr(i,s))return{path:i,source:"local_override"};if(t){if(dr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}return e&&dr(e,s)?{path:e,source:"server_project"}:(console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:`Set projectPaths["${r}"] in ~/.jerico/settings.json`}),{path:J.default.homedir(),source:"fallback_home"})}function ka(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId}),!1;let e=ht(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,dt.spawnSync)("qwen",["mcp","remove","--scope","project","bridge"],t);let n=(0,dt.spawnSync)("qwen",["mcp","add","--scope","project","-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return n.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:n.status,stderr:(n.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var ut=[],hr=!1,_s=!1;function bs(){return hr}function ws(r){if(_s)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(_s=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let c=$.default.join(J.default.homedir(),".jerico","settings.json");F.default.existsSync(c)&&JSON.parse(F.default.readFileSync(c,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=ie(),t=(0,fr.createHash)("sha256").update(e.token).digest("hex"),n=null,s=null,i=null,o=0;function l(){s&&(clearTimeout(s),s=null),n=new I(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let c=n,d=null;c.on("open",()=>{hr=!0,console.log("[daemon] ws.connected",{server:e.server}),i=setInterval(()=>{c.readyState===I.OPEN&&c.ping()},la);let u=!ms();c.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:u,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:ia()})),Dt(e.agentPaths).then(h=>{ut=h,c.readyState===I.OPEN&&c.send(JSON.stringify({type:"agents",list:ut}))}),d=ps(h=>{c.readyState===I.OPEN&&c.send(JSON.stringify({type:"system_metrics",daemonId:t,...h}))})}),c.on("message",u=>{let h;try{h=JSON.parse(u.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}Oa(h,c,r,e)}),c.on("close",u=>{hr=!1,i&&(clearInterval(i),i=null),d?.(),d=null,u===1008?(o++,o>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:o})):o=0,!s&&(console.log("[daemon] ws.reconnecting",{attempt:1}),s=setTimeout(l,3e3))}),c.on("error",u=>{console.error("[daemon] ws.error",{message:u.message})})}function a(){i&&(clearInterval(i),i=null),ca();for(let c of ae.values())c();r.killAll(),n?.close()}process.on("SIGINT",()=>{a(),process.exit(0)}),process.on("SIGTERM",()=>{a(),process.exit(0)}),process.on("SIGHUP",()=>{a(),process.exit(0)}),process.on("uncaughtException",c=>{console.error("[daemon] uncaughtException",{error:c.message}),r.killAll(),process.exit(1)}),l()}function Oa(r,e,t,n){switch(r.type){case"spawn":{console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role});let s=ut.find(y=>y.key===r.agentKey);if(!s){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let i=fe.find(y=>y.key===r.agentKey),o=[];if(r.sessionId&&i?.resumeArgs)o=i.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,r.sessionId,(y,w,S)=>{e.readyState===I.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:y,usedPct:w,usedTokens:S,...ur}))})));else if(i?.assignSessionId){let y=crypto.randomUUID(),w=r.agentKey==="kimi"?"--session":"--session-id";o=[...i.spawnArgs??[],w,y],e.readyState===I.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:y})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:y})),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,y,(S,N,E)=>{e.readyState===I.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:N,usedTokens:E,...ur}))})))}else e.readyState===I.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let l,a=!1,c,d;if(r.projectId&&r.workspaceId){let y=pa(n.server),w=xa(r.projectId,r.cwd,r.daemonLocalPath,n.projectPaths),S=w.path;d=w.source;let N=sr(S);if(l={serverUrl:y,token:n.token,workspaceId:ss(r.workspaceId),projectId:is(r.projectId),agentId:r.agentId?ns(r.agentId):void 0,cwd:S,projectEnv:N.env},r.agentKey==="claude"){let E=ga(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else if(r.agentKey==="codex"){let E=Ea(l);a=E.length>0,c="stdio",o=[...o,...E]}else if(r.agentKey==="qwen")a=ka(l),c=a?"stdio":void 0;else if(r.agentKey==="kimi"){let E=Sa(l);a=E.length>0,c=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else a=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"});if(rr("phase2a.verified_at")&&(w.source==="daemon_override"||w.source==="server_project")){let E=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(E,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(U=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(U)})})}if(rr("phase2a.auto_register")&&(w.source==="daemon_override"||w.source==="server_project"))try{let E=(0,dt.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(E.status===0&&E.stdout&&E.stdout.trim()){let U=E.stdout.trim();n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,oe(n);let pt=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(pt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:U})}).catch(Ds=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(Ds)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:U})}}catch(E){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(E)})}}let u=wa(r.agentKey,r.role,r.agentId);u.length>0&&(o=[...o,...u]);let h=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),p=Date.now(),f="",m=0,x=!1,b=!1;if(t.spawn(r.agentId,r.agentKey,s.binaryPath,o,h,g,y=>{m+=y.length;try{let w=Buffer.from(y,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!b&&Date.now()-p<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){b=!0;let S=ys(r.role);if(S){let N=S.replaceAll("{{PANEL_ID}}",r.agentId),E=aa(N),U=Buffer.from(E).toString("base64");t.write(r.agentId,U,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!f)try{let w=Buffer.from(y,"base64").toString("utf-8"),S=ha(w).replace(/\x00/g,"").trim();if(S&&(f=fa(S)),r.agentKey==="codex"&&!x&&Date.now()-p<2e4&&/included in your plan for free|let[’']s build together/i.test(S)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(S)){x=!0;let N=Buffer.from("y").toString("base64");t.write(r.agentId,N,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}e.readyState===I.OPEN&&e.send(JSON.stringify({type:"output",agentId:r.agentId,data:y}))},(y,w)=>{let S=Date.now()-p,N=S<=da;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:y,signal:w,uptimeMs:S,earlyExit:N,outputBytes:m,firstOutputSnippet:f||void 0}),N&&e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${y??"null"} signal=${w??"null"} snippet="${f||"no output"}"`})),e.readyState===I.OPEN&&e.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:y,signal:w}))},l))e.readyState===I.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:a,transport:a?c:void 0,projectId:l?.projectId,effectiveCwd:l?.cwd,cwdSource:d}));else{let w=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&oa(r.agentKey);e.readyState===I.OPEN&&(w?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ae.get(r.agentId)?.(),ae.delete(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"detect_agents":Dt(n.agentPaths).then(s=>{ut=s,e.readyState===I.OPEN&&e.send(JSON.stringify({type:"agents",list:s}))});break;case"dir_list":{let s=J.default.homedir(),i=(r.path||"~").replace(/^~/,s),o=$.default.resolve(i);if(o!==s&&!o.startsWith(s+$.default.sep)){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let l=F.default.readdirSync(o,{withFileTypes:!0}).filter(a=>a.isDirectory()&&!a.name.startsWith(".")).map(a=>({name:a.name,path:$.default.join(o,a.name)})).sort((a,c)=>a.name.localeCompare(c.name));e.readyState===I.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:l}))}catch(l){e.readyState===I.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:[],error:l instanceof Error?l.message:"Cannot read directory"}))}break}default:{let s=r}}}var Es="com.jerico.bridge-agent.plist",vs=D.default.join((0,Z.homedir)(),"Library","LaunchAgents"),ft=D.default.join(vs,Es),pr=D.default.join((0,Z.homedir)(),"bridge-daemon.log"),gr=D.default.join((0,Z.homedir)(),"bridge-daemon.err.log"),ce=D.default.join((0,Z.homedir)(),".bridge","daemon.lock");function Ca(){let r=[...process.env.npm_config_global_prefix?[D.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function Ia(){try{(0,T.mkdirSync)(D.default.dirname(ce),{recursive:!0})}catch{}if((0,T.existsSync)(ce))try{let{pid:r}=JSON.parse((0,T.readFileSync)(ce,"utf8"));if(r&&process.kill(r,0))return console.warn("[bridge] daemon.already.running",{pid:r,lock:ce}),!1;(0,T.unlinkSync)(ce)}catch{try{(0,T.unlinkSync)(ce)}catch{}}try{let r=(0,T.openSync)(ce,"wx");return(0,T.writeSync)(r,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,T.closeSync)(r),!0}catch{return!1}}function xs(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(D.default.join((0,Z.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(D.default.join((0,Z.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,le.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(D.default.dirname(i))}catch{}let n=D.default.join((0,Z.homedir)(),".vscode","extensions");try{let s=(0,le.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
|
|
365
|
-
`);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=D.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function Aa(r){try{(0,le.execSync)(`mkdir -p "${vs}"`,{stdio:"pipe"})}catch{}let e=xs(),t=`<?xml version="1.0" encoding="UTF-8"?>
|
|
381
|
+
${ke("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function bs(r){let e=process.env.BRIDGE_TEST_SCRIPTED_REVIEW,t=r==="reviewer"&&e==="1";return console.log("[daemon] getRoleSystemPrompt.called",{role:r,envFlag:e,returning:t?"SCRIPTED":"NORMAL"}),t?ba:ya[r]}function wa(r,e,t,n,s,i){if(!e)return[];let o=bs(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=D.default.join(q.default.tmpdir(),`bridge-role-${t}.md`);return U.default.writeFileSync(a,c+`
|
|
382
|
+
`,"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=D.default.join(q.default.tmpdir(),`bridge-role-${t}.md`);return U.default.writeFileSync(a,c+`
|
|
383
|
+
`,"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 Be(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function Sa(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId||"workspace"}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??""}}}}:{mcpServers:{bridge:{command:ht(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",HTTP_MODE:"false"}}}},n=D.default.join(q.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return U.default.writeFileSync(n,JSON.stringify(t,null,2)+`
|
|
384
|
+
`,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function Ea(r){try{let e=ht(),t=`{BRIDGE_SERVER_URL=${Be(r.serverUrl)},BRIDGE_TOKEN=${Be(r.token)},BRIDGE_WORKSPACE_ID=${Be(r.workspaceId)},BRIDGE_PROJECT_ID=${Be(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${Be(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function va(r){try{return U.default.statSync(r).isDirectory()}catch{return!1}}function dr(r,e){try{return e(r)}catch{return!1}}function ka(r,e,t,n,s=va){let i=n?.[r];if(i&&dr(i,s))return{path:i,source:"local_override"};if(t){if(dr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}return e&&dr(e,s)?{path:e,source:"server_project"}:(console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:`Set projectPaths["${r}"] in ~/.jerico/settings.json`}),{path:q.default.homedir(),source:"fallback_home"})}function xa(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=ht(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,dt.spawnSync)("qwen",["mcp","remove","--scope","project","bridge"],t);let n=(0,dt.spawnSync)("qwen",["mcp","add","--scope","project","-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return n.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:n.status,stderr:(n.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var ut=[],hr=!1,ys=!1;function ws(){return hr}function Ss(r){if(ys)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(ys=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let l=D.default.join(q.default.homedir(),".jerico","settings.json");U.default.existsSync(l)&&JSON.parse(U.default.readFileSync(l,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=ie(),t=(0,fr.createHash)("sha256").update(e.token).digest("hex"),n=null,s=null,i=null,o=0;function c(){s&&(clearTimeout(s),s=null),n=new C(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let l=n,d=null;l.on("open",()=>{hr=!0,console.log("[daemon] ws.connected",{server:e.server}),i=setInterval(()=>{l.readyState===C.OPEN&&l.ping()},la);let u=!_s();l.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:u,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:pr()})),Dt(e.agentPaths).then(h=>{ut=h,l.readyState===C.OPEN&&l.send(JSON.stringify({type:"agents",list:ut}))}),d=gs(h=>{l.readyState===C.OPEN&&l.send(JSON.stringify({type:"system_metrics",daemonId:t,...h}))})}),l.on("message",u=>{let h;try{h=JSON.parse(u.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}Oa(h,l,r,e)}),l.on("close",u=>{hr=!1,i&&(clearInterval(i),i=null),d?.(),d=null,u===1008?(o++,o>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:o})):o=0,!s&&(console.log("[daemon] ws.reconnecting",{attempt:1}),s=setTimeout(c,3e3))}),l.on("error",u=>{console.error("[daemon] ws.error",{message:u.message})})}function a(){i&&(clearInterval(i),i=null),ca();for(let l of ae.values())l();r.killAll(),n?.close()}process.on("SIGINT",()=>{a(),process.exit(0)}),process.on("SIGTERM",()=>{a(),process.exit(0)}),process.on("SIGHUP",()=>{a(),process.exit(0)}),process.on("uncaughtException",l=>{console.error("[daemon] uncaughtException",{error:l.message}),r.killAll(),process.exit(1)}),c()}function Oa(r,e,t,n){switch(r.type){case"spawn":{console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role});let s=ut.find(y=>y.key===r.agentKey);if(!s){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let i=fe.find(y=>y.key===r.agentKey),o=[];if(r.sessionId&&i?.resumeArgs)o=i.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,r.sessionId,(y,w,S)=>{e.readyState===C.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:y,usedPct:w,usedTokens:S,...ur}))})));else if(i?.assignSessionId){let y=crypto.randomUUID(),w=r.agentKey==="kimi"?"--session":"--session-id";o=[...i.spawnArgs??[],w,y],e.readyState===C.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:y})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:y})),r.agentKey==="claude"&&(ae.get(r.agentId)?.(),ae.set(r.agentId,or(r.agentId,y,(S,N,E)=>{e.readyState===C.OPEN&&e.send(JSON.stringify({type:"panel_token_usage",agentId:S,usedPct:N,usedTokens:E,...ur}))})))}else e.readyState===C.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let c,a=!1,l,d;if(r.workspaceId){let y=pa(n.server),w=ka(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),S=w.path;d=w.source;let N=sr(S);if(c={serverUrl:y,token:n.token,workspaceId:is(r.workspaceId),projectId:r.projectId?os(r.projectId):void 0,agentId:r.agentId?ss(r.agentId):void 0,cwd:S,projectEnv:N.env},r.agentKey==="claude"){let E=ga(c);a=E.length>0,l=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else if(r.agentKey==="codex"){let E=Ea(c);a=E.length>0,l="stdio",o=[...o,...E]}else if(r.agentKey==="qwen")a=xa(c),l=a?"stdio":void 0;else if(r.agentKey==="kimi"){let E=Sa(c);a=E.length>0,l=process.env.BRIDGE_MCP_URL?"http":"stdio",o=[...o,...E]}else a=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"});if(rr("phase2a.verified_at")&&(w.source==="daemon_override"||w.source==="server_project")){let E=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(E,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(W=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(W)})})}if(rr("phase2a.auto_register")&&(w.source==="daemon_override"||w.source==="server_project"))try{let E=(0,dt.spawnSync)("git",["remote","get-url","origin"],{cwd:S,timeout:5e3,encoding:"utf-8"});if(E.status===0&&E.stdout&&E.stdout.trim()){let W=E.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=S,oe(n));let pt=`${y}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(pt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:S,repoUrl:W})}).catch(js=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(js)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:S,repoUrl:W})}}catch(E){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(E)})}}let u=wa(r.agentKey,r.role,r.agentId,r.workspaceId,r.projectId,r.groupId);u.length>0&&(o=[...o,...u]);let h=Math.max(1,Math.min(500,r.cols)),g=Math.max(1,Math.min(500,r.rows)),p=Date.now(),f="",m=0,k=!1,b=!1;if(t.spawn(r.agentId,r.agentKey,s.binaryPath,o,h,g,y=>{m+=y.length;try{let w=Buffer.from(y,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!b&&Date.now()-p<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){b=!0;let S=bs(r.role);if(S){let N=S.replaceAll("{{PANEL_ID}}",r.agentId).replaceAll("{{WORKSPACE_ID}}",r.workspaceId??"unknown").replaceAll("{{PROJECT_ID}}",r.projectId??"none").replaceAll("{{GROUP_ID}}",r.groupId??"none"),E=aa(N),W=Buffer.from(E).toString("base64");t.write(r.agentId,W,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!f)try{let w=Buffer.from(y,"base64").toString("utf-8"),S=ha(w).replace(/\x00/g,"").trim();if(S&&(f=fa(S)),r.agentKey==="codex"&&!k&&Date.now()-p<2e4&&/included in your plan for free|let[’']s build together/i.test(S)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(S)){k=!0;let N=Buffer.from("y").toString("base64");t.write(r.agentId,N,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}e.readyState===C.OPEN&&e.send(JSON.stringify({type:"output",agentId:r.agentId,data:y}))},(y,w)=>{let S=Date.now()-p,N=S<=da;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:y,signal:w,uptimeMs:S,earlyExit:N,outputBytes:m,firstOutputSnippet:f||void 0}),N&&e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${y??"null"} signal=${w??"null"} snippet="${f||"no output"}"`})),e.readyState===C.OPEN&&e.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:y,signal:w}))},c))e.readyState===C.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:a,transport:a?l:void 0,projectId:c?.projectId,effectiveCwd:c?.cwd,cwdSource:d}));else{let w=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&oa(r.agentKey);e.readyState===C.OPEN&&(w?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===C.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ae.get(r.agentId)?.(),ae.delete(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"detect_agents":Dt(n.agentPaths).then(s=>{ut=s,e.readyState===C.OPEN&&e.send(JSON.stringify({type:"agents",list:s}))});break;case"dir_list":{let s=q.default.homedir(),i=(r.path||"~").replace(/^~/,s),o=D.default.resolve(i);if(o!==s&&!o.startsWith(s+D.default.sep)){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let c=U.default.readdirSync(o,{withFileTypes:!0}).filter(a=>a.isDirectory()&&!a.name.startsWith(".")).map(a=>({name:a.name,path:D.default.join(o,a.name)})).sort((a,l)=>a.name.localeCompare(l.name));e.readyState===C.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:c}))}catch(c){e.readyState===C.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:o,entries:[],error:c instanceof Error?c.message:"Cannot read directory"}))}break}default:{let s=r}}}var vs="com.jerico.bridge-agent.plist",ks=j.default.join((0,Z.homedir)(),"Library","LaunchAgents"),ft=j.default.join(ks,vs),gr=j.default.join((0,Z.homedir)(),"bridge-daemon.log"),mr=j.default.join((0,Z.homedir)(),"bridge-daemon.err.log"),ce=j.default.join((0,Z.homedir)(),".bridge","daemon.lock");function Ca(){let r=[...process.env.npm_config_global_prefix?[j.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function Ia(){try{(0,P.mkdirSync)(j.default.dirname(ce),{recursive:!0})}catch{}if((0,P.existsSync)(ce))try{let{pid:r}=JSON.parse((0,P.readFileSync)(ce,"utf8"));if(r&&process.kill(r,0))return console.warn("[bridge] daemon.already.running",{pid:r,lock:ce}),!1;(0,P.unlinkSync)(ce)}catch{try{(0,P.unlinkSync)(ce)}catch{}}try{let r=(0,P.openSync)(ce,"wx");return(0,P.writeSync)(r,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,P.closeSync)(r),!0}catch{return!1}}function xs(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(j.default.join((0,Z.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(j.default.join((0,Z.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,le.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(j.default.dirname(i))}catch{}let n=j.default.join((0,Z.homedir)(),".vscode","extensions");try{let s=(0,le.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
|
|
385
|
+
`);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=j.default.join(n,i,"resources","native-binary");(0,P.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function Aa(r){try{(0,le.execSync)(`mkdir -p "${ks}"`,{stdio:"pipe"})}catch{}let e=xs(),t=`<?xml version="1.0" encoding="UTF-8"?>
|
|
366
386
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
367
387
|
<plist version="1.0">
|
|
368
388
|
<dict>
|
|
@@ -378,9 +398,9 @@ ${xe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_
|
|
|
378
398
|
<key>KeepAlive</key>
|
|
379
399
|
<true/>
|
|
380
400
|
<key>StandardOutPath</key>
|
|
381
|
-
<string>${pr}</string>
|
|
382
|
-
<key>StandardErrorPath</key>
|
|
383
401
|
<string>${gr}</string>
|
|
402
|
+
<key>StandardErrorPath</key>
|
|
403
|
+
<string>${mr}</string>
|
|
384
404
|
<key>EnvironmentVariables</key>
|
|
385
405
|
<dict>
|
|
386
406
|
<key>PATH</key>
|
|
@@ -390,6 +410,6 @@ ${xe("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_
|
|
|
390
410
|
</dict>
|
|
391
411
|
</dict>
|
|
392
412
|
</plist>
|
|
393
|
-
`;try{return(0,
|
|
394
|
-
`)),
|
|
395
|
-
`)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function La(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?
|
|
413
|
+
`;try{return(0,P.writeFileSync)(ft,t,"utf-8"),!0}catch(n){return console.warn("[bridge] launchd.plist.write.failed",{error:String(n)}),!1}}function Pa(){try{return(0,le.execSync)(`launchctl kickstart -kp gui/$(id -u)/${vs} 2>/dev/null; launchctl unload "${ft}" 2>/dev/null; launchctl load "${ft}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(r){let e=String(r);return{ok:!1,permissionDenied:e.includes("Permission denied")||e.includes("not allowed")||e.includes("bootstrap")}}}function Ta(r){try{let e=(0,le.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:xs(),BRIDGE_DAEMON:"1"}});e.unref(),setTimeout(()=>{e.pid&&process.kill(e.pid,0)?(console.log("[bridge] daemon.pid",{pid:e.pid}),console.log("[bridge] background.ok",{log:gr})):console.error("[bridge] background.failed \u2014 check: tail -f",{log:mr})},2e3)}catch(e){console.error("[bridge] background.spawn.failed",{error:String(e)})}}function Na(){let r=parseInt(process.env.HEALTH_PORT??"3101",10),e=Date.now()+6e3,t=()=>{if(Date.now()>e){console.error("[bridge] health.verify.timeout \u2014 daemon may have crashed immediately");return}try{let s=require("node:http").get(`http://127.0.0.1:${r}/health`,i=>{i.statusCode===200?console.log("[bridge] health.verify.ok"):setTimeout(t,500)});s.on("error",()=>{setTimeout(t,500)}),s.setTimeout(1e3,()=>{s.destroy(),setTimeout(t,500)})}catch{setTimeout(t,500)}};setTimeout(t,1e3)}function Ra(){let r=new Ge;Ss(r);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,Es.createServer)((n,s)=>{let i=ws(),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 Os(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(console.log("[bridge] Starting bridge-agent daemon..."),r){Ra();return}Ia()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=Ca(),t=Aa(e),{ok:n,permissionDenied:s}=t?Pa():{ok:!1,permissionDenied:!1};if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:gr,err:mr}),Na(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${ft}"`),console.warn(`[bridge] Falling back to background process...
|
|
414
|
+
`)),Ta(e),process.exit(0)}var Cs=_(require("https")),Is=_(require("http"));Ee();function Da(r){return(r??"").trim()}async function As(r,e=!1,t){console.log("[bridge] Starting auth flow..."),console.log(`[bridge] Server: ${r}`),console.log("[bridge] Open this URL to generate a daemon token:"),console.log(` ${r}/connect`);let n=Da(t);n&&console.log("[bridge] Using token from --token"),e&&(n?console.log("[bridge] --no-browser ignored because --token is provided."):(console.log("[bridge] --no-browser: exiting after printing URL."),process.exit(0)));let s=n;s||(console.log(),console.log("[bridge] After authenticating, paste your token here:"),s=await ja()),s||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await La(r,s)||(console.error("[bridge] Token validation failed. Please try again."),process.exit(1));let c=r.replace(/^https?:\/\//,a=>a.startsWith("https")?"wss://":"ws://").replace(/\/?$/,"/ws/daemon");oe({server:c,token:s,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function ja(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
|
|
415
|
+
`)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function La(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?Cs.default:Is.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 Ps=_(require("https")),Ts=_(require("http")),_r=_(require("fs")),yr=_(require("path")),Ns=require("node:crypto");Ee();function Ma(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Rs(r,e,t){let n=ie(),s=(0,Ns.createHash)("sha256").update(n.token).digest("hex"),i=Ma(n.server),o=yr.default.resolve(t);yr.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?Ps.default:Ts.default;n.projectPaths={...n.projectPaths??{},[e]:o},oe(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:pr()}),h=await new Promise((g,p)=>{let f=d.request({hostname:a.hostname,port:a.port||(l?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let k="";m.on("data",b=>{k+=b}),m.on("end",()=>{if(m.statusCode===200)g(200);else{try{let b=JSON.parse(k);console.error("[bridge] link-project failed:",b.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}g(m.statusCode??0)}})});f.on("error",m=>{p(m)}),f.write(u),f.end()});h===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:h}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}Ee();function $a(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function Ds(){let r=ie(),e=$a(r.server),t=await fetch(`${e}/api/admin/cleanup-orphans`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:"{}"});t.ok||(console.error(`[cli] cleanup-orphans: HTTP ${t.status}`),process.exit(1));let{deleted:n}=await t.json();console.log(`[cli] cleanup-orphans: deleted ${n} orphaned path ${n===1?"entry":"entries"}`),process.exit(0)}var de=new Nr;de.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.3.8");de.command("start").description("Start the bridge-agent daemon").action(()=>{Os()});de.command("auth").description("Authenticate with Bridge server").requiredOption("-s, --server <url>","Server URL (e.g., https://your-server.com)").option("-t, --token <token>","Use token non-interactively").option("--no-browser","Print auth URL without opening browser or interactive prompt").action(r=>{As(r.server,!r.browser,r.token)});de.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{Rs(r,e,t)});de.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{Ds()});de.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Ee(),cs)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});de.parse();
|