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.
@@ -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":"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"}
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
- await client.waitUntilOpen();
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
- await advertise(comfyuiUrl);
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
- await advertise(comfyuiUrl);
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":"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"}
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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"}
@@ -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
@@ -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,6KAA6K,EAC7K,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"}
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"}