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.
Files changed (33) hide show
  1. package/README.md +1 -1
  2. package/dist/boot.js +5 -4
  3. package/dist/boot.js.map +1 -1
  4. package/dist/orchestrator/get-errors-audit.js +14 -7
  5. package/dist/orchestrator/get-errors-audit.js.map +1 -1
  6. package/dist/orchestrator/index.js +94 -298
  7. package/dist/orchestrator/index.js.map +1 -1
  8. package/dist/orchestrator/panel-mcp-http.js +2 -2
  9. package/dist/orchestrator/panel-mcp-http.js.map +1 -1
  10. package/dist/orchestrator/panel-tools.js +114 -7
  11. package/dist/orchestrator/panel-tools.js.map +1 -1
  12. package/dist/orchestrator/promoted-widget.js +49 -0
  13. package/dist/orchestrator/promoted-widget.js.map +1 -1
  14. package/dist/orchestrator/run-completion-journal.js +5 -0
  15. package/dist/orchestrator/run-completion-journal.js.map +1 -1
  16. package/dist/orchestrator/run-completion-watchdog.js +63 -14
  17. package/dist/orchestrator/run-completion-watchdog.js.map +1 -1
  18. package/dist/services/bridge-port-reclaim.js +340 -0
  19. package/dist/services/bridge-port-reclaim.js.map +1 -0
  20. package/dist/services/bridge-ports.js +78 -0
  21. package/dist/services/bridge-ports.js.map +1 -0
  22. package/dist/services/listener-ownership.js +30 -0
  23. package/dist/services/listener-ownership.js.map +1 -1
  24. package/dist/services/panel-launcher.js +20 -4
  25. package/dist/services/panel-launcher.js.map +1 -1
  26. package/dist/services/secure-bridge.js +8 -5
  27. package/dist/services/secure-bridge.js.map +1 -1
  28. package/dist/services/self-restart.js +24 -5
  29. package/dist/services/self-restart.js.map +1 -1
  30. package/dist/services/tunnel.js +11 -2
  31. package/dist/services/tunnel.js.map +1 -1
  32. package/docker/runpod/README.md +1 -1
  33. 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 = 9180;
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 9180 as the orchestrator. */
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 = probePanelOrchestrator().then((running) => {
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 probePanelOrchestrator(),
587
+ orchestrator_running: await probeAnyPanelOrchestrator(),
572
588
  });
573
589
  return;
574
590
  }