comfyui-mcp 0.48.21 → 0.48.22

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 (235) hide show
  1. package/README.md +2 -2
  2. package/dist/comfyui/client.js +46 -6
  3. package/dist/comfyui/client.js.map +1 -1
  4. package/dist/config.js +15 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/orchestrator/error-text.js +29 -1
  7. package/dist/orchestrator/error-text.js.map +1 -1
  8. package/dist/orchestrator/error-text.test.js +28 -0
  9. package/dist/orchestrator/error-text.test.js.map +1 -1
  10. package/dist/orchestrator/index.js +151 -50
  11. package/dist/orchestrator/index.js.map +1 -1
  12. package/dist/orchestrator/panel-agent.js +21 -4
  13. package/dist/orchestrator/panel-agent.js.map +1 -1
  14. package/dist/orchestrator/panel-tools.js +1098 -168
  15. package/dist/orchestrator/panel-tools.js.map +1 -1
  16. package/dist/orchestrator/ready-banner.js +70 -0
  17. package/dist/orchestrator/ready-banner.js.map +1 -0
  18. package/dist/services/api-nodes.js +5 -7
  19. package/dist/services/api-nodes.js.map +1 -1
  20. package/dist/services/download-cache.js +126 -18
  21. package/dist/services/download-cache.js.map +1 -1
  22. package/dist/services/download-jobs.js +463 -14
  23. package/dist/services/download-jobs.js.map +1 -1
  24. package/dist/services/download-progress.js +247 -2
  25. package/dist/services/download-progress.js.map +1 -1
  26. package/dist/services/env-capabilities.js +80 -9
  27. package/dist/services/env-capabilities.js.map +1 -1
  28. package/dist/services/generate-audio.js +16 -0
  29. package/dist/services/generate-audio.js.map +1 -1
  30. package/dist/services/local-models-fallback.js +7 -3
  31. package/dist/services/local-models-fallback.js.map +1 -1
  32. package/dist/services/manifest.js +180 -65
  33. package/dist/services/manifest.js.map +1 -1
  34. package/dist/services/model-resolver.js +267 -11
  35. package/dist/services/model-resolver.js.map +1 -1
  36. package/dist/services/node-management.js +38 -27
  37. package/dist/services/node-management.js.map +1 -1
  38. package/dist/services/output-dir.js +33 -3
  39. package/dist/services/output-dir.js.map +1 -1
  40. package/dist/services/panel-secrets.js +19 -7
  41. package/dist/services/panel-secrets.js.map +1 -1
  42. package/dist/services/queue-monitor.js +45 -2
  43. package/dist/services/queue-monitor.js.map +1 -1
  44. package/dist/services/queue-monitor.stall.test.js +78 -0
  45. package/dist/services/queue-monitor.stall.test.js.map +1 -0
  46. package/dist/services/secure-bridge.js +84 -0
  47. package/dist/services/secure-bridge.js.map +1 -1
  48. package/dist/services/storage/azure-blob.js +8 -3
  49. package/dist/services/storage/azure-blob.js.map +1 -1
  50. package/dist/services/storage/index.js +3 -3
  51. package/dist/services/storage/index.js.map +1 -1
  52. package/dist/services/storage/s3.js +9 -3
  53. package/dist/services/storage/s3.js.map +1 -1
  54. package/dist/services/ui-bridge.js +294 -24
  55. package/dist/services/ui-bridge.js.map +1 -1
  56. package/dist/services/workflow-converter.js +767 -72
  57. package/dist/services/workflow-converter.js.map +1 -1
  58. package/dist/services/workflow-lock.js +127 -27
  59. package/dist/services/workflow-lock.js.map +1 -1
  60. package/dist/services/workspace-env.js +48 -0
  61. package/dist/services/workspace-env.js.map +1 -1
  62. package/dist/tools/generate-audio.js +44 -0
  63. package/dist/tools/generate-audio.js.map +1 -1
  64. package/dist/tools/model-extras.js +24 -4
  65. package/dist/tools/model-extras.js.map +1 -1
  66. package/dist/tools/model-management.js +124 -14
  67. package/dist/tools/model-management.js.map +1 -1
  68. package/dist/tools/report-issue.js +220 -66
  69. package/dist/tools/report-issue.js.map +1 -1
  70. package/dist/tools/report-issue.test.js +223 -83
  71. package/dist/tools/report-issue.test.js.map +1 -1
  72. package/dist/tools/skills-access.js +7 -2
  73. package/dist/tools/skills-access.js.map +1 -1
  74. package/dist/tools/template-schema.js +5 -5
  75. package/dist/tools/template-schema.js.map +1 -1
  76. package/dist/tools/workflow-compose.js +18 -3
  77. package/dist/tools/workflow-compose.js.map +1 -1
  78. package/package.json +1 -1
  79. package/packs/anima/install-runpod.sh +0 -1
  80. package/packs/anima/install-windows.bat +0 -1
  81. package/packs/anima/manifest.yaml +0 -1
  82. package/packs/anima-img2img/install-runpod.sh +0 -1
  83. package/packs/anima-img2img/install-windows.bat +0 -1
  84. package/packs/anima-img2img/manifest.yaml +0 -1
  85. package/packs/anima-inpaint/install-runpod.sh +0 -1
  86. package/packs/anima-inpaint/install-windows.bat +0 -1
  87. package/packs/anima-inpaint/manifest.yaml +0 -1
  88. package/packs/anima-txt2img/install-runpod.sh +0 -1
  89. package/packs/anima-txt2img/install-windows.bat +0 -1
  90. package/packs/anima-txt2img/manifest.yaml +0 -1
  91. package/packs/artokun-flow/install-runpod.sh +0 -1
  92. package/packs/artokun-flow/install-windows.bat +0 -1
  93. package/packs/artokun-flow/manifest.yaml +0 -1
  94. package/packs/ernie/install-runpod.sh +0 -1
  95. package/packs/ernie/install-windows.bat +0 -1
  96. package/packs/ernie/manifest.yaml +0 -1
  97. package/packs/ernie-combo/install-runpod.sh +0 -1
  98. package/packs/ernie-combo/install-windows.bat +0 -1
  99. package/packs/ernie-combo/manifest.yaml +0 -1
  100. package/packs/ernie-img2img/install-runpod.sh +0 -1
  101. package/packs/ernie-img2img/install-windows.bat +0 -1
  102. package/packs/ernie-img2img/manifest.yaml +0 -1
  103. package/packs/ernie-txt2img/install-runpod.sh +0 -1
  104. package/packs/ernie-txt2img/install-windows.bat +0 -1
  105. package/packs/ernie-txt2img/manifest.yaml +0 -1
  106. package/packs/ideogram/install-runpod.sh +0 -1
  107. package/packs/ideogram/install-windows.bat +0 -1
  108. package/packs/ideogram/manifest.yaml +0 -1
  109. package/packs/ideogram-img2img/install-runpod.sh +0 -1
  110. package/packs/ideogram-img2img/install-windows.bat +0 -1
  111. package/packs/ideogram-img2img/manifest.yaml +0 -1
  112. package/packs/ideogram-txt2img/install-runpod.sh +0 -1
  113. package/packs/ideogram-txt2img/install-windows.bat +0 -1
  114. package/packs/ideogram-txt2img/manifest.yaml +0 -1
  115. package/packs/ltx-2.3/install-runpod.sh +0 -1
  116. package/packs/ltx-2.3/install-windows.bat +0 -1
  117. package/packs/ltx-2.3/manifest.yaml +0 -1
  118. package/packs/ltx-2.3-extender/install-runpod.sh +0 -1
  119. package/packs/ltx-2.3-extender/install-windows.bat +0 -1
  120. package/packs/ltx-2.3-extender/manifest.yaml +0 -1
  121. package/packs/ltx-2.3-extender-no-audio/install-runpod.sh +0 -1
  122. package/packs/ltx-2.3-extender-no-audio/install-windows.bat +0 -1
  123. package/packs/ltx-2.3-extender-no-audio/manifest.yaml +0 -1
  124. package/packs/ltx-2.3-flf/install-runpod.sh +0 -1
  125. package/packs/ltx-2.3-flf/install-windows.bat +0 -1
  126. package/packs/ltx-2.3-flf/manifest.yaml +0 -1
  127. package/packs/ltx-2.3-img2vid/install-runpod.sh +0 -1
  128. package/packs/ltx-2.3-img2vid/install-windows.bat +0 -1
  129. package/packs/ltx-2.3-img2vid/manifest.yaml +3 -4
  130. package/packs/ltx-2.3-txt2vid/install-runpod.sh +0 -1
  131. package/packs/ltx-2.3-txt2vid/install-windows.bat +0 -1
  132. package/packs/ltx-2.3-txt2vid/manifest.yaml +3 -4
  133. package/packs/ltx-2.3-xy-plot/install-runpod.sh +0 -1
  134. package/packs/ltx-2.3-xy-plot/install-windows.bat +0 -1
  135. package/packs/ltx-2.3-xy-plot/manifest.yaml +0 -1
  136. package/packs/ltx23-distill-3stage/install-runpod.sh +0 -1
  137. package/packs/ltx23-distill-3stage/install-windows.bat +0 -1
  138. package/packs/ltx23-distill-3stage/manifest.yaml +0 -1
  139. package/packs/qwen-image/install-runpod.sh +0 -1
  140. package/packs/qwen-image/install-windows.bat +0 -1
  141. package/packs/qwen-image/manifest.yaml +0 -1
  142. package/packs/qwen-image-edit/install-runpod.sh +0 -1
  143. package/packs/qwen-image-edit/install-windows.bat +0 -1
  144. package/packs/qwen-image-edit/manifest.yaml +0 -1
  145. package/packs/qwen-image-edit-edit/install-runpod.sh +0 -1
  146. package/packs/qwen-image-edit-edit/install-windows.bat +0 -1
  147. package/packs/qwen-image-edit-edit/manifest.yaml +0 -1
  148. package/packs/wan-animate/install-runpod.sh +0 -1
  149. package/packs/wan-animate/install-windows.bat +0 -1
  150. package/packs/wan-animate/manifest.yaml +0 -1
  151. package/packs/wan-animate-character/install-runpod.sh +0 -1
  152. package/packs/wan-animate-character/install-windows.bat +0 -1
  153. package/packs/wan-animate-character/manifest.yaml +0 -1
  154. package/packs/wan-animate-ofm/install-runpod.sh +0 -1
  155. package/packs/wan-animate-ofm/install-windows.bat +0 -1
  156. package/packs/wan-animate-ofm/manifest.yaml +0 -1
  157. package/packs/wan-longer-videos/install-runpod.sh +0 -1
  158. package/packs/wan-longer-videos/install-windows.bat +0 -1
  159. package/packs/wan-longer-videos/manifest.yaml +0 -1
  160. package/packs/wan-longer-videos-i2v/install-runpod.sh +0 -1
  161. package/packs/wan-longer-videos-i2v/install-windows.bat +0 -1
  162. package/packs/wan-longer-videos-i2v/manifest.yaml +0 -1
  163. package/packs/wan-longer-videos-i2v-96gb/install-runpod.sh +0 -1
  164. package/packs/wan-longer-videos-i2v-96gb/install-windows.bat +0 -1
  165. package/packs/wan-longer-videos-i2v-96gb/manifest.yaml +0 -1
  166. package/packs/wan-longer-videos-t2v/install-runpod.sh +0 -1
  167. package/packs/wan-longer-videos-t2v/install-windows.bat +0 -1
  168. package/packs/wan-longer-videos-t2v/manifest.yaml +0 -1
  169. package/packs/wan-longer-videos-t2v-96gb/install-runpod.sh +0 -1
  170. package/packs/wan-longer-videos-t2v-96gb/install-windows.bat +0 -1
  171. package/packs/wan-longer-videos-t2v-96gb/manifest.yaml +0 -1
  172. package/packs/wan-longer-videos-v2v/install-runpod.sh +0 -1
  173. package/packs/wan-longer-videos-v2v/install-windows.bat +0 -1
  174. package/packs/wan-longer-videos-v2v/manifest.yaml +0 -1
  175. package/packs/wan-longer-videos-v2v-96gb/install-runpod.sh +0 -1
  176. package/packs/wan-longer-videos-v2v-96gb/install-windows.bat +0 -1
  177. package/packs/wan-longer-videos-v2v-96gb/manifest.yaml +0 -1
  178. package/packs/wan-multitalk/install-runpod.sh +0 -1
  179. package/packs/wan-multitalk/install-windows.bat +0 -1
  180. package/packs/wan-multitalk/manifest.yaml +0 -1
  181. package/packs/wan-pusa-extend/install-runpod.sh +0 -1
  182. package/packs/wan-pusa-extend/install-windows.bat +0 -1
  183. package/packs/wan-pusa-extend/manifest.yaml +0 -1
  184. package/packs/wan-transparent/install-runpod.sh +0 -1
  185. package/packs/wan-transparent/install-windows.bat +0 -1
  186. package/packs/wan-transparent/manifest.yaml +0 -1
  187. package/packs/wan-transparent-img2vid/install-runpod.sh +0 -1
  188. package/packs/wan-transparent-img2vid/install-windows.bat +0 -1
  189. package/packs/wan-transparent-img2vid/manifest.yaml +0 -1
  190. package/packs/wan-transparent-img2vid-96gb/install-runpod.sh +0 -1
  191. package/packs/wan-transparent-img2vid-96gb/install-windows.bat +0 -1
  192. package/packs/wan-transparent-img2vid-96gb/manifest.yaml +0 -1
  193. package/packs/z-image-base/install-runpod.sh +0 -1
  194. package/packs/z-image-base/install-windows.bat +0 -1
  195. package/packs/z-image-base/manifest.yaml +0 -1
  196. package/packs/z-image-base-combo/install-runpod.sh +0 -1
  197. package/packs/z-image-base-combo/install-windows.bat +0 -1
  198. package/packs/z-image-base-combo/manifest.yaml +0 -1
  199. package/packs/z-image-base-controlnet/install-runpod.sh +0 -1
  200. package/packs/z-image-base-controlnet/install-windows.bat +0 -1
  201. package/packs/z-image-base-controlnet/manifest.yaml +0 -1
  202. package/packs/z-image-base-img2img/install-runpod.sh +0 -1
  203. package/packs/z-image-base-img2img/install-windows.bat +0 -1
  204. package/packs/z-image-base-img2img/manifest.yaml +0 -1
  205. package/packs/z-image-base-inpaint/install-runpod.sh +0 -1
  206. package/packs/z-image-base-inpaint/install-windows.bat +0 -1
  207. package/packs/z-image-base-inpaint/manifest.yaml +0 -1
  208. package/packs/z-image-base-txt2img/install-runpod.sh +0 -1
  209. package/packs/z-image-base-txt2img/install-windows.bat +0 -1
  210. package/packs/z-image-base-txt2img/manifest.yaml +0 -1
  211. package/packs/z-image-turbo/install-runpod.sh +0 -1
  212. package/packs/z-image-turbo/install-windows.bat +0 -1
  213. package/packs/z-image-turbo/manifest.yaml +0 -1
  214. package/packs/z-image-turbo-combo/install-runpod.sh +0 -1
  215. package/packs/z-image-turbo-combo/install-windows.bat +0 -1
  216. package/packs/z-image-turbo-combo/manifest.yaml +0 -1
  217. package/packs/z-image-turbo-controlnet/install-runpod.sh +0 -1
  218. package/packs/z-image-turbo-controlnet/install-windows.bat +0 -1
  219. package/packs/z-image-turbo-controlnet/manifest.yaml +0 -1
  220. package/packs/z-image-turbo-detail-daemon/install-runpod.sh +0 -1
  221. package/packs/z-image-turbo-detail-daemon/install-windows.bat +0 -1
  222. package/packs/z-image-turbo-detail-daemon/manifest.yaml +0 -1
  223. package/packs/z-image-turbo-img2img/install-runpod.sh +0 -1
  224. package/packs/z-image-turbo-img2img/install-windows.bat +0 -1
  225. package/packs/z-image-turbo-img2img/manifest.yaml +0 -1
  226. package/packs/z-image-turbo-inpainting/install-runpod.sh +0 -1
  227. package/packs/z-image-turbo-inpainting/install-windows.bat +0 -1
  228. package/packs/z-image-turbo-inpainting/manifest.yaml +0 -1
  229. package/packs/z-image-turbo-txt2img/install-runpod.sh +0 -1
  230. package/packs/z-image-turbo-txt2img/install-windows.bat +0 -1
  231. package/packs/z-image-turbo-txt2img/manifest.yaml +0 -1
  232. package/packs/z-image-xy-plot/install-runpod.sh +0 -1
  233. package/packs/z-image-xy-plot/install-windows.bat +0 -1
  234. package/packs/z-image-xy-plot/manifest.yaml +0 -1
  235. package/scripts/test-packs.sh +8 -3
