comfyui-mcp 0.44.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.
Files changed (64) hide show
  1. package/README.md +2 -2
  2. package/dist/config.js +159 -11
  3. package/dist/config.js.map +1 -1
  4. package/dist/orchestrator/ai-proposer.js +5 -0
  5. package/dist/orchestrator/ai-proposer.js.map +1 -1
  6. package/dist/orchestrator/antigravity-backend.js +394 -52
  7. package/dist/orchestrator/antigravity-backend.js.map +1 -1
  8. package/dist/orchestrator/claude-backend.js +13 -0
  9. package/dist/orchestrator/claude-backend.js.map +1 -1
  10. package/dist/orchestrator/codex-backend.js +12 -1
  11. package/dist/orchestrator/codex-backend.js.map +1 -1
  12. package/dist/orchestrator/gemini-backend.js +8 -1
  13. package/dist/orchestrator/gemini-backend.js.map +1 -1
  14. package/dist/orchestrator/grok-backend.js +9 -5
  15. package/dist/orchestrator/grok-backend.js.map +1 -1
  16. package/dist/orchestrator/index.js +603 -50
  17. package/dist/orchestrator/index.js.map +1 -1
  18. package/dist/orchestrator/panel-agent.js +21 -5
  19. package/dist/orchestrator/panel-agent.js.map +1 -1
  20. package/dist/orchestrator/panel-console-http.js +1 -0
  21. package/dist/orchestrator/panel-console-http.js.map +1 -1
  22. package/dist/orchestrator/panel-tools.js +140 -9
  23. package/dist/orchestrator/panel-tools.js.map +1 -1
  24. package/dist/services/ai-toolkit.js +260 -3
  25. package/dist/services/ai-toolkit.js.map +1 -1
  26. package/dist/services/download-progress.js +177 -7
  27. package/dist/services/download-progress.js.map +1 -1
  28. package/dist/services/missing-models.js +295 -0
  29. package/dist/services/missing-models.js.map +1 -0
  30. package/dist/services/openai-provider-registry.js +20 -1
  31. package/dist/services/openai-provider-registry.js.map +1 -1
  32. package/dist/services/panel-secrets.js +58 -7
  33. package/dist/services/panel-secrets.js.map +1 -1
  34. package/dist/services/process-control.js +154 -4
  35. package/dist/services/process-control.js.map +1 -1
  36. package/dist/services/runpod-client.js +157 -9
  37. package/dist/services/runpod-client.js.map +1 -1
  38. package/dist/services/runpod-ssh.js +594 -0
  39. package/dist/services/runpod-ssh.js.map +1 -0
  40. package/dist/services/runpod-watch.js +192 -13
  41. package/dist/services/runpod-watch.js.map +1 -1
  42. package/dist/services/secure-bridge.js +22 -6
  43. package/dist/services/secure-bridge.js.map +1 -1
  44. package/dist/services/trainer-bootstrap.js +142 -0
  45. package/dist/services/trainer-bootstrap.js.map +1 -0
  46. package/dist/services/training-config.js +4 -1
  47. package/dist/services/training-config.js.map +1 -1
  48. package/dist/services/training-jobs.js +1332 -253
  49. package/dist/services/training-jobs.js.map +1 -1
  50. package/dist/tools/apps.js +222 -0
  51. package/dist/tools/apps.js.map +1 -0
  52. package/dist/tools/index.js +4 -0
  53. package/dist/tools/index.js.map +1 -1
  54. package/dist/tools/missing-models.js +151 -0
  55. package/dist/tools/missing-models.js.map +1 -0
  56. package/dist/tools/process-control.js +1 -1
  57. package/dist/tools/process-control.js.map +1 -1
  58. package/dist/tools/runpod.js +205 -17
  59. package/dist/tools/runpod.js.map +1 -1
  60. package/dist/tools/train.js +138 -5
  61. package/dist/tools/train.js.map +1 -1
  62. package/docker/trainer/Dockerfile +4 -2
  63. package/package.json +1 -1
  64. package/scripts/gen-tool-docs.ts +43 -4
