comfyui-mcp 0.8.0 → 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.
- package/CHANGELOG.md +83 -0
- package/CONTRIBUTING.md +137 -0
- package/README.md +5 -4
- package/design/remote-and-cloud-modes.md +113 -0
- package/dist/comfyui/client.d.ts.map +1 -1
- package/dist/comfyui/client.js +53 -2
- package/dist/comfyui/client.js.map +1 -1
- package/dist/comfyui/cloud-client.d.ts +37 -0
- package/dist/comfyui/cloud-client.d.ts.map +1 -0
- package/dist/comfyui/cloud-client.js +190 -0
- package/dist/comfyui/cloud-client.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +80 -7
- package/dist/config.js.map +1 -1
- package/dist/experimental/chat-handler.d.ts +6 -19
- package/dist/experimental/chat-handler.d.ts.map +1 -1
- package/dist/experimental/chat-handler.js +36 -41
- package/dist/experimental/chat-handler.js.map +1 -1
- package/dist/experimental/provider-registry.d.ts +2 -6
- package/dist/experimental/provider-registry.d.ts.map +1 -1
- package/dist/experimental/provider-registry.js +36 -28
- package/dist/experimental/provider-registry.js.map +1 -1
- package/dist/services/health-check.d.ts +6 -0
- package/dist/services/health-check.d.ts.map +1 -0
- package/dist/services/health-check.js +110 -0
- package/dist/services/health-check.js.map +1 -0
- package/dist/services/job-watcher.d.ts.map +1 -1
- package/dist/services/job-watcher.js +59 -47
- package/dist/services/job-watcher.js.map +1 -1
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +53 -7
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/storage/azure-blob.d.ts.map +1 -1
- package/dist/services/storage/azure-blob.js +18 -8
- package/dist/services/storage/azure-blob.js.map +1 -1
- package/dist/services/storage/s3.d.ts.map +1 -1
- package/dist/services/storage/s3.js +13 -4
- package/dist/services/storage/s3.js.map +1 -1
- package/dist/services/tunnel.d.ts.map +1 -1
- package/dist/services/tunnel.js +9 -1
- package/dist/services/tunnel.js.map +1 -1
- package/dist/tools/health-check.d.ts +3 -0
- package/dist/tools/health-check.d.ts.map +1 -0
- package/dist/tools/health-check.js +30 -0
- package/dist/tools/health-check.js.map +1 -0
- package/dist/tools/image-management.d.ts.map +1 -1
- package/dist/tools/image-management.js +27 -83
- package/dist/tools/image-management.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/utils/optional-dep.d.ts +5 -0
- package/dist/utils/optional-dep.d.ts.map +1 -0
- package/dist/utils/optional-dep.js +29 -0
- package/dist/utils/optional-dep.js.map +1 -0
- package/package.json +16 -8
- package/scripts/gen-tool-docs.ts +1 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// Comfy Cloud client — mirrors the surface of ./client.ts (`getSystemStats`,
|
|
2
|
+
// `getQueue`, `enqueuePrompt`, `getHistory`, `interrupt`, `fetchImage`,
|
|
3
|
+
// `uploadImageHttp`, etc.) but talks to https://cloud.comfy.org over HTTPS
|
|
4
|
+
// authenticated with `X-API-Key`. WebSocket / `/internal/logs` /
|
|
5
|
+
// `/object_info` have no cloud equivalents — those throw `CLOUD_UNSUPPORTED`
|
|
6
|
+
// so callers can degrade gracefully.
|
|
7
|
+
//
|
|
8
|
+
// Architecture (isCloudMode() dispatch + parallel cloud-client.ts) was
|
|
9
|
+
// originally shipped by @picoSols in `picoSols/comfyui-cloud-mcp@7a812069`
|
|
10
|
+
// (2026-03-25). This is a port adapted to our config helpers + error types,
|
|
11
|
+
// with `fetchImage` / `uploadImageHttp` added so our existing image tools
|
|
12
|
+
// keep working in cloud mode.
|
|
13
|
+
import { getApiKey, getCloudUrl } from "../config.js";
|
|
14
|
+
import { ComfyUIError, ConnectionError } from "../utils/errors.js";
|
|
15
|
+
import { logger } from "../utils/logger.js";
|
|
16
|
+
function cloudUrl(path) {
|
|
17
|
+
const base = getCloudUrl().replace(/\/+$/, "");
|
|
18
|
+
const p = path.startsWith("/") ? path : `/${path}`;
|
|
19
|
+
return `${base}${p}`;
|
|
20
|
+
}
|
|
21
|
+
function authHeaders(extra = {}) {
|
|
22
|
+
return { "X-API-Key": getApiKey(), ...extra };
|
|
23
|
+
}
|
|
24
|
+
async function cloudFetch(path, init) {
|
|
25
|
+
const url = cloudUrl(path);
|
|
26
|
+
const baseHeaders = init?.skipJsonContentType
|
|
27
|
+
? {}
|
|
28
|
+
: { "Content-Type": "application/json" };
|
|
29
|
+
const headers = {
|
|
30
|
+
...authHeaders(baseHeaders),
|
|
31
|
+
...(init?.headers ?? {}),
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
const res = await fetch(url, { ...init, headers });
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
const body = await res.text().catch(() => "");
|
|
37
|
+
throw new ComfyUIError(`Cloud API error: ${res.status} ${res.statusText} — ${body.slice(0, 500)}`, "CLOUD_API_ERROR", { url, status: res.status });
|
|
38
|
+
}
|
|
39
|
+
return res;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (err instanceof ComfyUIError)
|
|
43
|
+
throw err;
|
|
44
|
+
throw new ConnectionError(`Failed to reach Comfy Cloud at ${url}: ${err instanceof Error ? err.message : err}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function enqueuePrompt(workflow, extraData) {
|
|
48
|
+
logger.info("Cloud: submitting workflow to Comfy Cloud");
|
|
49
|
+
const body = { prompt: workflow };
|
|
50
|
+
if (extraData && Object.keys(extraData).length > 0) {
|
|
51
|
+
body.extra_data = extraData;
|
|
52
|
+
}
|
|
53
|
+
const res = await cloudFetch("/api/prompt", {
|
|
54
|
+
method: "POST",
|
|
55
|
+
body: JSON.stringify(body),
|
|
56
|
+
});
|
|
57
|
+
const data = (await res.json());
|
|
58
|
+
logger.info("Cloud: workflow submitted", { prompt_id: data.prompt_id });
|
|
59
|
+
return { prompt_id: data.prompt_id, queue_remaining: data.number };
|
|
60
|
+
}
|
|
61
|
+
export async function getHistory(promptId) {
|
|
62
|
+
if (!promptId) {
|
|
63
|
+
logger.warn("Cloud: getHistory() without prompt_id returns {} (no global history endpoint)");
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
const res = await cloudFetch(`/api/history_v2/${promptId}`);
|
|
67
|
+
const data = await res.json();
|
|
68
|
+
if (data && typeof data === "object") {
|
|
69
|
+
if (data[promptId]) {
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
return { [promptId]: data };
|
|
73
|
+
}
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
export async function getSystemStats() {
|
|
77
|
+
try {
|
|
78
|
+
const res = await cloudFetch("/system_stats");
|
|
79
|
+
return (await res.json());
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
logger.info("Cloud: /system_stats unavailable, returning placeholder");
|
|
83
|
+
return {
|
|
84
|
+
system: {
|
|
85
|
+
os: "cloud",
|
|
86
|
+
python_version: "cloud",
|
|
87
|
+
embedded_python: false,
|
|
88
|
+
comfyui_version: "cloud",
|
|
89
|
+
},
|
|
90
|
+
devices: [
|
|
91
|
+
{
|
|
92
|
+
name: "Comfy Cloud GPU",
|
|
93
|
+
type: "cloud",
|
|
94
|
+
index: 0,
|
|
95
|
+
vram_total: 0,
|
|
96
|
+
vram_free: 0,
|
|
97
|
+
torch_vram_total: 0,
|
|
98
|
+
torch_vram_free: 0,
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function getQueue() {
|
|
105
|
+
return { queue_running: [], queue_pending: [] };
|
|
106
|
+
}
|
|
107
|
+
export async function interrupt(promptId) {
|
|
108
|
+
if (!promptId) {
|
|
109
|
+
throw new ComfyUIError("Cancel requires a prompt_id in Comfy Cloud mode (no concept of 'current job').", "CLOUD_UNSUPPORTED");
|
|
110
|
+
}
|
|
111
|
+
await cloudFetch(`/api/job/${promptId}/cancel`, { method: "POST" });
|
|
112
|
+
logger.info("Cloud: job cancelled", { prompt_id: promptId });
|
|
113
|
+
}
|
|
114
|
+
export async function deleteQueueItem(_id) {
|
|
115
|
+
throw new ComfyUIError("delete_queue_item is not supported in Comfy Cloud mode. Use cancel_job with a prompt_id.", "CLOUD_UNSUPPORTED");
|
|
116
|
+
}
|
|
117
|
+
export async function clearQueue() {
|
|
118
|
+
throw new ComfyUIError("clear_queue is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
119
|
+
}
|
|
120
|
+
export async function getJobStatus(promptId) {
|
|
121
|
+
const res = await cloudFetch(`/api/job/${promptId}/status`);
|
|
122
|
+
return (await res.json());
|
|
123
|
+
}
|
|
124
|
+
export async function getObjectInfo() {
|
|
125
|
+
throw new ComfyUIError("get_node_info (object_info) is not available in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
126
|
+
}
|
|
127
|
+
const COMMON_SAMPLERS = [
|
|
128
|
+
"euler", "euler_ancestral", "heun", "heunpp2", "dpm_2", "dpm_2_ancestral",
|
|
129
|
+
"lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_sde",
|
|
130
|
+
"dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu",
|
|
131
|
+
"dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ddim", "uni_pc",
|
|
132
|
+
"uni_pc_bh2",
|
|
133
|
+
];
|
|
134
|
+
const COMMON_SCHEDULERS = [
|
|
135
|
+
"normal", "karras", "exponential", "sgm_uniform", "simple", "ddim_uniform",
|
|
136
|
+
"beta",
|
|
137
|
+
];
|
|
138
|
+
export async function getSamplers() {
|
|
139
|
+
return [...COMMON_SAMPLERS];
|
|
140
|
+
}
|
|
141
|
+
export async function getSchedulers() {
|
|
142
|
+
return [...COMMON_SCHEDULERS];
|
|
143
|
+
}
|
|
144
|
+
export async function getCheckpoints() {
|
|
145
|
+
throw new ComfyUIError("Listing local checkpoints is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
146
|
+
}
|
|
147
|
+
export async function getLoRAs() {
|
|
148
|
+
throw new ComfyUIError("Listing local LoRAs is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
149
|
+
}
|
|
150
|
+
export async function getVAEs() {
|
|
151
|
+
throw new ComfyUIError("Listing local VAEs is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
152
|
+
}
|
|
153
|
+
export async function getUpscaleModels() {
|
|
154
|
+
throw new ComfyUIError("Listing local upscale models is not supported in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
155
|
+
}
|
|
156
|
+
export async function getLogs() {
|
|
157
|
+
throw new ComfyUIError("Server logs are not available in Comfy Cloud mode.", "CLOUD_UNSUPPORTED");
|
|
158
|
+
}
|
|
159
|
+
export async function fetchImage(filename, type = "output", subfolder = "") {
|
|
160
|
+
const params = new URLSearchParams({ filename, type, subfolder });
|
|
161
|
+
const url = cloudUrl(`/api/view?${params.toString()}`);
|
|
162
|
+
// /api/view returns either bytes or a 302 to a signed URL.
|
|
163
|
+
const res = await fetch(url, { headers: authHeaders(), redirect: "follow" });
|
|
164
|
+
if (!res.ok) {
|
|
165
|
+
throw new ComfyUIError(`Cloud /api/view ${res.status} for "${filename}"`, "CLOUD_API_ERROR", { status: res.status });
|
|
166
|
+
}
|
|
167
|
+
const contentType = res.headers.get("content-type") ?? "image/png";
|
|
168
|
+
const mimeType = contentType.split(";")[0].trim();
|
|
169
|
+
const arrayBuffer = await res.arrayBuffer();
|
|
170
|
+
const base64 = Buffer.from(arrayBuffer).toString("base64");
|
|
171
|
+
return { base64, mimeType };
|
|
172
|
+
}
|
|
173
|
+
export async function uploadImageHttp(filename, data, mimeType = "image/png") {
|
|
174
|
+
const formData = new FormData();
|
|
175
|
+
const blob = new Blob([data], { type: mimeType });
|
|
176
|
+
formData.append("image", blob, filename);
|
|
177
|
+
formData.append("type", "input");
|
|
178
|
+
formData.append("overwrite", "true");
|
|
179
|
+
// multipart sets its own Content-Type; skip the JSON header.
|
|
180
|
+
const res = await cloudFetch("/upload/image", {
|
|
181
|
+
method: "POST",
|
|
182
|
+
body: formData,
|
|
183
|
+
skipJsonContentType: true,
|
|
184
|
+
});
|
|
185
|
+
return res.json();
|
|
186
|
+
}
|
|
187
|
+
export function getComfyUIPath() {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=cloud-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../../src/comfyui/cloud-client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ declare const configSchema: z.ZodObject<{
|
|
|
4
4
|
comfyuiPort: z.ZodOptional<z.ZodNumber>;
|
|
5
5
|
comfyuiSsl: z.ZodDefault<z.ZodBoolean>;
|
|
6
6
|
comfyuiPath: z.ZodOptional<z.ZodString>;
|
|
7
|
+
comfyuiApiKey: z.ZodOptional<z.ZodString>;
|
|
8
|
+
comfyuiCloudUrl: z.ZodDefault<z.ZodString>;
|
|
7
9
|
huggingfaceToken: z.ZodOptional<z.ZodString>;
|
|
8
10
|
githubToken: z.ZodOptional<z.ZodString>;
|
|
9
11
|
civitaiApiToken: z.ZodOptional<z.ZodString>;
|
|
@@ -11,8 +13,10 @@ declare const configSchema: z.ZodObject<{
|
|
|
11
13
|
}, "strip", z.ZodTypeAny, {
|
|
12
14
|
comfyuiHost: string;
|
|
13
15
|
comfyuiSsl: boolean;
|
|
16
|
+
comfyuiCloudUrl: string;
|
|
14
17
|
comfyuiPort?: number | undefined;
|
|
15
18
|
comfyuiPath?: string | undefined;
|
|
19
|
+
comfyuiApiKey?: string | undefined;
|
|
16
20
|
huggingfaceToken?: string | undefined;
|
|
17
21
|
githubToken?: string | undefined;
|
|
18
22
|
civitaiApiToken?: string | undefined;
|
|
@@ -22,6 +26,8 @@ declare const configSchema: z.ZodObject<{
|
|
|
22
26
|
comfyuiPort?: number | undefined;
|
|
23
27
|
comfyuiSsl?: boolean | undefined;
|
|
24
28
|
comfyuiPath?: string | undefined;
|
|
29
|
+
comfyuiApiKey?: string | undefined;
|
|
30
|
+
comfyuiCloudUrl?: string | undefined;
|
|
25
31
|
huggingfaceToken?: string | undefined;
|
|
26
32
|
githubToken?: string | undefined;
|
|
27
33
|
civitaiApiToken?: string | undefined;
|
|
@@ -31,6 +37,11 @@ export type Config = z.infer<typeof configSchema> & {
|
|
|
31
37
|
resolvedPort: number;
|
|
32
38
|
};
|
|
33
39
|
export declare const config: Config;
|
|
40
|
+
export declare function isCloudMode(): boolean;
|
|
41
|
+
export declare function isRemoteMode(): boolean;
|
|
42
|
+
export declare function isLocalMode(): boolean;
|
|
43
|
+
export declare function getCloudUrl(): string;
|
|
44
|
+
export declare function getApiKey(): string;
|
|
34
45
|
export declare function getComfyUIApiHost(): string;
|
|
35
46
|
export declare function getComfyUIProtocol(): "http" | "https";
|
|
36
47
|
export {};
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoMxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAyC7E,eAAO,MAAM,MAAM,EAAE,MAA0C,CAAC;AAahE,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,OAAO,CAErD"}
|
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
|
-
*
|
|
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:
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
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
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
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,
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
|
51
|
-
const
|
|
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":"
|
|
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
|
|
3
|
-
|
|
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":"
|
|
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"}
|