comfyui-mcp 0.50.1 → 0.50.2

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 (38) hide show
  1. package/dist/comfyui/fetch.js +61 -8
  2. package/dist/comfyui/fetch.js.map +1 -1
  3. package/dist/orchestrator/call-tool-admission.js +18 -3
  4. package/dist/orchestrator/call-tool-admission.js.map +1 -1
  5. package/dist/orchestrator/index.js +18 -3
  6. package/dist/orchestrator/index.js.map +1 -1
  7. package/dist/orchestrator/panel-tools.js +165 -10
  8. package/dist/orchestrator/panel-tools.js.map +1 -1
  9. package/dist/orchestrator/run-completion-journal.js +129 -34
  10. package/dist/orchestrator/run-completion-journal.js.map +1 -1
  11. package/dist/services/download-cache.js +6 -20
  12. package/dist/services/download-cache.js.map +1 -1
  13. package/dist/services/live-widget-overlay.js +139 -0
  14. package/dist/services/live-widget-overlay.js.map +1 -0
  15. package/dist/services/model-resolver.js +63 -7
  16. package/dist/services/model-resolver.js.map +1 -1
  17. package/dist/services/panel-recovery.js +32 -3
  18. package/dist/services/panel-recovery.js.map +1 -1
  19. package/dist/services/session-scope.js +17 -0
  20. package/dist/services/session-scope.js.map +1 -1
  21. package/dist/services/ui-bridge.js +16 -2
  22. package/dist/services/ui-bridge.js.map +1 -1
  23. package/dist/services/update-comfyui.js +160 -2
  24. package/dist/services/update-comfyui.js.map +1 -1
  25. package/dist/services/workflow-converter.js +10 -1
  26. package/dist/services/workflow-converter.js.map +1 -1
  27. package/dist/tools/image-management.js +19 -3
  28. package/dist/tools/image-management.js.map +1 -1
  29. package/dist/tools/model-management.js +58 -7
  30. package/dist/tools/model-management.js.map +1 -1
  31. package/dist/tools/skills-access.js +8 -3
  32. package/dist/tools/skills-access.js.map +1 -1
  33. package/dist/tools/vocabulary.js +88 -0
  34. package/dist/tools/vocabulary.js.map +1 -1
  35. package/dist/utils/errors.js +45 -1
  36. package/dist/utils/errors.js.map +1 -1
  37. package/package.json +1 -1
  38. package/scripts/export-vocabulary.mts +33 -5
@@ -1,4 +1,42 @@
1
1
  import { getComfyUIAuthHeaders } from "../config.js";
2
+ import { describeFetchFailure, isBareFetchFailure } from "../utils/errors.js";
3
+ /** The request target, for the diagnostic. Never throws on an odd input. */
4
+ function targetOf(input) {
5
+ try {
6
+ if (typeof input === "string")
7
+ return input;
8
+ if (input instanceof URL)
9
+ return input.href;
10
+ return input.url ?? String(input);
11
+ }
12
+ catch {
13
+ return String(input);
14
+ }
15
+ }
16
+ /**
17
+ * Turn a network-layer throw into a diagnostic that says WHAT was attempted.
18
+ *
19
+ * `TypeError: fetch failed` was reaching tool results verbatim: #954 saw it from
20
+ * the workflow-templates listing (now `list_packs` action:"list_templates") and
21
+ * could not tell which host was tried, and #952 saw it from the readonly tools
22
+ * while the panel bridge was working fine — reading it, reasonably, as "the tool
23
+ * is broken" when the headless target was simply a different (unreachable)
24
+ * address than the one the panel is bound to.
25
+ *
26
+ * The two ARE separate targets by design: the panel talks to whichever ComfyUI
27
+ * the browser is on, while these calls go to the configured COMFYUI_URL. That is
28
+ * not a bug, but it is invisible unless the failure names the address.
29
+ */
30
+ function describeComfyFetchFailure(err, target) {
31
+ const { message, code } = describeFetchFailure(err);
32
+ const wrapped = new Error(`${message} — while requesting ${target}. ` +
33
+ `That is the headless ComfyUI target (COMFYUI_URL); a CONNECTED sidebar panel does not imply this address is reachable, ` +
34
+ `because the panel talks to whichever ComfyUI its browser tab is on. ` +
35
+ `Check the target with install_comfyui (action:"environment"), and confirm the server is up with get_system_stats (action:"health").`, { cause: err });
36
+ if (code)
37
+ wrapped.code = code;
38
+ return wrapped;
39
+ }
2
40
  /**
3
41
  * `fetch` wrapper for ComfyUI HTTP requests that injects the configured generic
4
42
  * auth header(s) (COMFYUI_AUTH_* — for self-hosted ComfyUI behind a reverse
@@ -9,15 +47,30 @@ import { getComfyUIAuthHeaders } from "../config.js";
9
47
  * server. Non-ComfyUI requests (HuggingFace, Civitai, Comfy Cloud) keep using
10
48
  * plain `fetch` — Comfy Cloud has its own X-API-Key path in cloud-client.ts.
11
49
  */