@@ -0,0 +1,151 @@
1
+ import { z } from "zod";
2
+ import { getObjectInfo, getSystemStats } from "../comfyui/client.js";
3
+ import { searchCivitaiModels } from "../services/civitai-resolver.js";
4
+ import { searchHuggingFaceModels } from "../services/model-resolver.js";
5
+ import { findMissingModels, resolveCandidates, } from "../services/missing-models.js";
6
+ import { errorToToolResult, ValidationError } from "../utils/errors.js";
7
+ function parseWorkflow(input) {
8
+ if (typeof input === "string") {
9
+ try {
10
+ const parsed = JSON.parse(input);
11
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
12
+ throw new ValidationError("Workflow JSON must be an object with node IDs as keys");
13
+ }
14
+ return parsed;
15
+ }
16
+ catch (err) {
17
+ if (err instanceof ValidationError)
18
+ throw err;
19
+ throw new ValidationError(`Invalid JSON string: ${err.message}`);
20
+ }
21
+ }
22
+ if (typeof input === "object" && input !== null && !Array.isArray(input)) {
23
+ return input;
24
+ }
25
+ throw new ValidationError("Workflow must be a JSON string or object");
26
+ }
27
+ /** Weight files worth offering; skip READMEs, configs, previews. */
28
+ const WEIGHT_RE = /\.(safetensors|ckpt|pt|pth|bin|gguf|sft)$/i;
29
+ /**
30
+ * List a HuggingFace repo's weight files WITH sizes. HF search returns REPOS,
31
+ * not files, so without this expansion a candidate has no size, no precision and
32
+ * no fit verdict — i.e. none of what makes the list useful on a small GPU.
33
+ *
34
+ * Must be `/tree/main`: the plain `/api/models/{id}` response carries
35
+ * `siblings[].rfilename` but NO size, and `?blobs=true` 400s. Verified live.
36
+ * The repo id is `org/name` — its slash is part of the PATH, so it must not be
37
+ * percent-encoded (encoding the whole id yields a 404).
38
+ */
39
+ async function hfRepoFiles(repoId) {
40
+ const path = repoId.split("/").map(encodeURIComponent).join("/");
41
+ const res = await fetch(`https://huggingface.co/api/models/${path}/tree/main`, {
42
+ headers: process.env.HF_TOKEN ? { authorization: `Bearer ${process.env.HF_TOKEN}` } : undefined,
43
+ });
44
+ if (!res.ok)
45
+ return [];
46
+ const body = (await res.json());
47
+ if (!Array.isArray(body))
48
+ return [];
49
+ return body
50
+ .filter((e) => e.type === "file" && typeof e.path === "string" && WEIGHT_RE.test(e.path))
51
+ .map((e) => ({ filename: e.path, size_bytes: typeof e.size === "number" ? e.size : undefined }));
52
+ }
53
+ function liveDeps() {
54
+ return {
55
+ searchCivitai: async (query, types) => {
56
+ const res = await searchCivitaiModels(query, { types, limit: 6 });
57
+ return res.hits.map((h) => ({
58
+ name: h.name,
59
+ model_id: h.model_id,
60
+ version_id: h.version_id,
61
+ size_mb: h.size_mb,
62
+ base_model: h.base_model,
63
+ }));
64
+ },
65
+ searchHf: async (query) => (await searchHuggingFaceModels(query, { limit: 4 })).map((m) => ({ id: m.id })),
66
+ hfRepoFiles,
67
+ vramBytes: async () => {
68
+ const stats = await getSystemStats();
69
+ const vram = stats.devices?.[0]?.vram_total;
70
+ return typeof vram === "number" && vram > 0 ? vram : undefined;
71
+ },
72
+ };
73
+ }
74
+ function human(bytes) {
75
+ if (!bytes || bytes <= 0)
76
+ return "?";
77
+ const gb = bytes / 1024 ** 3;
78
+ return gb >= 1 ? `${gb.toFixed(1)} GB` : `${Math.round(bytes / 1024 ** 2)} MB`;
79
+ }
80
+ const FIT_ICON = { fits: "✓ fits", tight: "~ tight", too_big: "✗ won't fit", unknown: "? unknown" };
81
+ function renderCandidate(c) {
82
+ const bits = [
83
+ `- **${c.filename}**`,
84
+ `${human(c.size_bytes)}`,
85
+ c.precision === "unknown" ? "" : c.quant ? `${c.precision.toUpperCase()} ${c.quant}` : c.precision.toUpperCase(),
86
+ c.source,
87
+ FIT_ICON[c.fit ?? "unknown"] ?? "",
88
+ c.base_model ? `base: ${c.base_model}` : "",
89
+ c.match === "exact" ? "**exact name**" : c.match === "stem" ? "same name, different format" : "",
90
+ ].filter(Boolean);
91
+ let line = bits.join(" · ");
92
+ if (c.requires_pack)
93
+ line += `\n ⚠️ needs the **${c.requires_pack}** node pack — a GGUF will NOT load in CheckpointLoaderSimple.`;
94
+ if (c.url)
95
+ line += `\n ${c.url}`;
96
+ else if (c.civitai_model_id)
97
+ line += `\n civitai model ${c.civitai_model_id}${c.civitai_version_id ? ` (version ${c.civitai_version_id})` : ""} → download_civitai_model`;
98
+ return line;
99
+ }
100
+ export function registerMissingModelTools(server) {
101
+ server.tool("resolve_missing_models", "Find the model files a workflow needs but this ComfyUI does NOT have, and search CivitAI + HuggingFace for installable candidates. THE tool for 'this Template says a model is missing — go get it'. " +
102
+ "Detects by comparing each model widget against the option list the server actually publishes, so it covers checkpoints, LoRAs, VAEs, ControlNets, UNets, CLIP and custom-pack model types without any per-node mapping. " +
103
+ "Each candidate reports size, source, precision/quantisation (fp16 / fp8 / GGUF Q4_K_M …) and whether it FITS this GPU's VRAM — so when the exact file is too big you can see the quantised variant that isn't. " +
104
+ "Read-only: it downloads nothing. Pass a chosen candidate to download_model (url) or download_civitai_model (id), using the reported directory as target_subfolder. " +
105
+ "For missing custom NODE PACKS (not models) use install_workflow_dependencies instead.", {
106
+ workflow: z
107
+ .union([z.string(), z.record(z.string(), z.any())])
108
+ .describe("ComfyUI workflow in API format (JSON string or object)"),
109
+ limit: z
110
+ .number()
111
+ .int()
112
+ .min(1)
113
+ .max(20)
114
+ .optional()
115
+ .describe("Max candidates per missing model (default 8)."),
116
+ }, async (args) => {
117
+ try {
118
+ const workflow = parseWorkflow(args.workflow);
119
+ const objectInfo = (await getObjectInfo());
120
+ const missing = findMissingModels(workflow, objectInfo);
121
+ if (missing.length === 0) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: "text",
126
+ text: "## No missing models\n\nEvery model this workflow references is present on the connected ComfyUI. (If it still fails to run, check missing custom node packs with extract_workflow_dependencies.)",
127
+ },
128
+ ],
129
+ };
130
+ }
131
+ const deps = liveDeps();
132
+ const lines = [`## ${missing.length} missing model(s)`, ""];
133
+ for (const m of missing) {
134
+ lines.push(`### \`${m.name}\``, `needed by node ${m.node_id} (${m.node_type} · ${m.widget})${m.directory ? ` → installs to \`models/${m.directory}/\`` : ""}`, "");
135
+ const candidates = await resolveCandidates(m, deps, { limit: args.limit ?? 8 }).catch(() => []);
136
+ if (candidates.length === 0) {
137
+ lines.push("_No candidates found on CivitAI or HuggingFace — try search_models / search_civitai_models with a different query._", "");
138
+ continue;
139
+ }
140
+ lines.push(...candidates.map(renderCandidate), "");
141
+ }
142
+ lines.push("---", "Nothing was downloaded. Pick a candidate and call **download_model** (url) or **download_civitai_model** (id)" +
143
+ ", passing the model's directory as `target_subfolder`.", "Names can collide across quantisations and base models — prefer an **exact name** match, and check `base:` before taking a fuzzy one.");
144
+ return { content: [{ type: "text", text: lines.join("\n") }] };
145
+ }
146
+ catch (err) {
147
+ return errorToToolResult(err);
148
+ }
149
+ });
150
+ }
151
+ //# sourceMappingURL=missing-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-models.js","sourceRoot":"","sources":["../../src/tools/missing-models.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"}
@@ -1,15 +1,42 @@
1
1
  import { z } from "zod";
2
- import { setComfyuiTarget, getLocalComfyuiUrl } from "../config.js";
2
+ import { setComfyuiTarget, getLocalComfyuiUrl, getComfyUIBaseUrl } from "../config.js";
3
3
  import { resetClient } from "../comfyui/client.js";
4
4
  import { errorToToolResult } from "../utils/errors.js";
5
5
  import { getPod, listPods, resumePod, stopPod, createPod, comfyuiPortExposed, runpodProxyUrl, runpodDeployLink, RUNPOD_COMFYUI_PORT, RUNPOD_DEFAULT_GPU_TYPES, GPU_CLI_CREDIT, } from "../services/runpod-client.js";
6
6
  import { getRunpodWatcher } from "../services/runpod-watch.js";
7
- /** Retarget comfyui-mcp back to the local ComfyUI (shared by stop + use_local). */
8
- function retargetLocal() {
7
+ import { requestTargetChange, awaitTargetApplied, progressEnabled } from "../services/download-progress.js";
8
+ /** Retarget comfyui-mcp back to the local ComfyUI (shared by stop + use_local).
9
+ * Returns { url, applied } for display (url null when the channel is down).
10
+ * applied=false means the orchestrator SKIPPED the guarded switch (another
11
+ * tab/pod owns the target now) — the caller must not claim a local switch
12
+ * (codex finding). */
13
+ async function retargetLocal(condOnPodId) {
14
+ if (progressEnabled()) {
15
+ // condOnPodId: the stop-fallback — fall back ONLY if the orchestrator is
16
+ // really on that pod (a stale child may lag a newer target, codex). The
17
+ // unwatch is SCOPED to the stopped pod the same way (an unrelated watched
18
+ // pod must survive — codex finding).
19
+ const reqFile = requestTargetChange({ local: true, unwatch: true, wantAck: true, expectedCurrentUrl: getComfyUIBaseUrl(), ...(condOnPodId ? { onlyIfTarget: condOnPodId, unwatchPodId: condOnPodId } : {}) });
20
+ if (!reqFile)
21
+ return { url: null, applied: false };
22
+ const ack = await awaitTargetApplied(reqFile);
23
+ if (ack) {
24
+ // Align THIS child's config to the AUTHORITATIVE target either way
25
+ // (codex finding: a guarded skip left the child on a dead pod for the
26
+ // rest of the turn). `applied` only narrates whether the requested
27
+ // local switch actually happened.
28
+ setComfyuiTarget(ack.url);
29
+ resetClient();
30
+ }
31
+ return { url: ack?.url ?? null, applied: ack?.applied ?? false };
32
+ }
9
33
  const url = getLocalComfyuiUrl();
10
34
  setComfyuiTarget(url);
11
35
  resetClient();
12
- return url;
36
+ // In-process: the direct path did everything (pending clears ride the target
37
+ // event; failure clears are direct calls). Do NOT also replay a local
38
+ // request through the channel — same stale-overwrite race (codex finding).
39
+ return { url, applied: true };
13
40
  }
14
41
  /** Human-friendly uptime. */
15
42
  function fmtUptime(sec) {
@@ -104,18 +131,37 @@ export function registerRunpodTools(server) {
104
131
  }, async (args) => {
105
132
  try {
106
133
  const w = getRunpodWatcher();
107
- const wasConnected = w?.watchedPodId() === args.pod_id;
108
134
  const r = await stopPod(args.pod_id);
109
- // Stop live-status/idle-watch if this was the watched pod.
110
- if (wasConnected)
135
+ // Clear any recorded auto-connect failure for this pod — it's stopped
136
+ // now, so "still billing" reports must stop too. Both locally (when
137
+ // the watcher exists) AND through the control channel (spawned-child
138
+ // case, where it doesn't — codex finding).
139
+ getRunpodWatcher()?.clearConnectFailed(args.pod_id);
140
+ requestTargetChange({ stoppedPodId: args.pod_id });
141
+ // Unwatch ONLY after the stop succeeded — clearing it first would
142
+ // leave a possibly-still-running pod unwatched and billing when the
143
+ // API call times out or is rejected (codex finding).
144
+ if (w?.watchedPodId() === args.pod_id)
111
145
  w?.unwatch();
112
146
  // If comfyui-mcp was pointed at THIS pod, its proxy URL is now dead —
113
147
  // fall back to the local ComfyUI so rendering keeps working (the swap
114
- // half of the local⇄pod flow). Only when we were connected to it.
148
+ // half of the local⇄pod flow). The ORCHESTRATOR decides whether its
149
+ // authoritative target matches (onlyIfTarget) — a spawned child's own
150
+ // base URL can be a turn stale (codex finding: stopping B while the
151
+ // child lagged on A left the orchestrator on B's dead proxy).
115
152
  let localNote = "";
116
- if (wasConnected) {
117
- const url = retargetLocal();
118
- localNote = ` comfyui-mcp switched back to local ComfyUI (${url}).`;
153
+ if (progressEnabled()) {
154
+ const r = await retargetLocal(args.pod_id);
155
+ localNote = r.applied && r.url
156
+ ? ` comfyui-mcp switched back to local ComfyUI (${r.url}).`
157
+ : r.applied
158
+ ? " comfyui-mcp is switching back to the local ComfyUI (the orchestrator resolves the target)."
159
+ : " the session's active target moved to another pod in the meantime — leaving it there.";
160
+ }
161
+ else if (getComfyUIBaseUrl().includes(args.pod_id)) {
162
+ // In-process: this IS the orchestrator — the local check is current.
163
+ const r = await retargetLocal(args.pod_id);
164
+ localNote = r.applied && r.url ? ` comfyui-mcp switched back to local ComfyUI (${r.url}).` : "";
119
165
  }
120
166
  return { content: [{ type: "text", text: `Stopped pod \`${r.id}\` → **${r.desiredStatus}**. GPU released; disk kept.${localNote} Start it again with runpod_pod_start.` }] };
