comfyui-mcp 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/comfyui/client.d.ts.map +1 -1
  3. package/dist/comfyui/client.js +53 -2
  4. package/dist/comfyui/client.js.map +1 -1
  5. package/dist/comfyui/cloud-client.d.ts +37 -0
  6. package/dist/comfyui/cloud-client.d.ts.map +1 -0
  7. package/dist/comfyui/cloud-client.js +190 -0
  8. package/dist/comfyui/cloud-client.js.map +1 -0
  9. package/dist/config.d.ts +11 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +80 -7
  12. package/dist/config.js.map +1 -1
  13. package/dist/experimental/chat-handler.d.ts +6 -19
  14. package/dist/experimental/chat-handler.d.ts.map +1 -1
  15. package/dist/experimental/chat-handler.js +36 -41
  16. package/dist/experimental/chat-handler.js.map +1 -1
  17. package/dist/experimental/provider-registry.d.ts +2 -6
  18. package/dist/experimental/provider-registry.d.ts.map +1 -1
  19. package/dist/experimental/provider-registry.js +36 -28
  20. package/dist/experimental/provider-registry.js.map +1 -1
  21. package/dist/services/health-check.d.ts.map +1 -1
  22. package/dist/services/health-check.js +7 -0
  23. package/dist/services/health-check.js.map +1 -1
  24. package/dist/services/job-watcher.d.ts.map +1 -1
  25. package/dist/services/job-watcher.js +59 -47
  26. package/dist/services/job-watcher.js.map +1 -1
  27. package/dist/services/storage/azure-blob.d.ts.map +1 -1
  28. package/dist/services/storage/azure-blob.js +18 -8
  29. package/dist/services/storage/azure-blob.js.map +1 -1
  30. package/dist/services/storage/s3.d.ts.map +1 -1
  31. package/dist/services/storage/s3.js +13 -4
  32. package/dist/services/storage/s3.js.map +1 -1
  33. package/dist/services/tunnel.d.ts.map +1 -1
  34. package/dist/services/tunnel.js +9 -1
  35. package/dist/services/tunnel.js.map +1 -1
  36. package/dist/utils/optional-dep.d.ts +5 -0
  37. package/dist/utils/optional-dep.d.ts.map +1 -0
  38. package/dist/utils/optional-dep.js +29 -0
  39. package/dist/utils/optional-dep.js.map +1 -0
  40. package/package.json +10 -8
package/dist/config.js CHANGED
@@ -70,14 +70,38 @@ function detectComfyUIPaths() {
70
70
  return existsSync(join(p, "models")) || existsSync(join(p, "custom_nodes"));
71
71
  });
72
72
  }
73
+ // Loopback hostnames for the smart-detection logic. When --comfyui-url points
74
+ // at a non-loopback host, the user is targeting a remote ComfyUI and the
75
+ // local-FS auto-detection would just create a deceptive footgun (filesystem
76
+ // fallbacks writing to an unrelated local install while the remote ComfyUI
77
+ // never sees the file).
78
+ const LOOPBACK_HOSTS = new Set([
79
+ "127.0.0.1",
80
+ "::1",
81
+ "localhost",
82
+ "0.0.0.0",
83
+ ]);
84
+ function isLoopbackHost(host) {
85
+ if (!host)
86
+ return true; // No URL → assume local
87
+ return LOOPBACK_HOSTS.has(host.toLowerCase());
88
+ }
73
89
  /**
74
90
  * Resolve the ComfyUI path, with auto-detection fallback.
75
91
  * Priority: COMFYUI_PATH env var > auto-detected paths.
76
- * Logs a warning if multiple installations found.
92
+ *
93
+ * Smart-detection: if the user is targeting a remote ComfyUI (`--comfyui-url`
94
+ * points at a non-loopback host) or Comfy Cloud (`COMFYUI_API_KEY` is set),
95
+ * skip auto-detection — having COMFYUI_PATH point at an unrelated local
96
+ * install causes silent failures (see fix in 0.8.1 upload_*). An explicit
97
+ * COMFYUI_PATH env var still wins.
77
98
  */