@@ -0,0 +1,78 @@
1
+ // queue-monitor.stall.test.ts — the liveness-gated stall verdict (#183).
2
+ //
3
+ // The old heuristic flagged a stall on a flat "no FORWARD progress for N
4
+ // seconds", which false-fires on a legitimately long, progress-silent node
5
+ // (tiled VAE decode, audio/video sampling, a big model load): ComfyUI emits no
6
+ // progress tick for minutes while genuinely busy. report() now gates the verdict
7
+ // on server LIVENESS — a job is stalled only when the server has ALSO gone dark
8
+ // here (no ws frame + no successful /queue poll within the window). A reachable
9
+ // ComfyUI keeps the 1 Hz poll fresh, so a busy decode stays live; a crashed /
10
+ // wedged server lets the heartbeat lapse → a real stall still surfaces. A hard
11
+ // floor of 30 min backstops a genuine in-node deadlock on a reachable server.
12
+ import { beforeEach, describe, expect, it } from "vitest";
13
+ import { QueueMonitor } from "./queue-monitor.js";
14
+ const priv = QueueMonitor;
15
+ const STALL_MS = 180_000; // the default 180s threshold
16
+ const HARD_FLOOR_MS = 30 * 60 * 1000;
17
+ /** Put the monitor into "a job has been running, last forward progress was
18
+ * `idleForMs` ago" and set the two liveness heartbeats explicitly. */
19
+ function primeRunning(opts) {
20
+ const now = Date.now();
21
+ priv.state.runningPromptId = "prompt-1";
22
+ priv.state.currentNode = opts.currentNode ?? "42";
23
+ priv.state.progressValue = 4;
24
+ priv.state.progressMax = 8;
25
+ priv.state.queueRemaining = 1;
26
+ priv.state.lastActivityTs = now - opts.idleForMs;
27
+ priv.state.lastServerAliveTs = opts.serverAliveAgoMs == null ? null : now - opts.serverAliveAgoMs;
28
+ priv.state.lastFrameTs = opts.wsFrameAgoMs == null ? null : now - opts.wsFrameAgoMs;
29
+ }
30
+ beforeEach(() => {
31
+ priv.url = "http://127.0.0.1:9999";
32
+ priv.stopped = false;
33
+ priv.state.connected = true;
34
+ priv.state.runningPromptId = null;
35
+ priv.state.currentNode = null;
36
+ priv.state.progressValue = null;
37
+ priv.state.progressMax = null;
38
+ priv.state.queueRemaining = 0;
39
+ priv.state.lastActivityTs = null;
40
+ priv.state.lastFrameTs = null;
41
+ priv.state.lastServerAliveTs = null;
42
+ priv.state.lastCompleted = null;
43
+ });
44
+ describe("QueueMonitor.report — liveness-gated stall (#183)", () => {
45
+ it("does NOT flag a busy long node: no forward progress but the /queue poll is fresh", () => {
46
+ // The reporter's case: an LTX video/VAE step ran ~443s with no panel-visible
47
+ // progress while ComfyUI was perfectly alive (answering /queue every second).
48
+ primeRunning({ idleForMs: 443_000, serverAliveAgoMs: 800, wsFrameAgoMs: null });
49
+ const rep = priv.report(STALL_MS);
50
+ expect(rep.stalled).toBe(false);
51
+ expect(rep.stalledForMs).toBe(0);
52
+ });
53
+ it("does NOT flag a busy node kept alive by ws frames alone (poll heartbeat absent)", () => {
54
+ primeRunning({ idleForMs: 443_000, serverAliveAgoMs: null, wsFrameAgoMs: 1_000 });
55
+ expect(priv.report(STALL_MS).stalled).toBe(false);
56
+ });
57
+ it("DOES flag a real stall: no forward progress AND the server has gone dark here", () => {
58
+ // Server stopped answering /queue and stopped sending ws frames well beyond
59
+ // the window — a crashed / event-loop-wedged ComfyUI, not a slow node.
60
+ primeRunning({ idleForMs: STALL_MS + 60_000, serverAliveAgoMs: STALL_MS + 60_000, wsFrameAgoMs: STALL_MS + 60_000 });
61
+ const rep = priv.report(STALL_MS);
62
+ expect(rep.stalled).toBe(true);
63
+ expect(rep.stalledForMs).toBeGreaterThanOrEqual(STALL_MS);
64
+ expect(rep.runningPromptId).toBe("prompt-1");
65
+ });
66
+ it("hard-floor backstop: an in-node deadlock on a still-reachable server flags after 30 min", () => {
67
+ // Server still answering (fresh poll) but ZERO forward progress for > 30 min
68
+ // — a genuine deadlock that must not be suppressed forever.
69
+ primeRunning({ idleForMs: HARD_FLOOR_MS + 60_000, serverAliveAgoMs: 500, wsFrameAgoMs: null });
70
+ expect(priv.report(STALL_MS).stalled).toBe(true);
71
+ });
72
+ it("never flags when nothing is running", () => {
73
+ priv.state.runningPromptId = null;
74
+ priv.state.lastActivityTs = Date.now() - 10 * HARD_FLOOR_MS;
75
+ expect(priv.report(STALL_MS).stalled).toBe(false);
76
+ });
77
+ });
78
+ //# sourceMappingURL=queue-monitor.stall.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-monitor.stall.test.js","sourceRoot":"","sources":["../../src/services/queue-monitor.stall.test.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@
22
22
  // generated per session and checked constant-time on every WS upgrade
