comfyui-mcp 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/config.js +156 -10
- package/dist/config.js.map +1 -1
- package/dist/orchestrator/grok-backend.js +5 -4
- package/dist/orchestrator/grok-backend.js.map +1 -1
- package/dist/orchestrator/index.js +552 -42
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/services/download-progress.js +177 -7
- package/dist/services/download-progress.js.map +1 -1
- package/dist/services/process-control.js +154 -4
- package/dist/services/process-control.js.map +1 -1
- package/dist/services/runpod-watch.js +139 -1
- package/dist/services/runpod-watch.js.map +1 -1
- package/dist/services/secure-bridge.js +22 -6
- package/dist/services/secure-bridge.js.map +1 -1
- package/dist/tools/apps.js +222 -0
- package/dist/tools/apps.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/process-control.js +1 -1
- package/dist/tools/process-control.js.map +1 -1
- package/dist/tools/runpod.js +198 -17
- package/dist/tools/runpod.js.map +1 -1
- package/package.json +1 -1
- package/scripts/gen-tool-docs.ts +7 -0
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
// empty AND nothing is running, we accumulate idle time; once it crosses the
|
|
11
11
|
// configured timeout the pod is stopped automatically (pods bill per running
|
|
12
12
|
// GPU-second even when doing nothing). Off when idleStopMinutes <= 0.
|
|
13
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { dirname } from "node:path";
|
|
13
15
|
import { getPod, stopPod, comfyuiPortExposed, runpodProxyUrl } from "./runpod-client.js";
|
|
14
16
|
import { logger } from "../utils/logger.js";
|
|
15
17
|
const CLEARED_FRAME = {
|
|
@@ -75,13 +77,102 @@ export function createRunpodWatcher(deps) {
|
|
|
75
77
|
idle_seconds: idleSeconds,
|
|
76
78
|
autostop_minutes: idleStopMs > 0 ? deps.idleStopMinutes : null,
|
|
77
79
|
autostop_in_seconds: autostopIn,
|
|
80
|
+
// A failed auto-connect STICKS to this pod's frames until it exits or
|
|
81
|
+
// vanishes (markConnectFailed) — the only warning must not evaporate on
|
|
82
|
+
// the next routine uptime tick (codex finding).
|
|
83
|
+
...(connectFailedPods.has(pod.id) ? { connect_failed: true } : {}),
|
|
78
84
|
};
|
|
79
85
|
}
|
|
86
|
+
/** Pods whose auto-connect failed (timeout/superseded) — failure sticks to
|
|
87
|
+
* their frames + the seed until they're gone. */
|
|
88
|
+
const connectFailedPods = new Set();
|
|
89
|
+
/** Failure frames by pod — the seed channel, independent of `last`. */
|
|
90
|
+
const failedById = new Map();
|
|
91
|
+
/** Clear + broadcast "resolved" — every removal path (janitor, stop, connect,
|
|
92
|
+
* vanish, terminal) goes through here so panels RETRACT the alert instead of
|
|
93
|
+
* keeping a stale billing warning (codex finding). */
|
|
94
|
+
function clearFailure(id) {
|
|
95
|
+
const prior = failedById.get(id);
|
|
96
|
+
connectFailedPods.delete(id);
|
|
97
|
+
failedById.delete(id);
|
|
98
|
+
if (prior)
|
|
99
|
+
deps.push({ ...prior, reason: "resolved", resolved: true });
|
|
100
|
+
persistFailures();
|
|
101
|
+
}
|
|
102
|
+
/** Persist unresolved failures across orchestrator self-restarts (pods keep
|
|
103
|
+
* billing while the process cycles — codex finding). Best-effort. */
|
|
104
|
+
function persistFailures() {
|
|
105
|
+
if (!deps.persistPath)
|
|
106
|
+
return;
|
|
107
|
+
try {
|
|
108
|
+
mkdirSync(dirname(deps.persistPath), { recursive: true });
|
|
109
|
+
if (failedById.size === 0) {
|
|
110
|
+
rmSync(deps.persistPath, { force: true });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
writeFileSync(deps.persistPath, JSON.stringify([...failedById.values()]));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
/* best-effort */
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Restore failures recorded before a restart (not re-broadcast — new tabs
|
|
120
|
+
// seed from failedFrames(); future polls re-decorate via frameFor).
|
|
121
|
+
if (deps.persistPath) {
|
|
122
|
+
try {
|
|
123
|
+
const saved = JSON.parse(readFileSync(deps.persistPath, "utf-8"));
|
|
124
|
+
for (const f of saved) {
|
|
125
|
+
if (f && typeof f.pod_id === "string") {
|
|
126
|
+
failedById.set(f.pod_id, f);
|
|
127
|
+
connectFailedPods.add(f.pod_id);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// no saved state
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** Janitor: every ~10 polls, reconcile failure entries for pods we are NOT
|
|
136
|
+
* watching (their stop/vanish never reaches our poll paths — codex finding:
|
|
137
|
+
* an externally-stopped loser warned "still billing" forever). */
|
|
138
|
+
let reconcileCounter = 0;
|
|
139
|
+
async function reconcileFailedPods() {
|
|
140
|
+
for (const id of [...failedById.keys()]) {
|
|
141
|
+
if (id === podId)
|
|
142
|
+
continue; // the watched pod's own poll paths handle it
|
|
143
|
+
try {
|
|
144
|
+
const pod = await getPod(id);
|
|
145
|
+
if (!pod || pod.desiredStatus === "EXITED" || pod.desiredStatus === "TERMINATED" || pod.desiredStatus === "DEAD" || pod.desiredStatus === "PAUSED") {
|
|
146
|
+
// Same broadcast correction as clearConnectFailed — the janitor's
|
|
147
|
+
// delete must not leave the stale failure on panels (codex).
|
|
148
|
+
const prior = failedById.get(id);
|
|
149
|
+
failedById.delete(id);
|
|
150
|
+
connectFailedPods.delete(id);
|
|
151
|
+
if (prior) {
|
|
152
|
+
// Retract the alert with the TERMINAL status (the stale RUNNING
|
|
153
|
+
// line must not live forever — codex finding).
|
|
154
|
+
deps.push({ ...prior, reason: "resolved", resolved: true, status: pod?.desiredStatus ?? "TERMINATED" });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// unknown — keep the warning (cost-safe direction)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
persistFailures();
|
|
163
|
+
}
|
|
80
164
|
// In-flight guard: on a hung network a slow poll must not stack up under the
|
|
81
165
|
// interval — a tick that lands while the previous poll is still running JOINS
|
|
82
166
|
// it (no second concurrent RunPod request) instead of starting an overlap.
|
|
83
167
|
let inflight = null;
|
|
84
168
|
function poll() {
|
|
169
|
+
// Janitor tick BEFORE the target check: failures must reconcile even with
|
|
170
|
+
// NO watched pod (codex finding — an externally-stopped loser warned
|
|
171
|
+
// "still billing" forever). Cheap: only when failures exist, ~10 polls.
|
|
172
|
+
if (failedById.size > 0 && ++reconcileCounter >= 10) {
|
|
173
|
+
reconcileCounter = 0;
|
|
174
|
+
void reconcileFailedPods();
|
|
175
|
+
}
|
|
85
176
|
if (inflight)
|
|
86
177
|
return inflight;
|
|
87
178
|
inflight = pollOnce().finally(() => {
|
|
@@ -110,9 +201,31 @@ export function createRunpodWatcher(deps) {
|
|
|
110
201
|
if (podId !== target)
|
|
111
202
|
return; // target changed while awaiting → stale, drop
|
|
112
203
|
if (!pod) {
|
|
113
|
-
// Pod vanished (terminated) — stop watching
|
|
204
|
+
// Pod vanished (terminated) — stop watching, and tell the orchestrator:
|
|
205
|
+
// if renders were targeting this pod's proxy, the active target is now
|
|
206
|
+
// DEAD and must fall back to local (#269 dead-target cleanup).
|
|
114
207
|
logger.info(`[runpod-watch] pod ${target} no longer exists — unwatching`);
|
|
208
|
+
clearFailure(target);
|
|
115
209
|
unwatch();
|
|
210
|
+
deps.onPodUnavailable?.(target);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// A RETAINED pod still answers getPod after being stopped externally
|
|
214
|
+
// (console / another process): desiredStatus EXITED/TERMINATED/DEAD with
|
|
215
|
+
// runtime null. Same dead-target cleanup as the vanish path — otherwise
|
|
216
|
+
// the dead proxy stays the active render target forever (codex finding).
|
|
217
|
+
// Booting states (CREATED/RESTARTING) merely keep watching.
|
|
218
|
+
if (pod.desiredStatus === "EXITED" || pod.desiredStatus === "TERMINATED" || pod.desiredStatus === "DEAD" || pod.desiredStatus === "PAUSED") {
|
|
219
|
+
logger.info(`[runpod-watch] pod ${target} is ${pod.desiredStatus} — unwatching`);
|
|
220
|
+
// Clear the failure BEFORE the terminal frame is cached as `last` —
|
|
221
|
+
// otherwise current() seeds a stale connect_failed flag to new tabs even
|
|
222
|
+
// though the alert was resolved (codex finding).
|
|
223
|
+
clearFailure(target);
|
|
224
|
+
pushIfChanged(frameFor(pod, null, null));
|
|
225
|
+
const goneTarget = target;
|
|
226
|
+
podId = null;
|
|
227
|
+
idleSinceMs = null;
|
|
228
|
+
deps.onPodUnavailable?.(goneTarget);
|
|
116
229
|
return;
|
|
117
230
|
}
|
|
118
231
|
// Idle tracking: only accrue idle time (and thus auto-stop) when comfyui-mcp
|
|
@@ -158,8 +271,12 @@ export function createRunpodWatcher(deps) {
|
|
|
158
271
|
pushIfChanged(stopped);
|
|
159
272
|
// Stop watching WITHOUT clearing — the panel keeps showing the pod as
|
|
160
273
|
// EXITED (so the user can restart it) instead of the card vanishing.
|
|
274
|
+
const goneTarget = target;
|
|
161
275
|
podId = null;
|
|
162
276
|
idleSinceMs = null;
|
|
277
|
+
// Same dead-target cleanup as the vanish path: if renders pointed at
|
|
278
|
+
// this pod, fall back to local (#269).
|
|
279
|
+
deps.onPodUnavailable?.(goneTarget);
|
|
163
280
|
return;
|
|
164
281
|
}
|
|
165
282
|
}
|
|
@@ -173,6 +290,12 @@ export function createRunpodWatcher(deps) {
|
|
|
173
290
|
const switching = podId !== id;
|
|
174
291
|
podId = id;
|
|
175
292
|
idleSinceMs = null;
|
|
293
|
+
// A SUCCESSFUL connect (we're now rendering on this pod) resolves its past
|
|
294
|
+
// failure — but a watch-ONLY flow (boot monitor, runpod_watch) must not
|
|
295
|
+
// erase a persisted warning for an unconnected, still-billing pod (codex
|
|
296
|
+
// finding). clearFailure broadcasts the "resolved" alert.
|
|
297
|
+
if (deps.renderingOnPod(id))
|
|
298
|
+
clearFailure(id);
|
|
176
299
|
// Kick an immediate poll so the panel doesn't wait a full interval. If a poll
|
|
177
300
|
// for the PREVIOUS target is still in flight, don't overlap it — chain a fresh
|
|
178
301
|
// poll after it settles (that stale poll drops its own result via the
|
|
@@ -196,6 +319,21 @@ export function createRunpodWatcher(deps) {
|
|
|
196
319
|
unwatch,
|
|
197
320
|
watchedPodId: () => podId,
|
|
198
321
|
current: () => last,
|
|
322
|
+
markConnectFailed(id, frame) {
|
|
323
|
+
// Record the failure: stored SEPARATELY from `last` (a routine poll of
|
|
324
|
+
// the watched pod must not overwrite the only warning — codex finding),
|
|
325
|
+
// broadcast WITHOUT touching the watched-frame cache (a new tab must
|
|
326
|
+
// still get the watched pod's real status from current(), not the
|
|
327
|
+
// loser's failure — codex finding), and stuck to this pod's later
|
|
328
|
+
// frames (frameFor) until it exits/vanishes or is intentionally
|
|
329
|
+
// reconnected (watch()).
|
|
330
|
+
connectFailedPods.add(id);
|
|
331
|
+
failedById.set(id, frame);
|
|
332
|
+
deps.push(frame);
|
|
333
|
+
persistFailures();
|
|
334
|
+
},
|
|
335
|
+
failedFrames: () => [...failedById.values()],
|
|
336
|
+
clearConnectFailed: clearFailure,
|
|
199
337
|
poll,
|
|
200
338
|
start() {
|
|
201
339
|
if (timer)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runpod-watch.js","sourceRoot":"","sources":["../../src/services/runpod-watch.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,4EAA4E;AAC5E,0DAA0D;AAC1D,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runpod-watch.js","sourceRoot":"","sources":["../../src/services/runpod-watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,7 +52,7 @@ function maskToken(url) {
|
|
|
52
52
|
* Retries a few times — the orchestrator may advertise before the pod route is
|
|
53
53
|
* warm. Returns true on the first 2xx.
|
|
54
54
|
*/
|
|
55
|
-
export async function advertiseBridge(comfyuiUrl, wssUrl) {
|
|
55
|
+
export async function advertiseBridge(comfyuiUrl, wssUrl, shouldAdvertise) {
|
|
56
56
|
let endpoint;
|
|
57
57
|
try {
|
|
58
58
|
endpoint = new URL("/comfyui_mcp_panel/advertise_bridge", comfyuiUrl).toString();
|
|
@@ -61,6 +61,10 @@ export async function advertiseBridge(comfyuiUrl, wssUrl) {
|
|
|
61
61
|
return false;
|
|
62
62
|
}
|
|
63
63
|
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
64
|
+
// Re-check per attempt: the target may have moved DURING the retry sequence
|
|
65
|
+
// — a stale pod must never receive the bridge URL (codex finding).
|
|
66
|
+
if (shouldAdvertise && !shouldAdvertise(comfyuiUrl))
|
|
67
|
+
return false;
|
|
64
68
|
try {
|
|
65
69
|
const res = await fetch(endpoint, {
|
|
66
70
|
method: "POST",
|
|
@@ -117,11 +121,19 @@ async function setupRelayBridge(opts) {
|
|
|
117
121
|
onAttach: (sock) => bridge.attachRelayConnection(sock),
|
|
118
122
|
});
|
|
119
123
|
client.start();
|
|
120
|
-
|
|
124
|
+
try {
|
|
125
|
+
await client.waitUntilOpen();
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
// A failed setup must not leave a reconnecting client behind — the 5s
|
|
129
|
+
// retry would pile one on every attempt during a relay outage (codex).
|
|
130
|
+
client.stop();
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
121
133
|
const wssUrl = `${relayUrl.replace(/\/+$/, "")}/s/${sessionId}?token=${token}`;
|
|
122
134
|
logger.info(`[secure-bridge] bridge exposed via relay at ${maskToken(wssUrl)}`);
|
|
123
135
|
const advertise = async (target) => {
|
|
124
|
-
const ok = await advertiseBridge(target, wssUrl);
|
|
136
|
+
const ok = await advertiseBridge(target, wssUrl, opts.shouldAdvertise);
|
|
125
137
|
if (ok) {
|
|
126
138
|
logger.info(`[secure-bridge] advertised the secure bridge URL to the pod panel`);
|
|
127
139
|
}
|
|
@@ -131,7 +143,9 @@ async function setupRelayBridge(opts) {
|
|
|
131
143
|
}
|
|
132
144
|
return ok;
|
|
133
145
|
};
|
|
134
|
-
|
|
146
|
+
if (!opts.shouldAdvertise || opts.shouldAdvertise(comfyuiUrl)) {
|
|
147
|
+
await advertise(comfyuiUrl);
|
|
148
|
+
}
|
|
135
149
|
return {
|
|
136
150
|
wssUrl,
|
|
137
151
|
advertise,
|
|
@@ -161,7 +175,7 @@ async function setupCloudflaredBridge(opts) {
|
|
|
161
175
|
const wssUrl = toWssUrl(tunnel.url, token);
|
|
162
176
|
logger.info(`[secure-bridge] bridge exposed securely at ${maskToken(wssUrl)}`);
|
|
163
177
|
const advertise = async (target) => {
|
|
164
|
-
const ok = await advertiseBridge(target, wssUrl);
|
|
178
|
+
const ok = await advertiseBridge(target, wssUrl, opts.shouldAdvertise);
|
|
165
179
|
if (ok) {
|
|
166
180
|
logger.info(`[secure-bridge] advertised the secure bridge URL to the pod panel`);
|
|
167
181
|
}
|
|
@@ -171,7 +185,9 @@ async function setupCloudflaredBridge(opts) {
|
|
|
171
185
|
}
|
|
172
186
|
return ok;
|
|
173
187
|
};
|
|
174
|
-
|
|
188
|
+
if (!opts.shouldAdvertise || opts.shouldAdvertise(comfyuiUrl)) {
|
|
189
|
+
await advertise(comfyuiUrl);
|
|
190
|
+
}
|
|
175
191
|
return {
|
|
176
192
|
wssUrl,
|
|
177
193
|
advertise,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-bridge.js","sourceRoot":"","sources":["../../src/services/secure-bridge.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,0CAA0C;AAC1C,EAAE;AACF,4EAA4E;AAC5E,iFAAiF;AACjF,kFAAkF;AAClF,+EAA+E;AAC/E,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,iFAAiF;AACjF,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,2EAA2E;AAC3E,sEAAsE;AACtE,kBAAkB;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAY5C,oEAAoE;AACpE,SAAS,QAAQ,CAAC,QAAgB,EAAE,KAAa;IAC/C,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED;gFACgF;AAChF,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC;IACnE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED,6CAA6C;AAC7C,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,MAAc;
|
|
1
|
+
{"version":3,"file":"secure-bridge.js","sourceRoot":"","sources":["../../src/services/secure-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getComfyUIBaseUrl } from "../config.js";
|
|
3
|
+
import { comfyuiFetch } from "../comfyui/fetch.js";
|
|
4
|
+
import { errorToToolResult, ComfyUIError } from "../utils/errors.js";
|
|
5
|
+
/**
|
|
6
|
+
* Micro-Apps ("Apps") tools — the mobile/direct-call surface for the panel's
|
|
7
|
+
* app bundles. Each tool is a thin proxy over the panel pack's
|
|
8
|
+
* /comfyui_mcp_panel/apps/* HTTP routes (py/apps_routes.py), so there is ONE
|
|
9
|
+
* storage and run implementation (the panel's) for both the desktop panel and
|
|
10
|
+
* canvas-less clients. The orchestrator's call_tool whitelist decides who may
|
|
11
|
+
* reach these; the tools themselves just forward and report.
|
|
12
|
+
*
|
|
13
|
+
* An "app" = a named workflow packaged for one-click runs: a manifest (name,
|
|
14
|
+
* description, appMode {inputs, outputs}, deps, hideWorkflow) + an API-format
|
|
15
|
+
* prompt snapshot that values are patched into per run.
|
|
16
|
+
*/
|
|
17
|
+
function appsUrl(path) {
|
|
18
|
+
return `${getComfyUIBaseUrl()}/comfyui_mcp_panel/apps${path}`;
|
|
19
|
+
}
|
|
20
|
+
/** Fetch a panel apps route; translate transport + HTTP failures into a
|
|
21
|
+
* readable ComfyUIError (a 404 on the COLLECTION route means the panel pack
|
|
22
|
+
* predates the Apps feature — say so plainly). */
|
|
23
|
+
async function appsFetch(path, init = {}) {
|
|
24
|
+
let res;
|
|
25
|
+
try {
|
|
26
|
+
res = await comfyuiFetch(appsUrl(path), init);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
throw new ComfyUIError(`Cannot reach the panel's Apps API at ${appsUrl(path)}: ${err instanceof Error ? err.message : err}. ` +
|
|
30
|
+
"Is ComfyUI running with the comfyui-mcp-panel pack installed?", "APPS_API_UNREACHABLE");
|
|
31
|
+
}
|
|
32
|
+
let body = null;
|
|
33
|
+
try {
|
|
34
|
+
body = await res.json();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* non-JSON error page */
|
|
38
|
+
}
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
const msg = body && typeof body === "object" && typeof body.error === "string"
|
|
41
|
+
? body.error
|
|
42
|
+
: `HTTP ${res.status}`;
|
|
43
|
+
const hint = res.status === 404 && path === ""
|
|
44
|
+
? " — the panel pack on this ComfyUI predates the Apps feature; update comfyui-mcp-panel and restart ComfyUI"
|
|
45
|
+
: "";
|
|
46
|
+
throw new ComfyUIError(`Apps API error: ${msg}${hint}`, "APPS_API_ERROR");
|
|
47
|
+
}
|
|
48
|
+
return body;
|
|
49
|
+
}
|
|
50
|
+
function jsonText(data) {
|
|
51
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
52
|
+
}
|
|
53
|
+
/** Registry URLs apps_import may fetch from. This is a SERVER-side fetch, so
|
|
54
|
+
* an open URL is an SSRF primitive (loopback/LAN, or a public URL redirecting
|
|
55
|
+
* into one) — the tool only talks to the default registry or origins the
|
|
56
|
+
* operator explicitly allowlists (comma-separated, for dev/staging). */
|
|
57
|
+
function allowedRegistryBases() {
|
|
58
|
+
const extra = (process.env.COMFYUI_MCP_REGISTRY_URLS || "")
|
|
59
|
+
.split(",")
|
|
60
|
+
.map((s) => s.trim().replace(/\/+$/, ""))
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
return ["https://cmcp-apps-registry.artokun.workers.dev", ...extra];
|
|
63
|
+
}
|
|
64
|
+
const MAX_BUNDLE_BYTES = 16 * 1024 * 1024;
|
|
65
|
+
/** Bounded GET: 30s timeout, 16MB cap on the buffered body (checked on the
|
|
66
|
+
* declared length AND the actual bytes). */
|
|
67
|
+
async function boundedJson(url) {
|
|
68
|
+
const res = await fetch(url, {
|
|
69
|
+
redirect: "error", // no redirect-follow into a second origin
|
|
70
|
+
signal: AbortSignal.timeout(30_000),
|
|
71
|
+
});
|
|
72
|
+
if (!res.ok) {
|
|
73
|
+
throw new ComfyUIError(`registry fetch failed: HTTP ${res.status}`, "APPS_IMPORT_REGISTRY");
|
|
74
|
+
}
|
|
75
|
+
const declared = Number(res.headers.get("content-length") || 0);
|
|
76
|
+
if (declared > MAX_BUNDLE_BYTES) {
|
|
77
|
+
throw new ComfyUIError("registry bundle too large", "APPS_IMPORT_TOO_LARGE");
|
|
78
|
+
}
|
|
79
|
+
const buf = await res.arrayBuffer();
|
|
80
|
+
if (buf.byteLength > MAX_BUNDLE_BYTES) {
|
|
81
|
+
throw new ComfyUIError("registry bundle too large", "APPS_IMPORT_TOO_LARGE");
|
|
82
|
+
}
|
|
83
|
+
return JSON.parse(new TextDecoder().decode(buf));
|
|
84
|
+
}
|
|
85
|
+
export function registerAppsTools(server) {
|
|
86
|
+
server.tool("apps_list", "List the micro-apps registered on this ComfyUI (panel Apps feature). Each entry is the app's " +
|
|
87
|
+
"manifest: id, name, description, appMode {inputs, outputs}, deps, hideWorkflow, published. " +
|
|
88
|
+
"Use apps_get for one app's full detail and apps_run to execute one. Read-only.", {}, async () => {
|
|
89
|
+
try {
|
|
90
|
+
return jsonText(await appsFetch(""));
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
return errorToToolResult(err);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
server.tool("apps_get", "Get one micro-app's manifest + bundle facts (has_workflow/has_prompt/has_thumbnail) by id. " +
|
|
97
|
+
"The manifest's appMode.inputs is the app's run form: each input has nodeId, widget, label, " +
|
|
98
|
+
"kind (text|number|combo|toggle|image|model), optional choices and default. Read-only.", {
|
|
99
|
+
app_id: z.string().uuid().describe("The app's uuid (from apps_list)."),
|
|
100
|
+
}, async (args) => {
|
|
101
|
+
try {
|
|
102
|
+
return jsonText(await appsFetch(`/${args.app_id}`));
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
return errorToToolResult(err);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
server.tool("apps_run", "Run a micro-app once: patches `values` (keys '<nodeId>.<widget>', e.g. {\"6.text\": \"a cat\"}) " +
|
|
109
|
+
"into the app's stored prompt snapshot and queues it on ComfyUI. Returns the prompt_id — poll " +
|
|
110
|
+
"apps_run_status for completion and outputs. Only pass values for inputs listed in the app's " +
|
|
111
|
+
"appMode.inputs; omitted inputs keep their conversion-time defaults.", {
|
|
112
|
+
app_id: z.string().uuid().describe("The app's uuid (from apps_list)."),
|
|
113
|
+
values: z
|
|
114
|
+
.record(z.string(), z.any())
|
|
115
|
+
.optional()
|
|
116
|
+
.describe("Input overrides keyed '<nodeId>.<widget>' (e.g. {\"6.text\": \"a cat\", \"3.seed\": 42}). " +
|
|
117
|
+
"Unknown keys fail loudly (the manifest drifted from the snapshot)."),
|
|
118
|
+
}, async (args) => {
|
|
119
|
+
try {
|
|
120
|
+
return jsonText(await appsFetch(`/${args.app_id}/run`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers: { "content-type": "application/json" },
|
|
123
|
+
body: JSON.stringify({ values: args.values || {} }),
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
return errorToToolResult(err);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
server.tool("apps_run_status", "Check one app run by prompt_id (from apps_run): status (pending|running|done|unknown) plus the " +
|
|
131
|
+
"run's outputs (image/video file refs under each output node, text outputs). Read-only.", {
|
|
132
|
+
app_id: z.string().uuid().describe("The app's uuid."),
|
|
133
|
+
// ComfyUI prompt ids are uuids; constraining the shape also blocks
|
|
134
|
+
// route traversal (a "prompt_id" like ../../system_stats would escape
|
|
135
|
+
// the apps route when interpolated into the URL — codex finding).
|
|
136
|
+
prompt_id: z
|
|
137
|
+
.string()
|
|
138
|
+
.regex(/^[0-9a-zA-Z-]{1,64}$/, "must be a ComfyUI prompt id (alphanumeric/dashes)")
|
|
139
|
+
.describe("The prompt_id returned by apps_run."),
|
|
140
|
+
}, async (args) => {
|
|
141
|
+
try {
|
|
142
|
+
// In-handler too (not just the zod boundary): any direct caller with a
|
|
143
|
+
// traversal-shaped id must never reach the URL builder.
|
|
144
|
+
if (!/^[0-9a-zA-Z-]{1,64}$/.test(args.prompt_id)) {
|
|
145
|
+
throw new ComfyUIError("invalid prompt_id", "APPS_BAD_PROMPT_ID");
|
|
146
|
+
}
|
|
147
|
+
return jsonText(await appsFetch(`/${args.app_id}/runs/${encodeURIComponent(args.prompt_id)}`));
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
return errorToToolResult(err);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
server.tool("apps_import", "Install an app from the public registry onto this ComfyUI: fetches the registry bundle " +
|
|
154
|
+
"(manifest + prompt snapshot [+ workflow unless hidden]) and creates it as a local app via the " +
|
|
155
|
+
"panel's Apps API. The registry id becomes the local id, so re-importing the same app reports " +
|
|
156
|
+
"an id conflict (already installed). Deps (models/custom nodes) are NOT installed — report the " +
|
|
157
|
+
"manifest's deps to the user so they can install them before running.", {
|
|
158
|
+
registry_url: z
|
|
159
|
+
.string()
|
|
160
|
+
.url()
|
|
161
|
+
.describe("Registry worker base URL. Must be the default public registry or an origin the operator " +
|
|
162
|
+
"allowlisted via COMFYUI_MCP_REGISTRY_URLS (the fetch is server-side — open URLs would be SSRF)."),
|
|
163
|
+
app_id: z.string().uuid().describe("The registry app's uuid (from the explore list)."),
|
|
164
|
+
slug: z.string().optional().describe("The app's registry slug (recorded in local metadata)."),
|
|
165
|
+
version: z.number().int().optional().describe("The registry version (recorded in local metadata)."),
|
|
166
|
+
}, async (args) => {
|
|
167
|
+
try {
|
|
168
|
+
const base = args.registry_url.replace(/\/+$/, "");
|
|
169
|
+
if (!allowedRegistryBases().includes(base)) {
|
|
170
|
+
throw new ComfyUIError(`registry_url must be the default registry or an operator-allowlisted origin ` +
|
|
171
|
+
`(COMFYUI_MCP_REGISTRY_URLS); got ${base}`, "APPS_IMPORT_BAD_URL");
|
|
172
|
+
}
|
|
173
|
+
const bundle = (await boundedJson(`${base}/v1/apps/${args.app_id}/bundle`));
|
|
174
|
+
if (!bundle.manifest || !bundle.prompt) {
|
|
175
|
+
throw new ComfyUIError("registry bundle is missing manifest/prompt", "APPS_IMPORT_BAD_BUNDLE");
|
|
176
|
+
}
|
|
177
|
+
const manifest = {
|
|
178
|
+
...bundle.manifest,
|
|
179
|
+
id: args.app_id,
|
|
180
|
+
source: { type: "registry", workflowUuid: null, registryId: args.app_id },
|
|
181
|
+
published: {
|
|
182
|
+
registryId: args.app_id,
|
|
183
|
+
slug: args.slug || null,
|
|
184
|
+
publishedVersion: args.version || null,
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
// Thumbnails live at a separate registry endpoint, not inside the JSON
|
|
188
|
+
// bundle — fetch and forward so the installed app keeps its card art.
|
|
189
|
+
let thumbnail_b64;
|
|
190
|
+
try {
|
|
191
|
+
const thumbRes = await fetch(`${base}/v1/apps/${args.app_id}/thumbnail`, {
|
|
192
|
+
redirect: "error",
|
|
193
|
+
signal: AbortSignal.timeout(15_000),
|
|
194
|
+
});
|
|
195
|
+
if (thumbRes.ok) {
|
|
196
|
+
const buf = await thumbRes.arrayBuffer();
|
|
197
|
+
if (buf.byteLength <= 5 * 1024 * 1024) {
|
|
198
|
+
thumbnail_b64 = Buffer.from(buf).toString("base64");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
/* no thumbnail — cosmetic only */
|
|
204
|
+
}
|
|
205
|
+
const created = await appsFetch("", {
|
|
206
|
+
method: "POST",
|
|
207
|
+
headers: { "content-type": "application/json" },
|
|
208
|
+
body: JSON.stringify({
|
|
209
|
+
manifest,
|
|
210
|
+
prompt: bundle.prompt,
|
|
211
|
+
...(bundle.workflow ? { workflow: bundle.workflow } : {}),
|
|
212
|
+
...(thumbnail_b64 ? { thumbnail_b64 } : {}),
|
|
213
|
+
}),
|
|
214
|
+
});
|
|
215
|
+
return jsonText({ ok: true, installed: created, deps: bundle.manifest.deps || {} });
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
return errorToToolResult(err);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=apps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/tools/apps.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -55,6 +55,7 @@ import { registerComfyUISettingsTools } from "./comfyui-settings.js";
|
|
|
55
55
|
import { registerNodeDevTools } from "./node-dev.js";
|
|
56
56
|
import { registerComfyCliTools } from "./comfy-cli.js";
|
|
57
57
|
import { registerTrainTools } from "./train.js";
|
|
58
|
+
import { registerAppsTools } from "./apps.js";
|
|
58
59
|
import { DefaultsManager } from "../services/defaults-manager.js";
|
|
59
60
|
import { ToolCatalog } from "./catalog.js";
|
|
60
61
|
/**
|
|
@@ -119,6 +120,7 @@ const TOOL_GROUPS = [
|
|
|
119
120
|
["server", registerComfyUISettingsTools],
|
|
120
121
|
["custom-nodes", registerNodeDevTools],
|
|
121
122
|
["training", registerTrainTools],
|
|
123
|
+
["apps", registerAppsTools],
|
|
122
124
|
];
|
|
123
125
|
// ── Blind content mode (panel issue #90) ────────────────────────────────────
|
|
124
126
|
// When COMFYUI_MCP_BLIND=1 (set on the tool-server spawn by the orchestrator
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export function registerProcessControlTools(server) {
|
|
|
23
23
|
return errorToToolResult(err);
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
|
-
server.tool("restart_comfyui", "Restart ComfyUI: stops the running process (capturing its config), waits for the port to free, relaunches with the same arguments, and polls the API for bounded readiness.", {}, async () => {
|
|
26
|
+
server.tool("restart_comfyui", "Restart ComfyUI: stops the running process (capturing its config), waits for the port to free, relaunches with the same arguments, and polls the API for bounded readiness. Also works against a REMOTE/tunnelled ComfyUI (via --comfyui-url) by rebooting through ComfyUI-Manager over HTTP and polling for it to come back (requires ComfyUI-Manager present and its security level permitting the reboot).", {}, async () => {
|
|
27
27
|
try {
|
|
28
28
|
const result = await restartComfyUI();
|
|
29
29
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-control.js","sourceRoot":"","sources":["../../src/tools/process-control.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4JAA4J,EAC5J,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6LAA6L,EAC7L,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"process-control.js","sourceRoot":"","sources":["../../src/tools/process-control.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4JAA4J,EAC5J,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6LAA6L,EAC7L,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+YAA+Y,EAC/Y,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|