78
- function resolveComfyUIPath(envPath) {
99
+ function resolveComfyUIPath(envPath, opts) {
79
100
  if (envPath)
80
101
  return envPath;
102
+ if (opts.remoteUrl || opts.cloud) {
103
+ return undefined;
104
+ }
81
105
  const detected = detectComfyUIPaths();
82
106
  if (detected.length === 0)
83
107
  return undefined;
@@ -151,27 +175,76 @@ const configSchema = z.object({
151
175
  comfyuiPort: z.coerce.number().int().positive().optional(),
152
176
  comfyuiSsl: z.coerce.boolean().default(false),
153
177
  comfyuiPath: z.string().optional(),
178
+ comfyuiApiKey: z.string().optional(),
179
+ comfyuiCloudUrl: z.string().default("https://cloud.comfy.org"),
154
180
  huggingfaceToken: z.string().optional(),
155
181
  githubToken: z.string().optional(),
156
182
  civitaiApiToken: z.string().optional(),
157
183
  comfyApiKey: z.string().optional(),
158
184
  });
159
185
  const urlOverride = resolveUrlOverride();
186
+ const cloudApiKey = process.env.COMFYUI_API_KEY?.trim() || undefined;
187
+ const cloudActive = Boolean(cloudApiKey);
188
+ const remoteUrlActive = Boolean(urlOverride) && !isLoopbackHost(urlOverride?.host);
189
+ if (cloudActive) {
190
+ console.error(`[comfyui-mcp] Comfy Cloud mode enabled (COMFYUI_API_KEY set) — local FS/process tools will throw.`);
191
+ }
160
192
  const parsedConfig = configSchema.parse({
161
193
  comfyuiHost: urlOverride?.host ?? process.env.COMFYUI_HOST,
162
194
  comfyuiPort: urlOverride?.port ?? (process.env.COMFYUI_PORT || undefined),
163
195
  comfyuiSsl: urlOverride?.ssl ?? process.env.COMFYUI_SSL,
164
- comfyuiPath: resolveComfyUIPath(process.env.COMFYUI_PATH),
196
+ comfyuiPath: resolveComfyUIPath(process.env.COMFYUI_PATH, {
197
+ remoteUrl: remoteUrlActive,
198
+ cloud: cloudActive,
199
+ }),
200
+ comfyuiApiKey: cloudApiKey,
201
+ comfyuiCloudUrl: process.env.COMFYUI_CLOUD_URL,
165
202
  huggingfaceToken: process.env.HUGGINGFACE_TOKEN,
166
203
  githubToken: process.env.GITHUB_TOKEN,
167
204
  civitaiApiToken: process.env.CIVITAI_API_TOKEN,
168
205
  comfyApiKey: process.env.COMFY_API_KEY,
169
206
  });
170
- // Resolve port: explicit url/env wins, otherwise auto-detect.
171
- // A --comfyui-url/COMFYUI_URL override always carries a port, so detection is skipped.
172
- const resolvedPort = parsedConfig.comfyuiPort
173
- ?? (urlOverride ? urlOverride.port : await detectComfyUIPort(parsedConfig.comfyuiHost));
207
+ // Resolve port:
208
+ // - Cloud mode: no port needed (resolvedPort is a placeholder; getComfyUIApiHost()
209
+ // throws via requireLocalMode() in cloud mode so the value is never read).
210
+ // - Otherwise: explicit url/env wins, then auto-detect against the host.
211
+ let resolvedPort;
212
+ if (cloudActive) {
213
+ resolvedPort = parsedConfig.comfyuiPort ?? 0;
214
+ }
215
+ else {
216
+ resolvedPort = parsedConfig.comfyuiPort
217
+ ?? (urlOverride ? urlOverride.port : await detectComfyUIPort(parsedConfig.comfyuiHost));
218
+ }
174
219
  export const config = { ...parsedConfig, resolvedPort };
220
+ // ── Mode helpers ──────────────────────────────────────────────────────────
221
+ // Three modes, mutually exclusive in practice:
222
+ // - cloud: COMFYUI_API_KEY set → talk to Comfy Cloud over HTTPS+X-API-Key
223
+ // - remote: --comfyui-url points at a non-loopback host → talk to remote
224
+ // ComfyUI; local-FS/process tools should throw
225
+ // - local: everything else
226
+ // Tools that fundamentally need a local install (process control, manifest,
227
+ // model removal, etc.) MUST check config.comfyuiPath and throw clearly if
228
+ // undefined. The dispatcher in src/comfyui/client.ts handles cloud routing
229
+ // for HTTP-backed primitives.
230
+ export function isCloudMode() {
231
+ return Boolean(config.comfyuiApiKey);
232
+ }
233
+ export function isRemoteMode() {
234
+ return !isCloudMode() && remoteUrlActive;
235
+ }
236
+ export function isLocalMode() {
237
+ return !isCloudMode() && !isRemoteMode();
238
+ }
239
+ export function getCloudUrl() {
240
+ return config.comfyuiCloudUrl;
241
+ }
242
+ export function getApiKey() {
243
+ if (!config.comfyuiApiKey) {
244
+ throw new Error("Comfy Cloud API key not configured (COMFYUI_API_KEY).");
245
+ }
246
+ return config.comfyuiApiKey;
247
+ }
175
248
  export function getComfyUIApiHost() {
176
249
  return `${config.comfyuiHost}:${config.resolvedPort}`;
177
250
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAsB,MAAM,4BAA4B,CAAC;AAEjF,wDAAwD;AACxD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAEtD;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,8CAA8C;IAC9C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzE,kCAAkC;IAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9C,qBAAqB;IACrB,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1D,uBAAuB;IACvB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAElD,6CAA6C;IAC7C,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAC9E,CAAC;IAEF,wEAAwE;IACxE,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,kFAAkF;IAClF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,uDAAuD;QACvD,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,8DAA8D;QAC9D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,2EAA2E;AAC3E,wBAAwB;AACxB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,WAAW;IACX,KAAK;IACL,WAAW;IACX,SAAS;CACV,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,IAAwB;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;IAChD,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,OAA2B,EAC3B,IAA4C;IAE5C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CACX,0DAA0D;YACxD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI;YAC3B,+BAA+B,CAClC,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,eAAe,EAAE;gBACpE,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,CACX,+CAA+C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CACvF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,GAAuB,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YAC1B,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,MAAM;QACR,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM;QACR,CAAC;IACH,CAAC;IACD,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,6DAA6D,GAAG,MAC9D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GACvC,EAAE,CACH,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAC9D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACrE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACzC,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEnF,IAAI,WAAW,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CACX,mGAAmG,CACpG,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC;IACtC,WAAW,EAAE,WAAW,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;IAC1D,WAAW,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC;IACzE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;IACvD,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;QACxD,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,WAAW;KACnB,CAAC;IACF,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC9C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC/C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACrC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC9C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;CACvC,CAAC,CAAC;AAEH,gBAAgB;AAChB,mFAAmF;AACnF,6EAA6E;AAC7E,yEAAyE;AACzE,IAAI,YAAoB,CAAC;AACzB,IAAI,WAAW,EAAE,CAAC;IAChB,YAAY,GAAG,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;AAC/C,CAAC;KAAM,CAAC;IACN,YAAY,GAAG,YAAY,CAAC,WAAW;WAClC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW,EAAE,GAAG,YAAY,EAAE,YAAY,EAAE,CAAC;AAEhE,6EAA6E;AAC7E,+CAA+C;AAC/C,6EAA6E;AAC7E,2EAA2E;AAC3E,2DAA2D;AAC3D,8BAA8B;AAC9B,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,8BAA8B;AAE9B,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,WAAW,EAAE,IAAI,eAAe,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC"}
@@ -1,22 +1,6 @@
1
- import { type LanguageModel } from "ai";
2
- /**
3
- * The single server-side tool for the POC. Has an `execute` so the AI SDK runs
4
- * it on the server and feeds the result back into the model automatically.
5
- */
6
- export declare const tools: {
7
- generate_image: import("ai").Tool<{
8
- prompt: string;
9
- width?: number | undefined;
10
- height?: number | undefined;
11
- }, {
12
- status: string;
13
- prompt: string;
14
- width: number;
15
- height: number;
16
- imageUrl: string;
17
- note: string;
18
- }>;
19
- };
1
+ import type { LanguageModel, ToolSet } from "ai";
2
+ type AiModule = typeof import("ai");
3
+ export declare function buildTools(toolFn: AiModule["tool"]): ToolSet;
20
4
  export interface ChatHandlerOptions {
21
5
  /** Override the model (mainly for tests). Defaults to the provider registry. */
22
6
  model?: LanguageModel;
@@ -24,6 +8,8 @@ export interface ChatHandlerOptions {
24
8
  modelId?: string;
25
9
  /** System prompt for the agent. */
26
10
  system?: string;
11
+ /** Override the tool set (mainly for tests). Defaults to the POC tools. */
12
+ tools?: ToolSet;
27
13
  }
28
14
  /**
29
15
  * Handle a chat request. Accepts a Fetch-style `Request` whose JSON body is
@@ -31,4 +17,5 @@ export interface ChatHandlerOptions {
31
17
  * `Response` (UI message stream protocol).
32
18
  */
33
19
  export declare function handleChatRequest(req: Request, options?: ChatHandlerOptions): Promise<Response>;
20
+ export {};
34
21
  //# sourceMappingURL=chat-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/experimental/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAGnB,MAAM,IAAI,CAAC;AAiBZ;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;CAsBC,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAkBnB"}
1
+ {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/experimental/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EAER,MAAM,IAAI,CAAC;AAqBZ,KAAK,QAAQ,GAAG,cAAc,IAAI,CAAC,CAAC;AASpC,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAwB5D;AAED,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAqBnB"}
@@ -1,43 +1,36 @@
1
- import { convertToModelMessages, stepCountIs, streamText, tool, } from "ai";
2
1
  import { z } from "zod";
3
2
  import { resolveModel } from "./provider-registry.js";
4
- // ---------------------------------------------------------------------------
5
- // Experimental AI SDK chat handler for the embedded-agent-panel POC.
6
- //
7
- // `POST /api/chat` -> streamText({ model, messages, tools }).toUIMessageStreamResponse()
8
- //
9
- // Includes ONE server-side tool end-to-end (`generate_image`) which, for the
10
- // POC, returns a stub result. Wiring the real comfyui-mcp generate tools is a
11
- // later phase (see design/embedded-agent-panel.md, build order step 5).
12
- //
13
- // This module is only reached behind COMFYUI_MCP_AGENT_POC.
14
- // ---------------------------------------------------------------------------
15
- /**
16
- * The single server-side tool for the POC. Has an `execute` so the AI SDK runs
17
- * it on the server and feeds the result back into the model automatically.
18
- */
19
- export const tools = {
20
- generate_image: tool({
21
- description: "Generate an image from a text prompt using ComfyUI. (POC stub returns a placeholder result instead of running a real workflow.)",
22
- inputSchema: z.object({
23
- prompt: z.string().describe("The text prompt to generate an image from."),
24
- width: z.number().int().positive().optional().describe("Image width in pixels."),
25
- height: z.number().int().positive().optional().describe("Image height in pixels."),
3
+ import { requireOptionalDep } from "../utils/optional-dep.js";
4
+ async function loadAi() {
5
+ return requireOptionalDep("ai", {
6
+ feature: "embedded-agent-panel POC",
7
+ installHint: "npm install ai @ai-sdk/anthropic @ai-sdk/google @ai-sdk/openai",
8
+ });
9
+ }
10
+ export function buildTools(toolFn) {
11
+ return {
12
+ generate_image: toolFn({
13
+ description: "Generate an image from a text prompt using ComfyUI. (POC stub — returns a placeholder result instead of running a real workflow.)",
14
+ inputSchema: z.object({
15
+ prompt: z.string().describe("The text prompt to generate an image from."),
16
+ width: z.number().int().positive().optional().describe("Image width in pixels."),
17
+ height: z.number().int().positive().optional().describe("Image height in pixels."),
18
+ }),
19
+ execute: async ({ prompt, width, height }) => {
20
+ // POC stub: real implementation will enqueue a ComfyUI workflow and
21
+ // return the resulting asset id / image URL.
22
+ return {
23
+ status: "stubbed",
24
+ prompt,
25
+ width: width ?? 1024,
26
+ height: height ?? 1024,
27
+ imageUrl: "https://example.invalid/poc-placeholder.png",
28
+ note: "Placeholder result from the POC. No real workflow was executed.",
29
+ };
30
+ },
26
31
  }),
27
- execute: async ({ prompt, width, height }) => {
28
- // POC stub: real implementation will enqueue a ComfyUI workflow and
29
- // return the resulting asset id / image URL.
30
- return {
31
- status: "stubbed",
32
- prompt,
33
- width: width ?? 1024,
34
- height: height ?? 1024,
35
- imageUrl: "https://example.invalid/poc-placeholder.png",
36
- note: "Placeholder result from the POC. No real workflow was executed.",
37
- };
38
- },
39
- }),
40
- };
32
+ };
33
+ }
41
34
  const DEFAULT_SYSTEM = "You are an assistant embedded in ComfyUI. You can generate images with the generate_image tool.";
42
35
  /**
43
36
  * Handle a chat request. Accepts a Fetch-style `Request` whose JSON body is
@@ -47,13 +40,15 @@ const DEFAULT_SYSTEM = "You are an assistant embedded in ComfyUI. You can genera
47
40
  export async function handleChatRequest(req, options = {}) {
48
41
  const body = (await req.json());
49
42
  const messages = body.messages ?? [];
50
- const model = options.model ?? resolveModel(options.modelId ?? body.model);
51
- const result = streamText({
43
+ const ai = await loadAi();
44
+ const model = options.model ?? (await resolveModel(options.modelId ?? body.model));
45
+ const tools = options.tools ?? buildTools(ai.tool);
46
+ const result = ai.streamText({
52
47
  model,
53
48
  system: options.system ?? DEFAULT_SYSTEM,
54
- messages: await convertToModelMessages(messages),
49
+ messages: await ai.convertToModelMessages(messages),
55
50
  tools,
56
- stopWhen: stepCountIs(5),
51
+ stopWhen: ai.stepCountIs(5),
57
52
  });
58
53
  return result.toUIMessageStreamResponse();
59
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../src/experimental/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,IAAI,GAIL,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,8EAA8E;AAC9E,qEAAqE;AACrE,EAAE;AACF,yFAAyF;AACzF,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,4DAA4D;AAC5D,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,cAAc,EAAE,IAAI,CAAC;QACnB,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACzE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACnF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YAC3C,oEAAoE;YACpE,6CAA6C;YAC7C,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM;gBACN,KAAK,EAAE,KAAK,IAAI,IAAI;gBACpB,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,QAAQ,EAAE,6CAA6C;gBACvD,IAAI,EAAE,iEAAiE;aACxE,CAAC;QACJ,CAAC;KACF,CAAC;CACe,CAAC;AAWpB,MAAM,cAAc,GAClB,iGAAiG,CAAC;AAEpG;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc;QACxC,QAAQ,EAAE,MAAM,sBAAsB,CAAC,QAAQ,CAAC;QAChD,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,yBAAyB,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../src/experimental/chat-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAmB9D,KAAK,UAAU,MAAM;IACnB,OAAO,kBAAkB,CAAW,IAAI,EAAE;QACxC,OAAO,EAAE,0BAA0B;QACnC,WAAW,EAAE,gEAAgE;KAC9E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAwB;IACjD,OAAO;QACL,cAAc,EAAE,MAAM,CAAC;YACrB,WAAW,EACT,mIAAmI;YACrI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;gBACzE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;aACnF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC3C,oEAAoE;gBACpE,6CAA6C;gBAC7C,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,MAAM;oBACN,KAAK,EAAE,KAAK,IAAI,IAAI;oBACpB,MAAM,EAAE,MAAM,IAAI,IAAI;oBACtB,QAAQ,EAAE,6CAA6C;oBACvD,IAAI,EAAE,iEAAiE;iBACxE,CAAC;YACJ,CAAC;SACF,CAAC;KACe,CAAC;AACtB,CAAC;AAaD,MAAM,cAAc,GAClB,iGAAiG,CAAC;AAEpG;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAErC,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;IAC1B,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC;QAC3B,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc;QACxC,QAAQ,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QACnD,KAAK;QACL,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;KAC5B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,yBAAyB,EAAE,CAAC;AAC5C,CAAC"}
@@ -1,8 +1,4 @@
1
1
  import type { LanguageModel } from "ai";
2
- export declare const registry: import("ai").ProviderRegistryProvider<{
3
- anthropic: import("@ai-sdk/anthropic").AnthropicProvider;
4
- openai: import("@ai-sdk/openai").OpenAIProvider;
5
- google: import("@ai-sdk/google").GoogleGenerativeAIProvider;
6
- }, ":">;
7
- export declare function resolveModel(id?: string): LanguageModel;
2
+ export declare function getRegistry(): Promise<import("ai").ProviderRegistryProvider<Record<string, import("@ai-sdk/provider").ProviderV3>, string>>;
3
+ export declare function resolveModel(id?: string): Promise<LanguageModel>;
8
4
  //# sourceMappingURL=provider-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/experimental/provider-registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAaxC,eAAO,MAAM,QAAQ;;;;OAInB,CAAC;AAkCH,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CASvD"}
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/experimental/provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAuBxC,wBAAsB,WAAW,kHA6BhC;AAkBD,wBAAsB,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAStE"}
@@ -1,28 +1,36 @@
1
- import { anthropic } from "@ai-sdk/anthropic";
2
- import { google } from "@ai-sdk/google";
3
- import { openai } from "@ai-sdk/openai";
4
- import { createProviderRegistry } from "ai";
5
- // ---------------------------------------------------------------------------
6
- // Provider registry for the experimental embedded-agent-panel POC.
7
- //
8
- // Picks the language model per request from a single registry, keyed by a
9
- // `provider:model` string (the AI SDK default separator). Default is Anthropic
10
- // with the model from COMFYUI_MCP_AGENT_MODEL. Provider API keys are read from
11
- // the usual env vars by each provider package (ANTHROPIC_API_KEY, etc.).
12
- //
13
- // Not part of the default MCP server — only used behind COMFYUI_MCP_AGENT_POC.
14
- // ---------------------------------------------------------------------------
15
- export const registry = createProviderRegistry({
16
- anthropic,
17
- openai,
18
- google,
19
- });
1
+ import { requireOptionalDep } from "../utils/optional-dep.js";
2
+ let registryPromise = null;
3
+ export async function getRegistry() {
4
+ if (!registryPromise) {
5
+ registryPromise = (async () => {
6
+ const [ai, anthropic, google, openai] = await Promise.all([
7
+ requireOptionalDep("ai", {
8
+ feature: "embedded-agent-panel POC",
9
+ installHint: "npm install ai @ai-sdk/anthropic @ai-sdk/google @ai-sdk/openai",
10
+ }),
11
+ requireOptionalDep("@ai-sdk/anthropic", {
12
+ feature: "Anthropic provider for the agent POC",
13
+ installHint: "npm install @ai-sdk/anthropic",
14
+ }),
15
+ requireOptionalDep("@ai-sdk/google", {
16
+ feature: "Google provider for the agent POC",
17
+ installHint: "npm install @ai-sdk/google",
18
+ }),
19
+ requireOptionalDep("@ai-sdk/openai", {
20
+ feature: "OpenAI provider for the agent POC",
21
+ installHint: "npm install @ai-sdk/openai",
22
+ }),
23
+ ]);
24
+ return ai.createProviderRegistry({
25
+ anthropic: anthropic.anthropic,
26
+ openai: openai.openai,
27
+ google: google.google,
28
+ });
29
+ })();
30
+ }
31
+ return registryPromise;
32
+ }
20
33
  const DEFAULT_MODEL = "anthropic:claude-sonnet-4-5";
21
- /**
22
- * The set of model ids a request is allowed to select: the server default
23
- * (COMFYUI_MCP_AGENT_MODEL or DEFAULT_MODEL) plus any explicitly allow-listed
24
- * via COMFYUI_MCP_AGENT_ALLOWED_MODELS (comma-separated `provider:model`).
25
- */
26
34
  function allowedModels() {
27
35
  const set = new Set([DEFAULT_MODEL]);
28
36
  const envDefault = process.env.COMFYUI_MCP_AGENT_MODEL?.trim();
@@ -38,13 +46,13 @@ function allowedModels() {
38
46
  }
39
47
  return set;
40
48
  }
41
- export function resolveModel(id) {
49
+ export async function resolveModel(id) {
50
+ const registry = await getRegistry();
42
51
  const fallback = process.env.COMFYUI_MCP_AGENT_MODEL?.trim() || DEFAULT_MODEL;
43
- // Only honour a client-supplied model id if it is explicitly allow-listed.
44
- // Otherwise ignore it and use the server default — this stops a leaked tunnel
45
- // URL from letting a caller select arbitrary (expensive) models on your keys.
46
52
  const requested = id?.trim();
47
53
  const modelId = requested && allowedModels().has(requested) ? requested : fallback;
54
+ // languageModel()'s strict template-literal type doesn't cover arbitrary
55
+ // ids; we widen at the call site since we already gated by allowlist.
48
56
  return registry.languageModel(modelId);
49
57
  }
50
58
  //# sourceMappingURL=provider-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/experimental/provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;AAG5C,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,+EAA+E;AAC/E,yEAAyE;AACzE,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,QAAQ,GAAG,sBAAsB,CAAC;IAC7C,SAAS;IACT,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAapD;;;;GAIG;AACH,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,UAAU;QAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC3D,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAW;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,aAAa,CAAC;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,MAAM,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GACX,SAAS,IAAI,aAAa,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrE,OAAO,QAAQ,CAAC,aAAa,CAAC,OAA0B,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/experimental/provider-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAoB9D,IAAI,eAAe,GAAmE,IAAI,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACxD,kBAAkB,CAAW,IAAI,EAAE;oBACjC,OAAO,EAAE,0BAA0B;oBACnC,WAAW,EAAE,gEAAgE;iBAC9E,CAAC;gBACF,kBAAkB,CAAkB,mBAAmB,EAAE;oBACvD,OAAO,EAAE,sCAAsC;oBAC/C,WAAW,EAAE,+BAA+B;iBAC7C,CAAC;gBACF,kBAAkB,CAAe,gBAAgB,EAAE;oBACjD,OAAO,EAAE,mCAAmC;oBAC5C,WAAW,EAAE,4BAA4B;iBAC1C,CAAC;gBACF,kBAAkB,CAAe,gBAAgB,EAAE;oBACjD,OAAO,EAAE,mCAAmC;oBAC5C,WAAW,EAAE,4BAA4B;iBAC1C,CAAC;aACH,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,sBAAsB,CAAC;gBAC/B,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAEpD,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,UAAU;QAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC3D,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAW;IAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,aAAa,CAAC;IAC9E,MAAM,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GACX,SAAS,IAAI,aAAa,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAuD,CAAC,CAAC;AACzF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAClC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAgGjB"}
1
+ {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAClC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAuGjB"}
@@ -4,6 +4,7 @@
4
4
  // joaolvivas/comfyui-mcp-byjlucas@de82ecda (2026-05-12). Refactored to
5
5
  // match this repo's service/tool split.
6
6
  import { ConnectionError } from "../utils/errors.js";
7
+ import { isCloudMode } from "../config.js";
7
8
  import { getClient, getQueue, getSystemStats } from "../comfyui/client.js";
8
9
  const CRITICAL_MODEL_CATS = [
9
10
  "checkpoints",
@@ -47,6 +48,12 @@ export async function runHealthCheck(options = {}) {
47
48
  catch (err) {
48
49
  lines.push(`**Queue**: ERROR — ${err instanceof Error ? err.message : err}`);
49
50
  }
51
+ if (isCloudMode()) {
52
+ // Comfy Cloud has its own model library and no /internal/logs equivalent.
53
+ lines.push(`\n**Models**: managed by Comfy Cloud (not listable from this client)`);
54
+ lines.push(`**Recent errors**: not available in cloud mode`);
55
+ return lines.join("\n");
56
+ }
50
57
  const client = getClient();
51
58
  const modelLines = [];
52
59
  let totalModelsSeen = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"job-watcher.d.ts","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAI1B,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC;AA4CD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,sBAAsB,CAyExB;AA6HD,eAAO,MAAM,UAAU;IACrB;;;;OAIG;oBACa,MAAM,aAAa,YAAY,GAAG,IAAI;IA4GtD;;OAEG;sBACe,MAAM,GAAG,IAAI;IAS/B;;OAEG;kBACW,MAAM,EAAE;IAItB;;OAEG;uBACsB,OAAO,CAAC,IAAI,CAAC;IA4BtC,oCAAoC;;CAIrC,CAAC"}
1
+ {"version":3,"file":"job-watcher.d.ts","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAI1B,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC;AAgDD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,sBAAsB,CAyExB;AA6HD,eAAO,MAAM,UAAU;IACrB;;;;OAIG;oBACa,MAAM,aAAa,YAAY,GAAG,IAAI;IAmHtD;;OAEG;sBACe,MAAM,GAAG,IAAI;IAS/B;;OAEG;kBACW,MAAM,EAAE;IAItB;;OAEG;uBACsB,OAAO,CAAC,IAAI,CAAC;IA4BtC,oCAAoC;;CAIrC,CAAC"}
@@ -2,7 +2,7 @@ import { mkdir, writeFile, readdir, unlink, stat } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { tmpdir } from "node:os";
4
4
  import { getClient, ensureConnected, getHistory, } from "../comfyui/client.js";
5
- import { getComfyUIApiHost, getComfyUIProtocol } from "../config.js";
5
+ import { getCloudUrl, getComfyUIApiHost, getComfyUIProtocol, isCloudMode, } from "../config.js";
6
6
  import { attachExecutionListeners } from "../comfyui/events.js";
7
7
  import { logger } from "../utils/logger.js";
8
8
  import { AssetRegistry } from "./asset-registry.js";
@@ -23,8 +23,12 @@ async function ensureCompletionsDir() {
23
23
  await mkdir(COMPLETIONS_DIR, { recursive: true });
24
24
  }
25
25
  function buildImageUrl(filename, subfolder, type) {
26
- const host = getComfyUIApiHost();
27
26
  const params = new URLSearchParams({ filename, subfolder, type });
27
+ if (isCloudMode()) {
28
+ const base = getCloudUrl().replace(/\/+$/, "");
29
+ return `${base}/api/view?${params.toString()}`;
30
+ }
31
+ const host = getComfyUIApiHost();
28
32
  return `${getComfyUIProtocol()}://${host}/view?${params.toString()}`;
29
33
  }
30
34
  export function buildCompletionNotification(promptId, entry, startTime) {
@@ -216,55 +220,63 @@ export const JobWatcher = {
216
220
  workflow,
217
221
  };
218
222
  activeWatchers.set(promptId, state);
219
- // ── WebSocket track (best-effort) ──
220
- try {
221
- const client = getClient();
222
- if (!client.closed) {
223
- state.wsCleanup = attachExecutionListeners(client, promptId, {
224
- onComplete: () => {
225
- handleCompletion(promptId, state, "ws").catch((err) => logger.error("WS completion handler error", {
226
- prompt_id: promptId,
227
- error: err instanceof Error ? err.message : err,
228
- }));
229
- },
230
- onError: () => {
231
- handleCompletion(promptId, state, "ws").catch((err) => logger.error("WS error handler error", {
232
- prompt_id: promptId,
233
- error: err instanceof Error ? err.message : err,
234
- }));
235
- },
236
- });
237
- logger.info("WS listeners attached", { prompt_id: promptId });
223
+ // ── WebSocket track (best-effort, local/remote only) ──
224
+ // Comfy Cloud has no WebSocket; rely on the HTTP polling track instead.
225
+ const skipWs = isCloudMode();
226
+ if (skipWs) {
227
+ logger.info("Cloud mode — skipping WS attach, polling-only", {
228
+ prompt_id: promptId,
229
+ });
230
+ }
231
+ if (!skipWs)
232
+ try {
233
+ const client = getClient();
234
+ if (!client.closed) {
235
+ state.wsCleanup = attachExecutionListeners(client, promptId, {
236
+ onComplete: () => {
237
+ handleCompletion(promptId, state, "ws").catch((err) => logger.error("WS completion handler error", {
238
+ prompt_id: promptId,
239
+ error: err instanceof Error ? err.message : err,
240
+ }));
241
+ },
242
+ onError: () => {
243
+ handleCompletion(promptId, state, "ws").catch((err) => logger.error("WS error handler error", {
244
+ prompt_id: promptId,
245
+ error: err instanceof Error ? err.message : err,
246
+ }));
247
+ },
248
+ });
249
+ logger.info("WS listeners attached", { prompt_id: promptId });
250
+ }
251
+ else {
252
+ logger.info("WS not connected, polling-only mode", {
253
+ prompt_id: promptId,
254
+ });
255
+ // Try to connect in background for future use
256
+ ensureConnected().then((client) => {
257
+ if (!state.completed) {
258
+ state.wsCleanup = attachExecutionListeners(client, promptId, {
259
+ onComplete: () => {
260
+ handleCompletion(promptId, state, "ws").catch(() => { });
261
+ },
262
+ onError: () => {
263
+ handleCompletion(promptId, state, "ws").catch(() => { });
264
+ },
265
+ });
266
+ logger.info("Late WS listeners attached", {
267
+ prompt_id: promptId,
268
+ });
269
+ }
270
+ }, () => {
271
+ // WS connection failed — polling will handle it
272
+ });
273
+ }
238
274
  }
239
- else {
240
- logger.info("WS not connected, polling-only mode", {
275
+ catch {
276
+ logger.info("WS setup failed, polling-only mode", {
241
277
  prompt_id: promptId,
242
278
  });
243
- // Try to connect in background for future use
244
- ensureConnected().then((client) => {
245
- if (!state.completed) {
246
- state.wsCleanup = attachExecutionListeners(client, promptId, {
247
- onComplete: () => {
248
- handleCompletion(promptId, state, "ws").catch(() => { });
249
- },
250
- onError: () => {
251
- handleCompletion(promptId, state, "ws").catch(() => { });
252
- },
253
- });
254
- logger.info("Late WS listeners attached", {
255
- prompt_id: promptId,
256
- });
257
- }
258
- }, () => {
259
- // WS connection failed — polling will handle it
260
- });
261
279
  }
262
- }
263
- catch {
264
- logger.info("WS setup failed, polling-only mode", {
265
- prompt_id: promptId,
266
- });
267
- }
268
280
  // ── Polling track ──
269
281
  state.pollTimer = setInterval(() => {
270
282
  if (state.completed)