bridge-agent 0.7.0 → 0.7.1
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 +73 -9
- package/dist/index.js +45 -32
- package/package.json +1 -1
package/dist/bridge-mcp.cjs
CHANGED
|
@@ -22411,11 +22411,8 @@ async function getProjectEvents(ctx, opts) {
|
|
|
22411
22411
|
if (opts?.limit) params.set("limit", String(opts.limit));
|
|
22412
22412
|
if (opts?.includeArchived) params.set("includeArchived", "true");
|
|
22413
22413
|
const qs = params.toString();
|
|
22414
|
-
|
|
22415
|
-
|
|
22416
|
-
"GET",
|
|
22417
|
-
projectPath(ctx, `/events${qs ? "?" + qs : ""}`, opts?.projectId)
|
|
22418
|
-
);
|
|
22414
|
+
const basePath = opts?.workspaceScope ? workspacePath(ctx, `/events${qs ? "?" + qs : ""}`) : projectPath(ctx, `/events${qs ? "?" + qs : ""}`, opts?.projectId);
|
|
22415
|
+
return request(ctx, "GET", basePath);
|
|
22419
22416
|
}
|
|
22420
22417
|
async function listPersonas(ctx, opts) {
|
|
22421
22418
|
const params = new URLSearchParams();
|
|
@@ -22464,7 +22461,33 @@ async function listRolePrompts(ctx) {
|
|
|
22464
22461
|
return request(ctx, "GET", workspacePath(ctx, "/prompts"));
|
|
22465
22462
|
}
|
|
22466
22463
|
async function getRolePrompt(ctx, role) {
|
|
22467
|
-
|
|
22464
|
+
const start = Date.now();
|
|
22465
|
+
const res = await request(
|
|
22466
|
+
ctx,
|
|
22467
|
+
"GET",
|
|
22468
|
+
workspacePath(ctx, `/prompts/${encodeURIComponent(role)}`)
|
|
22469
|
+
);
|
|
22470
|
+
const latencyMs = Date.now() - start;
|
|
22471
|
+
const bytes = res.content.length;
|
|
22472
|
+
console.log("[mcp] mcp.bridge_get_role_prompt", { role, wsId: ctx.workspaceId, latency_ms: latencyMs, bytes });
|
|
22473
|
+
let content = res.content;
|
|
22474
|
+
if (content.includes("{{PANEL_ID}}")) {
|
|
22475
|
+
content = content.replaceAll("{{PANEL_ID}}", ctx.agentId ?? "unknown");
|
|
22476
|
+
console.log("[mcp] prompts.runtime_var.substituted", { role, var: "PANEL_ID", resolved: true });
|
|
22477
|
+
}
|
|
22478
|
+
if (content.includes("{{WORKSPACE_ID}}")) {
|
|
22479
|
+
content = content.replaceAll("{{WORKSPACE_ID}}", ctx.workspaceId);
|
|
22480
|
+
console.log("[mcp] prompts.runtime_var.substituted", { role, var: "WORKSPACE_ID", resolved: true });
|
|
22481
|
+
}
|
|
22482
|
+
if (content.includes("{{PROJECT_ID}}")) {
|
|
22483
|
+
content = content.replaceAll("{{PROJECT_ID}}", ctx.projectId);
|
|
22484
|
+
console.log("[mcp] prompts.runtime_var.substituted", { role, var: "PROJECT_ID", resolved: true });
|
|
22485
|
+
}
|
|
22486
|
+
if (content.includes("{{GROUP_ID}}")) {
|
|
22487
|
+
content = content.replaceAll("{{GROUP_ID}}", "none");
|
|
22488
|
+
console.log("[mcp] prompts.runtime_var.substituted", { role, var: "GROUP_ID", resolved: true });
|
|
22489
|
+
}
|
|
22490
|
+
return { ...res, content };
|
|
22468
22491
|
}
|
|
22469
22492
|
async function updateRolePrompt(ctx, role, content) {
|
|
22470
22493
|
return request(ctx, "PUT", workspacePath(ctx, `/prompts/${encodeURIComponent(role)}`), { content });
|
|
@@ -22616,6 +22639,46 @@ var AGENT_ROLES = [
|
|
|
22616
22639
|
var USER_ASSIGNABLE_ROLES = AGENT_ROLES.filter((r) => r !== "orchestrator");
|
|
22617
22640
|
var EVENT_ROLES = [...AGENT_ROLES, "system"];
|
|
22618
22641
|
|
|
22642
|
+
// ../shared/dist/tool-registry.js
|
|
22643
|
+
var BRIDGE_TOOL_DOCS = {
|
|
22644
|
+
// Project / plan
|
|
22645
|
+
bridge_get_project: "Project metadata: name, cwd, machineId",
|
|
22646
|
+
bridge_get_plan: "Read project spec/description",
|
|
22647
|
+
bridge_update_plan: "Update project spec/description",
|
|
22648
|
+
bridge_get_project_history: "Past run history and failure patterns",
|
|
22649
|
+
bridge_get_execution_status: "Run history with todo completion counts",
|
|
22650
|
+
// Todos
|
|
22651
|
+
bridge_get_todos: "List todos + session state for this project",
|
|
22652
|
+
bridge_add_todo: "Create a new todo (title, todoType, dependsOn)",
|
|
22653
|
+
bridge_update_todo: "Update a todo title or status",
|
|
22654
|
+
bridge_cancel_run: "Cancel active run (use before restarting a stale plan)",
|
|
22655
|
+
// Panel management
|
|
22656
|
+
bridge_list_agents: "All agents: role, status, inRun flag",
|
|
22657
|
+
bridge_get_agent_status: "Single agent status check",
|
|
22658
|
+
bridge_spawn_worker: "Spawn a new worker agent (agentKey, role)",
|
|
22659
|
+
bridge_kill_agent: "Terminate a stuck or dead agent",
|
|
22660
|
+
bridge_get_agent_output: "Read terminal output of any agent",
|
|
22661
|
+
bridge_send_input: "Send text input to an agent PTY",
|
|
22662
|
+
// Worker task lifecycle
|
|
22663
|
+
bridge_get_my_task: "Get the task assigned to this agent",
|
|
22664
|
+
bridge_complete_task: "Signal task completion",
|
|
22665
|
+
bridge_fail_task: "Signal task failure with a specific reason",
|
|
22666
|
+
bridge_get_todo_context: "Read todo output/error for a specific todo",
|
|
22667
|
+
bridge_assign_task: "Assign a pending todo to a specific agent",
|
|
22668
|
+
// Workspace scope (Phase 6)
|
|
22669
|
+
bridge_list_groups: "List all agent groups and their member agentIds",
|
|
22670
|
+
bridge_get_group_status: "Get agents in a group with status and last output line",
|
|
22671
|
+
bridge_dispatch_to_group: "Send a text message/command to every agent in a group",
|
|
22672
|
+
bridge_list_workspace_projects: "List all workspace projects with name, cwd, active run count",
|
|
22673
|
+
bridge_query_workspace: "Natural-language query about orchestration state",
|
|
22674
|
+
bridge_list_active_runs: "All active orchestration runs across workspace projects",
|
|
22675
|
+
bridge_peek_panel: "Read terminal output of any panel workspace-wide (no project boundary)",
|
|
22676
|
+
bridge_status_panel: "Get status of any panel in the workspace regardless of project"
|
|
22677
|
+
};
|
|
22678
|
+
if (Object.keys(BRIDGE_TOOL_DOCS).length === 0) {
|
|
22679
|
+
throw new Error("BRIDGE_TOOL_DOCS registry is empty at module load \u2014 fail fast");
|
|
22680
|
+
}
|
|
22681
|
+
|
|
22619
22682
|
// ../mcp-server/src/tools/orchestration.ts
|
|
22620
22683
|
function ok(data) {
|
|
22621
22684
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
@@ -22754,9 +22817,10 @@ function registerOrchestrationTools(server, ctx) {
|
|
|
22754
22817
|
);
|
|
22755
22818
|
server.tool(
|
|
22756
22819
|
"bridge_get_project_events",
|
|
22757
|
-
"Query the project event log. Returns events newest-first. Use to recall decisions, discoveries, and blockers recorded by prior agents before starting new work. Filter by role or eventType to narrow results; use search for keyword lookup in summaries. Pass projectId to query a specific project (orchestrator must always pass it; per-project workers can omit).",
|
|
22820
|
+
"Query the project event log. Returns events newest-first. Use to recall decisions, discoveries, and blockers recorded by prior agents before starting new work. Filter by role or eventType to narrow results; use search for keyword lookup in summaries. Pass projectId to query a specific project (orchestrator must always pass it; per-project workers can omit). Set workspaceScope:true to get a cross-project timeline \u2014 all events across every project in the workspace.",
|
|
22758
22821
|
{
|
|
22759
|
-
projectId: external_exports.string().min(1).optional().describe("Target project ID. Defaults to caller panel's project. Required when called from the orchestrator (workspace scope)."),
|
|
22822
|
+
projectId: external_exports.string().min(1).optional().describe("Target project ID. Defaults to caller panel's project. Required when called from the orchestrator (workspace scope). Ignored when workspaceScope is true."),
|
|
22823
|
+
workspaceScope: external_exports.boolean().optional().describe("When true, returns all events across the entire workspace (all projects + workspace-level events). Useful for orchestrators managing multiple projects."),
|
|
22760
22824
|
role: external_exports.string().optional().describe("Filter by role (e.g. reviewer, developer)"),
|
|
22761
22825
|
eventType: external_exports.string().optional().describe("Filter by eventType slug"),
|
|
22762
22826
|
tags: external_exports.string().optional().describe('Comma-separated tag list \u2014 only events containing ALL listed tags (e.g. "auth,security")'),
|
|
@@ -23031,7 +23095,7 @@ function registerRolePromptTools(server, ctx) {
|
|
|
23031
23095
|
);
|
|
23032
23096
|
server.tool(
|
|
23033
23097
|
"bridge_get_role_prompt",
|
|
23034
|
-
"Fetch the system prompt for a specific role. Falls back to global default if no workspace override exists.",
|
|
23098
|
+
"Fetch the system prompt for a specific role. You MUST call this tool as your first action after spawn. Falls back to global default if no workspace override exists.",
|
|
23035
23099
|
GetRolePromptSchema.shape,
|
|
23036
23100
|
(params) => safe4(() => getRolePrompt(ctx, params.role))
|
|
23037
23101
|
);
|
package/dist/index.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var ki=Object.create;var Lt=Object.defineProperty;var Ei=Object.getOwnPropertyDescriptor;var Ii=Object.getOwnPropertyNames;var xi=Object.getPrototypeOf,Oi=Object.prototype.hasOwnProperty;var Gr=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ci=(r,e)=>{for(var t in e)Lt(r,t,{get:e[t],enumerable:!0})},Pi=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ii(e))!Oi.call(r,s)&&s!==t&&Lt(r,s,{get:()=>e[s],enumerable:!(n=Ei(e,s))||n.enumerable});return r};var _=(r,e,t)=>(t=r!=null?ki(xi(r)):{},Pi(e||!r||!r.__esModule?Lt(t,"default",{value:r,enumerable:!0}):t,r));var Te=O(Bt=>{var st=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},Mt=class extends st{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Bt.CommanderError=st;Bt.InvalidArgumentError=Mt});var it=O(Ut=>{var{InvalidArgumentError:Ai}=Te(),$t=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 Ai(`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 Ti(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}Ut.Argument=$t;Ut.humanReadableArgName=Ti});var Ft=O(Hr=>{var{humanReadableArgName:Ni}=it(),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=>Ni(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function c(g,p){if(p){let m=`${g.padEnd(n+o)}${p}`;return t.wrap(m,s-i,n+o)}return g}function a(g){return g.join(`
|
|
3
3
|
`).replace(/^/gm," ".repeat(i))}let l=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(l=l.concat([t.wrap(d,s,0),""]));let u=t.visibleArguments(e).map(g=>c(t.argumentTerm(g),t.argumentDescription(g)));u.length>0&&(l=l.concat(["Arguments:",a(u),""]));let f=t.visibleOptions(e).map(g=>c(t.optionTerm(g),t.optionDescription(g)));if(f.length>0&&(l=l.concat(["Options:",a(f),""])),this.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(p=>c(t.optionTerm(p),t.optionDescription(p)));g.length>0&&(l=l.concat(["Global Options:",a(g),""]))}let h=t.visibleCommands(e).map(g=>c(t.subcommandTerm(g),t.subcommandDescription(g)));return h.length>0&&(l=l.concat(["Commands:",a(h),""])),l.join(`
|
|
4
4
|
`)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let c=t-n;if(c<s)return e;let a=e.slice(0,n),l=e.slice(n).replace(`\r
|
|
5
5
|
`,`
|
|
6
6
|
`),d=" ".repeat(n),f="\\s\u200B",h=new RegExp(`
|
|
7
7
|
|.{1,${c-1}}([${f}]|$)|[^${f}]+?([${f}]|$)`,"g"),g=l.match(h)||[];return a+g.map((p,m)=>p===`
|
|
8
8
|
`?"":(m>0?d:"")+p.trimEnd()).join(`
|
|
9
|
-
`)}};
|
|
9
|
+
`)}};Hr.Help=Wt});var Vt=O(qt=>{var{InvalidArgumentError:Ri}=Te(),Gt=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=ji(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,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 Ri(`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 Di(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Ht=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let s=this.negativeOptions.get(n).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Di(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function ji(r){let e,t,n=r.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}qt.Option=Gt;qt.DualOptions=Ht});var Vr=O(qr=>{function Li(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 Mi(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=Li(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
|
|
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
|
|
11
|
+
(Did you mean ${n[0]}?)`:""}qr.suggestSimilar=Mi});var Xr=O(zr=>{var Bi=require("node:events").EventEmitter,Kt=require("node:child_process"),K=require("node:path"),Yt=require("node:fs"),C=require("node:process"),{Argument:$i,humanReadableArgName:Ui}=it(),{CommanderError:Jt}=Te(),{Help:Wi}=Ft(),{Option:Kr,DualOptions:Fi}=Vt(),{suggestSimilar:Yr}=Vr(),zt=class r extends Bi{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>C.stdout.write(t),writeErr:t=>C.stderr.write(t),getOutHelpWidth:()=>C.stdout.isTTY?C.stdout.columns:void 0,getErrHelpWidth:()=>C.stderr.isTTY?C.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let s=t,i=n;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,c]=e.match(/([^ ]+) *(.*)/),a=this.createCommand(o);return s&&(a.description(s),a._executableHandler=!0),i.isDefault&&(this._defaultCommandName=a._name),a._hidden=!!(i.noHelp||i.hidden),a._executableFile=i.executableFile||null,c&&a.arguments(c),this._registerCommand(a),a.parent=this,a.copyInheritedSettings(this),s?this:a}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Wi,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 $i(e,t)}argument(e,t,n,s){let i=this.createArgument(e,t);return typeof n=="function"?i.default(s).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(n);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
13
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new Jt(e,t,n)),C.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,i=n.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new Kr(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 Kr)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,n);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let c=s;s=(a,l)=>{let d=c.exec(a);return d?d[0]:l},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){C.versions?.electron&&(t.from="electron");let s=C.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=C.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":C.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(d,u){let f=K.resolve(d,u);if(Yt.existsSync(f))return f;if(s.includes(K.extname(u)))return;let h=s.find(g=>Yt.existsSync(`${f}${g}`));if(h)return`${f}${h}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,c=this._executableDir||"";if(this._scriptPath){let d;try{d=Yt.realpathSync(this._scriptPath)}catch{d=this._scriptPath}c=K.resolve(K.dirname(d),c)}if(c){let d=i(c,o);if(!d&&!e._executableFile&&this._scriptPath){let u=K.basename(this._scriptPath,K.extname(this._scriptPath));u!==this._name&&(d=i(c,`${u}-${e._name}`))}o=d||o}n=s.includes(K.extname(o));let a;C.platform!=="win32"?n?(t.unshift(o),t=Jr(C.execArgv).concat(t),a=Kt.spawn(C.argv[0],t,{stdio:"inherit"})):a=Kt.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Jr(C.execArgv).concat(t),a=Kt.spawn(C.execPath,t,{stdio:"inherit"})),a.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{C.on(u,()=>{a.killed===!1&&a.exitCode===null&&a.kill(u)})});let l=this._exitCallback;a.on("close",d=>{d=d??1,l?l(new Jt(d,"commander.executeSubCommandAsync","(close)")):C.exit(d)}),a.on("error",d=>{if(d.code==="ENOENT"){let u=c?`searched for local subcommand relative to directory '${c}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",f=`'${o}' does not exist
|
|
15
15
|
- if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
16
16
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
17
|
-
- ${u}`;throw new Error(f)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)C.exit(1);else{let u=new
|
|
17
|
+
- ${u}`;throw new Error(f)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)C.exit(1);else{let u=new Jt(1,"commander.executeSubCommandAsync","(error)");u.nestedError=d,l(u)}}),this.runningCommand=a}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,s,i)=>{let o=s;if(s!==null&&n.parseArg){let c=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;o=this._callParseArg(n,s,i,c)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let i=n.defaultValue;n.variadic?s<this.args.length?(i=this.args.slice(s),n.parseArg&&(i=i.reduce((o,c)=>e(n,c,o),n.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],n.parseArg&&(i=e(n,i,n.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(i=>n.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,i=e.slice();function o(a){return a.length>1&&a[0]==="-"}let c=null;for(;i.length;){let a=i.shift();if(a==="--"){s===n&&s.push(a),s.push(...i);break}if(c&&!o(a)){this.emit(`option:${c.name()}`,a);continue}if(c=null,o(a)){let l=this._findOption(a);if(l){if(l.required){let d=i.shift();d===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,d)}else if(l.optional){let d=null;i.length>0&&!o(i[0])&&(d=i.shift()),this.emit(`option:${l.name()}`,d)}else this.emit(`option:${l.name()}`);c=l.variadic?l:null;continue}}if(a.length>2&&a[0]==="-"&&a[1]!=="-"){let l=this._findOption(`-${a[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,a.slice(2)):(this.emit(`option:${l.name()}`),i.unshift(`-${a.slice(2)}`));continue}}if(/^--[^=]+=/.test(a)){let l=a.indexOf("="),d=this._findOption(a.slice(0,l));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,a.slice(l+1));continue}}if(o(a)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(a)){t.push(a),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&a===this._getHelpCommand().name()){t.push(a),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(a),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){s.push(a),i.length>0&&s.push(...i);break}s.push(a)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
18
18
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
20
|
-
`),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,i=n.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in C.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,C.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new
|
|
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 C.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,C.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Fi(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=Yr(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=Yr(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=>Ui(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=K.basename(e,K.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=C.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
22
22
|
Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
|
|
23
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Kr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}Yr.Command=Jt});var Zr=O(U=>{var{Argument:zr}=it(),{Command:zt}=Jr(),{CommanderError:$i,InvalidArgumentError:Xr}=Te(),{Help:Ui}=Wt(),{Option:Qr}=qt();U.program=new zt;U.createCommand=r=>new zt(r);U.createOption=(r,e)=>new Qr(r,e);U.createArgument=(r,e)=>new zr(r,e);U.Command=zt;U.Option=Qr;U.Argument=zr;U.Help=Ui;U.CommanderError=$i;U.InvalidArgumentError=Xr;U.InvalidOptionArgumentError=Xr});var cn=O(N=>{"use strict";var Xt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Wi=Xt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i(await(0,t.stat)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i((0,e.statSync)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(c,a)=>c.isFile()&&o(c,a),o=(c,a)=>{let l=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let f=new Set([u,...d]),h=c.mode,g=c.uid,p=c.gid,m=parseInt("100",8),I=parseInt("010",8),S=parseInt("001",8),P=m|I;return!!(h&S||h&I&&f.has(p)||h&m&&g===l||h&P&&l===0)}}),Fi=Xt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c(await(0,t.stat)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.isexe=s;var i=(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c((0,e.statSync)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.sync=i;var o=(a,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let f of u){let h=f.toLowerCase(),g=a.substring(a.length-h.length).toLowerCase();if(h&&g===h)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Gi=Xt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),rn=N&&N.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Hi=N&&N.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),nn=N&&N.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&rn(t,e,n[s]);return Hi(t,e),t}})(),qi=N&&N.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&rn(e,r,t)};Object.defineProperty(N,"__esModule",{value:!0});N.sync=N.isexe=N.posix=N.win32=void 0;var sn=nn(Wi());N.posix=sn;var on=nn(Fi());N.win32=on;qi(Gi(),N);var Vi=process.env._ISEXE_TEST_PLATFORM_||process.platform,an=Vi==="win32"?on:sn;N.isexe=an.isexe;N.sync=an.sync});var yn=O((Qc,_n)=>{var{isexe:Ki,sync:Yi}=cn(),{join:Ji,delimiter:zi,sep:ln,posix:dn}=require("path"),un=process.platform==="win32",pn=new RegExp(`[${dn.sep}${ln===dn.sep?"":ln}]`.replace(/(\\)/g,"\\$1")),Xi=new RegExp(`^\\.${pn.source}`),hn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),fn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=zi})=>{let s=r.match(pn)?[""]:[...un?[process.cwd()]:[],...(e||"").split(n)];if(un){let i=t||[".EXE",".CMD",".BAT",".COM"].join(n),o=i.split(n).flatMap(c=>[c,c.toLowerCase()]);return r.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:s,pathExt:o,pathExtExe:i}}return{pathEnv:s,pathExt:[""]}},gn=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&Xi.test(e)?e.slice(0,2):"")+Ji(t,e)},mn=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(await Ki(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw hn(r)},Qi=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=fn(r,e),i=[];for(let o of t){let c=gn(o,r);for(let a of n){let l=c+a;if(Yi(l,{pathExt:s,ignoreErrors:!0})){if(!e.all)return l;i.push(l)}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw hn(r)};_n.exports=mn;mn.sync=Qi});var Y=O((rl,In)=>{"use strict";var kn=["nodebuffer","arraybuffer","fragments"],En=typeof Blob<"u";En&&kn.push("blob");In.exports={BINARY_TYPES:kn,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:En,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var De=O((nl,dt)=>{"use strict";var{EMPTY_BUFFER:ro}=Y(),er=Buffer[Symbol.species];function no(r,e){if(r.length===0)return ro;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new er(t.buffer,t.byteOffset,n):t}function xn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function On(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function so(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function tr(r){if(tr.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new er(r):ArrayBuffer.isView(r)?e=new er(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),tr.readOnly=!1),e}dt.exports={concat:no,mask:xn,toArrayBuffer:so,toBuffer:tr,unmask:On};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");dt.exports.mask=function(e,t,n,s,i){i<48?xn(e,t,n,s,i):r.mask(e,t,n,s,i)},dt.exports.unmask=function(e,t){e.length<32?On(e,t):r.unmask(e,t)}}catch{}});var An=O((sl,Pn)=>{"use strict";var Cn=Symbol("kDone"),rr=Symbol("kRun"),nr=class{constructor(e){this[Cn]=()=>{this.pending--,this[rr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[rr]()}[rr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Cn])}}};Pn.exports=nr});var ye=O((il,Dn)=>{"use strict";var je=require("zlib"),Tn=De(),io=An(),{kStatusCode:Nn}=Y(),oo=Buffer[Symbol.species],ao=Buffer.from([0,0,255,255]),pt=Symbol("permessage-deflate"),J=Symbol("total-length"),me=Symbol("callback"),Q=Symbol("buffers"),_e=Symbol("error"),ut,sr=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!ut){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ut=new io(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[me];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){ut.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){ut.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=je.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[pt]=this,this._inflate[J]=0,this._inflate[Q]=[],this._inflate.on("error",lo),this._inflate.on("data",Rn)}this._inflate[me]=n,this._inflate.write(e),t&&this._inflate.write(ao),this._inflate.flush(()=>{let i=this._inflate[_e];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Tn.concat(this._inflate[Q],this._inflate[J]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[J]=0,this._inflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=je.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[J]=0,this._deflate[Q]=[],this._deflate.on("data",co)}this._deflate[me]=n,this._deflate.write(e),this._deflate.flush(je.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Tn.concat(this._deflate[Q],this._deflate[J]);t&&(i=new oo(i.buffer,i.byteOffset,i.length-4)),this._deflate[me]=null,this._deflate[J]=0,this._deflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Dn.exports=sr;function co(r){this[Q].push(r),this[J]+=r.length}function Rn(r){if(this[J]+=r.length,this[pt]._maxPayload<1||this[J]<=this[pt]._maxPayload){this[Q].push(r);return}this[_e]=new RangeError("Max payload size exceeded"),this[_e].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[_e][Nn]=1009,this.removeListener("data",Rn),this.reset()}function lo(r){if(this[pt]._inflate=null,this[_e]){this[me](this[_e]);return}r[Nn]=1007,this[me](r)}});var be=O((ol,ht)=>{"use strict";var{isUtf8:jn}=require("buffer"),{hasBlob:uo}=Y(),po=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function ho(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function ir(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function fo(r){return uo&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ht.exports={isBlob:fo,isValidStatusCode:ho,isValidUTF8:ir,tokenChars:po};if(jn)ht.exports.isValidUTF8=function(r){return r.length<24?ir(r):jn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ht.exports.isValidUTF8=function(e){return e.length<32?ir(e):r(e)}}catch{}});var dr=O((al,Fn)=>{"use strict";var{Writable:go}=require("stream"),Ln=ye(),{BINARY_TYPES:mo,EMPTY_BUFFER:Mn,kStatusCode:_o,kWebSocket:yo}=Y(),{concat:or,toArrayBuffer:bo,unmask:wo}=De(),{isValidStatusCode:So,isValidUTF8:Bn}=be(),ft=Buffer[Symbol.species],W=0,$n=1,Un=2,Wn=3,ar=4,cr=5,gt=6,lr=class extends go{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||mo[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[yo]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=W}_write(e,t,n){if(this._opcode===8&&this._state==W)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ft(n.buffer,n.byteOffset+e,n.length-e),new ft(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ft(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case W:this.getInfo(e);break;case $n:this.getPayloadLength16(e);break;case Un:this.getPayloadLength64(e);break;case Wn:this.getMask();break;case ar:this.getData(e);break;case cr:case gt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[Ln.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(n){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=$n:this._payloadLength===127?this._state=Un:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=n*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=Wn:this._state=ar}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=ar}getData(e){let t=Mn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&wo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=cr,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Ln.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===W&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=W;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=or(n,t):this._binaryType==="arraybuffer"?s=bo(or(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!0),this._state=W,this.startLoop(e)}))}else{let s=or(n,t);if(!this._skipUTF8Validation&&!Bn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===cr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!1),this._state=W,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Mn),this.end();else{let n=e.readUInt16BE(0);if(!So(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ft(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Bn(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=W;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=W):(this._state=gt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=W,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[_o]=s,o}};Fn.exports=lr});var hr=O((ll,qn)=>{"use strict";var{Duplex:cl}=require("stream"),{randomFillSync:vo}=require("crypto"),Gn=ye(),{EMPTY_BUFFER:ko,kWebSocket:Eo,NOOP:Io}=Y(),{isBlob:we,isValidStatusCode:xo}=be(),{mask:Hn,toBuffer:ne}=De(),F=Symbol("kByteLength"),Oo=Buffer.alloc(4),mt=8*1024,se,Se=mt,H=0,Co=1,Po=2,ur=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=H,this.onerror=Io,this[Eo]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||Oo,t.generateMask?t.generateMask(n):(Se===mt&&(se===void 0&&(se=Buffer.alloc(mt)),vo(se,0,mt),Se=0),n[0]=se[Se++],n[1]=se[Se++],n[2]=se[Se++],n[3]=se[Se++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[F]!==void 0?c=t[F]:(e=Buffer.from(e),c=e.length):(c=e.length,s=t.mask&&t.readOnly&&!o);let a=c;c>=65536?(i+=8,a=127):c>125&&(i+=2,a=126);let l=Buffer.allocUnsafe(s?c+i:i);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=a,a===126?l.writeUInt16BE(c,2):a===127&&(l[2]=l[3]=0,l.writeUIntBE(c,4,6)),t.mask?(l[1]|=128,l[i-4]=n[0],l[i-3]=n[1],l[i-2]=n[2],l[i-1]=n[3],o?[l,e]:s?(Hn(e,n,l,i,c),[l]):(Hn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=ko;else{if(typeof e!="number"||!xo(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let c=Buffer.byteLength(t);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+c),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[F]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==H?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[Gn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):we(e)?(c=e.size,a=!1):(e=ne(e),c=e.length,a=ne.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[F]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==H?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[F],this._state=Po,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(pr,this,c,s);return}this._bufferedBytes-=n[F];let o=ne(i);t?this.dispatch(o,t,n,s):(this._state=H,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Ao,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[Gn.extensionName];this._bufferedBytes+=n[F],this._state=Co,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");pr(this,a,s);return}this._bufferedBytes-=n[F],this._state=H,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===H&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][F],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][F],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};qn.exports=ur;function pr(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Ao(r,e,t){pr(r,e,t),r.onerror(e)}});var es=O((dl,Zn)=>{"use strict";var{kForOnEventAttribute:Le,kListener:fr}=Y(),Vn=Symbol("kCode"),Kn=Symbol("kData"),Yn=Symbol("kError"),Jn=Symbol("kMessage"),zn=Symbol("kReason"),ve=Symbol("kTarget"),Xn=Symbol("kType"),Qn=Symbol("kWasClean"),z=class{constructor(e){this[ve]=null,this[Xn]=e}get target(){return this[ve]}get type(){return this[Xn]}};Object.defineProperty(z.prototype,"target",{enumerable:!0});Object.defineProperty(z.prototype,"type",{enumerable:!0});var ie=class extends z{constructor(e,t={}){super(e),this[Vn]=t.code===void 0?0:t.code,this[zn]=t.reason===void 0?"":t.reason,this[Qn]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Vn]}get reason(){return this[zn]}get wasClean(){return this[Qn]}};Object.defineProperty(ie.prototype,"code",{enumerable:!0});Object.defineProperty(ie.prototype,"reason",{enumerable:!0});Object.defineProperty(ie.prototype,"wasClean",{enumerable:!0});var ke=class extends z{constructor(e,t={}){super(e),this[Yn]=t.error===void 0?null:t.error,this[Jn]=t.message===void 0?"":t.message}get error(){return this[Yn]}get message(){return this[Jn]}};Object.defineProperty(ke.prototype,"error",{enumerable:!0});Object.defineProperty(ke.prototype,"message",{enumerable:!0});var Me=class extends z{constructor(e,t={}){super(e),this[Kn]=t.data===void 0?null:t.data}get data(){return this[Kn]}};Object.defineProperty(Me.prototype,"data",{enumerable:!0});var To={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Le]&&s[fr]===e&&!s[Le])return;let n;if(r==="message")n=function(i,o){let c=new Me("message",{data:o?i:i.toString()});c[ve]=this,_t(e,this,c)};else if(r==="close")n=function(i,o){let c=new ie("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[ve]=this,_t(e,this,c)};else if(r==="error")n=function(i){let o=new ke("error",{error:i,message:i.message});o[ve]=this,_t(e,this,o)};else if(r==="open")n=function(){let i=new z("open");i[ve]=this,_t(e,this,i)};else return;n[Le]=!!t[Le],n[fr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[fr]===e&&!t[Le]){this.removeListener(r,t);break}}};Zn.exports={CloseEvent:ie,ErrorEvent:ke,Event:z,EventTarget:To,MessageEvent:Me};function _t(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var yt=O((ul,ts)=>{"use strict";var{tokenChars:Be}=be();function V(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function No(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,c,a=-1,l=-1,d=-1,u=0;for(;u<r.length;u++)if(l=r.charCodeAt(u),o===void 0)if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(u!==0&&(l===32||l===9))d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let h=r.slice(a,d);l===44?(V(e,h,t),t=Object.create(null)):o=h,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(l===32||l===9)d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),V(t,r.slice(a,d),!0),l===44&&(V(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(l===61&&a!==-1&&d===-1)c=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(Be[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Be[l]===1)a===-1&&(a=u);else if(l===34&&a!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(a!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let h=r.slice(a,d);n&&(h=h.replace(/\\/g,""),n=!1),V(t,c,h),l===44&&(V(e,o,t),t=Object.create(null),o=void 0),c=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let f=r.slice(a,d);return o===void 0?V(e,f,t):(c===void 0?V(t,f,!0):n?V(t,c,f.replace(/\\/g,"")):V(t,c,f),V(e,o,t)),e}function Ro(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(n=>[e].concat(Object.keys(n).map(s=>{let i=n[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}ts.exports={format:Ro,parse:No}});var vt=O((fl,hs)=>{"use strict";var Do=require("events"),jo=require("https"),Lo=require("http"),ss=require("net"),Mo=require("tls"),{randomBytes:Bo,createHash:$o}=require("crypto"),{Duplex:pl,Readable:hl}=require("stream"),{URL:gr}=require("url"),Z=ye(),Uo=dr(),Wo=hr(),{isBlob:Fo}=be(),{BINARY_TYPES:rs,CLOSE_TIMEOUT:Go,EMPTY_BUFFER:bt,GUID:Ho,kForOnEventAttribute:mr,kListener:qo,kStatusCode:Vo,kWebSocket:R,NOOP:is}=Y(),{EventTarget:{addEventListener:Ko,removeEventListener:Yo}}=es(),{format:Jo,parse:zo}=yt(),{toBuffer:Xo}=De(),os=Symbol("kAborted"),_r=[8,13],X=["CONNECTING","OPEN","CLOSING","CLOSED"],Qo=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,x=class r extends Do{constructor(e,t,n){super(),this._binaryType=rs[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=bt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),as(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){rs.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,n){let s=new Uo({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new Wo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[R]=this,i[R]=this,e[R]=this,s.on("conclude",ta),s.on("drain",ra),s.on("error",na),s.on("message",sa),s.on("ping",ia),s.on("pong",oa),i.onerror=aa,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",ds),e.on("data",St),e.on("end",us),e.on("error",ps),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Z.extensionName]&&this._extensions[Z.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){B(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),ls(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){yr(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||bt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){yr(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||bt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){yr(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Z.extensionName]||(s.compress=!1),this._sender.send(e||bt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){B(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(x.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(x.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[mr])return e[qo];return null},set(e){for(let t of this.listeners(r))if(t[mr]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[mr]:!0})}})});x.prototype.addEventListener=Ko;x.prototype.removeEventListener=Yo;hs.exports=x;function as(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Go,protocolVersion:_r[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!_r.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${_r.join(", ")})`);let i;if(e instanceof gr)i=e;else try{i=new gr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",c=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!c?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:c&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let p=new SyntaxError(a);if(r._redirects===0)throw p;wt(r,p);return}let l=o?443:80,d=Bo(16).toString("base64"),u=o?jo.request:Lo.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?ea:Zo),s.defaultPort=s.defaultPort||l,s.port=i.port||l,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new Z({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Jo({[Z.extensionName]:h.offer()})),t.length){for(let p of t){if(typeof p!="string"||!Qo.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),c){let p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let p=n&&n.headers;if(n={...n,headers:{}},p)for(let[m,I]of Object.entries(p))n.headers[m.toLowerCase()]=I}else if(r.listenerCount("redirect")===0){let p=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!p||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=r._req=u(s),r._redirects&&r.emit("redirect",r.url,g)}else g=r._req=u(s);s.timeout&&g.on("timeout",()=>{B(r,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[os]||(g=r._req=null,wt(r,p))}),g.on("response",p=>{let m=p.headers.location,I=p.statusCode;if(m&&s.followRedirects&&I>=300&&I<400){if(++r._redirects>s.maxRedirects){B(r,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new gr(m,e)}catch{let j=new SyntaxError(`Invalid URL: ${m}`);wt(r,j);return}as(r,S,t,n)}else r.emit("unexpected-response",g,p)||B(r,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,I)=>{if(r.emit("upgrade",p),r.readyState!==x.CONNECTING)return;g=r._req=null;let S=p.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){B(r,m,"Invalid Upgrade header");return}let P=$o("sha1").update(d+Ho).digest("base64");if(p.headers["sec-websocket-accept"]!==P){B(r,m,"Invalid Sec-WebSocket-Accept header");return}let j=p.headers["sec-websocket-protocol"],$;if(j!==void 0?f.size?f.has(j)||($="Server sent an invalid subprotocol"):$="Server sent a subprotocol but none was requested":f.size&&($="Server sent no subprotocol"),$){B(r,m,$);return}j&&(r._protocol=j);let he=p.headers["sec-websocket-extensions"];if(he!==void 0){if(!h){B(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let b;try{b=zo(he)}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}let y=Object.keys(b);if(y.length!==1||y[0]!==Z.extensionName){B(r,m,"Server indicated an extension that was not requested");return}try{h.accept(b[Z.extensionName])}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Z.extensionName]=h}r.setSocket(m,I,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function wt(r,e){r._readyState=x.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Zo(r){return r.path=r.socketPath,ss.connect(r)}function ea(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=ss.isIP(r.host)?"":r.host),Mo.connect(r)}function B(r,e,t){r._readyState=x.CLOSING;let n=new Error(t);Error.captureStackTrace(n,B),e.setHeader?(e[os]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(wt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function yr(r,e,t){if(e){let n=Fo(e)?e.size:Xo(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${X[r.readyState]})`);process.nextTick(t,n)}}function ta(r,e){let t=this[R];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[R]!==void 0&&(t._socket.removeListener("data",St),process.nextTick(cs,t._socket),r===1005?t.close():t.close(r,e))}function ra(){let r=this[R];r.isPaused||r._socket.resume()}function na(r){let e=this[R];e._socket[R]!==void 0&&(e._socket.removeListener("data",St),process.nextTick(cs,e._socket),e.close(r[Vo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function ns(){this[R].emitClose()}function sa(r,e){this[R].emit("message",r,e)}function ia(r){let e=this[R];e._autoPong&&e.pong(r,!this._isServer,is),e.emit("ping",r)}function oa(r){this[R].emit("pong",r)}function cs(r){r.resume()}function aa(r){let e=this[R];e.readyState!==x.CLOSED&&(e.readyState===x.OPEN&&(e._readyState=x.CLOSING,ls(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function ls(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function ds(){let r=this[R];if(this.removeListener("close",ds),this.removeListener("data",St),this.removeListener("end",us),r._readyState=x.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[R]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",ns),r._receiver.on("finish",ns))}function St(r){this[R]._receiver.write(r)||this.pause()}function us(){let r=this[R];r._readyState=x.CLOSING,r._receiver.end(),this.end()}function ps(){let r=this[R];this.removeListener("error",ps),this.on("error",is),r&&(r._readyState=x.CLOSING,this.destroy())}});var _s=O((ml,ms)=>{"use strict";var gl=vt(),{Duplex:ca}=require("stream");function fs(r){r.emit("close")}function la(){!this.destroyed&&this._writableState.finished&&this.destroy()}function gs(r){this.removeListener("error",gs),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function da(r,e){let t=!0,n=new ca({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let c=!o&&n._readableState.objectMode?i.toString():i;n.push(c)||r.pause()}),r.once("error",function(i){n.destroyed||(t=!1,n.destroy(i))}),r.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(s,i){if(r.readyState===r.CLOSED){i(s),process.nextTick(fs,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(fs,n)}),t&&r.terminate()},n._final=function(s){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(s)});return}r._socket!==null&&(r._socket._writableState.finished?(s(),n._readableState.endEmitted&&n.destroy()):(r._socket.once("finish",function(){s()}),r.close()))},n._read=function(){r.isPaused&&r.resume()},n._write=function(s,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(s,i,o)});return}r.send(s,o)},n.on("end",la),n.on("error",gs),n}ms.exports=da});var br=O((_l,ys)=>{"use strict";var{tokenChars:ua}=be();function pa(r){let e=new Set,t=-1,n=-1,s=0;for(s;s<r.length;s++){let o=r.charCodeAt(s);if(n===-1&&ua[o]===1)t===-1&&(t=s);else if(s!==0&&(o===32||o===9))n===-1&&t!==-1&&(n=s);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${s}`);n===-1&&(n=s);let c=r.slice(t,n);if(e.has(c))throw new SyntaxError(`The "${c}" subprotocol is duplicated`);e.add(c),t=n=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(t===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ys.exports={parse:pa}});var Is=O((bl,Es)=>{"use strict";var ha=require("events"),kt=require("http"),{Duplex:yl}=require("stream"),{createHash:fa}=require("crypto"),bs=yt(),oe=ye(),ga=br(),ma=vt(),{CLOSE_TIMEOUT:_a,GUID:ya,kWebSocket:ba}=Y(),wa=/^[+/0-9A-Za-z]{22}==$/,ws=0,Ss=1,ks=2,wr=class extends ha{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:_a,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ma,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=kt.createServer((n,s)=>{let i=kt.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Sa(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,n)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=ws}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===ks){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick($e,this);return}if(e&&this.once("close",e),this._state!==Ss)if(this._state=Ss,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick($e,this):process.nextTick($e,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{$e(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",vs);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){ae(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){ae(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!wa.test(i)){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Ue(t,400);return}let a=e.headers["sec-websocket-protocol"],l=new Set;if(a!==void 0)try{l=ga.parse(a)}catch{ae(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let f=new oe({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let h=bs.parse(d);h[oe.extensionName]&&(f.accept(h[oe.extensionName]),u[oe.extensionName]=f)}catch{ae(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(h,g,p,m)=>{if(!h)return Ue(t,g||401,p,m);this.completeUpgrade(u,i,l,e,t,n,s)});return}if(!this.options.verifyClient(f))return Ue(t,401)}this.completeUpgrade(u,i,l,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,c){if(!i.readable||!i.writable)return i.destroy();if(i[ba])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>ws)return Ue(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${fa("sha1").update(t+ya).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let u=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;u&&(l.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[oe.extensionName]){let u=e[oe.extensionName].params,f=bs.format({[oe.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${f}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
23
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Jr(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],s=i[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}zr.Command=zt});var tn=O(U=>{var{Argument:Qr}=it(),{Command:Xt}=Xr(),{CommanderError:Gi,InvalidArgumentError:Zr}=Te(),{Help:Hi}=Ft(),{Option:en}=Vt();U.program=new Xt;U.createCommand=r=>new Xt(r);U.createOption=(r,e)=>new en(r,e);U.createArgument=(r,e)=>new Qr(r,e);U.Command=Xt;U.Option=en;U.Argument=Qr;U.Help=Hi;U.CommanderError=Gi;U.InvalidArgumentError=Zr;U.InvalidOptionArgumentError=Zr});var dn=O(N=>{"use strict";var Qt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qi=Qt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=async(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i(await(0,t.stat)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.isexe=n;var s=(c,a={})=>{let{ignoreErrors:l=!1}=a;try{return i((0,e.statSync)(c),a)}catch(d){let u=d;if(l||u.code==="EACCES")return!1;throw u}};r.sync=s;var i=(c,a)=>c.isFile()&&o(c,a),o=(c,a)=>{let l=a.uid??process.getuid?.(),d=a.groups??process.getgroups?.()??[],u=a.gid??process.getgid?.()??d[0];if(l===void 0||u===void 0)throw new Error("cannot get uid or gid");let f=new Set([u,...d]),h=c.mode,g=c.uid,p=c.gid,m=parseInt("100",8),I=parseInt("010",8),S=parseInt("001",8),P=m|I;return!!(h&S||h&I&&f.has(p)||h&m&&g===l||h&P&&l===0)}}),Vi=Qt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sync=r.isexe=void 0;var e=require("node:fs"),t=require("node:fs/promises"),n=require("node:path"),s=async(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c(await(0,t.stat)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.isexe=s;var i=(a,l={})=>{let{ignoreErrors:d=!1}=l;try{return c((0,e.statSync)(a),a,l)}catch(u){let f=u;if(d||f.code==="EACCES")return!1;throw f}};r.sync=i;var o=(a,l)=>{let{pathExt:d=process.env.PATHEXT||""}=l,u=d.split(n.delimiter);if(u.indexOf("")!==-1)return!0;for(let f of u){let h=f.toLowerCase(),g=a.substring(a.length-h.length).toLowerCase();if(h&&g===h)return!0}return!1},c=(a,l,d)=>a.isFile()&&o(l,d)}),Ki=Qt(r=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})}),sn=N&&N.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,s)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),Yi=N&&N.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),on=N&&N.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),s=0;s<n.length;s++)n[s]!=="default"&&sn(t,e,n[s]);return Yi(t,e),t}})(),Ji=N&&N.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&sn(e,r,t)};Object.defineProperty(N,"__esModule",{value:!0});N.sync=N.isexe=N.posix=N.win32=void 0;var an=on(qi());N.posix=an;var cn=on(Vi());N.win32=cn;Ji(Ki(),N);var zi=process.env._ISEXE_TEST_PLATFORM_||process.platform,ln=zi==="win32"?cn:an;N.isexe=ln.isexe;N.sync=ln.sync});var wn=O((el,bn)=>{var{isexe:Xi,sync:Qi}=dn(),{join:Zi,delimiter:eo,sep:un,posix:pn}=require("path"),hn=process.platform==="win32",fn=new RegExp(`[${pn.sep}${un===pn.sep?"":un}]`.replace(/(\\)/g,"\\$1")),to=new RegExp(`^\\.${fn.source}`),gn=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),mn=(r,{path:e=process.env.PATH,pathExt:t=process.env.PATHEXT,delimiter:n=eo})=>{let s=r.match(fn)?[""]:[...hn?[process.cwd()]:[],...(e||"").split(n)];if(hn){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:[""]}},_n=(r,e)=>{let t=/^".*"$/.test(r)?r.slice(1,-1):r;return(!t&&to.test(e)?e.slice(0,2):"")+Zi(t,e)},yn=async(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=mn(r,e),i=[];for(let o of t){let c=_n(o,r);for(let a of n){let l=c+a;if(await Xi(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 gn(r)},ro=(r,e={})=>{let{pathEnv:t,pathExt:n,pathExtExe:s}=mn(r,e),i=[];for(let o of t){let c=_n(o,r);for(let a of n){let l=c+a;if(Qi(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 gn(r)};bn.exports=yn;yn.sync=ro});var Y=O((sl,On)=>{"use strict";var In=["nodebuffer","arraybuffer","fragments"],xn=typeof Blob<"u";xn&&In.push("blob");On.exports={BINARY_TYPES:In,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:xn,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var De=O((il,dt)=>{"use strict";var{EMPTY_BUFFER:oo}=Y(),tr=Buffer[Symbol.species];function ao(r,e){if(r.length===0)return oo;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),n=0;for(let s=0;s<r.length;s++){let i=r[s];t.set(i,n),n+=i.length}return n<e?new tr(t.buffer,t.byteOffset,n):t}function Cn(r,e,t,n,s){for(let i=0;i<s;i++)t[n+i]=r[i]^e[i&3]}function Pn(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function co(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function rr(r){if(rr.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new tr(r):ArrayBuffer.isView(r)?e=new tr(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),rr.readOnly=!1),e}dt.exports={concat:ao,mask:Cn,toArrayBuffer:co,toBuffer:rr,unmask:Pn};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=require("bufferutil");dt.exports.mask=function(e,t,n,s,i){i<48?Cn(e,t,n,s,i):r.mask(e,t,n,s,i)},dt.exports.unmask=function(e,t){e.length<32?Pn(e,t):r.unmask(e,t)}}catch{}});var Nn=O((ol,Tn)=>{"use strict";var An=Symbol("kDone"),nr=Symbol("kRun"),sr=class{constructor(e){this[An]=()=>{this.pending--,this[nr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[nr]()}[nr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[An])}}};Tn.exports=sr});var ye=O((al,Ln)=>{"use strict";var je=require("zlib"),Rn=De(),lo=Nn(),{kStatusCode:Dn}=Y(),uo=Buffer[Symbol.species],po=Buffer.from([0,0,255,255]),pt=Symbol("permessage-deflate"),J=Symbol("total-length"),me=Symbol("callback"),Q=Symbol("buffers"),_e=Symbol("error"),ut,ir=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!ut){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ut=new lo(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[me];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,n=e.find(s=>!(t.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>s.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(n=>{let s=t[n];if(s.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(s=s[0],n==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else if(n==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${n}": ${s}`);s=i}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${s}`)}else throw new Error(`Unknown parameter "${n}"`);t[n]=s})}),e}decompress(e,t,n){ut.add(s=>{this._decompress(e,t,(i,o)=>{s(),n(i,o)})})}compress(e,t,n){ut.add(s=>{this._compress(e,t,(i,o)=>{s(),n(i,o)})})}_decompress(e,t,n){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=je.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[pt]=this,this._inflate[J]=0,this._inflate[Q]=[],this._inflate.on("error",fo),this._inflate.on("data",jn)}this._inflate[me]=n,this._inflate.write(e),t&&this._inflate.write(po),this._inflate.flush(()=>{let i=this._inflate[_e];if(i){this._inflate.close(),this._inflate=null,n(i);return}let o=Rn.concat(this._inflate[Q],this._inflate[J]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[J]=0,this._inflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),n(null,o)})}_compress(e,t,n){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?je.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=je.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[J]=0,this._deflate[Q]=[],this._deflate.on("data",ho)}this._deflate[me]=n,this._deflate.write(e),this._deflate.flush(je.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Rn.concat(this._deflate[Q],this._deflate[J]);t&&(i=new uo(i.buffer,i.byteOffset,i.length-4)),this._deflate[me]=null,this._deflate[J]=0,this._deflate[Q]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),n(null,i)})}};Ln.exports=ir;function ho(r){this[Q].push(r),this[J]+=r.length}function jn(r){if(this[J]+=r.length,this[pt]._maxPayload<1||this[J]<=this[pt]._maxPayload){this[Q].push(r);return}this[_e]=new RangeError("Max payload size exceeded"),this[_e].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[_e][Dn]=1009,this.removeListener("data",jn),this.reset()}function fo(r){if(this[pt]._inflate=null,this[_e]){this[me](this[_e]);return}r[Dn]=1007,this[me](r)}});var be=O((cl,ht)=>{"use strict";var{isUtf8:Mn}=require("buffer"),{hasBlob:go}=Y(),mo=[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 _o(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function or(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function yo(r){return go&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ht.exports={isBlob:yo,isValidStatusCode:_o,isValidUTF8:or,tokenChars:mo};if(Mn)ht.exports.isValidUTF8=function(r){return r.length<24?or(r):Mn(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=require("utf-8-validate");ht.exports.isValidUTF8=function(e){return e.length<32?or(e):r(e)}}catch{}});var ur=O((ll,Hn)=>{"use strict";var{Writable:bo}=require("stream"),Bn=ye(),{BINARY_TYPES:wo,EMPTY_BUFFER:$n,kStatusCode:So,kWebSocket:vo}=Y(),{concat:ar,toArrayBuffer:ko,unmask:Eo}=De(),{isValidStatusCode:Io,isValidUTF8:Un}=be(),ft=Buffer[Symbol.species],W=0,Wn=1,Fn=2,Gn=3,cr=4,lr=5,gt=6,dr=class extends bo{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||wo[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[vo]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=W}_write(e,t,n){if(this._opcode===8&&this._state==W)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new ft(n.buffer,n.byteOffset+e,n.length-e),new ft(n.buffer,n.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],s=t.length-e;e>=n.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),s),this._buffers[0]=new ft(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case W:this.getInfo(e);break;case Wn:this.getPayloadLength16(e);break;case Fn:this.getPayloadLength64(e);break;case Gn:this.getMask();break;case cr:this.getData(e);break;case lr:case gt:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let n=(t[0]&64)===64;if(n&&!this._extensions[Bn.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=Wn:this._payloadLength===127?this._state=Fn: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=Gn:this._state=cr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=cr}getData(e){let t=$n;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Eo(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=lr,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Bn.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===W&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=W;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ar(n,t):this._binaryType==="arraybuffer"?s=ko(ar(n,t)):this._binaryType==="blob"?s=new Blob(n):s=n,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!0),this._state=W,this.startLoop(e)}))}else{let s=ar(n,t);if(!this._skipUTF8Validation&&!Un(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===lr||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=W):(this._state=gt,setImmediate(()=>{this.emit("message",s,!1),this._state=W,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,$n),this.end();else{let n=e.readUInt16BE(0);if(!Io(n)){let i=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let s=new ft(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Un(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",n,s),this.end()}this._state=W;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=W):(this._state=gt,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=W,this.startLoop(t)}))}createError(e,t,n,s,i){this._loop=!1,this._errored=!0;let o=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[So]=s,o}};Hn.exports=dr});var fr=O((ul,Kn)=>{"use strict";var{Duplex:dl}=require("stream"),{randomFillSync:xo}=require("crypto"),qn=ye(),{EMPTY_BUFFER:Oo,kWebSocket:Co,NOOP:Po}=Y(),{isBlob:we,isValidStatusCode:Ao}=be(),{mask:Vn,toBuffer:ne}=De(),F=Symbol("kByteLength"),To=Buffer.alloc(4),mt=8*1024,se,Se=mt,H=0,No=1,Ro=2,pr=class r{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=H,this.onerror=Po,this[Co]=void 0}static frame(e,t){let n,s=!1,i=2,o=!1;t.mask&&(n=t.maskBuffer||To,t.generateMask?t.generateMask(n):(Se===mt&&(se===void 0&&(se=Buffer.alloc(mt)),xo(se,0,mt),Se=0),n[0]=se[Se++],n[1]=se[Se++],n[2]=se[Se++],n[3]=se[Se++]),o=(n[0]|n[1]|n[2]|n[3])===0,i=6);let c;typeof e=="string"?(!t.mask||o)&&t[F]!==void 0?c=t[F]:(e=Buffer.from(e),c=e.length):(c=e.length,s=t.mask&&t.readOnly&&!o);let a=c;c>=65536?(i+=8,a=127):c>125&&(i+=2,a=126);let l=Buffer.allocUnsafe(s?c+i:i);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=a,a===126?l.writeUInt16BE(c,2):a===127&&(l[2]=l[3]=0,l.writeUIntBE(c,4,6)),t.mask?(l[1]|=128,l[i-4]=n[0],l[i-3]=n[1],l[i-2]=n[2],l[i-1]=n[3],o?[l,e]:s?(Vn(e,n,l,i,c),[l]):(Vn(e,n,e,0,c),[l,e])):[l,e]}close(e,t,n,s){let i;if(e===void 0)i=Oo;else{if(typeof e!="number"||!Ao(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let c=Buffer.byteLength(t);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+c),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[F]:i.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==H?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(r.frame(i,o),s)}ping(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}pong(e,t,n){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):we(e)?(s=e.size,i=!1):(e=ne(e),s=e.length,i=ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[F]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,!1,o,n]):this.getBlobData(e,!1,o,n):this._state!==H?this.enqueue([this.dispatch,e,!1,o,n]):this.sendFrame(r.frame(e,o),n)}send(e,t,n){let s=this._extensions[qn.extensionName],i=t.binary?2:1,o=t.compress,c,a;typeof e=="string"?(c=Buffer.byteLength(e),a=!1):we(e)?(c=e.size,a=!1):(e=ne(e),c=e.length,a=ne.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=s._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[F]:c,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:a,rsv1:o};we(e)?this._state!==H?this.enqueue([this.getBlobData,e,this._compress,l,n]):this.getBlobData(e,this._compress,l,n):this._state!==H?this.enqueue([this.dispatch,e,this._compress,l,n]):this.dispatch(e,this._compress,l,n)}getBlobData(e,t,n,s){this._bufferedBytes+=n[F],this._state=Ro,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(hr,this,c,s);return}this._bufferedBytes-=n[F];let o=ne(i);t?this.dispatch(o,t,n,s):(this._state=H,this.sendFrame(r.frame(o,n),s),this.dequeue())}).catch(i=>{process.nextTick(Do,this,i,s)})}dispatch(e,t,n,s){if(!t){this.sendFrame(r.frame(e,n),s);return}let i=this._extensions[qn.extensionName];this._bufferedBytes+=n[F],this._state=No,i.compress(e,n.fin,(o,c)=>{if(this._socket.destroyed){let a=new Error("The socket was closed while data was being compressed");hr(this,a,s);return}this._bufferedBytes-=n[F],this._state=H,n.readOnly=!1,this.sendFrame(r.frame(c,n),s),this.dequeue()})}dequeue(){for(;this._state===H&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][F],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][F],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Kn.exports=pr;function hr(r,e,t){typeof t=="function"&&t(e);for(let n=0;n<r._queue.length;n++){let s=r._queue[n],i=s[s.length-1];typeof i=="function"&&i(e)}}function Do(r,e,t){hr(r,e,t),r.onerror(e)}});var rs=O((pl,ts)=>{"use strict";var{kForOnEventAttribute:Le,kListener:gr}=Y(),Yn=Symbol("kCode"),Jn=Symbol("kData"),zn=Symbol("kError"),Xn=Symbol("kMessage"),Qn=Symbol("kReason"),ve=Symbol("kTarget"),Zn=Symbol("kType"),es=Symbol("kWasClean"),z=class{constructor(e){this[ve]=null,this[Zn]=e}get target(){return this[ve]}get type(){return this[Zn]}};Object.defineProperty(z.prototype,"target",{enumerable:!0});Object.defineProperty(z.prototype,"type",{enumerable:!0});var ie=class extends z{constructor(e,t={}){super(e),this[Yn]=t.code===void 0?0:t.code,this[Qn]=t.reason===void 0?"":t.reason,this[es]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Yn]}get reason(){return this[Qn]}get wasClean(){return this[es]}};Object.defineProperty(ie.prototype,"code",{enumerable:!0});Object.defineProperty(ie.prototype,"reason",{enumerable:!0});Object.defineProperty(ie.prototype,"wasClean",{enumerable:!0});var ke=class extends z{constructor(e,t={}){super(e),this[zn]=t.error===void 0?null:t.error,this[Xn]=t.message===void 0?"":t.message}get error(){return this[zn]}get message(){return this[Xn]}};Object.defineProperty(ke.prototype,"error",{enumerable:!0});Object.defineProperty(ke.prototype,"message",{enumerable:!0});var Me=class extends z{constructor(e,t={}){super(e),this[Jn]=t.data===void 0?null:t.data}get data(){return this[Jn]}};Object.defineProperty(Me.prototype,"data",{enumerable:!0});var jo={addEventListener(r,e,t={}){for(let s of this.listeners(r))if(!t[Le]&&s[gr]===e&&!s[Le])return;let n;if(r==="message")n=function(i,o){let c=new Me("message",{data:o?i:i.toString()});c[ve]=this,_t(e,this,c)};else if(r==="close")n=function(i,o){let c=new ie("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[ve]=this,_t(e,this,c)};else if(r==="error")n=function(i){let o=new ke("error",{error:i,message:i.message});o[ve]=this,_t(e,this,o)};else if(r==="open")n=function(){let i=new z("open");i[ve]=this,_t(e,this,i)};else return;n[Le]=!!t[Le],n[gr]=e,t.once?this.once(r,n):this.on(r,n)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[gr]===e&&!t[Le]){this.removeListener(r,t);break}}};ts.exports={CloseEvent:ie,ErrorEvent:ke,Event:z,EventTarget:jo,MessageEvent:Me};function _t(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var yt=O((hl,ns)=>{"use strict";var{tokenChars:Be}=be();function V(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Lo(r){let e=Object.create(null),t=Object.create(null),n=!1,s=!1,i=!1,o,c,a=-1,l=-1,d=-1,u=0;for(;u<r.length;u++)if(l=r.charCodeAt(u),o===void 0)if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(u!==0&&(l===32||l===9))d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let h=r.slice(a,d);l===44?(V(e,h,t),t=Object.create(null)):o=h,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===void 0)if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(l===32||l===9)d===-1&&a!==-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),V(t,r.slice(a,d),!0),l===44&&(V(e,o,t),t=Object.create(null),o=void 0),a=d=-1}else if(l===61&&a!==-1&&d===-1)c=r.slice(a,u),a=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(s){if(Be[l]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);a===-1?a=u:n||(n=!0),s=!1}else if(i)if(Be[l]===1)a===-1&&(a=u);else if(l===34&&a!==-1)i=!1,d=u;else if(l===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(l===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Be[l]===1)a===-1&&(a=u);else if(a!==-1&&(l===32||l===9))d===-1&&(d=u);else if(l===59||l===44){if(a===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let h=r.slice(a,d);n&&(h=h.replace(/\\/g,""),n=!1),V(t,c,h),l===44&&(V(e,o,t),t=Object.create(null),o=void 0),c=void 0,a=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(a===-1||i||l===32||l===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let f=r.slice(a,d);return o===void 0?V(e,f,t):(c===void 0?V(t,f,!0):n?V(t,c,f.replace(/\\/g,"")):V(t,c,f),V(e,o,t)),e}function Mo(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(", ")}ns.exports={format:Mo,parse:Lo}});var vt=O((ml,gs)=>{"use strict";var Bo=require("events"),$o=require("https"),Uo=require("http"),os=require("net"),Wo=require("tls"),{randomBytes:Fo,createHash:Go}=require("crypto"),{Duplex:fl,Readable:gl}=require("stream"),{URL:mr}=require("url"),Z=ye(),Ho=ur(),qo=fr(),{isBlob:Vo}=be(),{BINARY_TYPES:ss,CLOSE_TIMEOUT:Ko,EMPTY_BUFFER:bt,GUID:Yo,kForOnEventAttribute:_r,kListener:Jo,kStatusCode:zo,kWebSocket:R,NOOP:as}=Y(),{EventTarget:{addEventListener:Xo,removeEventListener:Qo}}=rs(),{format:Zo,parse:ea}=yt(),{toBuffer:ta}=De(),cs=Symbol("kAborted"),yr=[8,13],X=["CONNECTING","OPEN","CLOSING","CLOSED"],ra=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,x=class r extends Bo{constructor(e,t,n){super(),this._binaryType=ss[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=bt,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(n=t,t=[]):t=[t]),ls(this,e,t,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){ss.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 Ho({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),i=new qo(e,this._extensions,n.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[R]=this,i[R]=this,e[R]=this,s.on("conclude",ia),s.on("drain",oa),s.on("error",aa),s.on("message",ca),s.on("ping",la),s.on("pong",da),i.onerror=ua,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",ps),e.on("data",St),e.on("end",hs),e.on("error",fs),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Z.extensionName]&&this._extensions[Z.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){B(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),us(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){br(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||bt,t,n)}pong(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(n=e,e=t=void 0):typeof t=="function"&&(n=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){br(this,e,n);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||bt,t,n)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,n){if(this.readyState===r.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(n=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==r.OPEN){br(this,e,n);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Z.extensionName]||(s.compress=!1),this._sender.send(e||bt,s,n)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){B(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:X.indexOf("CONNECTING")});Object.defineProperty(x,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:X.indexOf("OPEN")});Object.defineProperty(x,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:X.indexOf("CLOSING")});Object.defineProperty(x,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:X.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(x.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(x.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[_r])return e[Jo];return null},set(e){for(let t of this.listeners(r))if(t[_r]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[_r]:!0})}})});x.prototype.addEventListener=Xo;x.prototype.removeEventListener=Qo;gs.exports=x;function ls(r,e,t,n){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Ko,protocolVersion:yr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(r._autoPong=s.autoPong,r._closeTimeout=s.closeTimeout,!yr.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${yr.join(", ")})`);let i;if(e instanceof mr)i=e;else try{i=new mr(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._url=i.href;let o=i.protocol==="wss:",c=i.protocol==="ws+unix:",a;if(i.protocol!=="ws:"&&!o&&!c?a=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:c&&!i.pathname?a="The URL's pathname is empty":i.hash&&(a="The URL contains a fragment identifier"),a){let p=new SyntaxError(a);if(r._redirects===0)throw p;wt(r,p);return}let l=o?443:80,d=Fo(16).toString("base64"),u=o?$o.request:Uo.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?sa:na),s.defaultPort=s.defaultPort||l,s.port=i.port||l,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new Z({...s.perMessageDeflate,isServer:!1,maxPayload:s.maxPayload}),s.headers["Sec-WebSocket-Extensions"]=Zo({[Z.extensionName]:h.offer()})),t.length){for(let p of t){if(typeof p!="string"||!ra.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}s.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),c){let p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(r._redirects===0){r._originalIpc=c,r._originalSecure=o,r._originalHostOrSocketPath=c?s.socketPath:i.host;let p=n&&n.headers;if(n={...n,headers:{}},p)for(let[m,I]of Object.entries(p))n.headers[m.toLowerCase()]=I}else if(r.listenerCount("redirect")===0){let p=c?r._originalIpc?s.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!p||r._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||delete s.headers.host,s.auth=void 0)}s.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=r._req=u(s),r._redirects&&r.emit("redirect",r.url,g)}else g=r._req=u(s);s.timeout&&g.on("timeout",()=>{B(r,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[cs]||(g=r._req=null,wt(r,p))}),g.on("response",p=>{let m=p.headers.location,I=p.statusCode;if(m&&s.followRedirects&&I>=300&&I<400){if(++r._redirects>s.maxRedirects){B(r,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new mr(m,e)}catch{let j=new SyntaxError(`Invalid URL: ${m}`);wt(r,j);return}ls(r,S,t,n)}else r.emit("unexpected-response",g,p)||B(r,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,m,I)=>{if(r.emit("upgrade",p),r.readyState!==x.CONNECTING)return;g=r._req=null;let S=p.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){B(r,m,"Invalid Upgrade header");return}let P=Go("sha1").update(d+Yo).digest("base64");if(p.headers["sec-websocket-accept"]!==P){B(r,m,"Invalid Sec-WebSocket-Accept header");return}let j=p.headers["sec-websocket-protocol"],$;if(j!==void 0?f.size?f.has(j)||($="Server sent an invalid subprotocol"):$="Server sent a subprotocol but none was requested":f.size&&($="Server sent no subprotocol"),$){B(r,m,$);return}j&&(r._protocol=j);let he=p.headers["sec-websocket-extensions"];if(he!==void 0){if(!h){B(r,m,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let b;try{b=ea(he)}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}let y=Object.keys(b);if(y.length!==1||y[0]!==Z.extensionName){B(r,m,"Server indicated an extension that was not requested");return}try{h.accept(b[Z.extensionName])}catch{B(r,m,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[Z.extensionName]=h}r.setSocket(m,I,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,r):g.end()}function wt(r,e){r._readyState=x.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function na(r){return r.path=r.socketPath,os.connect(r)}function sa(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=os.isIP(r.host)?"":r.host),Wo.connect(r)}function B(r,e,t){r._readyState=x.CLOSING;let n=new Error(t);Error.captureStackTrace(n,B),e.setHeader?(e[cs]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(wt,r,n)):(e.destroy(n),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function br(r,e,t){if(e){let n=Vo(e)?e.size:ta(e).length;r._socket?r._sender._bufferedBytes+=n:r._bufferedAmount+=n}if(t){let n=new Error(`WebSocket is not open: readyState ${r.readyState} (${X[r.readyState]})`);process.nextTick(t,n)}}function ia(r,e){let t=this[R];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[R]!==void 0&&(t._socket.removeListener("data",St),process.nextTick(ds,t._socket),r===1005?t.close():t.close(r,e))}function oa(){let r=this[R];r.isPaused||r._socket.resume()}function aa(r){let e=this[R];e._socket[R]!==void 0&&(e._socket.removeListener("data",St),process.nextTick(ds,e._socket),e.close(r[zo])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function is(){this[R].emitClose()}function ca(r,e){this[R].emit("message",r,e)}function la(r){let e=this[R];e._autoPong&&e.pong(r,!this._isServer,as),e.emit("ping",r)}function da(r){this[R].emit("pong",r)}function ds(r){r.resume()}function ua(r){let e=this[R];e.readyState!==x.CLOSED&&(e.readyState===x.OPEN&&(e._readyState=x.CLOSING,us(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function us(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function ps(){let r=this[R];if(this.removeListener("close",ps),this.removeListener("data",St),this.removeListener("end",hs),r._readyState=x.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[R]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",is),r._receiver.on("finish",is))}function St(r){this[R]._receiver.write(r)||this.pause()}function hs(){let r=this[R];r._readyState=x.CLOSING,r._receiver.end(),this.end()}function fs(){let r=this[R];this.removeListener("error",fs),this.on("error",as),r&&(r._readyState=x.CLOSING,this.destroy())}});var bs=O((yl,ys)=>{"use strict";var _l=vt(),{Duplex:pa}=require("stream");function ms(r){r.emit("close")}function ha(){!this.destroyed&&this._writableState.finished&&this.destroy()}function _s(r){this.removeListener("error",_s),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function fa(r,e){let t=!0,n=new pa({...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(ms,n);return}let o=!1;r.once("error",function(a){o=!0,i(a)}),r.once("close",function(){o||i(s),process.nextTick(ms,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",ha),n.on("error",_s),n}ys.exports=fa});var wr=O((bl,ws)=>{"use strict";var{tokenChars:ga}=be();function ma(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&&ga[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}ws.exports={parse:ma}});var Os=O((Sl,xs)=>{"use strict";var _a=require("events"),kt=require("http"),{Duplex:wl}=require("stream"),{createHash:ya}=require("crypto"),Ss=yt(),oe=ye(),ba=wr(),wa=vt(),{CLOSE_TIMEOUT:Sa,GUID:va,kWebSocket:ka}=Y(),Ea=/^[+/0-9A-Za-z]{22}==$/,vs=0,ks=1,Is=2,Sr=class extends _a{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Sa,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:wa,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=kt.createServer((n,s)=>{let i=kt.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=Ia(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=vs}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===Is){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick($e,this);return}if(e&&this.once("close",e),this._state!==ks)if(this._state=ks,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick($e,this):process.nextTick($e,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{$e(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,s){t.on("error",Es);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,c=+e.headers["sec-websocket-version"];if(e.method!=="GET"){ae(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){ae(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Ea.test(i)){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){ae(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Ue(t,400);return}let a=e.headers["sec-websocket-protocol"],l=new Set;if(a!==void 0)try{l=ba.parse(a)}catch{ae(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let f=new oe({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let h=Ss.parse(d);h[oe.extensionName]&&(f.accept(h[oe.extensionName]),u[oe.extensionName]=f)}catch{ae(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(h,g,p,m)=>{if(!h)return Ue(t,g||401,p,m);this.completeUpgrade(u,i,l,e,t,n,s)});return}if(!this.options.verifyClient(f))return Ue(t,401)}this.completeUpgrade(u,i,l,e,t,n,s)}completeUpgrade(e,t,n,s,i,o,c){if(!i.readable||!i.writable)return i.destroy();if(i[ka])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>vs)return Ue(i,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ya("sha1").update(t+va).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let u=this.options.handleProtocols?this.options.handleProtocols(n,s):n.values().next().value;u&&(l.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[oe.extensionName]){let u=e[oe.extensionName].params,f=Ss.format({[oe.extensionName]:[u]});l.push(`Sec-WebSocket-Extensions: ${f}`),d._extensions=e}this.emit("headers",l,s),i.write(l.concat(`\r
|
|
24
24
|
`).join(`\r
|
|
25
|
-
`)),i.removeListener("error",
|
|
25
|
+
`)),i.removeListener("error",Es),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick($e,this)})),c(d,s)}};xs.exports=Sr;function Ia(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let n of Object.keys(e))r.removeListener(n,e[n])}}function $e(r){r._state=Is,r.emit("close")}function Es(){this.destroy()}function Ue(r,e,t,n){t=t||kt.STATUS_CODES[e],n={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...n},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${kt.STATUS_CODES[e]}\r
|
|
26
26
|
`+Object.keys(n).map(s=>`${s}: ${n[s]}`).join(`\r
|
|
27
27
|
`)+`\r
|
|
28
28
|
\r
|
|
29
|
-
`+t)}function ae(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,ae),r.emit("wsClientError",o,t,e)}else Ue(t,n,s,i)}});function Ge(){return process.env.BRIDGE_PROFILE||void 0}function
|
|
30
|
-
`,Ne=r=>r.replace(/[\r\n]+$/,"")+"\r",ge=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:ot},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>at(".claude")||re("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>re("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:Ne},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>at(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>re("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:ot},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>
|
|
31
|
-
`)[0].trim()||void 0}catch{return}}function
|
|
29
|
+
`+t)}function ae(r,e,t,n,s,i){if(r.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,ae),r.emit("wsClientError",o,t,e)}else Ue(t,n,s,i)}});function Ge(){return process.env.BRIDGE_PROFILE||void 0}function Ct(){let r=Ge();return r?ce.default.join(qs,"profiles",r,"settings.json"):ce.default.join(qs,"settings.json")}function He(){let r=Ge(),e=r?`${r}.daemon.lock`:"daemon.lock";return ce.default.join((0,Fe.homedir)(),".bridge",e)}function xe(){let r=Ge();return r?`com.jerico.bridge-agent.${r}.plist`:"com.jerico.bridge-agent.plist"}function Pt(){let r=Ge(),e=r?`-${r}`:"";return{out:ce.default.join((0,Fe.homedir)(),`bridge-daemon${e}.log`),err:ce.default.join((0,Fe.homedir)(),`bridge-daemon${e}.err.log`)}}function Vs(){let r=Ge();return r?`:profile:${r}`:""}var Fe,ce,qs,qe=Gr(()=>{"use strict";Fe=require("node:os"),ce=_(require("path")),qs=ce.default.join((0,Fe.homedir)(),".jerico")});var Ys={};Ci(Ys,{getConfigPath:()=>Ct,loadConfig:()=>le,loadProjectSettings:()=>Cr,saveConfig:()=>de});function Ve(r,e){let t=r[e];if(!(!t||typeof t!="object"||Array.isArray(t)))return Object.fromEntries(Object.entries(t).filter(([,n])=>typeof n=="string"))}function le(){let r=Ct(),e=q.default.existsSync(r)?r:Ma;if(!q.default.existsSync(e)){let h=process.env.BRIDGE_PROFILE?`bridge-agent --profile ${process.env.BRIDGE_PROFILE} auth`:"bridge-agent auth";console.error(`[bridge] Config not found. Run: ${h}`),process.exit(1)}let t=q.default.readFileSync(e,"utf-8"),n;try{n=JSON.parse(t)}catch{console.error("[bridge] Invalid config file at",e),process.exit(1)}(!n||typeof n!="object")&&(console.error("[bridge] Config must be a JSON object. Run: bridge-agent auth"),process.exit(1));let s=n,i=typeof s.server=="string"?s.server:"",o=typeof s.token=="string"?s.token:"",c=typeof s.name=="string"?s.name:"bridge-agent",a=[/23-88-110-113\.sslip\.io/i,/23\.88\.110\.113:443\/ws\/daemon$/,/23\.88\.110\.113:3100\/ws\/daemon$/],l="wss://lcars.jerico.appnova.io/ws/daemon";if(i&&a.some(h=>h.test(i))){console.warn(`[daemon] config.url_migration: migrating stale URL ${i} \u2192 ${l}`),i=l,s.server=i;try{q.default.writeFileSync(e,JSON.stringify(s,null,2),{mode:384}),q.default.chmodSync(e,384)}catch(h){console.warn("[daemon] config.url_migration: failed to save migrated config",String(h))}}(!i||!o)&&(console.error("[bridge] Config missing server or token. Run: bridge-agent auth"),process.exit(1));let d={server:i,token:o,name:c},u=Ve(s,"agentPaths"),f=Ve(s,"projectPaths");return u&&(d.agentPaths=u),f&&(d.projectPaths=f),d}function de(r){let e=Ct(),t=At.default.dirname(e);q.default.existsSync(t)||q.default.mkdirSync(t,{recursive:!0}),q.default.writeFileSync(e,JSON.stringify(r,null,2),{mode:384})}function Cr(r){let e=At.default.join(r??process.cwd(),".jerico","settings.json");if(!q.default.existsSync(e))return{};try{let t=q.default.readFileSync(e,"utf-8"),n=JSON.parse(t);if(!n||typeof n!="object"||Array.isArray(n))return{};let s=n,i={};typeof s.preferredAgent=="string"&&(i.preferredAgent=s.preferredAgent);let o=Ve(s,"hooks"),c=Ve(s,"env"),a=Ve(s,"agentPaths");return o&&(i.hooks=o),c&&(i.env=c),a&&(i.agentPaths=a),i}catch{return console.warn("[bridge] Failed to parse .jerico/settings.json, ignoring"),{}}}var q,At,Ks,Ma,Oe=Gr(()=>{"use strict";q=_(require("fs")),At=_(require("path")),Ks=_(require("os"));qe();Ma=At.default.join(Ks.default.homedir(),".bridge","config.json")});var rn=_(tn(),1),{program:Fc,createCommand:Gc,createArgument:Hc,createOption:qc,CommanderError:Vc,InvalidArgumentError:Kc,InvalidOptionArgumentError:Yc,Command:nn,Argument:Jc,Option:zc,Help:Xc}=rn.default;var ci=require("node:http"),pe=require("node:child_process"),T=require("node:fs"),Ae=require("node:os"),L=_(require("path"));var En=_(require("node-pty"));var Zt=_(wn()),fe=_(require("fs")),Re=_(require("path")),vn=_(require("net")),kn=require("child_process"),ot=r=>r+`
|
|
30
|
+
`,Ne=r=>r.replace(/[\r\n]+$/,"")+"\r",ge=[{key:"sh",displayName:"Shell",binary:"sh",checkAuth:async()=>!0,formatInput:ot},{key:"claude",displayName:"Claude Code",binary:"claude",checkAuth:async()=>at(".claude")||re("ANTHROPIC_API_KEY"),assignSessionId:!0,spawnArgs:["--dangerously-skip-permissions"],resumeArgs:r=>["--dangerously-skip-permissions","--resume",r],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/claude/versions/*"]},{key:"codex",displayName:"Codex CLI",binary:"codex",checkAuth:async()=>re("OPENAI_API_KEY"),spawnArgs:["--full-auto"],supportsMcpConfig:!0,formatInput:Ne},{key:"qwen",displayName:"Qwen CLI",binary:"qwen",checkAuth:async()=>at(".qwen"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["--resume",r,"--yolo"],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/qwen/versions/*"]},{key:"gemini",displayName:"Gemini",binary:"gemini",checkAuth:async()=>re("GEMINI_API_KEY"),supportsMcpConfig:!0,formatInput:ot},{key:"ollama",displayName:"Ollama",binary:"ollama",checkAuth:async()=>io(11434),formatInput:ot},{key:"aider",displayName:"Aider",binary:"aider",checkAuth:async()=>re("OPENAI_API_KEY")||re("ANTHROPIC_API_KEY"),supportsMcpConfig:!0,formatInput:ot},{key:"kimi",displayName:"Kimi Code",binary:"kimi",checkAuth:async()=>at(".kimi")||re("KIMI_API_KEY"),assignSessionId:!0,spawnArgs:["--yolo"],resumeArgs:r=>["-r",r,"--yolo"],supportsMcpConfig:!0,formatInput:Ne,versionDirGlobs:[".local/share/uv/tools/kimi-cli/bin",".local/share/kimi/versions/*"]},{key:"forge",displayName:"Forge",binary:"forge",checkAuth:async()=>at(".forge/.credentials.json")||re("FORGE_API_KEY"),assignSessionId:!0,resumeArgs:r=>["--conversation-id",r],supportsMcpConfig:!0,formatInput:Ne}];var Sn=process.env.HOME??"/Users/unknown";function ct(r){try{let e=(0,kn.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 no(r){if(!r.versionDirGlobs?.length)return[];let e=[],t=r.versionDirGlobs;for(let n of t){let s=Re.default.join(Sn,n.replace(/\/\*$/,""));if(n.endsWith("/*")){let i=[];try{i=fe.default.readdirSync(s)}catch{}i.sort((o,c)=>c.localeCompare(o));for(let o of i){let c=Re.default.join(s,o,r.binary);if(fe.default.existsSync(c)){let a=ct(c);e.push({path:c,version:a})}}}else{let i=Re.default.join(Sn,n);if(fe.default.existsSync(i)){let o=ct(i);e.push({path:i,version:o})}}}return e}async function so(r,e={}){if(e[r.key]){let n=e[r.key],s=ct(n);if(s)return{path:n,version:s}}try{let n=await(0,Zt.default)(r.binary);if(n&&fe.default.existsSync(n)){let s=ct(n);if(s!==void 0)return{path:n,version:s}}}catch{}let t=no(r);for(let n of t)if(n.version!==void 0)return n;try{let n=await(0,Zt.default)(r.binary);if(n)return{path:n}}catch{}throw new Error(`No working binary found for agent '${r.key}'`)}async function er(r={}){let e=[];for(let t of ge)try{let{path:n,version:s}=await so(t,r),o=await t.checkAuth()?"ok":"missing";e.push({key:t.key,displayName:t.displayName,binaryPath:n,authStatus:o,version:s})}catch{}return console.log("[daemon] agent.detect.done",{found:e.map(t=>t.key),missing:ge.map(t=>t.key).filter(t=>!e.find(n=>n.key===t))}),e}function at(r){return fe.default.existsSync(Re.default.join(process.env.HOME??"",r))}function re(r){return!!process.env[r]}async function io(r){return new Promise(e=>{let t=vn.default.createConnection(r,"127.0.0.1");t.setTimeout(200),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}var lt=class{handles=new Map;nextInstanceId=1;lastErrors=new Map;livenessTimer=null;currentWs=null;setCurrentWs(e){this.currentWs=e}getCurrentWs(){return this.currentWs}startLivenessCheck(e=6e4){this.livenessTimer||(this.livenessTimer=setInterval(()=>{for(let[t,n]of this.handles.entries()){if(n.killed)continue;let s=!1;try{s=process.kill(n.pid,0)}catch{s=!1}s||(console.warn("[daemon] pty.liveness.dead",{agentId:t,pid:n.pid}),this.handles.delete(t),n.onExit(137,"SIGKILL"))}},e),console.log("[daemon] pty.liveness.started",{intervalMs:e}))}stopLivenessCheck(){this.livenessTimer&&(clearInterval(this.livenessTimer),this.livenessTimer=null,console.log("[daemon] pty.liveness.stopped"))}spawn(e,t,n,s,i,o,c,a,l){let d=this.handles.get(e);d&&(console.warn("[daemon] pty.spawn.replace_existing",{agentId:e,oldPid:d.pid,newAgentKey:t}),this.kill(e,!0));let u=Math.max(1,Math.min(500,i)),f=Math.max(1,Math.min(500,o)),h={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"};l&&(h.BRIDGE_SERVER_URL=l.serverUrl,h.BRIDGE_TOKEN=l.token,h.BRIDGE_WORKSPACE_ID=l.workspaceId,h.BRIDGE_PROJECT_ID=l.projectId||"",l.projectEnv&&Object.assign(h,l.projectEnv));let g=process.env.BRIDGE_MCP_URL;g&&(h.BRIDGE_MCP_URL=g);let p;try{p=En.spawn(n,s,{name:"xterm-256color",cols:u,rows:f,cwd:l?.cwd,env:h})}catch(S){let P=S instanceof Error?S.message:String(S);return this.lastErrors.set(e,P),console.error("[daemon] pty.spawn.failed",{agentId:e,agentKey:t,error:P}),!1}let m=this.nextInstanceId++,I={agentId:e,agentKey:t,process:p,pid:p.pid,killed:!1,instanceId:m,onExit:a};return p.onData(S=>{let P=this.handles.get(e);!P||P.instanceId!==m||I.killed||c(Buffer.from(S).toString("base64"))}),p.onExit(({exitCode:S,signal:P})=>{let j=this.handles.get(e);!j||j.instanceId!==m||I.killed||I.killed||(this.handles.delete(e),console.log("[daemon] pty.exit",{agentId:e,exitCode:S,signal:P}),a(S??null,P?String(P):null))}),this.lastErrors.delete(e),this.handles.set(e,I),console.log("[daemon] pty.spawn.success",{agentId:e,agentKey:t,args:s,cwd:l?.cwd}),!0}write(e,t,n){let s=this.handles.get(e);if(!s){console.warn("[daemon] pty.write.no_handle",{agentId:e.slice(-8),source:n,dataLength:t.length});return}let i=Buffer.from(t,"base64").toString(),o=ge.find(a=>a.key===s.agentKey),c=n==="orchestrator"&&o?.formatInput?o.formatInput(i):i;s.process.write(c)}kill(e,t=!1){let n=this.handles.get(e);if(!n)return;n.killed=!0,this.handles.delete(e);let s=n.pid;if(t){try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}setTimeout(()=>{try{process.kill(-s,"SIGKILL")}catch{}},2e3)}else try{process.kill(-s,"SIGTERM")}catch{n.process.kill()}console.log("[daemon] pty.kill",{agentId:e,force:t})}resize(e,t,n){let s=this.handles.get(e);if(!s)return;let i=Math.max(1,Math.min(500,t)),o=Math.max(1,Math.min(500,n));s.process.resize(i,o)}getLastError(e){return this.lastErrors.get(e)}killAll(){for(let e of this.handles.values())try{process.kill(-e.pid,"SIGTERM")}catch{e.process.kill()}this.handles.clear()}getLiveAgentIds(){return[...this.handles.keys()]}getAgentKey(e){return this.handles.get(e)?.agentKey}};var xa=_(bs(),1),Oa=_(yt(),1),Ca=_(ye(),1),Pa=_(ur(),1),Aa=_(fr(),1),Ta=_(wr(),1),Cs=_(vt(),1),Na=_(Os(),1);var k=Cs.default;var G=_(require("fs")),Xe=require("node:fs/promises"),A=_(require("path")),D=_(require("os")),Pe=require("node:child_process"),et=require("node:crypto");var Ps=["claude","codex","qwen","kimi","forge"];var Et=["developer","reviewer","planner","executor","shell","runner","orchestrator"],kl=Et.filter(r=>r!=="orchestrator"),El=[...Et,"system"];var As=r=>r;var Ts=r=>r,Ns=r=>r,Rs=3e3;function vr(r){return(process.env.JERICO_FEATURES??"").split(",").map(t=>t.trim()).filter(Boolean).includes(r)}var Ds={developer:`# Bridge Worker \u2014 Developer Role
|
|
32
32
|
|
|
33
33
|
You are a **Developer** worker in a multi-agent orchestration system called Bridge.
|
|
34
34
|
|
|
@@ -357,21 +357,31 @@ Summarize: todos completed, failed, any blockers. List what workers did.
|
|
|
357
357
|
|
|
358
358
|
---
|
|
359
359
|
|
|
360
|
-
{{TOOL_TABLE}}`};var Rs=_(require("os"));async function vr(){return Rs.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var Ie=require("child_process"),Bs=require("fs/promises"),$s=require("crypto"),Ee=_(require("fs")),It=_(require("path")),Er=_(require("os"));var We=require("child_process"),Ds=require("fs/promises"),js=_(require("path")),Ls=_(require("os"));async function Pa(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r(null);return}try{let s=JSON.parse(t);for(let i of Object.values(s.devices)){let o=i.find(c=>c.state==="Booted");if(o){r(o.udid);return}}r(null)}catch{r(null)}}),e.on("error",()=>r(null))})}async function Aa(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r([]);return}try{let s=JSON.parse(t),i=[];for(let[o,c]of Object.entries(s.devices)){for(let a of c){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${a.name} (${l})`),i.length>=3)break}if(i.length>=3)break}r(i)}catch{r([])}}),e.on("error",()=>r([]))})}async function kr(r){let e=[],t=null,n=await new Promise(i=>{let o=(0,We.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",c=>i(c===0)),o.on("error",()=>i(!1)),o.stdout?.resume(),o.stderr?.resume()});e.push({id:"xcrun_exists",status:n?"pass":"fail",label:"Xcode CLI tools",detail:n?void 0:"Xcode command-line tools not found. Install them to use the iOS Simulator panel.",fixCmd:n?void 0:"xcode-select --install"});let s=!1;if(n){let i=js.default.join(Ls.default.homedir(),".local/bin/idb");s=await(0,Ds.access)(i).then(()=>!0).catch(()=>!1)}if(e.push({id:"idb_present",status:s?"pass":"fail",label:"idb",detail:s?void 0:"idb not found at ~/.local/bin/idb. Required for simulator automation.",fixCmd:s?void 0:"pip3 install fb-idb && brew install facebook/fb/idb-companion"}),n){let i=await new Promise(o=>{let c=(0,We.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});c.on("close",a=>o(a===0)),c.on("error",()=>o(!1)),c.stdout?.resume(),c.stderr?.resume()});if(e.push({id:"simctl_ok",status:i?"pass":"fail",label:"simctl",detail:i?void 0:"simctl is not responding. Xcode may not be fully installed.",fixCmd:i?void 0:"sudo xcode-select --reset"}),i)if(t=await Pa(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await Aa();e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:o.length>0?`No simulator is booted. Available: ${o.join(", ")}. Open Simulator.app and boot one.`:"No simulator is booted and no devices found. Open Xcode \u2192 Window \u2192 Devices and Simulators to add one.",fixCmd:"open -a Simulator"})}else e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"})}else e.push({id:"simctl_ok",status:"fail",label:"simctl",detail:"Skipped \u2014 previous check failed"}),e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"});return{checks:e,udid:t}}var Ir=It.default.join(Er.default.homedir(),".local/bin/idb");async function Ms(r){try{let e=await new Promise((i,o)=>{let c=(0,Ie.spawn)(Ir,["describe","--udid",r,"--json"],{timeout:1e4}),a="",l="";c.stdout.on("data",d=>{a+=d.toString("utf8")}),c.stderr.on("data",d=>{l+=d.toString("utf8")}),c.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(a)}),c.on("error",d=>o(d))}),t=JSON.parse(e),n=t.screen_dimensions?.width_points,s=t.screen_dimensions?.height_points;if(Number.isFinite(n)&&Number.isFinite(s))return{width:n,height:s}}catch(e){console.warn("[daemon] simulator.metadata.error",{udid:r,error:String(e)})}return{}}function Ta(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,Ie.spawn)("xcrun",["simctl","io",r,"screenshot",t],{stdio:["ignore","ignore","ignore"]});s.on("close",async i=>{if(i!==0){n(null);return}try{n(await(0,Bs.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function Et(r,e){return new Promise((t,n)=>{let s=(0,Ie.spawn)(Ir,[...e,"--udid",r],{timeout:15e3}),i="";s.stderr.on("data",o=>{i+=o.toString("utf8")}),s.on("close",o=>{o!==0?n(new Error(i||`idb exited ${o}`)):t()}),s.on("error",o=>n(o))})}var xt=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=new Map;ws=null;daemonId;installProc=new Map;cancelledInstalls=new Set;constructor(e){this.daemonId=e}updateWs(e){this.ws=e}async start(e){if(this.sessions.has(e)){console.warn("[daemon] simulator.start: session already exists",{agentId:e});return}let{checks:t,udid:n}=await kr(e);if(this.sendSimHealth(e,t),t.find(d=>d.status==="fail"))return;if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(d=>d.udid===n);if(i){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already attached as agent ${i.agentId}`,{existingAgentId:i.agentId,udid:n});return}let o=this.pendingUdids.get(n);if(o&&o!==e){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already being attached as agent ${o}`,{existingAgentId:o,udid:n});return}this.pendingUdids.set(n,e);let c=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let a=await Ms(n);a.width!=null&&a.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:a.width,logicalHeight:a.height});let l={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:c,logicalWidth:a.width,logicalHeight:a.height,lastDescribeAt:Date.now()};if(this.sessions.set(e,l),this.pendingUdids.delete(n),l.frameInterval=setInterval(async()=>{if(!(!l.subscribed||l.capturing)){l.capturing=!0;try{Date.now()-l.lastDescribeAt>=5e3&&(l.lastDescribeAt=Date.now(),Ms(n).then(u=>{u.width!=null&&u.height!=null&&(u.width!==l.logicalWidth||u.height!==l.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:l.logicalWidth,logicalHeight:l.logicalHeight},to:u}),l.logicalWidth=u.width,l.logicalHeight=u.height)}).catch(()=>{}));let d=await Ta(n,e);d&&this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_frame",agentId:e,image:d.toString("base64"),width:l.logicalWidth,height:l.logicalHeight}))}catch(d){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(d)})}finally{l.capturing=!1}}},200),this.ws&&this.ws.readyState===k.OPEN){let d=(0,$s.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:d})),this.ws.send(JSON.stringify({type:"agent_spawned",agentId:e,agentKey:"sim_ios",daemonId:this.daemonId}))}console.log("[daemon] simulator.started",{agentId:e,udid:n})}stop(e){let t=this.sessions.get(e);if(!t){for(let[n,s]of this.pendingUdids)if(s===e){this.pendingUdids.delete(n);break}return}t.frameInterval&&clearInterval(t.frameInterval),this.sessions.delete(e),this.pendingUdids.delete(t.udid),this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null}))}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e);for(let[e,t]of this.installProc)t.kill("SIGTERM"),this.installProc.delete(e)}subscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!0)}unsubscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!1)}async handle(e){let t=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){t?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),t&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await kr(e.agentId);this.sendSimHealth(e.agentId,n);return}if(e.type==="sim_install_run"){await this.handleSimInstallRun(e.agentId);return}if(e.type==="sim_install_cancel"){this.handleSimInstallCancel(e.agentId);return}if(!t){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await Et(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await Et(t.udid,["ui","swipe",String(e.x1),String(e.y1),String(e.x2),String(e.y2),"--duration",String(e.duration??.5)]);break}case"sim_key":{await Et(t.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:t.udid}),await Et(t.udid,["ui","button",e.button]),console.log("[daemon] simulator.button.done",{agentId:e.agentId,button:e.button});break}case"sim_get_source":{let n=await new Promise((s,i)=>{let o=(0,Ie.spawn)(Ir,["ui","describe-all","--udid",t.udid],{timeout:15e3}),c="",a="";o.stdout.on("data",l=>{c+=l.toString("utf8")}),o.stderr.on("data",l=>{a+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(a||`idb exited ${l}`)):s(c)}),o.on("error",l=>i(l))});this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_source",agentId:e.agentId,source:n}));break}}}catch(n){console.error("[daemon] simulator.handle.error",{agentId:e.agentId,type:e.type,error:String(n)})}}sendError(e,t,n,s){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"error",code:t,message:n,agentId:e,...s}))}sendSimHealth(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:t}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let t=It.default.join(Er.default.homedir(),".bridge/install-sim-prereqs.sh");if(Ee.default.existsSync(t))return t;let n=It.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Ee.default.existsSync(n)?n:null}async handleSimInstallRun(e){if(this.installProc.has(e)){this.sendInstallProgress(e,{step:"error",error:"already installing"});return}this.cancelledInstalls.delete(e);let t=this.resolveSimInstallScript();if(!t){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{Ee.default.accessSync(t,Ee.default.constants.F_OK|Ee.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,Ie.spawn)("bash",["-lc",t],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",c=>{i+=c.toString("utf8");let a;for(;(a=i.indexOf(`
|
|
361
|
-
`))!==-1;){let l=i.slice(0,a);i=i.slice(a+1),l&&(l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l}))}}),n.stderr?.on("data",c=>{o+=c.toString("utf8");let a;for(;(a=o.indexOf(`
|
|
362
|
-
`))!==-1;){let l=o.slice(0,a);o=o.slice(a+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",c=>{if(this.installProc.delete(e),i){let l=i;i="",l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l})}if(o){let l=o;o="",this.sendInstallProgress(e,{stream:"stderr",line:l})}let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&(c===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:c??void 0,error:`install script exited with code ${c}`}))}),n.on("error",c=>{this.installProc.delete(e);let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&this.sendInstallProgress(e,{step:"error",error:String(c)})})}handleSimInstallCancel(e){let t=this.installProc.get(e);t&&(this.cancelledInstalls.add(e),t.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"}))}sendInstallProgress(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...t}))}};Oe();qe();var Ke=_(require("fs")),Or=_(require("path")),Hs=_(require("os")),Ra=2e5;function Da(r){let e=Or.default.join(Hs.default.homedir(),".claude","projects");if(Ke.default.existsSync(e))try{let t=Ke.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Or.default.join(e,n.name,`${r}.jsonl`);if(Ke.default.existsSync(s))return s}}catch{}}function ja(r){try{let t=Ke.default.readFileSync(r,"utf-8").trim().split(`
|
|
363
|
-
`);for(let n=t.length-1;n>=0;n--){let s=t[n]?.trim();if(s)try{let i=JSON.parse(s),o=i.message?.usage??i.usage;if(!o||typeof o!="object")continue;let c=o,a=(c.input_tokens??0)+(c.cache_creation_input_tokens??0)+(c.cache_read_input_tokens??0);if(a===0)continue;return{usedPct:Math.min(100,Math.round(a/Ra*100)),usedTokens:a}}catch{continue}}}catch{}return null}function Cr(r,e,t){let n,s=-1,i=()=>{if(n||(n=Da(e)),!n)return;let a=ja(n);a&&a.usedTokens!==s&&(s=a.usedTokens,t(r,a.usedPct,a.usedTokens))},o=setTimeout(i,2e3),c=setInterval(i,3e3);return()=>{clearTimeout(o),clearInterval(c)}}var ee=_(require("fs")),Ye=_(require("path")),Pr=_(require("os")),qs=300*60*1e3,Vs={free:10,pro:40,max_5x:200,max_20x:200};function La(){let r=Ye.default.join(Pr.default.homedir(),".jerico","settings.json");try{if(!ee.default.existsSync(r))return"pro";let t=JSON.parse(ee.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in Vs)return t}catch{}return"pro"}function Ma(){let r=Ye.default.join(Pr.default.homedir(),".claude","projects");if(!ee.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-qs,n=1/0,s=0;try{let o=ee.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Ye.default.join(r,c.name),l;try{l=ee.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Ye.default.join(a,d),f;try{if(ee.default.statSync(u).size>20*1024*1024)continue;f=ee.default.readFileSync(u,"utf-8")}catch{continue}for(let h of f.split(`
|
|
364
|
-
`)){let g=h.trim();if(g)try{let p=JSON.parse(g);if(p.type!=="user"||p.message?.role!=="user"||p.userType!==void 0&&p.userType!=="external")continue;let I=p.timestamp;if(typeof I!="string")continue;let S=Date.parse(I);if(isNaN(S)||S<t)continue;s++,S<n&&(n=S)}catch{continue}}}}}catch{}let i=isFinite(n)?n+qs:0;return{prompts5h:s,resetAt:i}}function Ks(r){let e=()=>{let n=La(),s=Vs[n]??40,{prompts5h:i,resetAt:o}=Ma();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var Ce=_(require("os")),At=_(require("fs")),Tr=require("node:child_process");function Js(){let r=0,e=0;for(let t of Ce.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var Ar=Js();function Ba(){let r=Js(),e=r.idle-Ar.idle,t=r.total-Ar.total;return Ar=r,t===0?0:Math.round((1-e/t)*100)}function $a(){let r=Ce.default.totalmem(),e=Ce.default.freemem(),t=0;try{let n=(0,Tr.spawnSync)("vm_stat",["-c","10"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(n.status===0&&n.stdout){let s=n.stdout.match(/page size of (\d+) bytes/),i=n.stdout.match(/Pages speculative:\s*(\d+)/),o=n.stdout.match(/Pages inactive:\s*(\d+)/);if(i&&o){let c=s?parseInt(s[1],10):4096;t=(parseInt(i[1],10)+parseInt(o[1],10))*c}}}catch{}return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:Math.round(t/1024/1024)}}function Ua(){if(process.platform==="darwin")return $a();let r=Ce.default.totalmem(),e=Ce.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Wa(){try{let r=(0,Tr.spawnSync)("pmset",["-g","batt"],{encoding:"utf-8",timeout:2e3,stdio:"pipe"});if(r.status!==0||!r.stdout)return;let e=r.stdout.match(/(\d+)%;\s*(charging|discharging|charged|finishing charge)/i);if(!e)return;let t=parseInt(e[1],10),n=/charging|charged|finishing/i.test(e[2]);return{percent:t,charging:n}}catch{return}}function Fa(){try{let r="/sys/class/power_supply",e=At.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(At.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=At.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Ys(){let r=process.platform;if(r==="darwin")return Wa();if(r==="linux")return Fa()}var Ga=1e4,Ha=3;function zs(r){let e=0,t=Ys(),n=setInterval(()=>{e++,e%Ha===0&&(t=Ys());let s=Ua();r({cpu:Ba(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Ga);return()=>clearInterval(n)}var Tt=_(require("fs")),Nt=_(require("path")),Xs=_(require("node-pty"));function qa(){try{let r=require.resolve("node-pty"),e=Nt.default.resolve(Nt.default.dirname(r),"..");return Nt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function Qs(){let r=qa();if(!r||!Tt.default.existsSync(r))return!0;try{Tt.default.accessSync(r,Tt.default.constants.X_OK)}catch{return!1}try{Xs.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ue=new Map,Qe=new Map;function Va(r,e){let t=Date.now(),n=Qe.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Qe.set(r,n),s=!0),s&&e()?.send(JSON.stringify({type:"panel_state",agentId:r,state:"working",lastOutputAt:t})),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(()=>{let i=Qe.get(r);if(i&&i.currentState==="working"){i.currentState="idle";let o=e();o?.readyState===k.OPEN&&o.send(JSON.stringify({type:"panel_state",agentId:r,state:"idle",lastOutputAt:i.lastOutputAt}))}},Ts)}function Ka(r){let e=Qe.get(r);e?.timer&&clearTimeout(e.timer),Qe.delete(r)}var Nr,Rt;function Lr(){try{return(0,et.createHash)("sha256").update(D.default.hostname()+":"+D.default.userInfo().username+Ws()).digest("hex")}catch{return"unknown"}}var Je=[];function Ya(r){let e=Date.now(),t=e-3e4;for(;Je.length&&Je[0].ts<t;)Je.shift();return Je.push({agentKey:r,ts:e}),new Set(Je.map(s=>s.agentKey)).size>=2}var Zs=r=>r.replace(/[\r\n]+$/,"")+"\r",Dr=null,Ja=Ks(r=>{Dr=r}),za=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,Xa=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,Qa=5e3,Za=400;function ec(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function tc(r,e=Za){return r.length<=e?r:`${r.slice(0,e)}...`}function rc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function tt(){let r=G.default.realpathSync(process.argv[1]??""),e=A.default.dirname(r);return[A.default.resolve(e,"../../mcp-server/dist/index.cjs"),A.default.resolve(e,"bridge-mcp.cjs"),A.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>G.default.existsSync(n))??"bridge-mcp"}function nc(r){try{let e=process.env.BRIDGE_MCP_URL,t=r.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${t}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:tt(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:t,BRIDGE_PANEL_ID:r.agentId??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},s=A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return G.default.writeFileSync(s,JSON.stringify(n,null,2)+`
|
|
365
|
-
`,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:s,transport:e?"http":"stdio"}),["--mcp-config",s]}catch(e){return console.warn("[daemon] mcp.config.build.failed",{error:String(e)}),[]}}var ti={bridge_get_project:"Project metadata: name, cwd, machineId",bridge_get_plan:"Read project spec/description",bridge_update_plan:"Update project spec/description",bridge_get_project_history:"Past run history and failure patterns",bridge_get_execution_status:"Run history with todo completion counts",bridge_get_todos:"List todos + session state for this project",bridge_add_todo:"Create a new todo (title, todoType, dependsOn)",bridge_update_todo:"Update a todo title or status",bridge_cancel_run:"Cancel active run (use before restarting a stale plan)",bridge_list_agents:"All agents: role, status, inRun flag",bridge_get_agent_status:"Single agent status check",bridge_spawn_worker:"Spawn a new worker agent (agentKey, role)",bridge_kill_agent:"Terminate a stuck or dead agent",bridge_get_agent_output:"Read terminal output of any agent",bridge_send_input:"Send text input to an agent PTY",bridge_get_my_task:"Get the task assigned to this agent",bridge_complete_task:"Signal task completion",bridge_fail_task:"Signal task failure with a specific reason",bridge_get_todo_context:"Read todo output/error for a specific todo",bridge_assign_task:"Assign a pending todo to a specific agent",bridge_list_groups:"List all agent groups and their member agentIds",bridge_get_group_status:"Get agents in a group with status and last output line",bridge_dispatch_to_group:"Send a text message/command to every agent in a group",bridge_list_workspace_projects:"List all workspace projects with name, cwd, active run count",bridge_query_workspace:"Natural-language query about orchestration state",bridge_list_active_runs:"All active orchestration runs across workspace projects",bridge_peek_panel:"Read terminal output of any panel workspace-wide (no project boundary)",bridge_status_panel:"Get status of any panel in the workspace regardless of project"};function sc(...r){return`
|
|
360
|
+
{{TOOL_TABLE}}`};var kr={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"};if(Object.keys(kr).length===0)throw new Error("BRIDGE_TOOL_DOCS registry is empty at module load \u2014 fail fast");function js(...r){return`
|
|
366
361
|
|
|
367
|
-
**Available MCP tools:** ${r.join(", ")}`}function
|
|
362
|
+
**Available MCP tools:** ${r.join(", ")}`}function Ra(...r){return`
|
|
368
363
|
|
|
369
364
|
## Tool reference (only call tools listed here)
|
|
370
365
|
|
|
371
366
|
| Tool | Purpose |
|
|
372
367
|
|------|---------|
|
|
373
|
-
${r.map(t=>`| \`${t}\` | ${
|
|
374
|
-
`)}`}function
|
|
368
|
+
${r.map(t=>`| \`${t}\` | ${kr[t]} |`).join(`
|
|
369
|
+
`)}`}function Ls(){let r=Object.keys(kr);return Ra(...r)}function Ms(r){if(!Et.includes(r))throw new Error(`buildBootstrapPrompt: unknown role "${r}"`);return`You are running as role="${r}" in the Bridge orchestration system.
|
|
370
|
+
|
|
371
|
+
Your full operating instructions are stored in the workspace database.
|
|
372
|
+
BEFORE you take any other action \u2014 before reading files, before running commands,
|
|
373
|
+
before replying to the user \u2014 call this MCP tool:
|
|
374
|
+
bridge_get_role_prompt({ role: "${r}" })
|
|
375
|
+
|
|
376
|
+
Treat the response as your authoritative system instructions for this entire
|
|
377
|
+
session. You may call bridge_get_role_prompt again at any time to refresh.
|
|
378
|
+
|
|
379
|
+
If bridge_get_role_prompt is unavailable, fall back to default behavior for role=${r}.`}var Bs=_(require("os"));async function Er(){return Bs.default.platform()!=="darwin"?null:{key:"sim_ios",displayName:"iOS Simulator",binaryPath:"xcrun",authStatus:"ok"}}var Ie=require("child_process"),Gs=require("fs/promises"),Hs=require("crypto"),Ee=_(require("fs")),xt=_(require("path")),xr=_(require("os"));var We=require("child_process"),$s=require("fs/promises"),Us=_(require("path")),Ws=_(require("os"));async function Da(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","booted","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r(null);return}try{let s=JSON.parse(t);for(let i of Object.values(s.devices)){let o=i.find(c=>c.state==="Booted");if(o){r(o.udid);return}}r(null)}catch{r(null)}}),e.on("error",()=>r(null))})}async function ja(){return new Promise(r=>{let e=(0,We.spawn)("xcrun",["simctl","list","devices","available","--json"],{timeout:5e3}),t="";e.stdout.on("data",n=>{t+=n.toString("utf8")}),e.on("close",n=>{if(n!==0){r([]);return}try{let s=JSON.parse(t),i=[];for(let[o,c]of Object.entries(s.devices)){for(let a of c){let l=o.replace(/^com\.apple\.CoreSimulator\.SimRuntime\./,"").replace(/-/g,".");if(i.push(`${a.name} (${l})`),i.length>=3)break}if(i.length>=3)break}r(i)}catch{r([])}}),e.on("error",()=>r([]))})}async function Ir(r){let e=[],t=null,n=await new Promise(i=>{let o=(0,We.spawn)("xcrun",["simctl","help"],{timeout:2e3});o.on("close",c=>i(c===0)),o.on("error",()=>i(!1)),o.stdout?.resume(),o.stderr?.resume()});e.push({id:"xcrun_exists",status:n?"pass":"fail",label:"Xcode CLI tools",detail:n?void 0:"Xcode command-line tools not found. Install them to use the iOS Simulator panel.",fixCmd:n?void 0:"xcode-select --install"});let s=!1;if(n){let i=Us.default.join(Ws.default.homedir(),".local/bin/idb");s=await(0,$s.access)(i).then(()=>!0).catch(()=>!1)}if(e.push({id:"idb_present",status:s?"pass":"fail",label:"idb",detail:s?void 0:"idb not found at ~/.local/bin/idb. Required for simulator automation.",fixCmd:s?void 0:"pip3 install fb-idb && brew install facebook/fb/idb-companion"}),n){let i=await new Promise(o=>{let c=(0,We.spawn)("xcrun",["simctl","list","--json"],{timeout:5e3});c.on("close",a=>o(a===0)),c.on("error",()=>o(!1)),c.stdout?.resume(),c.stderr?.resume()});if(e.push({id:"simctl_ok",status:i?"pass":"fail",label:"simctl",detail:i?void 0:"simctl is not responding. Xcode may not be fully installed.",fixCmd:i?void 0:"sudo xcode-select --reset"}),i)if(t=await Da(),t)e.push({id:"booted_simulator",status:"pass",label:"Booted simulator"});else{let o=await ja();e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:o.length>0?`No simulator is booted. Available: ${o.join(", ")}. Open Simulator.app and boot one.`:"No simulator is booted and no devices found. Open Xcode \u2192 Window \u2192 Devices and Simulators to add one.",fixCmd:"open -a Simulator"})}else e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"})}else e.push({id:"simctl_ok",status:"fail",label:"simctl",detail:"Skipped \u2014 previous check failed"}),e.push({id:"booted_simulator",status:"fail",label:"Booted simulator",detail:"Skipped \u2014 previous check failed"});return{checks:e,udid:t}}var Or=xt.default.join(xr.default.homedir(),".local/bin/idb");async function Fs(r){try{let e=await new Promise((i,o)=>{let c=(0,Ie.spawn)(Or,["describe","--udid",r,"--json"],{timeout:1e4}),a="",l="";c.stdout.on("data",d=>{a+=d.toString("utf8")}),c.stderr.on("data",d=>{l+=d.toString("utf8")}),c.on("close",d=>{d!==0?o(new Error(l||`idb exited ${d}`)):i(a)}),c.on("error",d=>o(d))}),t=JSON.parse(e),n=t.screen_dimensions?.width_points,s=t.screen_dimensions?.height_points;if(Number.isFinite(n)&&Number.isFinite(s))return{width:n,height:s}}catch(e){console.warn("[daemon] simulator.metadata.error",{udid:r,error:String(e)})}return{}}function La(r,e){let t=`/tmp/sim_frame_${e}.png`;return new Promise(n=>{let s=(0,Ie.spawn)("xcrun",["simctl","io",r,"screenshot",t],{stdio:["ignore","ignore","ignore"]});s.on("close",async i=>{if(i!==0){n(null);return}try{n(await(0,Gs.readFile)(t))}catch{n(null)}}),s.on("error",()=>n(null))})}function It(r,e){return new Promise((t,n)=>{let s=(0,Ie.spawn)(Or,[...e,"--udid",r],{timeout:15e3}),i="";s.stderr.on("data",o=>{i+=o.toString("utf8")}),s.on("close",o=>{o!==0?n(new Error(i||`idb exited ${o}`)):t()}),s.on("error",o=>n(o))})}var Ot=class{sessions=new Map;pendingSubscriptions=new Set;pendingUdids=new Map;ws=null;daemonId;installProc=new Map;cancelledInstalls=new Set;constructor(e){this.daemonId=e}updateWs(e){this.ws=e}async start(e){if(this.sessions.has(e)){console.warn("[daemon] simulator.start: session already exists",{agentId:e});return}let{checks:t,udid:n}=await Ir(e);if(this.sendSimHealth(e,t),t.find(d=>d.status==="fail"))return;if(!n){this.sendError(e,"SPAWN_FAILED","No booted iOS simulator found");return}let i=[...this.sessions.values()].find(d=>d.udid===n);if(i){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already attached as agent ${i.agentId}`,{existingAgentId:i.agentId,udid:n});return}let o=this.pendingUdids.get(n);if(o&&o!==e){this.sendError(e,"DUPLICATE_SIMULATOR",`Simulator already being attached as agent ${o}`,{existingAgentId:o,udid:n});return}this.pendingUdids.set(n,e);let c=this.pendingSubscriptions.has(e);this.pendingSubscriptions.delete(e);let a=await Fs(n);a.width!=null&&a.height!=null&&console.log("[daemon] simulator.metadata",{agentId:e,udid:n,logicalWidth:a.width,logicalHeight:a.height});let l={agentId:e,udid:n,frameInterval:null,capturing:!1,subscribed:c,logicalWidth:a.width,logicalHeight:a.height,lastDescribeAt:Date.now()};if(this.sessions.set(e,l),this.pendingUdids.delete(n),l.frameInterval=setInterval(async()=>{if(!(!l.subscribed||l.capturing)){l.capturing=!0;try{Date.now()-l.lastDescribeAt>=5e3&&(l.lastDescribeAt=Date.now(),Fs(n).then(u=>{u.width!=null&&u.height!=null&&(u.width!==l.logicalWidth||u.height!==l.logicalHeight)&&(console.log("[daemon] simulator.metadata.update",{agentId:e,udid:n,from:{logicalWidth:l.logicalWidth,logicalHeight:l.logicalHeight},to:u}),l.logicalWidth=u.width,l.logicalHeight=u.height)}).catch(()=>{}));let d=await La(n,e);d&&this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_frame",agentId:e,image:d.toString("base64"),width:l.logicalWidth,height:l.logicalHeight}))}catch(d){console.error("[daemon] simulator.capture.error",{agentId:e,error:String(d)})}finally{l.capturing=!1}}},200),this.ws&&this.ws.readyState===k.OPEN){let d=(0,Hs.randomUUID)();this.ws.send(JSON.stringify({type:"session_started",agentId:e,sessionId:d})),this.ws.send(JSON.stringify({type:"agent_spawned",agentId:e,agentKey:"sim_ios",daemonId:this.daemonId}))}console.log("[daemon] simulator.started",{agentId:e,udid:n})}stop(e){let t=this.sessions.get(e);if(!t){for(let[n,s]of this.pendingUdids)if(s===e){this.pendingUdids.delete(n);break}return}t.frameInterval&&clearInterval(t.frameInterval),this.sessions.delete(e),this.pendingUdids.delete(t.udid),this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"exit",agentId:e,exitCode:0,signal:null}))}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e);for(let[e,t]of this.installProc)t.kill("SIGTERM"),this.installProc.delete(e)}subscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!0)}unsubscribe(e){let t=this.sessions.get(e);t&&(t.subscribed=!1)}async handle(e){let t=this.sessions.get(e.agentId);if(e.type==="sim_subscribe"){t?this.subscribe(e.agentId):this.pendingSubscriptions.add(e.agentId);return}if(e.type==="sim_unsubscribe"){this.pendingSubscriptions.delete(e.agentId),t&&this.unsubscribe(e.agentId);return}if(e.type==="sim_healthcheck"){let{checks:n}=await Ir(e.agentId);this.sendSimHealth(e.agentId,n);return}if(e.type==="sim_install_run"){await this.handleSimInstallRun(e.agentId);return}if(e.type==="sim_install_cancel"){this.handleSimInstallCancel(e.agentId);return}if(!t){console.warn("[daemon] simulator.handle: no session",{agentId:e.agentId,type:e.type});return}try{switch(e.type){case"sim_tap":{await It(t.udid,["ui","tap",String(e.x),String(e.y)]);break}case"sim_swipe":{await It(t.udid,["ui","swipe",String(e.x1),String(e.y1),String(e.x2),String(e.y2),"--duration",String(e.duration??.5)]);break}case"sim_key":{await It(t.udid,["ui","text",e.key]);break}case"sim_button":{console.log("[daemon] simulator.button.start",{agentId:e.agentId,button:e.button,udid:t.udid}),await It(t.udid,["ui","button",e.button]),console.log("[daemon] simulator.button.done",{agentId:e.agentId,button:e.button});break}case"sim_get_source":{let n=await new Promise((s,i)=>{let o=(0,Ie.spawn)(Or,["ui","describe-all","--udid",t.udid],{timeout:15e3}),c="",a="";o.stdout.on("data",l=>{c+=l.toString("utf8")}),o.stderr.on("data",l=>{a+=l.toString("utf8")}),o.on("close",l=>{l!==0?i(new Error(a||`idb exited ${l}`)):s(c)}),o.on("error",l=>i(l))});this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_source",agentId:e.agentId,source:n}));break}}}catch(n){console.error("[daemon] simulator.handle.error",{agentId:e.agentId,type:e.type,error:String(n)})}}sendError(e,t,n,s){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"error",code:t,message:n,agentId:e,...s}))}sendSimHealth(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_health",agentId:e,checks:t}))}resolveSimInstallScript(){let e=process.env.BRIDGE_SIM_INSTALL_SCRIPT;if(e)return e;let t=xt.default.join(xr.default.homedir(),".bridge/install-sim-prereqs.sh");if(Ee.default.existsSync(t))return t;let n=xt.default.join(__dirname,"../../../scripts/install-sim-prereqs.sh");return Ee.default.existsSync(n)?n:null}async handleSimInstallRun(e){if(this.installProc.has(e)){this.sendInstallProgress(e,{step:"error",error:"already installing"});return}this.cancelledInstalls.delete(e);let t=this.resolveSimInstallScript();if(!t){this.sendInstallProgress(e,{step:"error",error:"install script not found"});return}try{Ee.default.accessSync(t,Ee.default.constants.F_OK|Ee.default.constants.X_OK)}catch{this.sendInstallProgress(e,{step:"error",error:`install script not found at ${t}`});return}let n=(0,Ie.spawn)("bash",["-lc",t],{timeout:6e5});this.installProc.set(e,n);let s="pre_check",i="",o="";n.stdout?.on("data",c=>{i+=c.toString("utf8");let a;for(;(a=i.indexOf(`
|
|
380
|
+
`))!==-1;){let l=i.slice(0,a);i=i.slice(a+1),l&&(l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l}))}}),n.stderr?.on("data",c=>{o+=c.toString("utf8");let a;for(;(a=o.indexOf(`
|
|
381
|
+
`))!==-1;){let l=o.slice(0,a);o=o.slice(a+1),l&&this.sendInstallProgress(e,{stream:"stderr",line:l})}}),n.on("close",c=>{if(this.installProc.delete(e),i){let l=i;i="",l.startsWith("STEP:")?(s=l.slice(5).trim(),this.sendInstallProgress(e,{step:s})):this.sendInstallProgress(e,{stream:"stdout",line:l})}if(o){let l=o;o="",this.sendInstallProgress(e,{stream:"stderr",line:l})}let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&(c===0?this.sendInstallProgress(e,{step:"done",exitCode:0}):this.sendInstallProgress(e,{step:"error",exitCode:c??void 0,error:`install script exited with code ${c}`}))}),n.on("error",c=>{this.installProc.delete(e);let a=this.cancelledInstalls.has(e);this.cancelledInstalls.delete(e),!a&&this.sendInstallProgress(e,{step:"error",error:String(c)})})}handleSimInstallCancel(e){let t=this.installProc.get(e);t&&(this.cancelledInstalls.add(e),t.kill("SIGTERM"),this.installProc.delete(e),this.sendInstallProgress(e,{step:"error",error:"cancelled by user"}))}sendInstallProgress(e,t){this.ws&&this.ws.readyState===k.OPEN&&this.ws.send(JSON.stringify({type:"sim_install_progress",agentId:e,...t}))}};Oe();qe();var Ke=_(require("fs")),Pr=_(require("path")),Js=_(require("os")),Ba=2e5;function $a(r){let e=Pr.default.join(Js.default.homedir(),".claude","projects");if(Ke.default.existsSync(e))try{let t=Ke.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory());for(let n of t){let s=Pr.default.join(e,n.name,`${r}.jsonl`);if(Ke.default.existsSync(s))return s}}catch{}}function Ua(r){try{let t=Ke.default.readFileSync(r,"utf-8").trim().split(`
|
|
382
|
+
`);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/Ba*100)),usedTokens:a}}catch{continue}}}catch{}return null}function Ar(r,e,t){let n,s=-1,i=()=>{if(n||(n=$a(e)),!n)return;let a=Ua(n);a&&a.usedTokens!==s&&(s=a.usedTokens,t(r,a.usedPct,a.usedTokens))},o=setTimeout(i,2e3),c=setInterval(i,3e3);return()=>{clearTimeout(o),clearInterval(c)}}var ee=_(require("fs")),Ye=_(require("path")),Tr=_(require("os")),zs=300*60*1e3,Xs={free:10,pro:40,max_5x:200,max_20x:200};function Wa(){let r=Ye.default.join(Tr.default.homedir(),".jerico","settings.json");try{if(!ee.default.existsSync(r))return"pro";let t=JSON.parse(ee.default.readFileSync(r,"utf-8")).claudeTier;if(typeof t=="string"&&t in Xs)return t}catch{}return"pro"}function Fa(){let r=Ye.default.join(Tr.default.homedir(),".claude","projects");if(!ee.default.existsSync(r))return{prompts5h:0,resetAt:0};let t=Date.now()-zs,n=1/0,s=0;try{let o=ee.default.readdirSync(r,{withFileTypes:!0}).filter(c=>c.isDirectory());for(let c of o){let a=Ye.default.join(r,c.name),l;try{l=ee.default.readdirSync(a).filter(d=>d.endsWith(".jsonl"))}catch{continue}for(let d of l){let u=Ye.default.join(a,d),f;try{if(ee.default.statSync(u).size>20*1024*1024)continue;f=ee.default.readFileSync(u,"utf-8")}catch{continue}for(let h of f.split(`
|
|
383
|
+
`)){let g=h.trim();if(g)try{let p=JSON.parse(g);if(p.type!=="user"||p.message?.role!=="user"||p.userType!==void 0&&p.userType!=="external")continue;let I=p.timestamp;if(typeof I!="string")continue;let S=Date.parse(I);if(isNaN(S)||S<t)continue;s++,S<n&&(n=S)}catch{continue}}}}}catch{}let i=isFinite(n)?n+zs:0;return{prompts5h:s,resetAt:i}}function Qs(r){let e=()=>{let n=Wa(),s=Xs[n]??40,{prompts5h:i,resetAt:o}=Fa();r({prompts5h:i,limit5h:s,resetAt:o,tier:n})};try{e()}catch(n){console.warn("[quota] initial poll failed",n)}let t=setInterval(()=>{try{e()}catch{}},6e4);return()=>clearInterval(t)}var Ce=_(require("os")),Tt=_(require("fs")),Rr=require("node:child_process");function ei(){let r=0,e=0;for(let t of Ce.default.cpus())r+=t.times.idle,e+=t.times.user+t.times.nice+t.times.sys+t.times.idle+(t.times.irq??0);return{idle:r,total:e}}var Nr=ei();function Ga(){let r=ei(),e=r.idle-Nr.idle,t=r.total-Nr.total;return Nr=r,t===0?0:Math.round((1-e/t)*100)}function Ha(){let r=Ce.default.totalmem(),e=Ce.default.freemem(),t=0;try{let n=(0,Rr.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 qa(){if(process.platform==="darwin")return Ha();let r=Ce.default.totalmem(),e=Ce.default.freemem();return{totalMb:Math.round(r/1024/1024),usedMb:Math.round((r-e)/1024/1024),cachedMb:0}}function Va(){try{let r=(0,Rr.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 Ka(){try{let r="/sys/class/power_supply",e=Tt.default.readdirSync(r).filter(o=>/^BAT/i.test(o));if(e.length===0)return;let t=`${r}/${e[0]}`,n=parseInt(Tt.default.readFileSync(`${t}/capacity`,"utf-8").trim(),10),s=Tt.default.readFileSync(`${t}/status`,"utf-8").trim().toLowerCase();return{percent:n,charging:s==="charging"||s==="full"}}catch{return}}function Zs(){let r=process.platform;if(r==="darwin")return Va();if(r==="linux")return Ka()}var Ya=1e4,Ja=3;function ti(r){let e=0,t=Zs(),n=setInterval(()=>{e++,e%Ja===0&&(t=Zs());let s=qa();r({cpu:Ga(),ramUsedMb:s.usedMb,ramTotalMb:s.totalMb,ramCachedMb:s.cachedMb,battery:t})},Ya);return()=>clearInterval(n)}var Nt=_(require("fs")),Rt=_(require("path")),ri=_(require("node-pty"));function za(){try{let r=require.resolve("node-pty"),e=Rt.default.resolve(Rt.default.dirname(r),"..");return Rt.default.join(e,"prebuilds",`${process.platform}-${process.arch}`,"spawn-helper")}catch{return}}function ni(){let r=za();if(!r||!Nt.default.existsSync(r))return!0;try{Nt.default.accessSync(r,Nt.default.constants.X_OK)}catch{return!1}try{ri.spawn("/bin/sh",[],{name:"xterm-256color",cols:80,rows:24}).kill()}catch{return!1}return!0}var ue=new Map,Qe=new Map;function Xa(r,e){let t=Date.now(),n=Qe.get(r),s=!1;n?(n.lastOutputAt=t,n.currentState==="idle"&&(n.currentState="working",s=!0)):(n={lastOutputAt:t,currentState:"working",timer:null},Qe.set(r,n),s=!0),s&&e()?.send(JSON.stringify({type:"panel_state",agentId:r,state:"working",lastOutputAt:t})),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(()=>{let i=Qe.get(r);if(i&&i.currentState==="working"){i.currentState="idle";let o=e();o?.readyState===k.OPEN&&o.send(JSON.stringify({type:"panel_state",agentId:r,state:"idle",lastOutputAt:i.lastOutputAt}))}},Rs)}function Qa(r){let e=Qe.get(r);e?.timer&&clearTimeout(e.timer),Qe.delete(r)}var Dr,Dt;function Br(){try{return(0,et.createHash)("sha256").update(D.default.hostname()+":"+D.default.userInfo().username+Vs()).digest("hex")}catch{return"unknown"}}var Je=[];function Za(r){let e=Date.now(),t=e-3e4;for(;Je.length&&Je[0].ts<t;)Je.shift();return Je.push({agentKey:r,ts:e}),new Set(Je.map(s=>s.agentKey)).size>=2}var si=r=>r.replace(/[\r\n]+$/,"")+"\r",Lr=null,ec=Qs(r=>{Lr=r}),tc=Number(process.env.BRIDGE_KEEPALIVE_MS)||3e4,rc=Number(process.env.BRIDGE_PONG_DEADLINE_MS)||5e3,nc=5e3,sc=400;function ic(r){return r.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}function oc(r,e=sc){return r.length<=e?r:`${r.slice(0,e)}...`}function ac(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}function tt(){let r=G.default.realpathSync(process.argv[1]??""),e=A.default.dirname(r);return[A.default.resolve(e,"../../mcp-server/dist/index.cjs"),A.default.resolve(e,"bridge-mcp.cjs"),A.default.resolve(process.cwd(),"node_modules/.bin/bridge-mcp")].find(n=>G.default.existsSync(n))??"bridge-mcp"}function cc(r){try{let e=process.env.BRIDGE_MCP_URL,t=r.projectId||"workspace",n=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${t}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:tt(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:t,BRIDGE_PANEL_ID:r.agentId??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},s=A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId??t}.json`);return G.default.writeFileSync(s,JSON.stringify(n,null,2)+`
|
|
384
|
+
`,"utf-8"),console.log("[daemon] mcp.config.written",{tmpPath:s,transport:e?"http":"stdio"}),["--mcp-config",s]}catch(e){return console.warn("[daemon] mcp.config.build.failed",{error:String(e)}),[]}}var lc=`# Bridge Worker \u2014 Reviewer Role (SCRIPTED TEST MODE)
|
|
375
385
|
|
|
376
386
|
You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rule below.
|
|
377
387
|
|
|
@@ -390,14 +400,17 @@ You are a test-mode reviewer. DO NOT apply AI judgment. Apply the mechanical rul
|
|
|
390
400
|
- Decide solely based on (todo.retryCount ?? 0) > 0
|
|
391
401
|
- This is a signaling mechanic test, not a code quality review
|
|
392
402
|
|
|
393
|
-
${
|
|
403
|
+
${js("bridge_get_my_task","bridge_complete_task","bridge_fail_task","bridge_get_todo_context")}`;function dc(r,e,t,n,s,i){if(!r)return;let o=e,c=!0;if(!o){c=!1;let a=process.env.BRIDGE_TEST_SCRIPTED_REVIEW;r==="reviewer"&&a==="1"?(o=lc,console.log("[daemon] resolveSystemPrompt.fallback",{role:r,envFlag:a,returning:"SCRIPTED"})):n?(o=Ms(r),console.log("[daemon] resolveSystemPrompt.fallback",{role:r,mode:"bootstrap"})):(o=Ds[r],console.log("[daemon] resolveSystemPrompt.fallback",{role:r,mode:"default"}))}if(o)return o.includes("{{TOOL_TABLE}}")&&(o=o.replace("{{TOOL_TABLE}}",Ls())),c?o:o.replaceAll("{{PANEL_ID}}",t).replaceAll("{{WORKSPACE_ID}}",n??"unknown").replaceAll("{{PROJECT_ID}}",s??"none").replaceAll("{{GROUP_ID}}",i??"none")}function uc(r,e,t){if(!e)return[];if(r==="claude")try{let n=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(n,e+`
|
|
394
404
|
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,error:String(n)}),[]}if(r==="qwen")return["--append-system-prompt",e];if(r==="aider")try{let n=A.default.join(D.default.tmpdir(),`bridge-role-${t}.md`);return G.default.writeFileSync(n,e+`
|
|
395
|
-
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,tmpPath:n,agentKey:"aider"}),["--read",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,agentKey:"aider",error:String(n)}),[]}return r==="codex"?[]:[]}function
|
|
396
|
-
`,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:t,error:String(n)}),[]}return r==="qwen"?["--append-system-prompt",e.trim()]:[]}function ze(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function
|
|
397
|
-
`,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function pc(r){try{let e=tt(),t=`{BRIDGE_SERVER_URL=${ze(r.serverUrl)},BRIDGE_TOKEN=${ze(r.token)},BRIDGE_WORKSPACE_ID=${ze(r.workspaceId)},BRIDGE_PROJECT_ID=${ze(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${ze(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function hc(r){try{return G.default.statSync(r).isDirectory()}catch{return!1}}function Rr(r,e){try{return e(r)}catch{return!1}}function fc(r,e,t,n,s=hc){let i=n?.[r];if(i&&Rr(i,s))return{path:i,source:"local_override"};if(t){if(Rr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}if(e&&Rr(e,s))return{path:e,source:"server_project"};let c=!r||r.trim()===""?"Missing projectId in spawn message \u2014 server-side bug, file issue at https://github.com/alperduzgun/jerico/issues":`Set projectPaths["${r}"] in ~/.jerico/settings.json`;return console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:c}),{path:D.default.homedir(),source:"fallback_home"}}function gc(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),t=JSON.stringify({mcpServers:{bridge:{command:e,args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Pe.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Pe.spawnSync)("forge",["mcp","import",t,"--scope","local"],n);return s.status===0?(console.log("[daemon] forge.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] forge.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:s.status,stderr:(s.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] forge.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}function mc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=A.default.resolve(r.cwd)===A.default.resolve(D.default.homedir()),s=n?"user":"project";n&&console.warn("[daemon] qwen.mcp.home_dir_fallback",{cwd:r.cwd,projectId:r.projectId||"workspace",scope:"user"}),(0,Pe.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Pe.spawnSync)("qwen",["mcp","add","--scope",s,"-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e",`BRIDGE_PERSONA_ID=${r.personaId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return i.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:i.status,stderr:(i.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var Ze=[],jr=!1,ei=!1;function ri(){return jr}function ni(r){if(ei)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(ei=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let h=A.default.join(D.default.homedir(),".jerico","settings.json");G.default.existsSync(h)&&JSON.parse(G.default.readFileSync(h,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=le(),t=(0,et.createHash)("sha256").update(e.token).digest("hex"),n=new xt(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let h=Date.now(),g=process.hrtime.bigint();s=new k(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let p=s,m=(0,et.randomUUID)();Nr=m;let I=D.default.networkInterfaces(),S=Object.entries(I).flatMap(([y,w])=>(w||[]).filter(E=>!E.internal).map(E=>({iface:y,address:E.address,family:E.family}))),P=JSON.stringify(S);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:S,connectionId:m})),Rt&&Rt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Rt,current:P,connectionId:m})),Rt=P;let j=p.send.bind(p);p.send=function(y){if(p.readyState!==k.OPEN){let w="unknown";try{w=JSON.parse(y).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:w,readyState:p.readyState,connectionId:m}));return}return j(y)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let $=null,he=0,b=null;p.on("open",()=>{jr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{p.readyState===k.OPEN&&(p.ping(),he=Date.now(),b&&clearTimeout(b),b=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),p.terminate()},Xa))},za),r.setCurrentWs(p);let y=!Qs();p.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:y,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:Lr(),connectionId:m})),n.updateWs(p),Promise.all([Zt(e.agentPaths),vr()]).then(([w,E])=>{Ze=E?[...w,E]:w,p.readyState===k.OPEN&&p.send(JSON.stringify({type:"agents",list:Ze}))}),$=zs(w=>{p.readyState===k.OPEN&&p.send(JSON.stringify({type:"system_metrics",daemonId:t,...w}))})}),p.on("message",y=>{let w;try{w=JSON.parse(y.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}_c(w,p,r,e,n)}),p.on("pong",()=>{b&&(clearTimeout(b),b=null);let y=Date.now()-he;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:y,connectionId:m}))}),p.on("close",(y,w)=>{jr=!1,o&&(clearInterval(o),o=null),b&&(clearTimeout(b),b=null),$?.(),$=null,y===1008?(c++,c>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:c})):c=0;let E=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:y,reason:w?.toString()||void 0,uptimeMs:E,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let v=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&v<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let M=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),nt=Math.round(M+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:nt,reconnectCount:a,connectionId:m})),i=setTimeout(d,nt)}),p.on("error",y=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:y.message,code:y.code,connectionId:m}))})}function u(){o&&(clearInterval(o),o=null),r.stopLivenessCheck(),Ja();for(let h of ue.values())h();n.stopAll(),r.killAll(),s?.close()}function f(h){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:h,connectionId:Nr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",h=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(h),stack:h.stack,connectionId:Nr})),r.killAll(),process.exit(1)}),d()}function _c(r,e,t,n,s){switch(r.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role}),r.agentKey==="sim_ios"){s.start(r.agentId);return}let i=Ze.find(b=>b.key===r.agentKey);if(!i){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let o=ge.find(b=>b.key===r.agentKey),c=[];if(r.sessionId&&o?.resumeArgs)c=o.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Cr(r.agentId,r.sessionId,(b,y,w)=>{let E=t.getCurrentWs();E?.readyState===k.OPEN&&E.send(JSON.stringify({type:"panel_token_usage",agentId:b,usedPct:y,usedTokens:w,...Dr}))})));else if(o?.assignSessionId){let b=crypto.randomUUID(),y=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],y,b],e.readyState===k.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:b})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:b})),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Cr(r.agentId,b,(w,E,v)=>{let M=t.getCurrentWs();M?.readyState===k.OPEN&&M.send(JSON.stringify({type:"panel_token_usage",agentId:w,usedPct:E,usedTokens:v,...Dr}))})))}else e.readyState===k.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let a,l=!1,d,u;if(r.workspaceId){let b=rc(n.server),y=fc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),w=y.path;u=y.source;let E=xr(w);if(a={serverUrl:b,token:n.token,workspaceId:Ps(r.workspaceId),projectId:r.projectId?As(r.projectId):void 0,agentId:r.agentId?Cs(r.agentId):void 0,personaId:r.personaId,cwd:w,projectEnv:E.env},r.agentKey==="claude"){let v=nc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else if(r.agentKey==="codex"){let v=pc(a);l=v.length>0,d="stdio",c=[...c,...v]}else if(r.agentKey==="qwen")l=mc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let v=uc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else r.agentKey==="forge"?(l=gc(a),d=l?"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"}));if(Sr("phase2a.verified_at")&&(y.source==="daemon_override"||y.source==="server_project")){let v=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(v,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(M=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(M)})})}if(Sr("phase2a.auto_register")&&(y.source==="daemon_override"||y.source==="server_project"))try{let v=(0,Pe.spawnSync)("git",["remote","get-url","origin"],{cwd:w,timeout:5e3,encoding:"utf-8"});if(v.status===0&&v.stdout&&v.stdout.trim()){let M=v.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=w,de(n));let nt=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(nt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:w,repoUrl:M})}).catch(yi=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(yi)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:w,repoUrl:M})}}catch(v){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(v)})}}let f=cc(r.role,r.systemPrompt,r.agentId,r.workspaceId,r.projectId,r.groupId),h=lc(r.agentKey,f,r.agentId);h.length>0&&(c=[...c,...h]);let g=dc(r.agentKey,r.systemPrompt,r.agentId);g.length>0&&(c=[...c,...g]);let p=Math.max(1,Math.min(500,r.cols)),m=Math.max(1,Math.min(500,r.rows)),I=Date.now(),S="",P=0,j=!1,$=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,p,m,b=>{P+=b.length;try{let w=Buffer.from(b,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!$&&Date.now()-I<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){$=!0;let E=f;if(E){let v=Zs(E),M=Buffer.from(v).toString("base64");t.write(r.agentId,M,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!S)try{let w=Buffer.from(b,"base64").toString("utf-8"),E=ec(w).replace(/\x00/g,"").trim();if(E&&(S=tc(E)),r.agentKey==="codex"&&!j&&Date.now()-I<2e4&&/included in your plan for free|let[’']s build together/i.test(E)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(E)){j=!0;let v=Buffer.from("y").toString("base64");t.write(r.agentId,v,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let y=t.getCurrentWs();y?.readyState===k.OPEN&&y.send(JSON.stringify({type:"output",agentId:r.agentId,data:b})),Va(r.agentId,()=>t.getCurrentWs())},(b,y)=>{let w=Date.now()-I,E=w<=Qa;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:b,signal:y,uptimeMs:w,earlyExit:E,outputBytes:P,firstOutputSnippet:S||void 0});let v=t.getCurrentWs();E&&v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${b??"null"} signal=${y??"null"} snippet="${S||"no output"}"`})),v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:b,signal:y})),Ka(r.agentId),Promise.all([(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-persona-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-role-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId}.json`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId}.json`))].map(M=>M.catch(()=>{}))).catch(()=>{})},a))e.readyState===k.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:a?.projectId,effectiveCwd:a?.cwd,cwdSource:u}));else{let y=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Ya(r.agentKey);e.readyState===k.OPEN&&(y?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role,personaId:r.personaId}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ue.get(r.agentId)?.(),ue.delete(r.agentId),s.stop(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"sim_tap":case"sim_swipe":case"sim_key":case"sim_button":case"sim_get_source":case"sim_subscribe":case"sim_unsubscribe":case"sim_healthcheck":case"sim_install_run":case"sim_install_cancel":s.handle(r);break;case"detect_agents":Promise.all([Zt(n.agentPaths),vr()]).then(([i,o])=>{Ze=o?[...i,o]:i,e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agents",list:Ze}))});break;case"dir_list":{let i=D.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=A.default.resolve(o);if(c!==i&&!c.startsWith(i+A.default.sep)){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let a=G.default.readdirSync(c,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:A.default.join(c,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:a}))}catch(a){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:[],error:a instanceof Error?a.message:"Cannot read directory"}))}break}case"persona_apply":{if(!(t.getLiveAgentIds().includes(r.agentId)?{agentId:r.agentId}:null)){console.warn("[daemon] persona_apply.no_panel",{agentId:r.agentId});break}let o=`[SYSTEM CONTEXT UPDATE \u2014 new persona applied]
|
|
405
|
+
`,"utf-8"),console.log("[daemon] role.prompt.written",{agentId:t,tmpPath:n,agentKey:"aider"}),["--read",n]}catch(n){return console.warn("[daemon] role.prompt.write.failed",{agentId:t,agentKey:"aider",error:String(n)}),[]}return r==="codex"?[]:[]}function pc(r,e,t){if(!e||!e.trim())return[];if(r==="claude")try{let n=A.default.join(D.default.tmpdir(),`bridge-persona-${t}.md`);return G.default.writeFileSync(n,e.trim()+`
|
|
406
|
+
`,"utf-8"),console.log("[daemon] persona.prompt.written",{agentId:t,tmpPath:n}),["--append-system-prompt-file",n]}catch(n){return console.warn("[daemon] persona.prompt.write.failed",{agentId:t,error:String(n)}),[]}return r==="qwen"?["--append-system-prompt",e.trim()]:[]}function ze(r){return`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function hc(r){try{let e=process.env.BRIDGE_MCP_URL,t=e?{mcpServers:{bridge:{type:"http",url:`${e}/mcp/${r.workspaceId}/${r.projectId||"workspace"}`,headers:{Authorization:`Bearer ${r.token}`,"x-panel-id":r.agentId??"","x-panel-persona-id":r.personaId??""}}}}:{mcpServers:{bridge:{command:tt(),args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}},n=A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId??(r.projectId||"workspace")}.json`);return G.default.writeFileSync(n,JSON.stringify(t,null,2)+`
|
|
407
|
+
`,"utf-8"),console.log("[daemon] kimi.mcp.config.written",{tmpPath:n,transport:e?"http":"stdio"}),["--mcp-config-file",n]}catch(e){return console.warn("[daemon] kimi.mcp.config.build.failed",{error:String(e)}),[]}}function fc(r){try{let e=tt(),t=`{BRIDGE_SERVER_URL=${ze(r.serverUrl)},BRIDGE_TOKEN=${ze(r.token)},BRIDGE_WORKSPACE_ID=${ze(r.workspaceId)},BRIDGE_PROJECT_ID=${ze(r.projectId||"workspace")},HTTP_MODE="false"}`;return["-c",'mcp_servers.bridge.transport="stdio"',"-c",`mcp_servers.bridge.command=${ze(e)}`,"-c","mcp_servers.bridge.args=[]","-c",`mcp_servers.bridge.env=${t}`]}catch(e){return console.warn("[daemon] codex.mcp.config.build.failed",{error:String(e)}),[]}}function gc(r){try{return G.default.statSync(r).isDirectory()}catch{return!1}}function jr(r,e){try{return e(r)}catch{return!1}}function mc(r,e,t,n,s=gc){let i=n?.[r];if(i&&jr(i,s))return{path:i,source:"local_override"};if(t){if(jr(t,s))return{path:t,source:"daemon_override"};console.warn("[daemon] spawn.cwd.daemon_override_missing",{projectId:r,daemonLocalPath:t,hint:`Run: jerico link-project ${r} <local-path>`})}if(e&&jr(e,s))return{path:e,source:"server_project"};let c=!r||r.trim()===""?"Missing projectId in spawn message \u2014 server-side bug, file issue at https://github.com/alperduzgun/jerico/issues":`Set projectPaths["${r}"] in ~/.jerico/settings.json`;return console.warn("[daemon] spawn.cwd.fallback_home",{projectId:r,serverCwd:e,localOverride:i,daemonLocalPath:t??void 0,hint:c}),{path:D.default.homedir(),source:"fallback_home"}}function _c(r){try{if(!r.cwd)return console.warn("[daemon] forge.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),t=JSON.stringify({mcpServers:{bridge:{command:e,args:[],env:{BRIDGE_SERVER_URL:r.serverUrl,BRIDGE_TOKEN:r.token,BRIDGE_WORKSPACE_ID:r.workspaceId,BRIDGE_PROJECT_ID:r.projectId||"workspace",BRIDGE_PANEL_ID:r.agentId??"",BRIDGE_PERSONA_ID:r.personaId??"",HTTP_MODE:"false"}}}}),n={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"};(0,Pe.spawnSync)("forge",["mcp","remove","--scope","local","bridge"],n);let s=(0,Pe.spawnSync)("forge",["mcp","import",t,"--scope","local"],n);return s.status===0?(console.log("[daemon] forge.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] forge.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:s.status,stderr:(s.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] forge.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}function yc(r){try{if(!r.cwd)return console.warn("[daemon] qwen.mcp.setup.skipped",{reason:"missing_cwd",projectId:r.projectId||"workspace"}),!1;let e=tt(),t={cwd:r.cwd,encoding:"utf-8",timeout:5e3,stdio:"pipe"},n=A.default.resolve(r.cwd)===A.default.resolve(D.default.homedir()),s=n?"user":"project";n&&console.warn("[daemon] qwen.mcp.home_dir_fallback",{cwd:r.cwd,projectId:r.projectId||"workspace",scope:"user"}),(0,Pe.spawnSync)("qwen",["mcp","remove","--scope",s,"bridge"],t);let i=(0,Pe.spawnSync)("qwen",["mcp","add","--scope",s,"-t","stdio","-e",`BRIDGE_SERVER_URL=${r.serverUrl}`,"-e",`BRIDGE_TOKEN=${r.token}`,"-e",`BRIDGE_WORKSPACE_ID=${r.workspaceId}`,"-e",`BRIDGE_PROJECT_ID=${r.projectId||"workspace"}`,"-e",`BRIDGE_PANEL_ID=${r.agentId??""}`,"-e",`BRIDGE_PERSONA_ID=${r.personaId??""}`,"-e","HTTP_MODE=false","bridge",e],t);return i.status===0?(console.log("[daemon] qwen.mcp.setup.ok",{cwd:r.cwd,projectId:r.projectId||"workspace"}),!0):(console.warn("[daemon] qwen.mcp.setup.failed",{cwd:r.cwd,projectId:r.projectId,status:i.status,stderr:(i.stderr??"").toString().slice(0,300)}),!1)}catch(e){return console.warn("[daemon] qwen.mcp.setup.error",{error:String(e),projectId:r.projectId}),!1}}var Ze=[],Mr=!1,ii=!1;function oi(){return Mr}function ai(r){if(ii)throw new Error("[daemon] startDaemonConnection called twice \u2014 only one connection manager allowed");if(ii=!0,process.env.BRIDGE_TEST_SCRIPTED_REVIEW!=="1")try{let h=A.default.join(D.default.homedir(),".jerico","settings.json");G.default.existsSync(h)&&JSON.parse(G.default.readFileSync(h,"utf-8")).testScriptedReview===!0&&(process.env.BRIDGE_TEST_SCRIPTED_REVIEW="1",console.log("[daemon] scripted-review-mode enabled from ~/.jerico/settings.json"))}catch{}process.env.BRIDGE_TEST_SCRIPTED_REVIEW==="1"&&console.log("[daemon] scripted-review-mode ENABLED");let e=le(),t=(0,et.createHash)("sha256").update(e.token).digest("hex"),n=new Ot(t),s=null,i=null,o=null,c=0,a=0,l=0n;function d(){i&&(clearTimeout(i),i=null);let h=Date.now(),g=process.hrtime.bigint();s=new k(e.server,{headers:{Authorization:`Bearer ${e.token}`}});let p=s,m=(0,et.randomUUID)();Dr=m;let I=D.default.networkInterfaces(),S=Object.entries(I).flatMap(([y,w])=>(w||[]).filter(E=>!E.internal).map(E=>({iface:y,address:E.address,family:E.family}))),P=JSON.stringify(S);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"net.interfaces",interfaces:S,connectionId:m})),Dt&&Dt!==P&&console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"net.interfaces.changed",previous:Dt,current:P,connectionId:m})),Dt=P;let j=p.send.bind(p);p.send=function(y){if(p.readyState!==k.OPEN){let w="unknown";try{w=JSON.parse(y).type}catch{}console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.send.dropped",messageType:w,readyState:p.readyState,connectionId:m}));return}return j(y)},console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connecting",server:e.server,connectionId:m}));let $=null,he=0,b=null;p.on("open",()=>{Mr=!0,a=0,l=0n,console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.connected",server:e.server,connectionId:m})),o=setInterval(()=>{p.readyState===k.OPEN&&(p.ping(),he=Date.now(),b&&clearTimeout(b),b=setTimeout(()=>{console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.heartbeat.timeout",connectionId:m})),p.terminate()},rc))},tc),r.setCurrentWs(p);let y=!ni();p.send(JSON.stringify({type:"ready",version:"1.1",name:e.name,spawnHelperBroken:y,liveAgentIds:r.getLiveAgentIds(),machineFingerprint:Br(),connectionId:m})),n.updateWs(p),Promise.all([er(e.agentPaths),Er()]).then(([w,E])=>{Ze=E?[...w,E]:w,p.readyState===k.OPEN&&p.send(JSON.stringify({type:"agents",list:Ze}))}),$=ti(w=>{p.readyState===k.OPEN&&p.send(JSON.stringify({type:"system_metrics",daemonId:t,...w}))})}),p.on("message",y=>{let w;try{w=JSON.parse(y.toString())}catch{console.warn("[daemon] Invalid JSON from server, ignoring");return}bc(w,p,r,e,n)}),p.on("pong",()=>{b&&(clearTimeout(b),b=null);let y=Date.now()-he;console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.heartbeat.pong",rttMs:y,connectionId:m}))}),p.on("close",(y,w)=>{Mr=!1,o&&(clearInterval(o),o=null),b&&(clearTimeout(b),b=null),$?.(),$=null,y===1008?(c++,c>=2&&(console.error("[daemon] ws.auth_failed \u2014 token invalid or expired (2 consecutive rejections), stopping. Re-run: bridge-agent auth"),process.exit(1)),console.warn("[daemon] ws.auth_rejected \u2014 transient 1008, will retry once",{attempt:c})):c=0;let E=Number((process.hrtime.bigint()-g)/1000000n);if(console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.closed",code:y,reason:w?.toString()||void 0,uptimeMs:E,connectionId:m})),i)return;a===0&&(l=process.hrtime.bigint()),a++;let v=Number((process.hrtime.bigint()-l)/1000000n);a>=10&&v<6e4&&(console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.reconnect.storm",reconnectCount:a,connectionId:m})),process.exit(1));let M=Math.min(3e4,1e3*Math.pow(2,Math.min(a,5))),nt=Math.round(M+Math.random()*500);console.log(JSON.stringify({ts:Date.now(),level:"info",event:"ws.reconnect.scheduled",delayMs:nt,reconnectCount:a,connectionId:m})),i=setTimeout(d,nt)}),p.on("error",y=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"ws.error",message:y.message,code:y.code,connectionId:m}))})}function u(){o&&(clearInterval(o),o=null),r.stopLivenessCheck(),ec();for(let h of ue.values())h();n.stopAll(),r.killAll(),s?.close()}function f(h){console.log(JSON.stringify({ts:Date.now(),level:"warn",event:"ws.signal",signal:h,connectionId:Dr})),u(),setTimeout(()=>process.exit(0),100)}process.on("SIGINT",()=>f("SIGINT")),process.on("SIGTERM",()=>f("SIGTERM")),process.on("SIGHUP",()=>f("SIGHUP")),process.on("uncaughtException",h=>{console.log(JSON.stringify({ts:Date.now(),level:"error",event:"daemon.uncaught",error:String(h),stack:h.stack,connectionId:Dr})),r.killAll(),process.exit(1)}),d()}function bc(r,e,t,n,s){switch(r.type){case"spawn":{if(console.log("[daemon] pty.spawn.start",{agentId:r.agentId,agentKey:r.agentKey,sessionId:r.sessionId,projectId:r.projectId,workspaceId:r.workspaceId,role:r.role}),r.agentKey==="sim_ios"){s.start(r.agentId);return}let i=Ze.find(b=>b.key===r.agentKey);if(!i){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"AGENT_NOT_FOUND",message:`Agent '${r.agentKey}' is not installed on this machine`}));return}let o=ge.find(b=>b.key===r.agentKey),c=[];if(r.sessionId&&o?.resumeArgs)c=o.resumeArgs(r.sessionId),console.log("[daemon] pty.spawn.resume",{agentId:r.agentId,sessionId:r.sessionId}),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Ar(r.agentId,r.sessionId,(b,y,w)=>{let E=t.getCurrentWs();E?.readyState===k.OPEN&&E.send(JSON.stringify({type:"panel_token_usage",agentId:b,usedPct:y,usedTokens:w,...Lr}))})));else if(o?.assignSessionId){let b=crypto.randomUUID(),y=r.agentKey==="kimi"?"--session":r.agentKey==="forge"?"--conversation-id":"--session-id";c=[...o.spawnArgs??[],y,b],e.readyState===k.OPEN&&(e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:b})),console.log("[daemon] session.assigned",{agentId:r.agentId,sessionId:b})),r.agentKey==="claude"&&(ue.get(r.agentId)?.(),ue.set(r.agentId,Ar(r.agentId,b,(w,E,v)=>{let M=t.getCurrentWs();M?.readyState===k.OPEN&&M.send(JSON.stringify({type:"panel_token_usage",agentId:w,usedPct:E,usedTokens:v,...Lr}))})))}else e.readyState===k.OPEN&&e.send(JSON.stringify({type:"session_started",agentId:r.agentId,sessionId:crypto.randomUUID()}));let a,l=!1,d,u;if(r.workspaceId){let b=ac(n.server),y=mc(r.projectId??"",r.cwd,r.daemonLocalPath,n.projectPaths),w=y.path;u=y.source;let E=Cr(w);if(a={serverUrl:b,token:n.token,workspaceId:Ts(r.workspaceId),projectId:r.projectId?Ns(r.projectId):void 0,agentId:r.agentId?As(r.agentId):void 0,personaId:r.personaId,cwd:w,projectEnv:E.env},r.agentKey==="claude"){let v=cc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else if(r.agentKey==="codex"){let v=fc(a);l=v.length>0,d="stdio",c=[...c,...v]}else if(r.agentKey==="qwen")l=yc(a),d=l?"stdio":void 0;else if(r.agentKey==="kimi"){let v=hc(a);l=v.length>0,d=process.env.BRIDGE_MCP_URL?"http":"stdio",c=[...c,...v]}else r.agentKey==="forge"?(l=_c(a),d=l?"stdio":void 0):(l=!1,console.log("[daemon] mcp.config.skipped",{agentId:r.agentId,agentKey:r.agentKey,reason:"unsupported_agent_path"}));if(vr("phase2a.verified_at")&&(y.source==="daemon_override"||y.source==="server_project")){let v=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths/${r.daemonId}/verify`;fetch(v,{method:"PATCH",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:"{}"}).catch(M=>{console.warn("[daemon] verify.patch_failed",{projectId:r.projectId,error:String(M)})})}if(vr("phase2a.auto_register")&&(y.source==="daemon_override"||y.source==="server_project"))try{let v=(0,Pe.spawnSync)("git",["remote","get-url","origin"],{cwd:w,timeout:5e3,encoding:"utf-8"});if(v.status===0&&v.stdout&&v.stdout.trim()){let M=v.stdout.trim();r.projectId&&(n.projectPaths||(n.projectPaths={}),n.projectPaths[r.projectId]=w,de(n));let nt=`${b}/api/workspaces/${r.workspaceId}/projects/${r.projectId}/machine-paths`;fetch(nt,{method:"POST",headers:{Authorization:`Bearer ${n.token}`,"Content-Type":"application/json"},body:JSON.stringify({daemonId:r.daemonId,localPath:w,repoUrl:M})}).catch(vi=>{console.warn("[daemon] auto_register.post_failed",{projectId:r.projectId,error:String(vi)})}),console.log("[daemon] auto_register.ok",{projectId:r.projectId,localPath:w,repoUrl:M})}}catch(v){console.log("[daemon] auto_register.skipped",{projectId:r.projectId,reason:String(v)})}}let f=dc(r.role,r.systemPrompt,r.agentId,r.workspaceId,r.projectId,r.groupId),h=uc(r.agentKey,f,r.agentId);h.length>0&&(c=[...c,...h]);let g=pc(r.agentKey,r.systemPrompt,r.agentId);g.length>0&&(c=[...c,...g]);let p=Math.max(1,Math.min(500,r.cols)),m=Math.max(1,Math.min(500,r.rows)),I=Date.now(),S="",P=0,j=!1,$=!1;if(t.spawn(r.agentId,r.agentKey,i.binaryPath,c,p,m,b=>{P+=b.length;try{let w=Buffer.from(b,"base64").toString("utf-8");if(r.agentKey==="kimi"&&r.role&&!$&&Date.now()-I<3e4&&(/yolo agent/.test(w)||/●/.test(w)||/○/.test(w))){$=!0;let E=f;if(E){let v=si(E),M=Buffer.from(v).toString("base64");t.write(r.agentId,M,"orchestrator"),console.log("[daemon] kimi.role.injected",{agentId:r.agentId,role:r.role})}}}catch{}if(!S)try{let w=Buffer.from(b,"base64").toString("utf-8"),E=ic(w).replace(/\x00/g,"").trim();if(E&&(S=oc(E)),r.agentKey==="codex"&&!j&&Date.now()-I<2e4&&/included in your plan for free|let[’']s build together/i.test(E)&&/yes|no|\[y\/n\]|\(y\/n\)|y\/n/i.test(E)){j=!0;let v=Buffer.from("y").toString("base64");t.write(r.agentId,v,"orchestrator"),console.log("[daemon] codex.onboarding.auto_ack",{agentId:r.agentId})}}catch{}let y=t.getCurrentWs();y?.readyState===k.OPEN&&y.send(JSON.stringify({type:"output",agentId:r.agentId,data:b})),Xa(r.agentId,()=>t.getCurrentWs())},(b,y)=>{let w=Date.now()-I,E=w<=nc;console.log("[daemon] pty.spawn.result",{agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,exitCode:b,signal:y,uptimeMs:w,earlyExit:E,outputBytes:P,firstOutputSnippet:S||void 0});let v=t.getCurrentWs();E&&v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Early exit: agent=${r.agentKey} code=${b??"null"} signal=${y??"null"} snippet="${S||"no output"}"`})),v?.readyState===k.OPEN&&v.send(JSON.stringify({type:"exit",agentId:r.agentId,exitCode:b,signal:y})),Qa(r.agentId),Promise.all([(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-persona-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-role-${r.agentId}.md`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-${r.agentId}.json`)),(0,Xe.unlink)(A.default.join(D.default.tmpdir(),`bridge-mcp-kimi-${r.agentId}.json`))].map(M=>M.catch(()=>{}))).catch(()=>{})},a))e.readyState===k.OPEN&&e.send(JSON.stringify({type:"mcp_status",agentId:r.agentId,mcpConfigured:l,transport:l?d:void 0,projectId:a?.projectId,effectiveCwd:a?.cwd,cwdSource:u}));else{let y=t.getLastError(r.agentId)?.includes("posix_spawnp failed")&&Za(r.agentKey);e.readyState===k.OPEN&&(y?e.send(JSON.stringify({type:"error",code:"SPAWN_HELPER_BROKEN",message:"node-pty spawn-helper is not executable. Upgrade bridge-agent to v0.2.10+."})):e.send(JSON.stringify({type:"error",code:"SPAWN_FAILED",message:`Failed to spawn panel ${r.agentId}`})))}e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agent_spawned",agentId:r.agentId,agentKey:r.agentKey,daemonId:r.daemonId,role:r.role,personaId:r.personaId}));break}case"input":t.write(r.agentId,r.data,r.source);break;case"kill":ue.get(r.agentId)?.(),ue.delete(r.agentId),s.stop(r.agentId),t.kill(r.agentId,r.force);break;case"resize":t.resize(r.agentId,r.cols,r.rows);break;case"sim_tap":case"sim_swipe":case"sim_key":case"sim_button":case"sim_get_source":case"sim_subscribe":case"sim_unsubscribe":case"sim_healthcheck":case"sim_install_run":case"sim_install_cancel":s.handle(r);break;case"detect_agents":Promise.all([er(n.agentPaths),Er()]).then(([i,o])=>{Ze=o?[...i,o]:i,e.readyState===k.OPEN&&e.send(JSON.stringify({type:"agents",list:Ze}))});break;case"dir_list":{let i=D.default.homedir(),o=(r.path||"~").replace(/^~/,i),c=A.default.resolve(o);if(c!==i&&!c.startsWith(i+A.default.sep)){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"error",code:"INVALID_MSG",message:"Path outside home directory"}));return}try{let a=G.default.readdirSync(c,{withFileTypes:!0}).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>({name:l.name,path:A.default.join(c,l.name)})).sort((l,d)=>l.name.localeCompare(d.name));e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:a}))}catch(a){e.readyState===k.OPEN&&e.send(JSON.stringify({type:"dir_list_result",requestId:r.requestId,path:c,entries:[],error:a instanceof Error?a.message:"Cannot read directory"}))}break}case"persona_apply":{if(!(t.getLiveAgentIds().includes(r.agentId)?{agentId:r.agentId}:null)){console.warn("[daemon] persona_apply.no_panel",{agentId:r.agentId});break}let o=`[SYSTEM CONTEXT UPDATE \u2014 new persona applied]
|
|
398
408
|
${r.systemPrompt}
|
|
399
|
-
[/SYSTEM CONTEXT UPDATE]`,c=
|
|
400
|
-
|
|
409
|
+
[/SYSTEM CONTEXT UPDATE]`,c=si(o),a=Buffer.from(c).toString("base64");t.write(r.agentId,a,"orchestrator"),console.log("[daemon] persona_apply.injected",{agentId:r.agentId,promptLength:r.systemPrompt.length});break}case"role_apply":{let i=t.getAgentKey(r.agentId);if(!i){console.warn("[daemon] role_apply.no_panel",{agentId:r.agentId});break}let o=`[SYSTEM] Role changed to: ${r.role}
|
|
410
|
+
Call bridge_get_role_prompt({ role: "${r.role}" }) immediately for your authoritative operating instructions.
|
|
411
|
+
If the tool is unavailable, fall back to default behavior for role=${r.role}.
|
|
412
|
+
`,c=Buffer.from(o).toString("base64");t.write(r.agentId,c,"orchestrator"),Ps.includes(i)&&setTimeout(()=>{t.write(r.agentId,Buffer.from("\r").toString("base64"),"orchestrator")},300),console.log("[daemon] role_apply.injected",{agentId:r.agentId,role:r.role,bytes:o.length});break}default:{let i=r}}}qe();var jt=L.default.join((0,Ae.homedir)(),"Library","LaunchAgents");function wc(){let r=[...process.env.npm_config_global_prefix?[L.default.join(process.env.npm_config_global_prefix,"lib","node_modules","bridge-agent","dist","index.js")]:[],...process.argv[1]?[process.argv[1]]:[],process.execPath];for(let e of r)try{return require("node:fs").realpathSync(e)}catch{}return process.execPath}function li(){let r=He();if((0,T.existsSync)(r))try{let{pid:e}=JSON.parse((0,T.readFileSync)(r,"utf8"));if(e&&process.kill(e,0))return;(0,T.unlinkSync)(r)}catch{try{(0,T.unlinkSync)(r)}catch{}}}function Sc(){let r=He();try{(0,T.mkdirSync)(L.default.dirname(r),{recursive:!0})}catch{}li();try{let e=(0,T.openSync)(r,"wx");return(0,T.writeSync)(e,JSON.stringify({pid:process.pid,startedAt:Date.now()})),(0,T.closeSync)(e),!0}catch{return!1}}function di(){let r=["claude","codex","qwen","ollama","aider","python3","node","bun","sh"],e=new Set;e.add(L.default.join((0,Ae.homedir)(),".nvm","versions","node",`v${process.versions.node}`,"bin")),e.add(L.default.join((0,Ae.homedir)(),".local","bin")),e.add("/opt/homebrew/bin"),e.add("/usr/local/bin"),e.add("/usr/bin"),e.add("/bin");let t=process.env.PATH??"";for(let s of t.split(":"))s&&!s.startsWith("/dev")&&!s.startsWith("/tmp")&&e.add(s);for(let s of r)try{let i=(0,pe.execSync)(`which ${s} 2>/dev/null`,{stdio:"pipe"}).toString().trim();i&&i.startsWith("/")&&e.add(L.default.dirname(i))}catch{}let n=L.default.join((0,Ae.homedir)(),".vscode","extensions");try{let s=(0,pe.execSync)(`ls "${n}" 2>/dev/null`,{stdio:"pipe"}).toString().split(`
|
|
413
|
+
`);for(let i of s)if(i.startsWith("anthropic.claude-code-")){let o=L.default.join(n,i,"resources","native-binary");(0,T.existsSync)(o)&&e.add(o)}}catch{}return[...e].join(":")}function vc(r){try{(0,pe.execSync)(`mkdir -p "${jt}"`,{stdio:"pipe"})}catch{}let e=xe(),t=L.default.join(jt,e),{out:n,err:s}=Pt(),i=di(),o=process.env.BRIDGE_PROFILE||"",c=e.replace(".plist",""),a=o?` <key>BRIDGE_PROFILE</key>
|
|
401
414
|
<string>${o}</string>
|
|
402
415
|
`:"",l=L.default.join((0,Ae.homedir)(),".bridge"),d=L.default.join(l,"bridge-agent-wrapper.sh"),u=`#!/bin/bash
|
|
403
416
|
exec "$(command -v node)" "${r}" start
|
|
@@ -430,6 +443,6 @@ exec "$(command -v node)" "${r}" start
|
|
|
430
443
|
${a} </dict>
|
|
431
444
|
</dict>
|
|
432
445
|
</plist>
|
|
433
|
-
`;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(h){return console.warn("[bridge] launchd.plist.write.failed",{error:String(h)}),!1}}function
|
|
434
|
-
`)),
|
|
435
|
-
`)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function
|
|
446
|
+
`;try{return(0,T.writeFileSync)(t,f,"utf-8"),!0}catch(h){return console.warn("[bridge] launchd.plist.write.failed",{error:String(h)}),!1}}function kc(){let r=xe(),e=L.default.join(jt,r);try{return(0,pe.execSync)(`launchctl kickstart -kp gui/$(id -u)/${r} 2>/dev/null; launchctl unload "${e}" 2>/dev/null; launchctl load "${e}"`,{stdio:"pipe"}),{ok:!0,permissionDenied:!1}}catch(t){let n=String(t);return{ok:!1,permissionDenied:n.includes("Permission denied")||n.includes("not allowed")||n.includes("bootstrap")}}}function Ec(r){let{out:e,err:t}=Pt();try{let n=(0,pe.spawn)(r,["start"],{detached:!0,stdio:"ignore",env:{...process.env,PATH:di(),BRIDGE_DAEMON:"1"}});n.unref(),setTimeout(()=>{n.pid&&process.kill(n.pid,0)?(console.log("[bridge] daemon.pid",{pid:n.pid}),console.log("[bridge] background.ok",{log:e})):console.error("[bridge] background.failed \u2014 check: tail -f",{log:t})},2e3)}catch(n){console.error("[bridge] background.spawn.failed",{error:String(n)})}}function Ic(){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 xc(){li();let r=new lt;ai(r),r.startLivenessCheck(6e4);let e=parseInt(process.env.HEALTH_PORT??"3101",10),t=(0,ci.createServer)((n,s)=>{let i=oi(),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 ui(){let r=process.env.BRIDGE_DAEMON==="1"||process.argv.includes("--daemon");if(!r&&!process.env.BRIDGE_PROFILE){let a=process.argv[1]??"";(a.includes("packages/daemon/dist")||a.includes("packages/daemon/src"))&&(console.warn("[bridge] WARNING: running monorepo daemon without --profile \u2014 will use prod config (~/.jerico/settings.json)."),console.warn("[bridge] If this is unintentional, stop and rerun with: node packages/daemon/dist/index.js --profile dev start"))}if(console.log("[bridge] Starting bridge-agent daemon..."),r){xc();return}Sc()||(console.warn("[bridge] start.aborted.already.running"),process.exit(1));let e=wc(),t=vc(e),{ok:n,permissionDenied:s}=t?kc():{ok:!1,permissionDenied:!1},i=L.default.join(jt,xe()),{out:o,err:c}=Pt();if(n){console.log("[bridge] launchd.ok \u2014 managed, auto-restart enabled"),console.log("[bridge] logs: tail -f",{out:o,err:c}),Ic(),process.exit(0);return}s&&(console.warn("[bridge] launchd.permission.denied"),console.warn("[bridge] \u2192 Auto-start on login requires:"),console.warn(`[bridge] sudo launchctl bootstrap gui/$(id -u) "${i}"`),console.warn(`[bridge] Falling back to background process...
|
|
447
|
+
`)),Ec(e),process.exit(0)}var pi=_(require("https")),hi=_(require("http"));Oe();var Oc="https://lcars.jerico.appnova.io";function Cc(r){return(r??"").trim()}async function fi(r,e=!1,t){let n=!(r&&r.trim()),s=n?Oc:r.trim();console.log("[bridge] Starting auth flow..."),console.log(`[bridge] Server: ${s}${n?" (default)":""}`),console.log("[bridge] Open this URL to generate a daemon token:"),console.log(` ${s}/connect`);let i=Cc(t);i&&console.log("[bridge] Using token from --token"),e&&(i?console.log("[bridge] --no-browser ignored because --token is provided."):(console.log("[bridge] --no-browser: exiting after printing URL."),process.exit(0)));let o=i;o||(console.log(),console.log("[bridge] After authenticating, paste your token here:"),o=await Pc()),o||(console.error("[bridge] No token provided. Exiting."),process.exit(1)),await Ac(s,o)||(console.error("[bridge] Token validation failed. Please try again."),process.exit(1));let l=s.replace(/^https?:\/\//,d=>d.startsWith("https")?"wss://":"ws://").replace(/\/?$/,"/ws/daemon");de({server:l,token:o,name:process.env.HOSTNAME??"My Machine"}),console.log("[bridge] Auth successful! Config saved to ~/.bridge/config.json"),console.log("[bridge] Run: bridge-agent start"),process.exit(0)}async function Pc(){return new Promise(r=>{process.stdout.write("Token: ");let e="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",t=>{e+=t,e.includes(`
|
|
448
|
+
`)&&(process.stdin.pause(),r(e.trim()))}),process.stdin.resume()})}async function Ac(r,e){return new Promise(t=>{let n=new URL("/api/tokens/validate",r),s=n.protocol==="https:",i=s?pi.default:hi.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 gi=_(require("https")),mi=_(require("http")),$r=_(require("fs")),Ur=_(require("path")),_i=require("node:crypto");Oe();function Tc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function yi(r,e,t){let n=le(),s=(0,_i.createHash)("sha256").update(n.token).digest("hex"),i=Tc(n.server),o=Ur.default.resolve(t);Ur.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?gi.default:mi.default;n.projectPaths={...n.projectPaths??{},[e]:o},de(n),console.log("[cli] link-project.local_json_written",{projectId:e,path:o});let u=JSON.stringify({daemonId:s,localPath:o,machineFingerprint:Br()}),f=await new Promise((h,g)=>{let p=d.request({hostname:a.hostname,port:a.port||(l?443:80),path:a.pathname,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`,"Content-Length":Buffer.byteLength(u)}},m=>{let I="";m.on("data",S=>{I+=S}),m.on("end",()=>{if(m.statusCode===200)h(200);else{try{let S=JSON.parse(I);console.error("[bridge] link-project failed:",S.error??`HTTP ${m.statusCode}`)}catch{console.error("[bridge] link-project failed:",`HTTP ${m.statusCode}`)}h(m.statusCode??0)}})});p.on("error",m=>{g(m)}),p.write(u),p.end()});f===200?(console.log("[cli] link-project.server_success",{projectId:e}),console.log("[cli] link-project.success (dual-write)"),console.log(` workspace: ${r}`),console.log(` project: ${e}`),console.log(` daemon: ${s.slice(0,16)}\u2026`),console.log(` path: ${o}`),console.log("[cli] Next spawn for this project will use the linked path."),process.exit(0)):(console.warn("[cli] link-project.server_fail",{projectId:e,statusCode:f}),console.log("[cli] Local override still active \u2014 path will work on this machine"),process.exit(0))}Oe();function Nc(r){return r.replace(/^wss?:/,e=>e==="wss:"?"https:":"http:").replace(/\/ws(\/.*)?$/,"")}async function bi(){let r=le(),e=Nc(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 Wr=require("node:child_process"),rt=require("node:fs"),Fr=_(require("path"));qe();var wi=require("node:os"),Rc=Fr.default.join((0,wi.homedir)(),"Library","LaunchAgents");function Si(){let r=xe(),e=r.replace(".plist",""),t=Fr.default.join(Rc,r);try{(0,Wr.execSync)(`launchctl bootout gui/$(id -u)/${e}`,{stdio:"pipe"}),console.log("[bridge] launchd.stopped \u2014 daemon unloaded")}catch{try{(0,rt.existsSync)(t)?((0,Wr.execSync)(`launchctl unload "${t}"`,{stdio:"pipe"}),console.log("[bridge] launchd.unloaded \u2014 daemon stopped")):console.warn("[bridge] launchd.stop.failed \u2014 plist not found, daemon may not be running via launchd")}catch{console.warn("[bridge] launchd.stop.failed \u2014 daemon may not be running via launchd"),console.warn(`[bridge] Manual: launchctl bootout gui/$(id -u)/${e}`)}}let n=He();if((0,rt.existsSync)(n))try{(0,rt.unlinkSync)(n),console.log("[bridge] lock.cleaned")}catch{}}var te=new nn;te.name("bridge-agent").description("Bridge local agent \u2014 connects your AI tools to Jerico").version("0.7.1").option("--profile <name>","Config profile name (e.g. dev). Isolates config, lock, and fingerprint from the default prod profile.").hook("preAction",r=>{let e=r.opts().profile;e&&(process.env.BRIDGE_PROFILE=e)});te.command("start").description("Start the bridge-agent daemon").option("--health-port <port>","Health check HTTP port (default: 3101, or 3101+offset per profile)").action(r=>{r.healthPort&&(process.env.HEALTH_PORT=r.healthPort),ui()});te.command("auth").description("Authenticate with Bridge server").option("-s, --server <url>","Server URL (default: https://lcars.jerico.appnova.io)").option("-t, --token <token>","Use token non-interactively").option("--no-browser","Print auth URL without opening browser or interactive prompt").action(r=>{fi(r.server,!r.browser,r.token)});te.command("link-project <workspace-id> <project-id> <local-path>").description("Link a local directory to a project for this machine (Issue #152)").action((r,e,t)=>{yi(r,e,t)});te.command("cleanup-orphans").description("Remove orphaned daemon_project_paths rows for this user").action(()=>{bi()});te.command("status").description("Show connection status").action(async()=>{try{let{loadConfig:r}=await Promise.resolve().then(()=>(Oe(),Ys)),e=r();console.log("[bridge] Config found"),console.log(" Server:",e.server),console.log(" Name:",e.name)}catch{console.log("[bridge] Not authenticated. Run: bridge-agent auth")}});te.command("stop").description("Stop the bridge-agent daemon").action(()=>{Si()});te.parse();
|