121
167
  }
@@ -128,7 +174,7 @@ export function registerRunpodTools(server) {
128
174
  name: z.string().optional().describe("Pod name (default 'comfyui-mcp')."),
129
175
  gpu_type: z.string().optional().describe(`GPU type to prefer, e.g. "NVIDIA GeForce RTX 4090". Default tries: ${RUNPOD_DEFAULT_GPU_TYPES.join(", ")}.`),
130
176
  cloud_type: z.enum(["COMMUNITY", "SECURE"]).optional().describe("COMMUNITY (cheaper, default) or SECURE."),
131
- connect: z.boolean().optional().describe("After it boots, wait and auto-connect comfyui-mcp to it (default false — deploy returns immediately; the pod still needs ~1-3min to boot)."),
177
+ connect: z.boolean().optional().describe("Auto-connect when booted: the ORCHESTRATOR waits for ComfyUI to answer (1-3min), then retargets + watches — this call returns immediately (default false: deploy only; connect later with runpod_pod_connect)."),
132
178
  }, async (args) => {
133
179
  try {
134
180
  const pod = await createPod({
@@ -138,8 +184,108 @@ export function registerRunpodTools(server) {
138
184
  });
139
185
  const cost = pod.costPerHr != null ? ` at $${pod.costPerHr.toFixed(3)}/hr` : "";
140
186
  const gpu = pod.machine?.gpuDisplayName ? ` on ${pod.machine.gpuDisplayName}` : "";
141
- // Broadcast its status to the control panels while it boots.
142
- getRunpodWatcher()?.watch(pod.id);
187
+ // Broadcast its status to the control panels while it boots — including
188
+ // the spawned-child case: a watch-ONLY control request (no retarget yet)
189
+ // so the orchestrator starts broadcasting immediately, not just after
190
+ // the readiness wait (codex finding: boot-time + timeout path were
191
+ // unwatched while the result claimed live status). NEVER displace an
192
+ // ACTIVE render target's watch for this — the current pod's idle
193
+ // auto-stop / dead-target cleanup is its billing guard (codex). Track
194
+ // whether it actually GOT watched so the result doesn't claim otherwise
195
+ // (codex finding: guarded-out creates still said "status broadcasting").
196
+ let watchedNow = false;
197
+ let activeOtherPod = null;
198
+ if (getRunpodWatcher()) {
199
+ const w = getRunpodWatcher();
200
+ const cur = w.watchedPodId();
201
+ const curIsActiveTarget = !!cur && getComfyUIBaseUrl().includes(cur);
202
+ if (curIsActiveTarget && cur !== pod.id)
203
+ activeOtherPod = cur;
204
+ if (!activeOtherPod) {
205
+ w.watch(pod.id);
206
+ watchedNow = true;
207
+ }
208
+ }
209
+ // Queue the orchestrator watch ONLY when this process has no watcher
210
+ // (spawned child) — in-process the direct watch above already applied
211
+ // synchronously, and a delayed duplicate could re-watch after a user's
212
+ // unwatch; the wantAck would also never be consumed (codex finding).
213
+ const watchReqFile = getRunpodWatcher() ? null : requestTargetChange({ watchPodId: pod.id, wantAck: true });
214
+ // In the spawned child the watcher is null — confirm the orchestrator
215
+ // actually accepted the watch (its active-target guard may REFUSE it
216
+ // to protect the current pod; claiming otherwise would lie — codex).
217
+ let watchedEffectively = watchedNow;
218
+ let watchUnknown = false;
219
+ if (!watchedEffectively && watchReqFile) {
220
+ const ack = await awaitTargetApplied(watchReqFile, 3_000);
221
+ if (ack)
222
+ watchedEffectively = ack.applied;
223
+ else
224
+ watchUnknown = true; // NO ack: unconfirmed — never claim watched (codex)
225
+ }
226
+ const watchNote = watchedNow
227
+ ? "Live status is broadcasting to the control panel (idle auto-stop active)."
228
+ : watchedEffectively
229
+ ? "Live status broadcasts on the orchestrator's next poll (idle auto-stop active)."
230
+ : watchUnknown
231
+ ? `Live status was requested but is UNCONFIRMED (no orchestrator ack yet) — check \`${pod.id}\` with runpod_pod_status in a moment; idle auto-stop may not be armed yet.`
232
+ : `NOTE: still rendering on the current pod — \`${pod.id}\` is booting UNWATCHED (its idle auto-stop is NOT armed) so the active pod keeps its billing guard; it gets watched when it becomes the target — or watch it yourself with runpod_watch once the current pod is free.`;
233
+ if (args.connect) {
234
+ // connect: true actually connects (#269 — it was a documented no-op),
235
+ // but the WAIT lives in the orchestrator, not here: an MCP tool call
236
+ // dies at the SDK's 60s default timeout while a pod takes 1-3min to
237
+ // boot (codex finding). Ask the orchestrator to probe until ready,
238
+ // then retarget+watch; this call returns immediately. NO channel
239
+ // (headless MCP server, no progress dir) → say so honestly instead of
240
+ // promising an auto-connect nothing will perform (codex).
241
+ const url = runpodProxyUrl(pod.id);
242
+ const reqFile = requestTargetChange({ watchPodId: pod.id, connectWhenReady: { url, podId: pod.id }, expectedCurrentUrl: getComfyUIBaseUrl(), wantAck: true });
243
+ if (!reqFile) {
244
+ return {
245
+ content: [
246
+ {
247
+ type: "text",
248
+ text: `🚀 Deployed pod \`${pod.id}\` (${pod.name || "comfyui-mcp"})${gpu}${cost}. It's booting (~1-3min) — auto-connect AND live status/idle auto-stop are unavailable in this mode (no panel orchestrator), so connect once it's up with runpod_pod_connect \`${pod.id}\`, watch it with runpod_pod_status, and stop it with runpod_pod_stop when done to end billing.\n\n${GPU_CLI_CREDIT}`,
249
+ },
250
+ ],
251
+ };
252
+ }
253
+ // Confirm the registration actually landed (a newer target choice
254
+ // can generation-reject it — codex finding: the tool still promised
255
+ // auto-connect while no pending entry existed). A MISSING ack (e.g.
256
+ // the channel dir rotating under a restart) is UNCONFIRMED, not a
257
+ // promise (codex finding).
258
+ const regAck = await awaitTargetApplied(reqFile, 4_000);
259
+ if (!regAck) {
260
+ return {
261
+ content: [
262
+ {
263
+ type: "text",
264
+ text: `🚀 Deployed pod \`${pod.id}\` (${pod.name || "comfyui-mcp"})${gpu}${cost}. It's booting — auto-connect is UNCONFIRMED (the orchestrator hasn't acked the registration). Check \`${pod.id}\` with runpod_pod_status in a moment, or connect manually with runpod_pod_connect when it's ready. Stop it with runpod_pod_stop when done to end billing.\n\n${GPU_CLI_CREDIT}`,
265
+ },
266
+ ],
267
+ };
268
+ }
269
+ if (!regAck.applied) {
270
+ return {
271
+ content: [
272
+ {
273
+ type: "text",
274
+ text: `🚀 Deployed pod \`${pod.id}\` (${pod.name || "comfyui-mcp"})${gpu}${cost}. It's booting, but auto-connect was SKIPPED — a newer target choice won the race. Connect manually when ready: runpod_pod_connect \`${pod.id}\`. Stop it with runpod_pod_stop when done to end billing.\n\n${GPU_CLI_CREDIT}`,
275
+ },
276
+ ],
277
+ };
278
+ }
279
+ return {
280
+ content: [
281
+ {
282
+ type: "text",
283
+ text: `🚀 Deployed pod \`${pod.id}\` (${pod.name || "comfyui-mcp"})${gpu}${cost}. It's booting — the orchestrator will AUTO-CONNECT when ComfyUI answers (usually 1-3min; it gives up honestly after 8). ` +
284
+ `${watchNote} Stop it with runpod_pod_stop when done to end billing.\n\n${GPU_CLI_CREDIT}`,
285
+ },
286
+ ],
287
+ };
288
+ }
143
289
  return {
144
290
  content: [
145
291
  {
@@ -147,7 +293,7 @@ export function registerRunpodTools(server) {
147
293
  text: `🚀 Deployed pod \`${pod.id}\` (${pod.name || "comfyui-mcp"})${gpu}${cost}. ` +
148
294
  `It's booting now — ComfyUI takes ~1-3min to come up (model volume warm-up on first boot). ` +
149
295
  `Watch it with runpod_pod_status, then runpod_pod_connect \`${pod.id}\` once ready. ` +
150
- `Live status is broadcasting to the control panel (idle auto-stop active). ` +
296
+ `${watchNote} ` +
151
297
  `Stop it with runpod_pod_stop when done to end billing.\n\n${GPU_CLI_CREDIT}`,
152
298
  },
153
299
  ],
@@ -163,12 +309,16 @@ export function registerRunpodTools(server) {
163
309
  const w = getRunpodWatcher();
164
310
  const was = w?.watchedPodId();
165
311
  w?.unwatch();
166
- const url = retargetLocal();
312
+ const r = await retargetLocal();
167
313
  return {
168
314
  content: [
169
315
  {
170
316
  type: "text",
171
- text: `✅ comfyui-mcp now targets the local ComfyUI (${url}). Renders run on this machine.` +
317
+ text: (r.applied && r.url
318
+ ? `✅ comfyui-mcp now targets the local ComfyUI (${r.url}). Renders run on this machine.`
319
+ : r.applied
320
+ ? `✅ comfyui-mcp is switching back to the local ComfyUI — the orchestrator resolves its remembered target and un-watches the pod.`
321
+ : `⚠️ The local switch was skipped — the active target changed in the meantime (check runpod_status / the host pill).`) +
172
322
  (was ? ` Pod \`${was}\` is still running — stop it with runpod_pod_stop to end billing, or reconnect with runpod_pod_connect.` : ""),
173
323
  },
174
324
  ],
@@ -253,15 +403,53 @@ export function registerRunpodTools(server) {
253
403
  if (!comfyuiPortExposed(pod)) {
254
404
  return { content: [{ type: "text", text: `Pod \`${pod.id}\` is RUNNING but doesn't expose ComfyUI on port ${RUNPOD_COMFYUI_PORT} — run runpod_pod_troubleshoot for the fix.` }] };
255
405
  }
406
+ // The generation guard needs the PRE-retarget view (the target I
407
+ // believe the orchestrator is on NOW) — capturing it after
408
+ // setComfyuiTarget would stamp the NEW url and the orchestrator would
409
+ // reject its own legitimate request every time (codex finding).
410
+ const preRetargetUrl = getComfyUIBaseUrl();
256
411
  const url = runpodProxyUrl(pod.id);
257
412
  const probeRes = await probe(`${url}/system_stats`);
258
413
  if (!probeRes.ok) {
259
414
  return { content: [{ type: "text", text: `Pod \`${pod.id}\` exposes ComfyUI but it isn't answering yet at ${url} (${probeRes.status ?? probeRes.error}). It may still be booting — wait ~30s, or run runpod_pod_troubleshoot.` }] };
260
415
  }
416
+ // Readiness needs MORE than /system_stats (#269): a ComfyUI whose core is
417
+ // up but whose queue/prompt endpoint is broken would answer /system_stats
418
+ // yet fail every render. Verify /queue answers too before declaring ready.
419
+ const queueProbe = await probe(`${url}/queue`);
420
+ if (!queueProbe.ok) {
421
+ return { content: [{ type: "text", text: `Pod \`${pod.id}\` answers /system_stats but its queue endpoint isn't ready at ${url} (${queueProbe.status ?? queueProbe.error}) — ComfyUI may still be initializing. Wait ~30s, or run runpod_pod_troubleshoot.` }] };
422
+ }
261
423
  const applied = setComfyuiTarget(url);
262
424
  if (!applied)
263
425
  return { content: [{ type: "text", text: `Resolved ${url} but could not retarget (unexpected URL parse failure).` }] };
264
426
  resetClient();
427
+ // Cover the spawned-child case ONLY: it asks the orchestrator to
428
+ // retarget + watch through the control channel (#269). In-process the
429
+ // direct path already did everything synchronously — replaying the
430
+ // same URL through the channel up to 700ms later could overwrite a
431
+ // NEWER choice made meanwhile (codex finding). The generation guard
432
+ // (expectedCurrentUrl) lets the orchestrator drop it if one happened.
433
+ if (progressEnabled()) {
434
+ // Confirm the AUTHORITATIVE retarget before reporting success: the
435
+ // generation guard may have rejected this (a newer target won), and
436
+ // only the child's private config changed otherwise (codex finding).
437
+ const reqFile = requestTargetChange({ url, watchPodId: pod.id, expectedCurrentUrl: preRetargetUrl, wantAck: true });
438
+ const ack = reqFile ? await awaitTargetApplied(reqFile, 4_000) : null;
439
+ if (!ack?.applied) {
440
+ // Rejected by the generation guard (a newer target won) — realign
441
+ // THIS child to the authoritative target too, or it keeps using
442
+ // the rejected pod for the rest of the turn (codex finding).
443
+ if (ack?.url) {
444
+ setComfyuiTarget(ack.url);
445
+ resetClient();
446
+ }
447
+ return { content: [{ type: "text", text: `⚠️ Pod \`${pod.id}\` is ready at ${url}, but the session did NOT retarget — the orchestrator moved to a newer target in the meantime (or the request didn't land). Retry runpod_pod_connect \`${pod.id}\` if that's wrong.` }] };
448
+ }
449
+ // Align this child to the confirmed target (its setComfyuiTarget
450
+ // above already did, but keep it explicit after the ack).
451
+ return { content: [{ type: "text", text: `✅ Connected to RunPod pod \`${pod.id}\` — comfyui-mcp now targets ${url}. All comfyui tools this session run against the pod. Live status is now broadcasting to the control panel (with idle auto-stop).` }] };
452
+ }
265
453
  // Start live status broadcasts + idle auto-stop for this pod (control panels).
266
454
  getRunpodWatcher()?.watch(pod.id);
267
455
  return { content: [{ type: "text", text: `✅ Connected to RunPod pod \`${pod.id}\` — comfyui-mcp now targets ${url}. All comfyui tools this session run against the pod. Live status is now broadcasting to the control panel (with idle auto-stop).` }] };
@@ -1 +1 @@
1
- {"version":3,"file":"runpod.js","sourceRoot":"","sources":["../../src/tools/runpod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runpod.js","sourceRoot":"","sources":["../../src/tools/runpod.ts"],"names":[],"mappings":"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"}