comfyui-mcp 0.13.0 → 0.14.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/.beads/hooks/post-checkout +24 -0
- package/.beads/hooks/post-merge +24 -0
- package/.beads/hooks/pre-commit +24 -0
- package/.beads/hooks/pre-push +24 -0
- package/.beads/hooks/prepare-commit-msg +24 -0
- package/.gitattributes +4 -0
- package/CHANGELOG.md +90 -0
- package/README.md +6 -4
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/index.js +132 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/panel-agent.js +227 -0
- package/dist/orchestrator/panel-agent.js.map +1 -0
- package/dist/services/ui-bridge.js +137 -76
- package/dist/services/ui-bridge.js.map +1 -1
- package/dist/tools/workflow-compose.js +4 -4
- package/dist/tools/workflow-compose.js.map +1 -1
- package/dist/tools/workflow-deps.js +2 -2
- package/dist/tools/workflow-deps.js.map +1 -1
- package/dist/tools/workflow-library.js +1 -1
- package/dist/tools/workflow-library.js.map +1 -1
- package/dist/tools/workflow-validate.js +1 -1
- package/dist/tools/workflow-validate.js.map +1 -1
- package/dist/tools/workflow-visualize.js +2 -2
- package/dist/tools/workflow-visualize.js.map +1 -1
- package/dist/transport/cli.js +6 -1
- package/dist/transport/cli.js.map +1 -1
- package/package.json +8 -4
- package/packs/README.md +65 -0
- package/packs/anima/install-runpod.sh +49 -0
- package/packs/anima/install-windows.bat +55 -0
- package/packs/anima/manifest.yaml +72 -0
- package/packs/anima/pack.yaml +25 -0
- package/packs/anima/workflow.json +16026 -0
- package/packs/cozy-flow/install-runpod.sh +35 -0
- package/packs/cozy-flow/install-windows.bat +41 -0
- package/packs/cozy-flow/manifest.yaml +60 -0
- package/packs/cozy-flow/pack.yaml +69 -0
- package/packs/cozy-flow/workflow.json +2552 -0
- package/packs/ernie/install-runpod.sh +35 -0
- package/packs/ernie/install-windows.bat +41 -0
- package/packs/ernie/manifest.yaml +47 -0
- package/packs/ernie/pack.yaml +46 -0
- package/packs/ernie/workflow.json +16050 -0
- package/packs/ideogram/install-runpod.sh +29 -0
- package/packs/ideogram/install-windows.bat +35 -0
- package/packs/ideogram/manifest.yaml +29 -0
- package/packs/ideogram/pack.yaml +38 -0
- package/packs/ideogram/templates/01_Film_Poster.json +71 -0
- package/packs/ideogram/templates/02_TShirt_Graphic_Print.json +34 -0
- package/packs/ideogram/templates/03_Fantasy_Book_Cover.json +69 -0
- package/packs/ideogram/templates/04_Event_Flyer_Poster.json +82 -0
- package/packs/ideogram/templates/05_Comic_Book_Cover.json +84 -0
- package/packs/ideogram/templates/06_Company_Logo_Concept_Board.json +114 -0
- package/packs/ideogram/templates/07_Personal_Branding_Sheet.json +75 -0
- package/packs/ideogram/templates/08_Social_Media_Branding_Kit.json +92 -0
- package/packs/ideogram/templates/09_Mascot_Brand_Kit.json +89 -0
- package/packs/ideogram/templates/10_Luxury_Brand_Identity.json +120 -0
- package/packs/ideogram/templates/11_Food_Promo_Poster.json +156 -0
- package/packs/ideogram/templates/12_Real_Estate_Promotion.json +117 -0
- package/packs/ideogram/templates/13_Restaurant_Fast_Food_Menu.json +123 -0
- package/packs/ideogram/templates/14_Product_Advertisement.json +114 -0
- package/packs/ideogram/templates/15_Tech_Service_Promotion.json +132 -0
- package/packs/ideogram/templates/16_2D_Character_Sheet.json +71 -0
- package/packs/ideogram/templates/17_3D_Character_Sheet.json +63 -0
- package/packs/ideogram/templates/18_Game_Item_Asset_Sheet.json +135 -0
- package/packs/ideogram/templates/19_Magazine_Cover_Design.json +108 -0
- package/packs/ideogram/templates/20_Trading_Card_Design.json +108 -0
- package/packs/ideogram/templates/21_Painting_Style_Scene.json +51 -0
- package/packs/ideogram/templates/22_Anime_Magazine_Cover.json +114 -0
- package/packs/ideogram/templates/23_Anime_Poster.json +127 -0
- package/packs/ideogram/templates/24_Realistic_Photoshoot_Scene.json +18 -0
- package/packs/ideogram/templates/25_Cross_Style_Group_Photo.json +28 -0
- package/packs/ideogram/templates/README_IDEOGRAM4_TEMPLATE_PACK.txt +470 -0
- package/packs/ideogram/workflow.json +6472 -0
- package/packs/ltx-2.3/fix-ltxvideo-kornia.bat +122 -0
- package/packs/ltx-2.3/fix-ltxvideo-kornia.sh +91 -0
- package/packs/ltx-2.3/install-runpod.sh +44 -0
- package/packs/ltx-2.3/install-windows.bat +50 -0
- package/packs/ltx-2.3/manifest.yaml +58 -0
- package/packs/ltx-2.3/pack.yaml +48 -0
- package/packs/qwen-image/install-runpod.sh +42 -0
- package/packs/qwen-image/install-windows.bat +48 -0
- package/packs/qwen-image/manifest.yaml +77 -0
- package/packs/qwen-image/pack.yaml +45 -0
- package/packs/qwen-image-edit/install-runpod.sh +39 -0
- package/packs/qwen-image-edit/install-windows.bat +45 -0
- package/packs/qwen-image-edit/manifest.yaml +74 -0
- package/packs/qwen-image-edit/pack.yaml +45 -0
- package/packs/qwen-image-edit/workflow-inpainting.json +2351 -0
- package/packs/qwen-image-edit/workflow.json +2089 -0
- package/packs/wan-animate/install-runpod.sh +39 -0
- package/packs/wan-animate/install-windows.bat +45 -0
- package/packs/wan-animate/manifest.yaml +57 -0
- package/packs/wan-animate/pack.yaml +49 -0
- package/packs/wan-animate/workflow.json +6993 -0
- package/packs/wan-longer-videos/install-runpod.sh +39 -0
- package/packs/wan-longer-videos/install-windows.bat +45 -0
- package/packs/wan-longer-videos/manifest.yaml +71 -0
- package/packs/wan-longer-videos/pack.yaml +42 -0
- package/packs/wan-longer-videos/workflow.json +22538 -0
- package/packs/wan-transparent/expression-renamer.bat +21 -0
- package/packs/wan-transparent/install-runpod.sh +35 -0
- package/packs/wan-transparent/install-windows.bat +41 -0
- package/packs/wan-transparent/manifest.yaml +49 -0
- package/packs/wan-transparent/pack.yaml +49 -0
- package/packs/wan-transparent/workflow.json +2194 -0
- package/packs/z-image-base/install-runpod.sh +40 -0
- package/packs/z-image-base/install-windows.bat +46 -0
- package/packs/z-image-base/manifest.yaml +75 -0
- package/packs/z-image-base/pack.yaml +39 -0
- package/packs/z-image-base/workflow.json +15198 -0
- package/packs/z-image-turbo/install-runpod.sh +39 -0
- package/packs/z-image-turbo/install-windows.bat +45 -0
- package/packs/z-image-turbo/manifest.yaml +61 -0
- package/packs/z-image-turbo/pack.yaml +40 -0
- package/packs/z-image-turbo/workflow.json +12120 -0
- package/packs/z-image-xy-plot/install-runpod.sh +33 -0
- package/packs/z-image-xy-plot/install-windows.bat +39 -0
- package/packs/z-image-xy-plot/manifest.yaml +61 -0
- package/packs/z-image-xy-plot/pack.yaml +49 -0
- package/packs/z-image-xy-plot/workflow.json +5302 -0
- package/plugin/.claude-plugin/plugin.json +10 -0
- package/plugin/agents/debugger.md +171 -0
- package/plugin/agents/explorer.md +65 -0
- package/plugin/agents/optimizer.md +196 -0
- package/plugin/agents/researcher.md +56 -0
- package/plugin/commands/batch.md +90 -0
- package/plugin/commands/compare.md +83 -0
- package/plugin/commands/convert.md +78 -0
- package/plugin/commands/debug.md +72 -0
- package/plugin/commands/director.md +134 -0
- package/plugin/commands/gallery.md +61 -0
- package/plugin/commands/gen.md +110 -0
- package/plugin/commands/install.md +68 -0
- package/plugin/commands/node-skill.md +39 -0
- package/plugin/commands/recipe.md +125 -0
- package/plugin/commands/viz.md +39 -0
- package/plugin/hooks/hooks.json +36 -0
- package/plugin/hooks/job-complete-notify.mjs +110 -0
- package/plugin/hooks/open-latest-image.mjs +82 -0
- package/plugin/hooks/save-warning.mjs +21 -0
- package/plugin/hooks/vram-check.mjs +72 -0
- package/plugin/skills/ai-toolkit-trainer/SKILL.md +145 -0
- package/plugin/skills/anima-base/SKILL.md +240 -0
- package/plugin/skills/anima-lora-trainer/SKILL.md +162 -0
- package/plugin/skills/civitai/SKILL.md +107 -0
- package/plugin/skills/comfyui-core/SKILL.md +264 -0
- package/plugin/skills/comfyui-core/references/common-nodes.md +149 -0
- package/plugin/skills/comfyui-frontend-extensions/SKILL.md +502 -0
- package/plugin/skills/comfyui-frontend-extensions/references/migrate-v1-to-v2.md +222 -0
- package/plugin/skills/comfyui-node-registry/SKILL.md +218 -0
- package/plugin/skills/comfyui-node-registry/references/pyproject.toml +65 -0
- package/plugin/skills/director/SKILL.md +321 -0
- package/plugin/skills/ernie-image/SKILL.md +225 -0
- package/plugin/skills/flux-txt2img/SKILL.md +285 -0
- package/plugin/skills/ideogram-ultra/SKILL.md +337 -0
- package/plugin/skills/installer-packs/SKILL.md +74 -0
- package/plugin/skills/ltxv2-video/SKILL.md +515 -0
- package/plugin/skills/model-compatibility/SKILL.md +434 -0
- package/plugin/skills/model-registry/SKILL.md +101 -0
- package/plugin/skills/prompt-engineering/SKILL.md +304 -0
- package/plugin/skills/qwen-image-edit/SKILL.md +282 -0
- package/plugin/skills/qwen-txt2img/SKILL.md +332 -0
- package/plugin/skills/troubleshooting/SKILL.md +424 -0
- package/plugin/skills/wan-flf-video/SKILL.md +514 -0
- package/plugin/skills/wan-t2v-video/SKILL.md +322 -0
- package/plugin/skills/z-image-txt2img/SKILL.md +294 -0
- package/scripts/check-model-urls.mjs +160 -0
- package/scripts/gen-pack-installers.mjs +133 -0
- package/scripts/gen-tool-docs.ts +4 -8
- package/scripts/panel-sim.mjs +56 -0
- package/scripts/test-packs.sh +87 -0
- package/scripts/validate-manifests.mjs +29 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// Panel agent — one persistent Claude Agent SDK streaming session per ComfyUI
|
|
2
|
+
// panel tab. This is the autonomous background driver for the sidebar panel: the
|
|
3
|
+
// orchestrator (src/orchestrator/index.ts) owns the UI bridge and feeds each
|
|
4
|
+
// tab's user messages into that tab's session here; the agent's replies flow
|
|
5
|
+
// back out to the panel chat.
|
|
6
|
+
//
|
|
7
|
+
// Why the Agent SDK (not --sdk-url / CCR-v2): we need a persistent background
|
|
8
|
+
// agent with a live "channel in" (push messages over time), interrupt/inject,
|
|
9
|
+
// and SUBSCRIPTION auth with no API key — without patching the claude binary.
|
|
10
|
+
// `query({ prompt: <async generator> })` is exactly that: the generator stays
|
|
11
|
+
// open (the channel in), `Query.interrupt()` stops a live turn, and with
|
|
12
|
+
// ANTHROPIC_API_KEY unset the SDK reads the on-disk claude.ai OAuth login
|
|
13
|
+
// (verified: the session reports apiKeySource=none on this machine).
|
|
14
|
+
//
|
|
15
|
+
// The spawned agent runs THIS comfyui-mcp build as its MCP server in normal
|
|
16
|
+
// (non-channels) mode, so it talks to the live ComfyUI over COMFYUI_URL and
|
|
17
|
+
// never contends for the bridge port the orchestrator owns.
|
|
18
|
+
import { logger } from "../utils/logger.js";
|
|
19
|
+
// The Agent SDK is an OPTIONAL dependency (it pulls in ~100 packages and is only
|
|
20
|
+
// needed for the panel orchestrator), so load it lazily and fail with a clear
|
|
21
|
+
// message rather than at import time for everyone.
|
|
22
|
+
let queryFn = null;
|
|
23
|
+
async function loadQuery() {
|
|
24
|
+
if (queryFn)
|
|
25
|
+
return queryFn;
|
|
26
|
+
try {
|
|
27
|
+
const mod = await import("@anthropic-ai/claude-agent-sdk");
|
|
28
|
+
queryFn = mod.query;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new Error("The panel orchestrator requires the optional dependency @anthropic-ai/claude-agent-sdk. Install it with: npm i @anthropic-ai/claude-agent-sdk");
|
|
32
|
+
}
|
|
33
|
+
return queryFn;
|
|
34
|
+
}
|
|
35
|
+
function msgOf(err) {
|
|
36
|
+
return err instanceof Error ? err.message : String(err);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* One persistent streaming session for a single panel tab. Messages typed in
|
|
40
|
+
* the panel are queued via `send()` and yielded into the live `query()` session
|
|
41
|
+
* as user turns; the session never closes until `stop()`.
|
|
42
|
+
*/
|
|
43
|
+
export class PanelAgent {
|
|
44
|
+
tabId;
|
|
45
|
+
deps;
|
|
46
|
+
q = null;
|
|
47
|
+
queue = [];
|
|
48
|
+
waiting = null;
|
|
49
|
+
closed = false;
|
|
50
|
+
/** Captured from the session's init message; enables resume across restarts. */
|
|
51
|
+
sessionId = null;
|
|
52
|
+
title;
|
|
53
|
+
constructor(tabId, deps) {
|
|
54
|
+
this.tabId = tabId;
|
|
55
|
+
this.deps = deps;
|
|
56
|
+
}
|
|
57
|
+
short() {
|
|
58
|
+
return this.tabId.slice(0, 8);
|
|
59
|
+
}
|
|
60
|
+
/** Queue a panel message and wake the streaming generator (the "channel in"). */
|
|
61
|
+
send(text, title) {
|
|
62
|
+
if (title)
|
|
63
|
+
this.title = title;
|
|
64
|
+
this.queue.push(text);
|
|
65
|
+
const wake = this.waiting;
|
|
66
|
+
this.waiting = null;
|
|
67
|
+
wake?.();
|
|
68
|
+
}
|
|
69
|
+
/** Stop the current turn without ending the session (a "stop" button). */
|
|
70
|
+
async interrupt() {
|
|
71
|
+
try {
|
|
72
|
+
await this.q?.interrupt();
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
logger.debug(`[panel-agent ${this.short()}] interrupt: ${msgOf(err)}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** End the session and release the agent (tab closed / orchestrator shutdown). */
|
|
79
|
+
async stop() {
|
|
80
|
+
this.closed = true;
|
|
81
|
+
const wake = this.waiting;
|
|
82
|
+
this.waiting = null;
|
|
83
|
+
wake?.(); // let the generator observe `closed` and return
|
|
84
|
+
try {
|
|
85
|
+
await this.q?.interrupt();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// already winding down
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// The streaming "channel in": an async generator that stays open and yields a
|
|
92
|
+
// user turn whenever the panel sends one. The session idles between messages
|
|
93
|
+
// and wakes the moment send() pushes — solving "can't wake an idle session".
|
|
94
|
+
async *channel() {
|
|
95
|
+
while (!this.closed) {
|
|
96
|
+
if (this.queue.length === 0) {
|
|
97
|
+
await new Promise((resolve) => {
|
|
98
|
+
this.waiting = resolve;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (this.closed)
|
|
102
|
+
return;
|
|
103
|
+
const text = this.queue.shift();
|
|
104
|
+
if (text === undefined)
|
|
105
|
+
continue;
|
|
106
|
+
yield {
|
|
107
|
+
type: "user",
|
|
108
|
+
message: { role: "user", content: text },
|
|
109
|
+
parent_tool_use_id: null,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Start the persistent session. Resolves only when the session ends. Safe to
|
|
115
|
+
* call once; `send()` may be called before this resolves (messages queue).
|
|
116
|
+
*/
|
|
117
|
+
async start(resumeSessionId) {
|
|
118
|
+
const query = await loadQuery();
|
|
119
|
+
const options = {
|
|
120
|
+
model: this.deps.model,
|
|
121
|
+
permissionMode: "bypassPermissions",
|
|
122
|
+
// Required alongside bypassPermissions (intentional, isolated background agent).
|
|
123
|
+
allowDangerouslySkipPermissions: true,
|
|
124
|
+
mcpServers: this.deps.mcpServers,
|
|
125
|
+
// Only our comfyui MCP — never inherit the user's project/user MCP config
|
|
126
|
+
// (which may run a second comfyui in --channels mode that grabs the port).
|
|
127
|
+
strictMcpConfig: true,
|
|
128
|
+
systemPrompt: {
|
|
129
|
+
type: "preset",
|
|
130
|
+
preset: "claude_code",
|
|
131
|
+
append: this.deps.systemAppend,
|
|
132
|
+
},
|
|
133
|
+
// Load the bundled comfyui-mcp plugin so the agent has model expertise
|
|
134
|
+
// (IDEOGRAM/WAN/LTX/Qwen/… skills) out of the box — "install the package
|
|
135
|
+
// = expert agent". Omitted if the plugin dir can't be found.
|
|
136
|
+
...(this.deps.pluginPath
|
|
137
|
+
? {
|
|
138
|
+
plugins: [{ type: "local", path: this.deps.pluginPath }],
|
|
139
|
+
skills: "all",
|
|
140
|
+
}
|
|
141
|
+
: {}),
|
|
142
|
+
...(resumeSessionId ? { resume: resumeSessionId } : {}),
|
|
143
|
+
};
|
|
144
|
+
this.q = query({ prompt: this.channel(), options });
|
|
145
|
+
try {
|
|
146
|
+
for await (const message of this.q)
|
|
147
|
+
this.route(message);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (!this.closed) {
|
|
151
|
+
logger.error(`[panel-agent ${this.short()}] stream error: ${msgOf(err)}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
logger.info(`[panel-agent ${this.short()}] session ended`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
route(message) {
|
|
159
|
+
switch (message.type) {
|
|
160
|
+
case "system":
|
|
161
|
+
if (message.subtype === "init") {
|
|
162
|
+
this.sessionId = message.session_id;
|
|
163
|
+
logger.info(`[panel-agent ${this.short()}] init model=${message.model} session=${message.session_id.slice(0, 8)} apiKeySource=${message.apiKeySource} skills=${message.skills?.length ?? 0}`);
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case "assistant": {
|
|
167
|
+
// Relay each text block into the panel chat — progress and final reply.
|
|
168
|
+
const content = (message.message?.content ?? []);
|
|
169
|
+
for (const block of content) {
|
|
170
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
171
|
+
const text = block.text.trim();
|
|
172
|
+
if (text)
|
|
173
|
+
this.deps.onSay(this.tabId, text);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case "result":
|
|
179
|
+
logger.info(`[panel-agent ${this.short()}] turn done (subtype=${message.subtype})`);
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** Owns one PanelAgent per tab id, spawned lazily on the tab's first message. */
|
|
187
|
+
export class PanelAgentManager {
|
|
188
|
+
agents = new Map();
|
|
189
|
+
opts;
|
|
190
|
+
constructor(opts) {
|
|
191
|
+
this.opts = opts;
|
|
192
|
+
}
|
|
193
|
+
/** Route a panel message to its tab's agent, creating the agent if needed. */
|
|
194
|
+
send(tabId, text, meta) {
|
|
195
|
+
let agent = this.agents.get(tabId);
|
|
196
|
+
if (!agent) {
|
|
197
|
+
agent = new PanelAgent(tabId, {
|
|
198
|
+
mcpServers: this.opts.mcpServers,
|
|
199
|
+
systemAppend: this.opts.systemAppend,
|
|
200
|
+
model: this.opts.model,
|
|
201
|
+
onSay: this.opts.onSay,
|
|
202
|
+
pluginPath: this.opts.pluginPath,
|
|
203
|
+
});
|
|
204
|
+
this.agents.set(tabId, agent);
|
|
205
|
+
logger.info(`[panel-orchestrator] spawning agent for tab ${tabId.slice(0, 8)} (${this.agents.size} active)`);
|
|
206
|
+
// Fire-and-forget: start() resolves only when the session ends.
|
|
207
|
+
void agent.start().catch((err) => {
|
|
208
|
+
this.agents.delete(tabId);
|
|
209
|
+
const m = msgOf(err);
|
|
210
|
+
logger.error(`[panel-agent ${tabId.slice(0, 8)}] failed to start: ${m}`);
|
|
211
|
+
this.opts.onSay(tabId, `⚠️ The panel agent could not start: ${m}`);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
agent.send(text, meta?.title);
|
|
215
|
+
}
|
|
216
|
+
async interrupt(tabId) {
|
|
217
|
+
await this.agents.get(tabId)?.interrupt();
|
|
218
|
+
}
|
|
219
|
+
async stopAll() {
|
|
220
|
+
await Promise.all([...this.agents.values()].map((a) => a.stop()));
|
|
221
|
+
this.agents.clear();
|
|
222
|
+
}
|
|
223
|
+
count() {
|
|
224
|
+
return this.agents.size;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=panel-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-agent.js","sourceRoot":"","sources":["../../src/orchestrator/panel-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,112 +19,169 @@ import { WebSocketServer, WebSocket } from "ws";
|
|
|
19
19
|
import { logger } from "../utils/logger.js";
|
|
20
20
|
export const DEFAULT_BRIDGE_PORT = 9101;
|
|
21
21
|
export class UiBridge {
|
|
22
|
+
/** Max EADDRINUSE retries before degrading to "panel unavailable". */
|
|
23
|
+
static MAX_BIND_ATTEMPTS = 5;
|
|
24
|
+
/** Backoff base; delays are 200, 400, 800, 1600, 3200ms (~6.2s total). */
|
|
25
|
+
static BIND_RETRY_BASE_MS = 200;
|
|
22
26
|
wss = null;
|
|
23
27
|
conns = new Map(); // tabId -> connection
|
|
24
28
|
pending = new Map();
|
|
25
29
|
portInUse = false;
|
|
30
|
+
bindRetryTimer = null;
|
|
26
31
|
port;
|
|
27
32
|
/** Tab the user most recently typed in — the default command target. */
|
|
28
33
|
lastActiveTabId = null;
|
|
34
|
+
/** Resolves true once the port is bound, false if binding ultimately fails. */
|
|
35
|
+
readyPromise = null;
|
|
36
|
+
readyResolve = null;
|
|
29
37
|
/** Called for panel-initiated frames (no rid): user messages, hellos. */
|
|
30
38
|
onPanelMessage = null;
|
|
31
39
|
constructor(port = DEFAULT_BRIDGE_PORT) {
|
|
32
40
|
this.port = port;
|
|
33
41
|
}
|
|
34
42
|
start() {
|
|
43
|
+
this.portInUse = false;
|
|
44
|
+
this.readyPromise = new Promise((resolve) => {
|
|
45
|
+
this.readyResolve = resolve;
|
|
46
|
+
});
|
|
47
|
+
this.attemptListen(0);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolves true once the bridge port is bound, false if it ultimately can't
|
|
51
|
+
* bind (port held by another process). Lets a caller that *must* own the port
|
|
52
|
+
* — the panel orchestrator — fail loudly instead of running uselessly.
|
|
53
|
+
*/
|
|
54
|
+
whenReady() {
|
|
55
|
+
return this.readyPromise ?? Promise.resolve(this.wss !== null);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Bind the loopback bridge port, retrying briefly on EADDRINUSE. A fast
|
|
59
|
+
* `/mcp` reconnect can race the previous session's bridge before the OS has
|
|
60
|
+
* released the port; rather than degrade immediately we back off and retry,
|
|
61
|
+
* so the common restart case self-heals. Non-blocking — this never delays
|
|
62
|
+
* MCP stdio startup, which is what matters for the client's init timeout.
|
|
63
|
+
*/
|
|
64
|
+
attemptListen(attempt) {
|
|
35
65
|
// Loopback only — this drives the user's live editor and must never be
|
|
36
66
|
// reachable from the LAN.
|
|
37
67
|
const wss = new WebSocketServer({ port: this.port, host: "127.0.0.1" });
|
|
68
|
+
wss.on("listening", () => {
|
|
69
|
+
this.portInUse = false;
|
|
70
|
+
this.wss = wss;
|
|
71
|
+
logger.info(`[ui-bridge] listening on ws://127.0.0.1:${this.port}`);
|
|
72
|
+
this.readyResolve?.(true);
|
|
73
|
+
this.readyResolve = null;
|
|
74
|
+
});
|
|
38
75
|
wss.on("error", (err) => {
|
|
39
76
|
if (err.code === "EADDRINUSE") {
|
|
40
|
-
this
|
|
41
|
-
logger.warn(`[ui-bridge] port ${this.port} in use — another comfyui-mcp session likely owns the panel`);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
logger.error(`[ui-bridge] server error: ${err.message}`);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
wss.on("connection", (sock) => {
|
|
48
|
-
// The connection is anonymous until its hello frame names a tab id.
|
|
49
|
-
let tabId = null;
|
|
50
|
-
sock.on("message", (buf) => {
|
|
51
|
-
const raw = buf.toString();
|
|
52
|
-
let msg;
|
|
77
|
+
// Discard this server; a fresh one is created per retry.
|
|
53
78
|
try {
|
|
54
|
-
|
|
79
|
+
wss.close();
|
|
55
80
|
}
|
|
56
81
|
catch {
|
|
57
|
-
|
|
58
|
-
return;
|
|
82
|
+
// Nothing bound to clean up.
|
|
59
83
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
existing.sock.close();
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// Already gone.
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
this.conns.set(tabId, {
|
|
74
|
-
sock,
|
|
75
|
-
tabId,
|
|
76
|
-
title: typeof msg.title === "string" && msg.title ? msg.title : "untitled",
|
|
77
|
-
connectedAt: existing?.connectedAt ?? new Date().toISOString(),
|
|
78
|
-
});
|
|
79
|
-
logger.info(`[ui-bridge] panel tab connected: ${tabId.slice(0, 8)} (“${this.conns.get(tabId)?.title}”) — ${this.conns.size} tab(s) total`);
|
|
80
|
-
this.onPanelMessage?.(msg);
|
|
84
|
+
if (attempt < UiBridge.MAX_BIND_ATTEMPTS) {
|
|
85
|
+
const delay = UiBridge.BIND_RETRY_BASE_MS * 2 ** attempt;
|
|
86
|
+
logger.warn(`[ui-bridge] port ${this.port} in use — a previous session may still be releasing it; retrying in ${delay}ms (attempt ${attempt + 1}/${UiBridge.MAX_BIND_ATTEMPTS})`);
|
|
87
|
+
this.bindRetryTimer = setTimeout(() => {
|
|
88
|
+
this.bindRetryTimer = null;
|
|
89
|
+
this.attemptListen(attempt + 1);
|
|
90
|
+
}, delay);
|
|
81
91
|
return;
|
|
82
92
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
this.portInUse = true;
|
|
94
|
+
logger.warn(`[ui-bridge] port ${this.port} still in use after ${UiBridge.MAX_BIND_ATTEMPTS} attempts — another comfyui-mcp session likely owns the panel. This session's MCP tools still work, but panel_* commands are unavailable until that session exits.`);
|
|
95
|
+
this.readyResolve?.(false);
|
|
96
|
+
this.readyResolve = null;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
logger.error(`[ui-bridge] server error: ${err.message}`);
|
|
100
|
+
// If we never reached "listening", unblock any whenReady() waiter.
|
|
101
|
+
this.readyResolve?.(false);
|
|
102
|
+
this.readyResolve = null;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
wss.on("connection", (sock) => this.handleConnection(sock));
|
|
106
|
+
}
|
|
107
|
+
handleConnection(sock) {
|
|
108
|
+
// The connection is anonymous until its hello frame names a tab id.
|
|
109
|
+
let tabId = null;
|
|
110
|
+
sock.on("message", (buf) => {
|
|
111
|
+
const raw = buf.toString();
|
|
112
|
+
let msg;
|
|
113
|
+
try {
|
|
114
|
+
msg = JSON.parse(raw);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
logger.warn("[ui-bridge] dropping malformed frame from panel");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Hello: register (or refresh) this connection under its tab id.
|
|
121
|
+
if (msg.type === "hello" && typeof msg.tab_id === "string") {
|
|
122
|
+
tabId = msg.tab_id;
|
|
123
|
+
const existing = this.conns.get(tabId);
|
|
124
|
+
if (existing && existing.sock !== sock) {
|
|
125
|
+
// Same tab reconnected (reload) — supersede the stale socket.
|
|
126
|
+
try {
|
|
127
|
+
existing.sock.close();
|
|
92
128
|
}
|
|
93
|
-
|
|
94
|
-
|
|
129
|
+
catch {
|
|
130
|
+
// Already gone.
|
|
95
131
|
}
|
|
96
|
-
return;
|
|
97
132
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
133
|
+
this.conns.set(tabId, {
|
|
134
|
+
sock,
|
|
135
|
+
tabId,
|
|
136
|
+
title: typeof msg.title === "string" && msg.title ? msg.title : "untitled",
|
|
137
|
+
connectedAt: existing?.connectedAt ?? new Date().toISOString(),
|
|
138
|
+
});
|
|
139
|
+
logger.info(`[ui-bridge] panel tab connected: ${tabId.slice(0, 8)} (“${this.conns.get(tabId)?.title}”) — ${this.conns.size} tab(s) total`);
|
|
140
|
+
this.onPanelMessage?.(msg);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const rid = typeof msg.rid === "string" ? msg.rid : undefined;
|
|
144
|
+
if (rid) {
|
|
145
|
+
const p = this.pending.get(rid);
|
|
146
|
+
if (!p)
|
|
147
|
+
return; // late reply for a timed-out command
|
|
148
|
+
clearTimeout(p.timer);
|
|
149
|
+
this.pending.delete(rid);
|
|
150
|
+
if (msg.ok) {
|
|
151
|
+
p.resolve(msg.result);
|
|
107
152
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (tabId && this.conns.get(tabId)?.sock === sock) {
|
|
111
|
-
this.conns.delete(tabId);
|
|
112
|
-
if (this.lastActiveTabId === tabId)
|
|
113
|
-
this.lastActiveTabId = null;
|
|
114
|
-
logger.info(`[ui-bridge] panel tab disconnected: ${tabId.slice(0, 8)} — ${this.conns.size} tab(s) remain`);
|
|
153
|
+
else {
|
|
154
|
+
p.reject(new Error(String(msg.error ?? "panel reported an error")));
|
|
115
155
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Panel-initiated event. Stamp the tab and track activity.
|
|
159
|
+
if (typeof msg.type === "string") {
|
|
160
|
+
if (tabId) {
|
|
161
|
+
msg.tab_id = tabId;
|
|
162
|
+
msg.title = this.conns.get(tabId)?.title;
|
|
163
|
+
if (msg.type === "user_message")
|
|
164
|
+
this.lastActiveTabId = tabId;
|
|
123
165
|
}
|
|
124
|
-
|
|
166
|
+
this.onPanelMessage?.(msg);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
sock.on("close", () => {
|
|
170
|
+
if (tabId && this.conns.get(tabId)?.sock === sock) {
|
|
171
|
+
this.conns.delete(tabId);
|
|
172
|
+
if (this.lastActiveTabId === tabId)
|
|
173
|
+
this.lastActiveTabId = null;
|
|
174
|
+
logger.info(`[ui-bridge] panel tab disconnected: ${tabId.slice(0, 8)} — ${this.conns.size} tab(s) remain`);
|
|
175
|
+
}
|
|
176
|
+
// Reject any in-flight commands that were bound to this socket.
|
|
177
|
+
for (const [rid, p] of this.pending) {
|
|
178
|
+
if (p.sock === sock) {
|
|
179
|
+
clearTimeout(p.timer);
|
|
180
|
+
p.reject(new Error("panel tab disconnected mid-command"));
|
|
181
|
+
this.pending.delete(rid);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
125
184
|
});
|
|
126
|
-
this.wss = wss;
|
|
127
|
-
logger.info(`[ui-bridge] listening on ws://127.0.0.1:${this.port}`);
|
|
128
185
|
}
|
|
129
186
|
connected() {
|
|
130
187
|
return this.conns.size > 0;
|
|
@@ -139,7 +196,7 @@ export class UiBridge {
|
|
|
139
196
|
}
|
|
140
197
|
status() {
|
|
141
198
|
if (this.portInUse) {
|
|
142
|
-
return `port ${this.port} is held by another comfyui-mcp session — close
|
|
199
|
+
return `port ${this.port} is held by another comfyui-mcp session — close that session (or whatever owns the port) and reconnect`;
|
|
143
200
|
}
|
|
144
201
|
if (this.conns.size === 0) {
|
|
145
202
|
return "no panel connected — open ComfyUI with the comfyui-mcp-panel pack installed and check the Agent sidebar tab";
|
|
@@ -224,6 +281,10 @@ export class UiBridge {
|
|
|
224
281
|
return sent;
|
|
225
282
|
}
|
|
226
283
|
async stop() {
|
|
284
|
+
if (this.bindRetryTimer) {
|
|
285
|
+
clearTimeout(this.bindRetryTimer);
|
|
286
|
+
this.bindRetryTimer = null;
|
|
287
|
+
}
|
|
227
288
|
for (const [rid, p] of this.pending) {
|
|
228
289
|
clearTimeout(p.timer);
|
|
229
290
|
p.reject(new Error("bridge stopped"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-bridge.js","sourceRoot":"","sources":["../../src/services/ui-bridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui-bridge.js","sourceRoot":"","sources":["../../src/services/ui-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ const operationSchema = z.discriminatedUnion("op", [
|
|
|
33
33
|
z.object({
|
|
34
34
|
op: z.literal("add_node"),
|
|
35
35
|
class_type: z.string(),
|
|
36
|
-
inputs: z.record(z.any()).optional(),
|
|
36
|
+
inputs: z.record(z.string(), z.any()).optional(),
|
|
37
37
|
id: z.string().optional(),
|
|
38
38
|
}),
|
|
39
39
|
z.object({
|
|
@@ -54,7 +54,7 @@ const operationSchema = z.discriminatedUnion("op", [
|
|
|
54
54
|
target_id: z.string(),
|
|
55
55
|
input_name: z.string(),
|
|
56
56
|
new_class_type: z.string(),
|
|
57
|
-
new_inputs: z.record(z.any()).optional(),
|
|
57
|
+
new_inputs: z.record(z.string(), z.any()).optional(),
|
|
58
58
|
}),
|
|
59
59
|
]);
|
|
60
60
|
export function registerWorkflowComposeTools(server) {
|
|
@@ -64,7 +64,7 @@ export function registerWorkflowComposeTools(server) {
|
|
|
64
64
|
.enum(TEMPLATE_NAMES)
|
|
65
65
|
.describe("Template name: txt2img, img2img, upscale, or inpaint"),
|
|
66
66
|
params: z
|
|
67
|
-
.record(z.any())
|
|
67
|
+
.record(z.string(), z.any())
|
|
68
68
|
.optional()
|
|
69
69
|
.default({})
|
|
70
70
|
.describe("Template parameters; recognized keys depend on the template. txt2img: checkpoint, positive_prompt, negative_prompt, width, height, steps, cfg, seed, sampler_name, scheduler. img2img/inpaint add image_path (and mask_path for inpaint) and denoise. upscale adds upscale_model. Unknown keys are ignored; omitted keys use template defaults."),
|
|
@@ -88,7 +88,7 @@ export function registerWorkflowComposeTools(server) {
|
|
|
88
88
|
// 2. modify_workflow
|
|
89
89
|
server.tool("modify_workflow", "Apply modification operations to an existing ComfyUI workflow. Supports: set_input, add_node, remove_node, connect, insert_between. Returns the modified workflow JSON and IDs of any newly added nodes.", {
|
|
90
90
|
workflow: z
|
|
91
|
-
.union([z.string(), z.record(z.any())])
|
|
91
|
+
.union([z.string(), z.record(z.string(), z.any())])
|
|
92
92
|
.describe("ComfyUI workflow JSON (as a JSON string or object)"),
|
|
93
93
|
operations: z
|
|
94
94
|
.array(operationSchema)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-compose.js","sourceRoot":"","sources":["../../src/tools/workflow-compose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,GAEf,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,eAAe,CAAC,uDAAuD,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,MAAsB,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,MAAM,GAAG,CAAC;YAC9C,MAAM,IAAI,eAAe,CAAC,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,KAAqB,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE;IACjD,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;KACf,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"workflow-compose.js","sourceRoot":"","sources":["../../src/tools/workflow-compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ export function registerWorkflowDepsTools(server) {
|
|
|
27
27
|
"server's installed node definitions, reporting which packs are installed vs missing. " +
|
|
28
28
|
"Works remotely (HTTP only) — mirrors `comfy-cli node deps-in-workflow`.", {
|
|
29
29
|
workflow: z
|
|
30
|
-
.union([z.string(), z.record(z.any())])
|
|
30
|
+
.union([z.string(), z.record(z.string(), z.any())])
|
|
31
31
|
.describe("ComfyUI workflow in API format (JSON string or object)"),
|
|
32
32
|
}, async (args) => {
|
|
33
33
|
try {
|
|
@@ -76,7 +76,7 @@ export function registerWorkflowDepsTools(server) {
|
|
|
76
76
|
"target); a ComfyUI restart is typically needed before new nodes load. Mirrors " +
|
|
77
77
|
"`comfy-cli node install-deps`.", {
|
|
78
78
|
workflow: z
|
|
79
|
-
.union([z.string(), z.record(z.any())])
|
|
79
|
+
.union([z.string(), z.record(z.string(), z.any())])
|
|
80
80
|
.describe("ComfyUI workflow in API format (JSON string or object)"),
|
|
81
81
|
}, async (args) => {
|
|
82
82
|
try {
|