12
- export function comfyuiFetch(input, init = {}) {
50
+ export async function comfyuiFetch(input, init = {}) {
13
51
  const auth = getComfyUIAuthHeaders();
14
- if (Object.keys(auth).length === 0)
15
- return fetch(input, init);
16
- const headers = new Headers(init.headers);
17
- for (const [name, value] of Object.entries(auth)) {
18
- if (!headers.has(name))
19
- headers.set(name, value);
52
+ let request;
53
+ if (Object.keys(auth).length === 0) {
54
+ request = fetch(input, init);
55
+ }
56
+ else {
57
+ const headers = new Headers(init.headers);
58
+ for (const [name, value] of Object.entries(auth)) {
59
+ if (!headers.has(name))
60
+ headers.set(name, value);
61
+ }
62
+ request = fetch(input, { ...init, headers });
63
+ }
64
+ try {
65
+ return await request;
66
+ }
67
+ catch (err) {
68
+ // ONLY the opaque undici failure is rewritten. An AbortError, a timeout with
69
+ // its own message, or anything else already says what happened, and
70
+ // replacing that text would be a downgrade.
71
+ if (!isBareFetchFailure(err))
72
+ throw err;
73
+ throw describeComfyFetchFailure(err, targetOf(input));
20
74
  }
21
- return fetch(input, { ...init, headers });
22
75
  }
23
76
  //# sourceMappingURL=fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/comfyui/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA6B,EAC7B,OAAoB,EAAE;IAEtB,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/comfyui/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,4EAA4E;AAC5E,SAAS,QAAQ,CAAC,KAA6B;IAC7C,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,KAAK,YAAY,GAAG;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC5C,OAAQ,KAAiB,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,yBAAyB,CAAC,GAAY,EAAE,MAAc;IAC7D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,GAAG,OAAO,uBAAuB,MAAM,IAAI;QACzC,yHAAyH;QACzH,sEAAsE;QACtE,qIAAqI,EACvI,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACF,IAAI,IAAI;QAAG,OAA6B,CAAC,IAAI,GAAG,IAAI,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAA6B,EAC7B,OAAoB,EAAE;IAEtB,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,IAAI,OAA0B,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6EAA6E;QAC7E,oEAAoE;QACpE,4CAA4C;QAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QACxC,MAAM,yBAAyB,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * decision is a pure, unit-testable function — the dispatcher is a one-line
5
5
  * call site.
6
6
  */
7
- import { retiredToolMessage } from "../tools/vocabulary.js";
7
+ import { retiredToolMessage, TOOL_NAMES } from "../tools/vocabulary.js";
8
8
  /** The direct tool channel: a mobile client can invoke these READ/DOWNLOAD backend
9
9
  * tools without an agent turn (structured nav data + rig downloads). The
10
10
  * bridge is already token-gated; this whitelist keeps call_tool to non-destructive
@@ -434,8 +434,23 @@ export function callToolAdmission(tool, args) {
434
434
  const retired = retiredToolMessage(tool);
435
435
  if (retired !== undefined)
436
436
  return retired;
437
- if (!CALL_TOOL_WHITELIST.has(tool))
438
- return `tool "${tool}" is not permitted`;
437
+ if (!CALL_TOOL_WHITELIST.has(tool)) {
438
+ // Distinguish "does not exist" from "exists, but not on THIS channel" (#908).
439
+ // The bare "is not permitted" was a dead end: the panel's RunPod Deploy/Start
440
+ // buttons returned it verbatim for ~2 weeks after #278 correctly removed those
441
+ // two tools from this whitelist (both start BILLING, and a confirmation-less
442
+ // mirrored tab must not spend money). The exclusion was right; the message
443
+ // told nobody what had happened or what to do instead, so it read as "the
444
+ // panel is broken" rather than "this channel deliberately does not carry it".
445
+ const exists = TOOL_NAMES.includes(tool);
446
+ return exists
447
+ ? `tool "${tool}" exists but is not available on the direct call_tool channel ` +
448
+ `(the canvas-less path used by mobile, mirrored tabs and panel buttons). This is a ` +
449
+ `deliberate exclusion, not a missing tool — some tools are withheld here because they ` +
450
+ `spend money or mutate state that this channel cannot confirm with the user. Ask the ` +
451
+ `agent to run it instead: the agent session carries the full tool surface and can confirm.`
452
+ : `tool "${tool}" is not permitted`;
453
+ }
439
454
  const actions = CALL_TOOL_ACTION_WHITELIST.get(tool);
440
455
  if (actions !== undefined) {
441
456
  const action = typeof args.action === "string" ? args.action : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"call-tool-admission.js","sourceRoot":"","sources":["../../src/orchestrator/call-tool-admission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-tool-admission.js","sourceRoot":"","sources":["../../src/orchestrator/call-tool-admission.ts"],"names":[],"mappings":"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"}
@@ -4110,7 +4110,14 @@ export async function runPanelOrchestrator() {
4110
4110
  // Journal the BLIND-STRIPPED copy: a replay must not resurrect pixels
4111
4111
  // the blind gate removed on arrival. `null` = the panel re-sent a
4112
4112
  // completion this tab was already given; suppressed, never duplicated.
4113
- const entry = RunCompletions.record(event.tab_id, evForTab);
4113
+ // #704 WHO this completion is being reported to. The tab it arrived on
4114
+ // is an address that churns across a panel reconnect (a new `tmp:` id, no
4115
+ // same-socket migration to follow); the conversation is what actually
4116
+ // queued the run, so it is what decides "this is the run YOU queued"
4117
+ // versus the origin-UNDETERMINED warning.
4118
+ const entry = RunCompletions.record(event.tab_id, evForTab, {
4119
+ conversation: agentKeyFor(event.tab_id),
4120
+ });
4114
4121
  logger.info(`[panel-orchestrator] tab ${event.tab_id.slice(0, 8)} run completion for ${describeCorrelation(entry.correlation)}${entry.possibleRepeat ? " (flagged as a possible repeat)" : ""}`);
4115
4122
  flushRunCompletions(event.tab_id);
4116
4123
  return;
@@ -4191,8 +4198,12 @@ export async function runPanelOrchestrator() {
4191
4198
  // their arrival and are still delivered.
4192
4199
  // #486 — and the questions it asked: answers stay journaled and are still
4193
4200
  // reported, but lose the fingerprint that let them satisfy a re-ask.
4201
+ // #704 — close by CONVERSATION as well as by member tab: a ticket whose tab
4202
+ // was re-registered under a new id on a reconnect is reachable from no member
4203
+ // tab at all, and the replacement conversation reuses the same key string, so
4204
+ // only deleting it ends the old conversation's ownership.
4194
4205
  for (const t of conversationMemberTabs(tabId)) {
4195
- RunCompletions.closeRuns(t);
4206
+ RunCompletions.closeRuns(t, key);
4196
4207
  AskAnswers.closeAsks(t);
4197
4208
  }
4198
4209
  pushToConversation(key, { type: "session", session_id: null });
@@ -4279,8 +4290,12 @@ export async function runPanelOrchestrator() {
4279
4290
  // historical session's own render. #884: the boundary is conversation-wide.
4280
4291
  // #486 — likewise its questions: answers stay journaled and are still
4281
4292
  // reported, but lose the fingerprint that let them satisfy a re-ask.
4293
+ // #704 — close by CONVERSATION as well as by member tab: a ticket whose tab
4294
+ // was re-registered under a new id on a reconnect is reachable from no member
4295
+ // tab at all, and the replacement conversation reuses the same key string, so
4296
+ // only deleting it ends the old conversation's ownership.
4282
4297
  for (const t of conversationMemberTabs(tabId)) {
4283
- RunCompletions.closeRuns(t);
4298
+ RunCompletions.closeRuns(t, key);
4284
4299
  AskAnswers.closeAsks(t);
4285
4300
  }
4286
4301
  if (sid)