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.
- package/README.md +2 -2
- package/dist/config.js +159 -11
- package/dist/config.js.map +1 -1
- package/dist/orchestrator/ai-proposer.js +5 -0
- package/dist/orchestrator/ai-proposer.js.map +1 -1
- package/dist/orchestrator/antigravity-backend.js +394 -52
- package/dist/orchestrator/antigravity-backend.js.map +1 -1
- package/dist/orchestrator/claude-backend.js +13 -0
- package/dist/orchestrator/claude-backend.js.map +1 -1
- package/dist/orchestrator/codex-backend.js +12 -1
- package/dist/orchestrator/codex-backend.js.map +1 -1
- package/dist/orchestrator/gemini-backend.js +8 -1
- package/dist/orchestrator/gemini-backend.js.map +1 -1
- package/dist/orchestrator/grok-backend.js +9 -5
- package/dist/orchestrator/grok-backend.js.map +1 -1
- package/dist/orchestrator/index.js +603 -50
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/panel-agent.js +21 -5
- package/dist/orchestrator/panel-agent.js.map +1 -1
- package/dist/orchestrator/panel-console-http.js +1 -0
- package/dist/orchestrator/panel-console-http.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +140 -9
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/services/ai-toolkit.js +260 -3
- package/dist/services/ai-toolkit.js.map +1 -1
- package/dist/services/download-progress.js +177 -7
- package/dist/services/download-progress.js.map +1 -1
- package/dist/services/missing-models.js +295 -0
- package/dist/services/missing-models.js.map +1 -0
- package/dist/services/openai-provider-registry.js +20 -1
- package/dist/services/openai-provider-registry.js.map +1 -1
- package/dist/services/panel-secrets.js +58 -7
- package/dist/services/panel-secrets.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-client.js +157 -9
- package/dist/services/runpod-client.js.map +1 -1
- package/dist/services/runpod-ssh.js +594 -0
- package/dist/services/runpod-ssh.js.map +1 -0
- package/dist/services/runpod-watch.js +192 -13
- 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/services/trainer-bootstrap.js +142 -0
- package/dist/services/trainer-bootstrap.js.map +1 -0
- package/dist/services/training-config.js +4 -1
- package/dist/services/training-config.js.map +1 -1
- package/dist/services/training-jobs.js +1332 -253
- package/dist/services/training-jobs.js.map +1 -1
- package/dist/tools/apps.js +222 -0
- package/dist/tools/apps.js.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/missing-models.js +151 -0
- package/dist/tools/missing-models.js.map +1 -0
- package/dist/tools/process-control.js +1 -1
- package/dist/tools/process-control.js.map +1 -1
- package/dist/tools/runpod.js +205 -17
- package/dist/tools/runpod.js.map +1 -1
- package/dist/tools/train.js +138 -5
- package/dist/tools/train.js.map +1 -1
- package/docker/trainer/Dockerfile +4 -2
- package/package.json +1 -1
- 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,
|
|
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"}
|
package/dist/tools/runpod.js
CHANGED
|
@@ -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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
110
|
-
|
|
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).
|
|
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 (
|
|
117
|
-
const
|
|
118
|
-
localNote =
|
|
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("
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
312
|
+
const r = await retargetLocal();
|
|
167
313
|
return {
|
|
168
314
|
content: [
|
|
169
315
|
{
|
|
170
316
|
type: "text",
|
|
171
|
-
text:
|
|
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).` }] };
|
package/dist/tools/runpod.js.map
CHANGED
|
@@ -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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"}
|