comfyui-mcp 0.52.47 → 0.52.49
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/README.md +1 -1
- package/dist/boot.js +5 -4
- package/dist/boot.js.map +1 -1
- package/dist/orchestrator/get-errors-audit.js +14 -7
- package/dist/orchestrator/get-errors-audit.js.map +1 -1
- package/dist/orchestrator/index.js +94 -298
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/panel-mcp-http.js +2 -2
- package/dist/orchestrator/panel-mcp-http.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +114 -7
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/orchestrator/promoted-widget.js +49 -0
- package/dist/orchestrator/promoted-widget.js.map +1 -1
- package/dist/orchestrator/run-completion-journal.js +5 -0
- package/dist/orchestrator/run-completion-journal.js.map +1 -1
- package/dist/orchestrator/run-completion-watchdog.js +63 -14
- package/dist/orchestrator/run-completion-watchdog.js.map +1 -1
- package/dist/services/bridge-port-reclaim.js +340 -0
- package/dist/services/bridge-port-reclaim.js.map +1 -0
- package/dist/services/bridge-ports.js +78 -0
- package/dist/services/bridge-ports.js.map +1 -0
- package/dist/services/listener-ownership.js +30 -0
- package/dist/services/listener-ownership.js.map +1 -1
- package/dist/services/panel-launcher.js +20 -4
- package/dist/services/panel-launcher.js.map +1 -1
- package/dist/services/secure-bridge.js +8 -5
- package/dist/services/secure-bridge.js.map +1 -1
- package/dist/services/self-restart.js +24 -5
- package/dist/services/self-restart.js.map +1 -1
- package/dist/services/tunnel.js +11 -2
- package/dist/services/tunnel.js.map +1 -1
- package/docker/runpod/README.md +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
// Reclaim the panel bridge port — but only when the holder is ours (#2030).
|
|
2
|
+
//
|
|
3
|
+
// `tryReclaimBridgePort` used to treat any pid on 9180 as an orphaned
|
|
4
|
+
// comfyui-mcp session and offer to `taskkill /T /F` it. Logitech G HUB's
|
|
5
|
+
// `lghub_agent` sits on that port on most gaming/creator desktops; killing it
|
|
6
|
+
// takes down the user's mouse software and the updater respawns it, after which
|
|
7
|
+
// the straggler sweep killed whatever held the port next.
|
|
8
|
+
//
|
|
9
|
+
// Protocol probe first. No panel handshake → not ours → no prompt, no kill, no
|
|
10
|
+
// sweep. The classification lives in listener-ownership.ts so a definite
|
|
11
|
+
// `ours` / `not-ours` can only be minted from evidence.
|
|
12
|
+
import { execFileSync } from "node:child_process";
|
|
13
|
+
import { readFileSync } from "node:fs";
|
|
14
|
+
import { tmpdir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import readline from "node:readline";
|
|
17
|
+
import { classifyBridgeHolder, } from "./listener-ownership.js";
|
|
18
|
+
import { probePanelOrchestrator } from "./panel-launcher.js";
|
|
19
|
+
import { DEFAULT_PANEL_BRIDGE_PORT, LEGACY_PANEL_BRIDGE_PORT } from "./bridge-ports.js";
|
|
20
|
+
import { detectInstallMode } from "./self-update.js";
|
|
21
|
+
import { logger } from "../utils/logger.js";
|
|
22
|
+
const PORT_PROBE_TIMEOUT_MS = 5000;
|
|
23
|
+
export function orchLockPath(port) {
|
|
24
|
+
return join(tmpdir(), `comfyui-mcp-panel-orch-${port}.json`);
|
|
25
|
+
}
|
|
26
|
+
export function pidExists(pid) {
|
|
27
|
+
try {
|
|
28
|
+
process.kill(pid, 0);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return err.code === "EPERM";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function pidListeningOnPort(port) {
|
|
36
|
+
try {
|
|
37
|
+
if (process.platform === "win32") {
|
|
38
|
+
const out = execFileSync("netstat", ["-ano", "-p", "tcp"], {
|
|
39
|
+
encoding: "utf8",
|
|
40
|
+
timeout: PORT_PROBE_TIMEOUT_MS,
|
|
41
|
+
});
|
|
42
|
+
for (const line of out.split(/\r?\n/)) {
|
|
43
|
+
const m = line.match(/TCP\s+\S+:(\d+)\s+\S+\s+LISTENING\s+(\d+)\s*$/i);
|
|
44
|
+
if (m && Number(m[1]) === port)
|
|
45
|
+
return Number(m[2]);
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const out = execFileSync("lsof", ["-ti", `tcp:${port}`, "-s", "tcp:LISTEN"], {
|
|
50
|
+
encoding: "utf8",
|
|
51
|
+
timeout: PORT_PROBE_TIMEOUT_MS,
|
|
52
|
+
});
|
|
53
|
+
const pid = Number(out.trim().split(/\s+/)[0]);
|
|
54
|
+
return Number.isInteger(pid) && pid > 0 ? pid : null;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function processNameOf(pid) {
|
|
61
|
+
try {
|
|
62
|
+
if (process.platform === "win32") {
|
|
63
|
+
const out = execFileSync("tasklist", ["/FI", `PID eq ${pid}`, "/FO", "CSV", "/NH"], {
|
|
64
|
+
encoding: "utf8",
|
|
65
|
+
timeout: PORT_PROBE_TIMEOUT_MS,
|
|
66
|
+
});
|
|
67
|
+
return /^"([^"]+)"/m.exec(out)?.[1] ?? "unknown";
|
|
68
|
+
}
|
|
69
|
+
return (execFileSync("ps", ["-p", String(pid), "-o", "comm="], {
|
|
70
|
+
encoding: "utf8",
|
|
71
|
+
timeout: PORT_PROBE_TIMEOUT_MS,
|
|
72
|
+
}).trim() || "unknown");
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return "unknown";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function readOrchestratorLock(lockPath) {
|
|
79
|
+
try {
|
|
80
|
+
const raw = JSON.parse(readFileSync(lockPath, "utf8"));
|
|
81
|
+
return raw && typeof raw === "object" ? raw : null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function killProcessTreeCrossPlatform(pid, mode) {
|
|
88
|
+
if (process.platform === "win32") {
|
|
89
|
+
execFileSync("taskkill", ["/PID", String(pid), "/T", "/F"], { stdio: "ignore" });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const sig = mode === "term" ? "SIGTERM" : "SIGKILL";
|
|
93
|
+
try {
|
|
94
|
+
execFileSync("pkill", [`-${sig.replace("SIG", "")}`, "-P", String(pid)], { stdio: "ignore" });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// no children / pkill absent — the direct signal below still applies
|
|
98
|
+
}
|
|
99
|
+
process.kill(pid, sig);
|
|
100
|
+
}
|
|
101
|
+
/** Copy-paste "free this port" commands — LAST RESORT, and ONLY when the holder is ours. */
|
|
102
|
+
export function portKillHint(port) {
|
|
103
|
+
const ps = `Get-NetTCPConnection -LocalPort ${port} -State Listen | % { taskkill /PID $_.OwningProcess /T /F }`;
|
|
104
|
+
const sh = `lsof -ti tcp:${port} -s tcp:listen | xargs -r kill -9`;
|
|
105
|
+
return process.platform === "win32"
|
|
106
|
+
? `To free the port manually:\n PowerShell: ${ps}\n bash/zsh: ${sh}`
|
|
107
|
+
: `To free the port manually:\n bash/zsh: ${sh}\n PowerShell: ${ps}`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* What to tell the user when the holder is NOT comfyui-mcp. Names the process,
|
|
111
|
+
* says we will not kill it, and points at the override / new default.
|
|
112
|
+
*/
|
|
113
|
+
export function foreignBridgeHolderAdvice(port, processName) {
|
|
114
|
+
const name = processName || "unknown";
|
|
115
|
+
return (`[panel-orchestrator] port ${port} is held by "${name}" (pid listening, but it does not ` +
|
|
116
|
+
`speak the comfyui-mcp panel protocol) — that is not comfyui-mcp, so this process will not ` +
|
|
117
|
+
`stop it. Logitech G HUB (lghub_agent) is a known occupant of ${LEGACY_PANEL_BRIDGE_PORT}. ` +
|
|
118
|
+
`Leave that program running and set COMFYUI_MCP_BRIDGE_PORT to an unused port, or use the ` +
|
|
119
|
+
`new default ${DEFAULT_PANEL_BRIDGE_PORT}.`);
|
|
120
|
+
}
|
|
121
|
+
export function startupDeadlineHolderAdvice(opts) {
|
|
122
|
+
const { port, pid, ownership, processName } = opts;
|
|
123
|
+
if (ownership === "not-ours") {
|
|
124
|
+
const named = processName && processName !== "unknown" ? ` ("${processName}")` : "";
|
|
125
|
+
return (` Port ${port} is held by pid ${pid}${named}, which is not comfyui-mcp. Leave it running ` +
|
|
126
|
+
`and set COMFYUI_MCP_BRIDGE_PORT, or use the default ${DEFAULT_PANEL_BRIDGE_PORT}.`);
|
|
127
|
+
}
|
|
128
|
+
if (ownership === "ours") {
|
|
129
|
+
return ` Port ${port} is held by pid ${pid}; if that is an older comfyui-mcp, stop it and start this one again.`;
|
|
130
|
+
}
|
|
131
|
+
// Unconfirmed: name the situation, never instruct a kill. Logitech G HUB is
|
|
132
|
+
// the known occupant of 9180; offering taskkill here is the bug this exists
|
|
133
|
+
// to close.
|
|
134
|
+
return (` Port ${port} is held by pid ${pid}. It could not be confirmed as comfyui-mcp ` +
|
|
135
|
+
`(Logitech G HUB's lghub_agent is a known occupant of ${LEGACY_PANEL_BRIDGE_PORT}). ` +
|
|
136
|
+
`Leave it running and set COMFYUI_MCP_BRIDGE_PORT — the default bridge is now ` +
|
|
137
|
+
`${DEFAULT_PANEL_BRIDGE_PORT}.`);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Bind-failure text. `taskkill` / `kill -9` only when the holder is a definite
|
|
141
|
+
* `ours`. Foreign and unconfirmed name the situation and point at the override;
|
|
142
|
+
* they never offer to kill the process.
|
|
143
|
+
*/
|
|
144
|
+
export function bindFailureAdvice(port, assessment) {
|
|
145
|
+
if (assessment.ownership === "ours") {
|
|
146
|
+
return (`[panel-orchestrator] could not bind the panel bridge port — another comfyui-mcp owns it. ` +
|
|
147
|
+
`Free that port and restart the orchestrator. Override the port with COMFYUI_MCP_BRIDGE_PORT.\n` +
|
|
148
|
+
portKillHint(port));
|
|
149
|
+
}
|
|
150
|
+
if (assessment.ownership === "not-ours") {
|
|
151
|
+
return foreignBridgeHolderAdvice(port, assessment.processName);
|
|
152
|
+
}
|
|
153
|
+
return (`[panel-orchestrator] could not bind the panel bridge port — another process appears to own ` +
|
|
154
|
+
`it, but it could not be confirmed as comfyui-mcp. Leave whatever is listening alone and set ` +
|
|
155
|
+
`COMFYUI_MCP_BRIDGE_PORT (default ${DEFAULT_PANEL_BRIDGE_PORT}).`);
|
|
156
|
+
}
|
|
157
|
+
export async function probeComfyUi(url, timeoutMs = 3000) {
|
|
158
|
+
try {
|
|
159
|
+
const ctl = new AbortController();
|
|
160
|
+
const timer = setTimeout(() => ctl.abort(), timeoutMs);
|
|
161
|
+
const res = await fetch(new URL("system_stats", url.endsWith("/") ? url : `${url}/`), {
|
|
162
|
+
signal: ctl.signal,
|
|
163
|
+
});
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
return res.ok;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function promptYesNo(question) {
|
|
172
|
+
return new Promise((resolve) => {
|
|
173
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
174
|
+
rl.question(question, (answer) => {
|
|
175
|
+
rl.close();
|
|
176
|
+
resolve(/^y(es)?$/i.test(answer.trim()));
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const defaultAssessDeps = {
|
|
181
|
+
probe: (port) => probePanelOrchestrator(port),
|
|
182
|
+
pidListeningOnPort,
|
|
183
|
+
processNameOf,
|
|
184
|
+
readLock: readOrchestratorLock,
|
|
185
|
+
pidExists,
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Classify whoever is listening on `port`. Always probes the panel protocol;
|
|
189
|
+
* the lockfile is corroboration, never a license to kill a foreign holder.
|
|
190
|
+
*/
|
|
191
|
+
export async function assessBridgeHolder(port, lockPath, deps = {}) {
|
|
192
|
+
const d = { ...defaultAssessDeps, ...deps };
|
|
193
|
+
const lock = d.readLock(lockPath);
|
|
194
|
+
const lockPidRaw = typeof lock?.pid === "number" && Number.isInteger(lock.pid) && lock.pid > 0 ? lock.pid : null;
|
|
195
|
+
const lockPid = lockPidRaw && d.pidExists(lockPidRaw) ? lockPidRaw : null;
|
|
196
|
+
const portPid = d.pidListeningOnPort(port);
|
|
197
|
+
const pid = lockPid ?? portPid;
|
|
198
|
+
const processName = portPid ? d.processNameOf(portPid) : pid ? d.processNameOf(pid) : "unknown";
|
|
199
|
+
const speaksPanelProtocol = await d.probe(port);
|
|
200
|
+
const lockfileOursOrStale = lockPid == null || lockPid === portPid || (portPid == null && !d.pidExists(lockPid));
|
|
201
|
+
// Protocol is the kill gate. A failed pid lookup (netstat/lsof timeout, no
|
|
202
|
+
// lsof) must not throw away a failed probe: bind already lost, so something
|
|
203
|
+
// holds the port, and a silent/foreign TCP is not-ours even when we cannot
|
|
204
|
+
// name the pid. Restoring an `if (!pid) unclassified` early return reopens
|
|
205
|
+
// the G HUB taskkill one-liner (#2030).
|
|
206
|
+
const classified = classifyBridgeHolder({ speaksPanelProtocol, lockfileOursOrStale });
|
|
207
|
+
return {
|
|
208
|
+
...classified,
|
|
209
|
+
pid,
|
|
210
|
+
portPid,
|
|
211
|
+
lockPid,
|
|
212
|
+
processName,
|
|
213
|
+
lock,
|
|
214
|
+
speaksPanelProtocol,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
const defaultReclaimDeps = {
|
|
218
|
+
...defaultAssessDeps,
|
|
219
|
+
isTty: () => Boolean(process.stdin.isTTY && process.stdout.isTTY),
|
|
220
|
+
promptYesNo,
|
|
221
|
+
killProcessTree: killProcessTreeCrossPlatform,
|
|
222
|
+
probeComfyUi,
|
|
223
|
+
sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
|
|
224
|
+
now: () => Date.now(),
|
|
225
|
+
log: logger,
|
|
226
|
+
currentVersion: () => detectInstallMode().currentVersion ?? "unknown",
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* If the bridge port is held by a previous comfyui-mcp, offer (on a TTY) to
|
|
230
|
+
* stop it and retry the bind. If the holder does not speak the panel protocol:
|
|
231
|
+
* log that it is not ours and return without prompting or killing.
|
|
232
|
+
*/
|
|
233
|
+
export async function tryReclaimBridgePort(bridge, port, lockPath, deps = {}) {
|
|
234
|
+
const d = { ...defaultReclaimDeps, ...deps };
|
|
235
|
+
const assessment = await assessBridgeHolder(port, lockPath, d);
|
|
236
|
+
const empty = {
|
|
237
|
+
bound: false,
|
|
238
|
+
ownership: assessment.ownership,
|
|
239
|
+
processName: assessment.processName,
|
|
240
|
+
prompted: false,
|
|
241
|
+
killed: [],
|
|
242
|
+
};
|
|
243
|
+
if (!assessment.reclaimable || assessment.ownership === "not-ours") {
|
|
244
|
+
d.log.warn(foreignBridgeHolderAdvice(port, assessment.processName));
|
|
245
|
+
return empty;
|
|
246
|
+
}
|
|
247
|
+
if (!assessment.pid)
|
|
248
|
+
return empty;
|
|
249
|
+
if (!d.isTty())
|
|
250
|
+
return empty;
|
|
251
|
+
const pid = assessment.pid;
|
|
252
|
+
const lock = assessment.lock;
|
|
253
|
+
const myUrl = process.env.COMFYUI_URL || "http://127.0.0.1:8188";
|
|
254
|
+
let holderNote;
|
|
255
|
+
let detailNote = "";
|
|
256
|
+
if (assessment.lockPid) {
|
|
257
|
+
const myVersion = d.currentVersion();
|
|
258
|
+
const heldVersion = typeof lock?.version === "string" ? lock.version : "unknown";
|
|
259
|
+
const startedAt = typeof lock?.startedAt === "string" ? lock.startedAt : null;
|
|
260
|
+
holderNote =
|
|
261
|
+
heldVersion !== "unknown" && myVersion !== "unknown" && heldVersion !== myVersion
|
|
262
|
+
? `an older comfyui-mcp v${heldVersion} (this is v${myVersion})`
|
|
263
|
+
: `another comfyui-mcp v${heldVersion} session`;
|
|
264
|
+
const heldUrl = typeof lock?.comfyuiUrl === "string" ? lock.comfyuiUrl : null;
|
|
265
|
+
if (startedAt)
|
|
266
|
+
detailNote += `, started ${startedAt}`;
|
|
267
|
+
if (heldUrl) {
|
|
268
|
+
const alive = await d.probeComfyUi(heldUrl);
|
|
269
|
+
detailNote += `, driving ${heldUrl}${alive ? "" : " (NOT RESPONDING — likely a terminated pod / stale session)"}`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
holderNote = `another comfyui-mcp session ("${assessment.processName}")`;
|
|
274
|
+
}
|
|
275
|
+
d.log.warn(`[panel-orchestrator] port ${port} is already held by ${holderNote} — pid ${pid}${detailNote}.`);
|
|
276
|
+
const ok = await d.promptYesNo(`Stop it (and its whole process tree) and take over port ${port} for ${myUrl}? [y/N] `);
|
|
277
|
+
if (!ok) {
|
|
278
|
+
d.log.info(`[panel-orchestrator] leaving pid ${pid} alone.\n${portKillHint(port)}`);
|
|
279
|
+
return { ...empty, prompted: true };
|
|
280
|
+
}
|
|
281
|
+
const targets = [
|
|
282
|
+
...new Set([assessment.lockPid, assessment.portPid].filter((p) => p != null)),
|
|
283
|
+
];
|
|
284
|
+
d.log.info(`[panel-orchestrator] stopping pid${targets.length > 1 ? "s" : ""} ${targets.join(", ")} (and their process trees) to reclaim port ${port}…`);
|
|
285
|
+
const killed = [];
|
|
286
|
+
for (const t of targets) {
|
|
287
|
+
try {
|
|
288
|
+
d.killProcessTree(t, "term");
|
|
289
|
+
killed.push(t);
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
d.log.warn(`[panel-orchestrator] couldn't stop pid ${t}: ${err instanceof Error ? err.message : String(err)}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const deadline = d.now() + 5000;
|
|
296
|
+
while (d.now() < deadline && targets.some((t) => d.pidExists(t))) {
|
|
297
|
+
await d.sleep(200);
|
|
298
|
+
}
|
|
299
|
+
for (const t of targets) {
|
|
300
|
+
if (!d.pidExists(t))
|
|
301
|
+
continue;
|
|
302
|
+
try {
|
|
303
|
+
d.killProcessTree(t, "kill");
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// already gone
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Straggler sweep: only a process we can still prove is ours. A foreign
|
|
310
|
+
// respawn (G HUB's updater) must not be killed just because it grabbed the
|
|
311
|
+
// port we freed.
|
|
312
|
+
const straggler = d.pidListeningOnPort(port);
|
|
313
|
+
if (straggler && !targets.includes(straggler)) {
|
|
314
|
+
const stillOurs = await d.probe(port);
|
|
315
|
+
if (stillOurs) {
|
|
316
|
+
d.log.warn(`[panel-orchestrator] a new pid ${straggler} grabbed port ${port} — stopping it too.`);
|
|
317
|
+
try {
|
|
318
|
+
d.killProcessTree(straggler, "kill");
|
|
319
|
+
killed.push(straggler);
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// best-effort
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
d.log.warn(foreignBridgeHolderAdvice(port, d.processNameOf(straggler)));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
await d.sleep(300);
|
|
330
|
+
bridge.start();
|
|
331
|
+
const bound = await bridge.whenReady();
|
|
332
|
+
return {
|
|
333
|
+
bound,
|
|
334
|
+
ownership: assessment.ownership,
|
|
335
|
+
processName: assessment.processName,
|
|
336
|
+
prompted: true,
|
|
337
|
+
killed,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=bridge-port-reclaim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-port-reclaim.js","sourceRoot":"","sources":["../../src/services/bridge-port-reclaim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Panel-orchestrator port block (#2030).
|
|
2
|
+
//
|
|
3
|
+
// One constant (`DEFAULT_PANEL_BRIDGE_PORT` in panel-launcher.ts) is the bridge.
|
|
4
|
+
// Everything else is derived from it through `panelPortBlock` so a test can pin
|
|
5
|
+
// the map and a future default change cannot leave +1..+4 arithmetic behind.
|
|
6
|
+
//
|
|
7
|
+
// The new default COUNTS DOWN from 9199: counting up would put the panel HTTP-MCP
|
|
8
|
+
// on 9200 (Elasticsearch / IANA wap-wsp). 9180-era sessions keep the historical
|
|
9
|
+
// +1..+4 block so a phone paired on 9182 and a panel MCP on 9181 still work
|
|
10
|
+
// across the migration.
|
|
11
|
+
import { DEFAULT_PANEL_BRIDGE_PORT, LEGACY_PANEL_BRIDGE_PORT, } from "./panel-launcher.js";
|
|
12
|
+
export { DEFAULT_PANEL_BRIDGE_PORT, LEGACY_PANEL_BRIDGE_PORT };
|
|
13
|
+
/**
|
|
14
|
+
* Derive the four sibling ports from the bridge.
|
|
15
|
+
*
|
|
16
|
+
* 9180 keeps the pre-#2030 +1..+4 layout (pairing 9182 still answers). Every
|
|
17
|
+
* other bridge, including the new default 9199, counts down.
|
|
18
|
+
*/
|
|
19
|
+
export function panelPortBlock(bridgePort) {
|
|
20
|
+
if (bridgePort === LEGACY_PANEL_BRIDGE_PORT) {
|
|
21
|
+
return {
|
|
22
|
+
bridge: bridgePort,
|
|
23
|
+
panelMcp: bridgePort + 1,
|
|
24
|
+
pairing: bridgePort + 2,
|
|
25
|
+
console: bridgePort + 3,
|
|
26
|
+
tunnel: bridgePort + 4,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
bridge: bridgePort,
|
|
31
|
+
panelMcp: bridgePort - 1,
|
|
32
|
+
pairing: bridgePort - 2,
|
|
33
|
+
console: bridgePort - 3,
|
|
34
|
+
tunnel: bridgePort - 4,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function parsedPort(raw) {
|
|
38
|
+
if (raw == null || String(raw).trim() === "")
|
|
39
|
+
return undefined;
|
|
40
|
+
const n = Number(raw);
|
|
41
|
+
if (!Number.isInteger(n) || n <= 0 || n > 65535)
|
|
42
|
+
return undefined;
|
|
43
|
+
return n;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The bridge port this process should bind.
|
|
47
|
+
*
|
|
48
|
+
* 1. `COMFYUI_MCP_BRIDGE_PORT` is a pin — honour it (including 9180).
|
|
49
|
+
* 2. An unpinned self-restart (`COMFYUI_MCP_RESTART_GEN` > 0) was spawned by a
|
|
50
|
+
* predecessor that copied `process.env` without pinning. That predecessor
|
|
51
|
+
* was compiled against 9180; stay there so the child's bind-retry rides
|
|
52
|
+
* the parent's release instead of silently adopting 9199 and stranding
|
|
53
|
+
* the panel.
|
|
54
|
+
* 3. A fresh launch with no pin binds the new default.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveBridgePort(env = process.env) {
|
|
57
|
+
const pinned = parsedPort(env.COMFYUI_MCP_BRIDGE_PORT);
|
|
58
|
+
if (pinned != null)
|
|
59
|
+
return pinned;
|
|
60
|
+
const gen = Number(env.COMFYUI_MCP_RESTART_GEN ?? "0");
|
|
61
|
+
if (Number.isInteger(gen) && gen > 0)
|
|
62
|
+
return LEGACY_PANEL_BRIDGE_PORT;
|
|
63
|
+
return DEFAULT_PANEL_BRIDGE_PORT;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Write the *effective* bound port into `env` so a child (auto-update restart,
|
|
67
|
+
* crash respawn that inherits this environment, `panel_restart_comfyui`
|
|
68
|
+
* relaunch) never re-derives a new compiled default.
|
|
69
|
+
*/
|
|
70
|
+
export function pinBoundBridgePort(port, env = process.env) {
|
|
71
|
+
env.COMFYUI_MCP_BRIDGE_PORT = String(port);
|
|
72
|
+
return env;
|
|
73
|
+
}
|
|
74
|
+
/** Loopback URL the panel dials. Advertised on `advertise_bridge` as `local_url`. */
|
|
75
|
+
export function localBridgeUrl(port) {
|
|
76
|
+
return `ws://127.0.0.1:${port}`;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=bridge-ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-ports.js","sourceRoot":"","sources":["../../src/services/bridge-ports.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,6EAA6E;AAC7E,EAAE;AACF,kFAAkF;AAClF,gFAAgF;AAChF,4EAA4E;AAC5E,wBAAwB;AAExB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,CAAC;AAU/D;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,UAAU,KAAK,wBAAwB,EAAE,CAAC;QAC5C,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,UAAU,GAAG,CAAC;YACxB,OAAO,EAAE,UAAU,GAAG,CAAC;YACvB,OAAO,EAAE,UAAU,GAAG,CAAC;YACvB,MAAM,EAAE,UAAU,GAAG,CAAC;SACvB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,UAAU,GAAG,CAAC;QACxB,OAAO,EAAE,UAAU,GAAG,CAAC;QACvB,OAAO,EAAE,UAAU,GAAG,CAAC;QACvB,MAAM,EAAE,UAAU,GAAG,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvD,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,wBAAwB,CAAC;IACtE,OAAO,yBAAyB,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,kBAAkB,IAAI,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -402,4 +402,34 @@ export function classifyListenerOwnership(input) {
|
|
|
402
402
|
return classified("not-ours");
|
|
403
403
|
return classified("ours");
|
|
404
404
|
}
|
|
405
|
+
/**
|
|
406
|
+
* Is the process holding the panel bridge ours to stop?
|
|
407
|
+
*
|
|
408
|
+
* `not-ours` — it does not speak the panel protocol. NEVER prompt, NEVER
|
|
409
|
+
* `taskkill`, NEVER sweep the port. Same shape as #814: do not
|
|
410
|
+
* stop a process we cannot prove is ours and cannot relaunch.
|
|
411
|
+
* `ours` — it answered the protocol. Today's reclaim flow (prompt, then
|
|
412
|
+
* tree-kill) applies; the lockfile being missing/stale is the
|
|
413
|
+
* orphaned-session case that reclaim exists for.
|
|
414
|
+
*
|
|
415
|
+
* Supervision is minted here for the same reason ownership is: a definite
|
|
416
|
+
* verdict has to come from this function. A protocol speaker is an abandoned
|
|
417
|
+
* orchestrator (nothing but the user will bring it back). A foreign holder is
|
|
418
|
+
* `unconfirmed` — we did not walk its ancestry, and we do not need to, because
|
|
419
|
+
* `not-ours` already refuses the stop.
|
|
420
|
+
*/
|
|
421
|
+
export function classifyBridgeHolder(evidence) {
|
|
422
|
+
if (!evidence.speaksPanelProtocol) {
|
|
423
|
+
return {
|
|
424
|
+
ownership: classified("not-ours"),
|
|
425
|
+
supervision: classifiedSupervision("unconfirmed"),
|
|
426
|
+
reclaimable: false,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
ownership: classified("ours"),
|
|
431
|
+
supervision: classifiedSupervision("abandoned"),
|
|
432
|
+
reclaimable: true,
|
|
433
|
+
};
|
|
434
|
+
}
|
|
405
435
|
//# sourceMappingURL=listener-ownership.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener-ownership.js","sourceRoot":"","sources":["../../src/services/listener-ownership.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listener-ownership.js","sourceRoot":"","sources":["../../src/services/listener-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,9 @@ import { fileURLToPath } from "node:url";
|
|
|
17
17
|
export const PANEL_LAUNCHER_PROTOCOL = 1;
|
|
18
18
|
export const PANEL_LAUNCHER_LABEL = "io.artokun.comfyui-mcp-launcher";
|
|
19
19
|
export const PANEL_LAUNCHER_TASK = "ComfyUI MCP Launcher";
|
|
20
|
-
export const DEFAULT_PANEL_BRIDGE_PORT =
|
|
20
|
+
export const DEFAULT_PANEL_BRIDGE_PORT = 9199;
|
|
21
|
+
/** Pre-#2030 default. Logitech G HUB (`lghub_agent`) occupies 9180 on many desktops. */
|
|
22
|
+
export const LEGACY_PANEL_BRIDGE_PORT = 9180;
|
|
21
23
|
export function panelLauncherPaths(home = homedir(),
|
|
22
24
|
// Derive from `home`, not the process environment: a caller passing only a
|
|
23
25
|
// home (test harness, sandbox, per-user install) must get every artifact
|
|
@@ -408,7 +410,7 @@ function serverFrameTexts(buffer) {
|
|
|
408
410
|
return out;
|
|
409
411
|
}
|
|
410
412
|
/** Proves that the bridge speaks the ComfyUI MCP panel protocol, rather than
|
|
411
|
-
* treating any process occupying port
|
|
413
|
+
* treating any process occupying the port as the orchestrator. */
|
|
412
414
|
export function probePanelOrchestrator(port = Number(process.env.COMFYUI_MCP_BRIDGE_PORT) || DEFAULT_PANEL_BRIDGE_PORT, timeoutMs = 1200) {
|
|
413
415
|
return new Promise((resolve) => {
|
|
414
416
|
const key = randomBytes(16).toString("base64");
|
|
@@ -465,6 +467,20 @@ export function probePanelOrchestrator(port = Number(process.env.COMFYUI_MCP_BRI
|
|
|
465
467
|
});
|
|
466
468
|
});
|
|
467
469
|
}
|
|
470
|
+
/**
|
|
471
|
+
* Probe the port this process is pinned to, or — with no pin — the new default
|
|
472
|
+
* and then the 9180-era default. A live 9180 session must not look "not
|
|
473
|
+
* running" to the launcher just because this build's compiled default moved.
|
|
474
|
+
*/
|
|
475
|
+
export async function probeAnyPanelOrchestrator(timeoutMs = 1200) {
|
|
476
|
+
const pinned = Number(process.env.COMFYUI_MCP_BRIDGE_PORT);
|
|
477
|
+
if (Number.isInteger(pinned) && pinned > 0) {
|
|
478
|
+
return probePanelOrchestrator(pinned, timeoutMs);
|
|
479
|
+
}
|
|
480
|
+
if (await probePanelOrchestrator(DEFAULT_PANEL_BRIDGE_PORT, timeoutMs))
|
|
481
|
+
return true;
|
|
482
|
+
return probePanelOrchestrator(LEGACY_PANEL_BRIDGE_PORT, timeoutMs);
|
|
483
|
+
}
|
|
468
484
|
export function terminalCommandForPlatform(platform = process.platform, env = process.env, executableExists = existsSync) {
|
|
469
485
|
if (platform === "win32") {
|
|
470
486
|
return {
|
|
@@ -539,7 +555,7 @@ export async function startPanelLauncherBroker(home = homedir()) {
|
|
|
539
555
|
let starting = null;
|
|
540
556
|
const ensureRunning = () => {
|
|
541
557
|
if (!starting) {
|
|
542
|
-
starting =
|
|
558
|
+
starting = probeAnyPanelOrchestrator().then((running) => {
|
|
543
559
|
if (running) {
|
|
544
560
|
lastLaunchAt = 0;
|
|
545
561
|
return { already_running: true, started: false };
|
|
@@ -568,7 +584,7 @@ export async function startPanelLauncherBroker(home = homedir()) {
|
|
|
568
584
|
jsonResponse(res, 200, {
|
|
569
585
|
ok: true,
|
|
570
586
|
protocol: PANEL_LAUNCHER_PROTOCOL,
|
|
571
|
-
orchestrator_running: await
|
|
587
|
+
orchestrator_running: await probeAnyPanelOrchestrator(),
|
|
572
588
|
});
|
|
573
589
|
return;
|
|
574
590
|
}
|