23
23
  // (see UiBridge).
24
24
  import { randomBytes } from "node:crypto";
25
+ import { existsSync } from "node:fs";
25
26
  import { startQuickTunnel } from "./tunnel.js";
26
27
  import { RelayClient } from "./relay-client.js";
27
28
  import { logger } from "../utils/logger.js";
@@ -73,6 +74,89 @@ export async function advertiseBridge(comfyuiUrl, wssUrl, shouldAdvertise) {
73
74
  }
74
75
  return false;
75
76
  }
77
+ /**
78
+ * GET the panel's status route to learn where ComfyUI lives on THIS machine.
79
+ *
80
+ * The sidebar panel serves `/comfyui_mcp_panel/status` with a `base_path` — the
81
+ * ComfyUI install root the panel is running inside (panel commit f45054e). The
82
+ * orchestrator consumes it as a LAST-RESORT source of the local ComfyUI base for
83
+ * an embedded loopback session that has no CLI-configured workspace (COMFYUI_PATH
84
+ * unset AND auto-detect empty), so the path-dependent LOCAL surface still works —
85
+ * the comfyui MCP runs in LOCAL mode (download_model / apply_manifest / model
86
+ * scans) and panel_load_workflow's local fallback can resolve names (#296).
87
+ *
88
+ * Best-effort and time-bounded: returns undefined on ANY failure (unreachable,
89
+ * non-2xx, non-JSON, missing/blank field) so it can only ADD a path — it must
90
+ * NEVER throw or stall session start. Sent with the same auth headers as
91
+ * advertiseBridge so a token-gated panel answers. Disk validation is the caller's
92
+ * job (this returns the panel's raw claim).
93
+ */
94
+ export async function fetchPanelBasePath(comfyuiUrl, timeoutMs = 2500) {
95
+ let endpoint;
96
+ try {
97
+ endpoint = new URL("/comfyui_mcp_panel/status", comfyuiUrl).toString();
98
+ }
99
+ catch {
100
+ return undefined;
101
+ }
102
+ try {
103
+ const res = await fetch(endpoint, {
104
+ headers: { ...getComfyUIAuthHeaders() },
105
+ signal: AbortSignal.timeout(timeoutMs),
106
+ });
107
+ if (!res.ok)
108
+ return undefined;
109
+ const data = (await res.json());
110
+ if (!data || typeof data !== "object")
111
+ return undefined;
112
+ // The route's field is snake_case `base_path`; tolerate a camelCase alias.
113
+ const raw = data.base_path ??
114
+ data.basePath;
115
+ if (typeof raw === "string" && raw.trim())
116
+ return raw.trim();
117
+ return undefined;
118
+ }
119
+ catch {
120
+ return undefined;
121
+ }
122
+ }
123
+ /**
124
+ * Resolve the effective LOCAL ComfyUI base directory for a session target,
125
+ * consulting the panel's status route as a LAST-RESORT fallback (#296).
126
+ *
127
+ * Decision order — kept in ONE place so startup and the panel-`hello` retarget
128
+ * path can never disagree about where ComfyUI lives:
129
+ * 1. A CLI-configured / auto-detected local path (`localPath`) wins, but ONLY
130
+ * for a loopback, non-force-remote target (a REMOTE/force-remote target must
131
+ * never adopt a local dir — it isn't the remote host).
132
+ * 2. Remote / force-remote target → undefined (routes through the Manager).
133
+ * 3. Otherwise (loopback, non-force-remote, but NO local path) → GET the panel's
134
+ * `/comfyui_mcp_panel/status` `base_path` and adopt it, but ONLY if that path
135
+ * actually EXISTS on this machine (a bogus / remote-looking claim must not
136
+ * poison LOCAL mode).
137
+ *
138
+ * `fetchBasePath`/`exists` are injectable purely for tests; production uses the
139
+ * real status fetch + `fs.existsSync`. Best-effort — never throws.
140
+ */
141
+ export async function resolveComfyuiPathForTarget(opts) {
142
+ const { target, localPath, forceRemote, isLoopback } = opts;
143
+ if (!forceRemote && isLoopback && localPath)
144
+ return localPath;
145
+ if (forceRemote || !isLoopback)
146
+ return undefined;
147
+ const fetchBasePath = opts.fetchBasePath ?? fetchPanelBasePath;
148
+ const exists = opts.exists ?? existsSync;
149
+ let fromPanel;
150
+ try {
151
+ fromPanel = await fetchBasePath(target);
152
+ }
153
+ catch {
154
+ return undefined; // bulletproof — a broken fetch must not break session start
155
+ }
156
+ if (fromPanel && exists(fromPanel))
157
+ return fromPanel;
158
+ return undefined;
159
+ }
76
160
  /**
77
161
  * Stand up the secure bridge and advertise its URL to the pod. Backend is
78
162
  * chosen by env (see the module doc comment above); cloudflared is the default.
@@ -1 +1 @@
1
- {"version":3,"file":"secure-bridge.js","sourceRoot":"","sources":["../../src/services/secure-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secure-bridge.js","sourceRoot":"","sources":["../../src/services/secure-bridge.ts"],"names":[],"mappings":"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"}
@@ -111,15 +111,20 @@ async function blobServiceClientForUpload() {
111
111
  }
112
112
  return envClient.client;
113
113
  }
114
- export async function downloadAzureBlobToFile(url, targetPath) {
114
+ export async function downloadAzureBlobToFile(url, targetPath, signal) {
115
115
  try {
116
- const response = await (await blobClientForDownload(url)).download();
116
+ // Thread the abort signal into BOTH the SDK download and the write pipeline so a
117
+ // cancel_download (#515) aborts the Azure transfer; the streamUrlToFile cloud
118
+ // branch also guards before/after so a cancelled transfer is never finalized.
119
+ const response = await (await blobClientForDownload(url)).download(undefined, undefined, {
120
+ abortSignal: signal,
121
+ });
117
122
  if (!response.readableStreamBody) {
118
123
  throw new ModelError("Azure Blob download response has no body", {
119
124
  url: redactUrlForLogs(url),
120
125
  });
121
126
  }
122
- await pipeline(response.readableStreamBody, createWriteStream(targetPath));
127
+ await pipeline(response.readableStreamBody, createWriteStream(targetPath), { signal });
123
128
  // #343 edge: verify the written size against the blob's authoritative
124
129
  // contentLength so an early-ending stream can't be reported as a complete
125
130
  // download (silent truncation).
@@ -1 +1 @@
1
- {"version":3,"file":"azure-blob.js","sourceRoot":"","sources":["../../../src/services/storage/azure-blob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"azure-blob.js","sourceRoot":"","sources":["../../../src/services/storage/azure-blob.ts"],"names":[],"mappings":"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"}
@@ -77,13 +77,13 @@ export function cloudPrincipalKey(url, auth = {}) {
77
77
  }
78
78
  return raw ? createHash("sha256").update(raw).digest("hex").slice(0, 16) : "";
79
79
  }
80
- export async function downloadCloudUrlToFile(url, targetPath, auth = {}) {
80
+ export async function downloadCloudUrlToFile(url, targetPath, auth = {}, signal) {
81
81
  if (isS3Url(url)) {
82
- await downloadS3ToFile(url, targetPath, auth.s3);
82
+ await downloadS3ToFile(url, targetPath, auth.s3, signal);
83
83
  return;
84
84
  }
85
85
  if (isAzureBlobUrl(url)) {
86
- await downloadAzureBlobToFile(url, targetPath);
86
+ await downloadAzureBlobToFile(url, targetPath, signal);
87
87
  return;
88
88
  }
89
89
  throw new ValidationError("Unsupported cloud storage download URL. Expected s3://bucket/key or an Azure Blob URL.");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/storage/index.ts"],"names":[],"mappings":"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"}
@@ -45,16 +45,22 @@ async function makeS3Client(auth) {
45
45
  }
46
46
  return new S3Client(config);
47
47
  }
48
- export async function downloadS3ToFile(url, targetPath, auth) {
48
+ export async function downloadS3ToFile(url, targetPath, auth, signal) {
49
49
  const { bucket, key } = parseS3Url(url);
50
50
  const { GetObjectCommand } = await loadAwsS3();
51
51
  const client = await makeS3Client(auth);
52
52
  try {
53
- const response = await client.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
53
+ // Thread the abort signal into BOTH the SDK request and the write pipeline so a
54
+ // cancel_download (#515) aborts the S3 transfer promptly instead of running to
55
+ // completion. The streamUrlToFile cloud branch also guards before/after as a
56
+ // backstop, so a cancelled transfer is never finalized even if the SDK ignores it.
57
+ const response = await client.send(new GetObjectCommand({ Bucket: bucket, Key: key }), {
58
+ abortSignal: signal,
59
+ });
54
60
  if (!response.Body) {
55
61
  throw new ModelError("S3 download response has no body", { url: redactUrlForLogs(url) });
56
62
  }
57
- await pipeline(bodyToReadable(response.Body), createWriteStream(targetPath));
63
+ await pipeline(bodyToReadable(response.Body), createWriteStream(targetPath), { signal });
58
64
  // #343 edge: the S3 stream can end early (dropped connection) and pipeline()
59
65
  // still resolves, leaving a truncated file. S3 tells us the authoritative
60
66
  // object size in ContentLength — verify the bytes on disk match before this
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/services/storage/s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/services/storage/s3.ts"],"names":[],"mappings":"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"}