comfyui-mcp 0.34.0 → 0.35.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.
@@ -203,10 +203,37 @@ export async function resolveCivitaiModel(modelId, versionId) {
203
203
  return resolveFromVersion(version, model);
204
204
  }
205
205
  const CIVITAI_SORTS = ["Highest Rated", "Most Downloaded", "Newest"];
206
+ function toSearchHit(m) {
207
+ const v = m.modelVersions?.[0];
208
+ const file = v ? pickFile(v) : undefined;
209
+ const sizeKb = file?.sizeKB;
210
+ return {
211
+ model_id: m.id,
212
+ name: m.name ?? `model ${m.id}`,
213
+ type: m.type,
214
+ creator: m.creator?.username,
215
+ downloads: m.stats?.downloadCount,
216
+ thumbs_up: m.stats?.thumbsUpCount,
217
+ nsfw: m.nsfw,
218
+ version_id: v?.id,
219
+ version_name: v?.name,
220
+ base_model: v?.baseModel,
221
+ trained_words: v?.trainedWords?.slice(0, 6),
222
+ ...(sizeKb ? { size_mb: Math.round(sizeKb / 1024) } : {}),
223
+ };
224
+ }
225
+ /** Creator+keyword mode: pages of 100 scanned client-side, and how many pages
226
+ * to follow before giving up (4 → up to 400 of the creator's models). */
227
+ const CREATOR_SCAN_PAGE_SIZE = 100;
228
+ const CREATOR_SCAN_MAX_PAGES = 4;
206
229
  export async function searchCivitaiModels(query, opts = {}) {
230
+ const creator = opts.creator?.trim();
231
+ const keyword = query.trim();
232
+ if (!creator && !keyword) {
233
+ throw new ValidationError("Provide a query, a creator, or both.");
234
+ }
235
+ const limit = Math.min(Math.max(opts.limit ?? 10, 1), 25);
207
236
  const params = new URLSearchParams();
208
- params.set("query", query);
209
- params.set("limit", String(Math.min(Math.max(opts.limit ?? 10, 1), 25)));
210
237
  params.set("sort", opts.sort ?? "Highest Rated");
211
238
  // Civitai defaults to including NSFW for authed accounts — pin it explicitly
212
239
  // so results are SFW unless the caller opted in.
@@ -215,25 +242,144 @@ export async function searchCivitaiModels(query, opts = {}) {
215
242
  params.append("types", t);
216
243
  for (const b of opts.baseModels ?? [])
217
244
  params.append("baseModels", b);
218
- const data = await civitaiGet(`/models?${params.toString()}`);
219
- return (data.items ?? []).map((m) => {
220
- const v = m.modelVersions?.[0];
221
- const file = v ? pickFile(v) : undefined;
222
- const sizeKb = file?.sizeKB;
223
- return {
224
- model_id: m.id,
225
- name: m.name ?? `model ${m.id}`,
226
- type: m.type,
227
- creator: m.creator?.username,
228
- downloads: m.stats?.downloadCount,
229
- thumbs_up: m.stats?.thumbsUpCount,
230
- nsfw: m.nsfw,
231
- version_id: v?.id,
232
- version_name: v?.name,
233
- base_model: v?.baseModel,
234
- trained_words: v?.trainedWords?.slice(0, 6),
235
- ...(sizeKb ? { size_mb: Math.round(sizeKb / 1024) } : {}),
236
- };
237
- });
245
+ if (!creator || !keyword) {
246
+ // Single-page modes: a plain keyword search, or ALL of a creator's models.
247
+ if (creator) {
248
+ params.set("username", creator);
249
+ }
250
+ else {
251
+ params.set("query", keyword);
252
+ }
253
+ params.set("limit", String(limit));
254
+ const data = await civitaiGet(`/models?${params.toString()}`);
255
+ return { hits: (data.items ?? []).slice(0, limit).map(toSearchHit) };
256
+ }
257
+ // Creator + keyword: `query` + `username` together return an EMPTY page
258
+ // (live-verified), so send only `username` and apply the keyword client-side
259
+ // — following cursor pagination (bounded) so a prolific creator's matching
260
+ // model past the first page is still found.
261
+ params.set("username", creator);
262
+ params.set("limit", String(CREATOR_SCAN_PAGE_SIZE));
263
+ const q = keyword.toLowerCase();
264
+ const matches = [];
265
+ const seenIds = new Set();
266
+ // Every cursor already followed — refuses ANY cycle (immediate repeat AND
267
+ // longer A→B→A loops), not just the previous cursor.
268
+ const seenCursors = new Set();
269
+ let scanned = 0;
270
+ let cursor;
271
+ // True when the scan stopped with pages plausibly unseen: the page cap was
272
+ // hit with a next cursor remaining, or the API handed back a degenerate
273
+ // (cycling) cursor we refuse to follow.
274
+ let stoppedEarly = false;
275
+ for (let page = 0; page < CREATOR_SCAN_MAX_PAGES; page++) {
276
+ if (cursor !== undefined)
277
+ params.set("cursor", cursor);
278
+ const data = await civitaiGet(`/models?${params.toString()}`);
279
+ // Dedupe across pages by model id — a misbehaving cursor that replays a
280
+ // page must not double-count `scanned` or fill `limit` with duplicates.
281
+ const items = (data.items ?? []).filter((m) => !seenIds.has(m.id));
282
+ for (const m of items)
283
+ seenIds.add(m.id);
284
+ scanned += items.length;
285
+ matches.push(...items.filter((m) => (m.name ?? "").toLowerCase().includes(q) ||
286
+ (m.tags ?? []).some((t) => t.toLowerCase().includes(q))));
287
+ // Falsy (missing OR empty-string) cursor → the catalog is exhausted; a
288
+ // cursor we ALREADY followed (immediate repeat or a longer cycle) would
289
+ // page in circles forever → treat as stuck.
290
+ const next = data.metadata?.nextCursor || undefined;
291
+ if (!next)
292
+ break;
293
+ if (seenCursors.has(next)) {
294
+ stoppedEarly = true; // cycling cursor: pages may remain unseen
295
+ break;
296
+ }
297
+ seenCursors.add(next);
298
+ cursor = next;
299
+ if (matches.length >= limit)
300
+ break;
301
+ if (page === CREATOR_SCAN_MAX_PAGES - 1)
302
+ stoppedEarly = true; // page cap, more remained
303
+ }
304
+ return {
305
+ hits: matches.slice(0, limit).map(toSearchHit),
306
+ scanned,
307
+ scanCapped: stoppedEarly && matches.length < limit,
308
+ };
309
+ }
310
+ const CIVITAI_LEADERBOARDS = [
311
+ "overall",
312
+ "overall_90",
313
+ "overall_nsfw",
314
+ "new_creators",
315
+ ];
316
+ function creatorProfileUrl(username) {
317
+ return `https://civitai.com/user/${encodeURIComponent(username)}`;
318
+ }
319
+ /**
320
+ * Search CivitAI creators by (partial) username via GET /api/v1/creators.
321
+ * Returns matching creators plus the API's total match count.
322
+ */
323
+ export async function searchCivitaiCreators(query, opts = {}) {
324
+ const params = new URLSearchParams();
325
+ params.set("query", query);
326
+ params.set("limit", String(Math.min(Math.max(opts.limit ?? 10, 1), 50)));
327
+ const data = await civitaiGet(`/creators?${params.toString()}`);
328
+ const hits = (data.items ?? [])
329
+ .filter((c) => !!c.username)
330
+ .map((c) => ({
331
+ username: c.username,
332
+ profile_url: creatorProfileUrl(c.username),
333
+ model_count: c.modelCount ?? 0,
334
+ }));
335
+ return { hits, total: data.metadata?.totalItems };
336
+ }
337
+ /** Browser-shaped headers for the tRPC leaderboard request (see section note). */
338
+ const TRPC_BROWSER_HEADERS = {
339
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
340
+ "(KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
341
+ Referer: "https://civitai.com/",
342
+ };
343
+ /**
344
+ * Fetch a CivitAI creator leaderboard (the site's civitai.com/leaderboard
345
+ * ranking). `board` picks which one: "overall" (default), "overall_90",
346
+ * "overall_nsfw", or "new_creators".
347
+ */
348
+ export async function fetchCivitaiTopCreators(opts = {}) {
349
+ if (civitaiDisabled()) {
350
+ throw new ModelError(CIVITAI_DISABLED_MESSAGE);
351
+ }
352
+ const board = opts.board ?? "overall";
353
+ const limit = Math.min(Math.max(opts.limit ?? 10, 1), 100);
354
+ const input = encodeURIComponent(JSON.stringify({ json: { id: board } }));
355
+ const url = `https://civitai.com/api/trpc/leaderboard.getLeaderboard?input=${input}`;
356
+ logger.debug("CivitAI leaderboard request", { url });
357
+ // No bearer token here: the leaderboard is public and the API token belongs
358
+ // to the documented v1 surface, not the site's tRPC endpoints.
359
+ const res = await fetch(url, { headers: TRPC_BROWSER_HEADERS });
360
+ if (!res.ok) {
361
+ const body = await res.text().catch(() => "");
362
+ throw new ModelError(`CivitAI leaderboard ${res.status}: ${res.statusText}`, {
363
+ url,
364
+ status: res.status,
365
+ body,
366
+ });
367
+ }
368
+ const data = (await res.json());
369
+ const entries = data.result?.data?.json ?? [];
370
+ const metric = (e, type) => e.metrics?.find((m) => m.type === type)?.value;
371
+ return entries
372
+ .filter((e) => e.user?.username && !e.user.deletedAt)
373
+ .slice(0, limit)
374
+ .map((e) => ({
375
+ username: e.user.username,
376
+ profile_url: creatorProfileUrl(e.user.username),
377
+ position: e.position,
378
+ score: e.score,
379
+ downloads: metric(e, "downloadCount"),
380
+ thumbs_up: metric(e, "thumbsUpCount"),
381
+ generations: metric(e, "generationCount"),
382
+ entries: metric(e, "entries"),
383
+ }));
238
384
  }
239
385
  //# sourceMappingURL=civitai-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"civitai-resolver.js","sourceRoot":"","sources":["../../src/services/civitai-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"civitai-resolver.js","sourceRoot":"","sources":["../../src/services/civitai-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAmGtD,SAAS,WAAW;IAClB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,eAAe,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAI,IAAY;IACvC,4EAA4E;IAC5E,6EAA6E;IAC7E,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,gBAAgB,GAAG,IAAI,EAAE,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAE7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,+BAA+B,IAAI,EAAE,EAAE;YAC1D,GAAG;YACH,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE;YACnE,GAAG;YACH,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,oFAAoF;AACpF,SAAS,QAAQ,CAAC,OAA4B;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,uFAAuF;AACvF,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,SAAS,aAAa,CAAC,OAA4B;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;KACrB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CACpB,OAA4B,EAC5B,IAA6B,EAC7B,KAAoB;IAEpB,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,8BAA8B,OAAO,mBAAmB,OAAO,CAAC,EAAE,EAAE;QACtE,CAAC,CAAC,sCAAsC,OAAO,CAAC,EAAE,EAAE,CAAC;IACvD,OAAO;QACL,OAAO;QACP,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI;QAC7C,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI;QAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ;QACjC,IAAI,EAAE,KAAK,EAAE,IAAI;QACjB,oBAAoB,EAAE,KAAK,EAAE,WAAW;QACxC,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,sBAAsB,EAAE,OAAO,CAAC,WAAW;QAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,QAAQ,EAAE,IAAI,EAAE,IAAI;QACpB,UAAU,EAAE,IAAI,EAAE,MAAM;QACxB,SAAS;QACT,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA4B,EAC5B,KAAoB;IAEpB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,WAAW,GACf,IAAI,EAAE,WAAW;QACjB,OAAO,CAAC,WAAW;QACnB,2CAA2C,OAAO,CAAC,EAAE,EAAE,CAAC;IAE1D,OAAO;QACL,WAAW;QACX,QAAQ,EAAE,IAAI,EAAE,IAAI;QACpB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI;QAC7C,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAiB;IAEjB,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,mBAAmB,SAAS,EAAE,CAC/B,CAAC;IACF,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAkB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACvD,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAC3D,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAChD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CACR,uGAAuG,CACxG,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED;+DAC+D;AAC/D,SAAS,UAAU,CAAC,IAA6B;IAC/C,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,gBAAgB;QAChB,MAAM;QACN,OAAO;QACP,SAAS;QACT,UAAU;QACV,MAAM;QACN,OAAO;QACP,oBAAoB;QACpB,WAAW;KACZ,CAAC;IACF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAU,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO;QACtD,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,sCAAsC;QACzE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,SAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,UAAU,CAAe,WAAW,OAAO,EAAE,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAClB,iBAAiB,OAAO,gCAAgC,EACxD,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,OAAwC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CACvB,SAAS,OAAO,2BAA2B,SAAS,IAAI;gBACtD,uBAAuB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AA4BD,MAAM,aAAa,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,QAAQ,CAAU,CAAC;AAsC9E,SAAS,WAAW,CAAC,CAAoB;IACvC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,MAAM,MAAM,GAAI,IAAwC,EAAE,MAAM,CAAC;IACjE,OAAO;QACL,QAAQ,EAAE,CAAC,CAAC,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ;QAC5B,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa;QACjC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa;QACjC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,EAAE,EAAE;QACjB,YAAY,EAAE,CAAC,EAAE,IAAI;QACrB,UAAU,EAAE,CAAC,EAAE,SAAS;QACxB,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED;0EAC0E;AAC1E,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,OAA6B,EAAE;IAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,eAAe,CAAC,sCAAsC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC;IACjD,6EAA6E;IAC7E,iDAAiD;IACjD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;QAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;QAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,2EAA2E;QAC3E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAwB,WAAW,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,wEAAwE;IACxE,6EAA6E;IAC7E,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,0EAA0E;IAC1E,qDAAqD;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAA0B,CAAC;IAC/B,2EAA2E;IAC3E,wEAAwE;IACxE,wCAAwC;IACxC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,sBAAsB,EAAE,IAAI,EAAE,EAAE,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAwB,WAAW,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrF,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,OAAO,CAAC,IAAI,CACV,GAAG,KAAK,CAAC,MAAM,CACb,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAC;QACF,uEAAuE;QACvE,wEAAwE;QACxE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,IAAI,SAAS,CAAC;QACpD,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,YAAY,GAAG,IAAI,CAAC,CAAC,0CAA0C;YAC/D,MAAM;QACR,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QACnC,IAAI,IAAI,KAAK,sBAAsB,GAAG,CAAC;YAAE,YAAY,GAAG,IAAI,CAAC,CAAC,0BAA0B;IAC1F,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9C,OAAO;QACP,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK;KACnD,CAAC;AACJ,CAAC;AAgCD,MAAM,oBAAoB,GAAG;IAC3B,SAAS;IACT,YAAY;IACZ,cAAc;IACd,cAAc;CACN,CAAC;AAGX,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,4BAA4B,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpE,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,OAA2B,EAAE;IAE7B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CACjC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAkD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC3E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1C,WAAW,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC;KAC/B,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;AACpD,CAAC;AAED,kFAAkF;AAClF,MAAM,oBAAoB,GAA2B;IACnD,YAAY,EACV,+DAA+D;QAC/D,oDAAoD;IACtD,OAAO,EAAE,sBAAsB;CAChC,CAAC;AASF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuD,EAAE;IAEzD,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,iEAAiE,KAAK,EAAE,CAAC;IACrF,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAErD,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,uBAAuB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE;YAC3E,GAAG;YACH,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,CAA0B,EAAE,IAAY,EAAE,EAAE,CAC1D,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC;IACjD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;SACpD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,IAAK,CAAC,QAAS;QAC3B,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAK,CAAC,QAAS,CAAC;QACjD,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC;QACrC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;KAC9B,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -0,0 +1,237 @@
1
+ // In-place workflow flattener: resolve virtual wiring — rgthree/KJ Get/Set
2
+ // buses, Reroutes, and cg-use-everywhere (UE) broadcast links — into direct
3
+ // real links on the ORIGINAL UI graph, deleting the now-dead virtual nodes.
4
+ //
5
+ // This deliberately does NOT round-trip through the API converter
6
+ // (convertUiToApi → convertApiToUi): that regenerates the layout and throws
7
+ // away everything the author arranged. Litegraph groups are geometric (a
8
+ // titled bounding box — no node membership), so by never moving a kept node,
9
+ // positions/sizes/colors/groups/titles are preserved for free; the only
10
+ // visible change is the deleted virtual nodes leaving empty space.
11
+ //
12
+ // UE resolution strategy (see docs in the panel_flatten_workflow tool):
13
+ // 1. `extra.ue_links` — cg-use-everywhere writes its computed broadcast
14
+ // links there on every graph analysis, as objects
15
+ // { downstream, downstream_slot, upstream, upstream_slot, controller, type }
16
+ // where `upstream` is already the REAL producer (for Seed Everywhere the
17
+ // controller IS the producer — it owns the seed widget). Materializing
18
+ // these is the pack's own ground truth: zero re-implementation.
19
+ // 2. If UE sender nodes exist but ue_links is absent/stale → warn and leave
20
+ // those senders in place (never guess a broadcast match).
21
+ //
22
+ // Unlike the API converter, the resolver here stops at ANY real node
23
+ // regardless of mode: muted/bypassed toggle branches are the author's state
24
+ // and a wiring-only flatten must not collapse or drop them.
25
+ const GET_SET_TYPES = new Set([
26
+ "GetNode", "SetNode", "PRO_GetNode", "PRO_SetNode",
27
+ "SetNode_GetNode", "SetNode_SetNode",
28
+ ]);
29
+ const isGetType = (t) => GET_SET_TYPES.has(t) && /get/i.test(t);
30
+ const isSetType = (t) => GET_SET_TYPES.has(t) && /set/i.test(t) && !/get/i.test(t);
31
+ const isRerouteType = (t) => t === "Reroute";
32
+ /** Wiring-only virtual node: exists purely to carry a connection. */
33
+ const isWiringVirtual = (t) => isRerouteType(t) || GET_SET_TYPES.has(t);
34
+ /** cg-use-everywhere sender detection — mirrors the pack's own is_UEnode(). */
35
+ export const isUeSender = (t) => t.startsWith("Anything Everywhere") || t === "Seed Everywhere" || t === "Prompts Everywhere";
36
+ /**
37
+ * Flatten a UI workflow in place (on a deep copy): every consumer input fed
38
+ * through virtual wiring gets a fresh direct link to its real producer, UE
39
+ * broadcasts become real links, and the virtual nodes are deleted. Kept nodes
40
+ * are NEVER moved or otherwise altered (widgets, mode, size, color, title all
41
+ * untouched), so the author's formatting survives exactly.
42
+ */
43
+ export function flattenUiWorkflow(input, opts = {}) {
44
+ const includeGetSet = opts.includeGetSet !== false;
45
+ const includeUe = opts.includeUe !== false;
46
+ const ui = JSON.parse(JSON.stringify(input));
47
+ const warnings = [];
48
+ const nodes = ui.nodes ?? [];
49
+ const nodesById = new Map(nodes.map((n) => [n.id, n]));
50
+ const linkMap = new Map();
51
+ for (const l of ui.links ?? [])
52
+ if (Array.isArray(l))
53
+ linkMap.set(l[0], l);
54
+ // bus name (Set node's first widget) -> the link id feeding that Set's input.
55
+ // Multiple Sets writing the same key: LAST one wins (matches litegraph's
56
+ // iteration order at prompt time) — warn so the author knows.
57
+ const busSource = new Map();
58
+ if (includeGetSet) {
59
+ for (const n of nodes) {
60
+ if (!isSetType(n.type))
61
+ continue;
62
+ const bus = n.widgets_values?.[0];
63
+ const inp = (n.inputs ?? []).find((i) => i.link != null);
64
+ if (bus == null || inp?.link == null)
65
+ continue;
66
+ if (busSource.has(String(bus))) {
67
+ warnings.push(`multiple Set nodes write bus "${String(bus)}" — the last one wins`);
68
+ }
69
+ busSource.set(String(bus), inp.link);
70
+ }
71
+ }
72
+ /** Walk upstream past Get/Set/Reroute to the first REAL node (any mode). */
73
+ const resolveReal = (linkId, depth = 0) => {
74
+ if (depth > 100)
75
+ return null;
76
+ const link = linkMap.get(linkId);
77
+ if (!link)
78
+ return null;
79
+ const src = nodesById.get(link[1]);
80
+ if (!src)
81
+ return { id: link[1], slot: link[2], type: link[5] };
82
+ if (includeGetSet && isGetType(src.type)) {
83
+ const bus = src.widgets_values?.[0];
84
+ const setLink = bus != null ? busSource.get(String(bus)) : undefined;
85
+ return setLink != null ? resolveReal(setLink, depth + 1) : null;
86
+ }
87
+ if (includeGetSet && (isSetType(src.type) || isRerouteType(src.type))) {
88
+ const inp = (src.inputs ?? []).find((i) => i.link != null);
89
+ return inp?.link != null ? resolveReal(inp.link, depth + 1) : null;
90
+ }
91
+ return { id: link[1], slot: link[2], type: link[5] };
92
+ };
93
+ let nextLinkId = (ui.last_link_id ?? Math.max(0, ...linkMap.keys())) + 1;
94
+ const freshLinks = [];
95
+ let rewired = 0;
96
+ const addDirectLink = (srcId, srcSlot, dstId, dstSlot, type) => {
97
+ const src = nodesById.get(srcId);
98
+ const dst = nodesById.get(dstId);
99
+ const dstInput = dst?.inputs?.[dstSlot];
100
+ const srcOutput = src?.outputs?.[srcSlot];
101
+ if (!src || !dst || !dstInput || !srcOutput)
102
+ return null;
103
+ const id = nextLinkId++;
104
+ freshLinks.push([id, srcId, srcSlot, dstId, dstSlot, type]);
105
+ dstInput.link = id;
106
+ srcOutput.links = [...(srcOutput.links ?? []), id];
107
+ return id;
108
+ };
109
+ // ── Pass 1: rewire consumer inputs fed through Get/Set/Reroute chains ─────
110
+ if (includeGetSet) {
111
+ for (const node of nodes) {
112
+ if (isWiringVirtual(node.type))
113
+ continue;
114
+ for (let slot = 0; slot < (node.inputs?.length ?? 0); slot++) {
115
+ const inp = node.inputs?.[slot];
116
+ if (inp?.link == null)
117
+ continue;
118
+ const link = linkMap.get(inp.link);
119
+ if (!link)
120
+ continue;
121
+ const origin = nodesById.get(link[1]);
122
+ if (!origin || !isWiringVirtual(origin.type))
123
+ continue; // already direct
124
+ const resolved = resolveReal(inp.link);
125
+ if (!resolved) {
126
+ inp.link = null;
127
+ warnings.push(`${node.type} #${node.id} input "${inp.name ?? slot}" fed by a dangling ${origin.type} chain — left unconnected`);
128
+ continue;
129
+ }
130
+ addDirectLink(resolved.id, resolved.slot, node.id, slot, resolved.type ?? link[5]);
131
+ rewired++;
132
+ }
133
+ }
134
+ }
135
+ // ── Pass 2: materialize UE broadcasts from the pack's own computed list ───
136
+ const ueSenders = nodes.filter((n) => isUeSender(n.type));
137
+ const ueDeletable = new Set();
138
+ if (includeUe && ueSenders.length) {
139
+ const ueLinks = ui.extra?.ue_links ?? null;
140
+ if (!Array.isArray(ueLinks) || ueLinks.length === 0) {
141
+ warnings.push(`${ueSenders.length} Use-Everywhere sender(s) present but extra.ue_links is empty — ` +
142
+ `UE broadcasts NOT materialized (open the graph with cg-use-everywhere active and save/queue once, then retry); senders left in place`);
143
+ }
144
+ else {
145
+ for (const uel of ueLinks) {
146
+ const dst = nodesById.get(uel.downstream);
147
+ const dstInput = dst?.inputs?.[uel.downstream_slot];
148
+ if (!dst || !dstInput) {
149
+ warnings.push(`ue_link → node #${uel.downstream} slot ${uel.downstream_slot} no longer exists — skipped`);
150
+ continue;
151
+ }
152
+ if (dstInput.link != null)
153
+ continue; // got a real link since analysis — UE wouldn't fire
154
+ // upstream is the real producer per the pack's analysis; if it is itself
155
+ // virtual wiring (producer behind a Get/Set), normalize through pass-1 logic.
156
+ let srcId = uel.upstream;
157
+ let srcSlot = uel.upstream_slot;
158
+ const up = nodesById.get(srcId);
159
+ if (up && isWiringVirtual(up.type)) {
160
+ const viaInp = (up.inputs ?? []).find((i) => i.link != null);
161
+ const resolved = viaInp?.link != null ? resolveReal(viaInp.link) : null;
162
+ if (!resolved) {
163
+ warnings.push(`ue_link upstream #${srcId} is an unresolvable virtual node — skipped`);
164
+ continue;
165
+ }
166
+ srcId = resolved.id;
167
+ srcSlot = resolved.slot;
168
+ }
169
+ const added = addDirectLink(srcId, srcSlot, uel.downstream, uel.downstream_slot, uel.type ?? dstInput.type ?? "*");
170
+ if (added != null)
171
+ rewired++;
172
+ }
173
+ // A sender is deletable only when it is not the real producer of any
174
+ // surviving link (Seed Everywhere IS its own upstream — it must stay).
175
+ const liveOrigins = new Set();
176
+ for (const l of freshLinks)
177
+ liveOrigins.add(l[1]);
178
+ for (const s of ueSenders) {
179
+ if (!liveOrigins.has(s.id))
180
+ ueDeletable.add(s.id);
181
+ }
182
+ }
183
+ }
184
+ // ── Deletion + purge ───────────────────────────────────────────────────────
185
+ const removedIds = new Set();
186
+ let getset = 0;
187
+ let reroute = 0;
188
+ let ue = 0;
189
+ for (const n of nodes) {
190
+ if (includeGetSet && GET_SET_TYPES.has(n.type)) {
191
+ removedIds.add(n.id);
192
+ getset++;
193
+ }
194
+ else if (includeGetSet && isRerouteType(n.type)) {
195
+ removedIds.add(n.id);
196
+ reroute++;
197
+ }
198
+ else if (ueDeletable.has(n.id)) {
199
+ removedIds.add(n.id);
200
+ ue++;
201
+ }
202
+ }
203
+ ui.nodes = nodes.filter((n) => !removedIds.has(n.id));
204
+ const survivingLinks = [...(ui.links ?? []), ...freshLinks].filter((l) => Array.isArray(l) && !removedIds.has(l[1]) && !removedIds.has(l[3]));
205
+ const survivingIds = new Set(survivingLinks.map((l) => l[0]));
206
+ ui.links = survivingLinks;
207
+ ui.last_link_id = nextLinkId - 1;
208
+ // Scrub dangling link references on kept nodes (inputs fed by a deleted
209
+ // virtual node that pass-1 already rewired keep their fresh id; anything
210
+ // still pointing at a purged link gets cleared).
211
+ for (const n of ui.nodes) {
212
+ for (const inp of n.inputs ?? []) {
213
+ if (inp.link != null && !survivingIds.has(inp.link))
214
+ inp.link = null;
215
+ }
216
+ for (const out of n.outputs ?? []) {
217
+ if (out.links)
218
+ out.links = out.links.filter((id) => survivingIds.has(id));
219
+ }
220
+ }
221
+ // The senders are gone — stale UE bookkeeping would confuse the pack's JS.
222
+ if (ui.extra && includeUe && ueSenders.length && ueDeletable.size === ueSenders.length) {
223
+ delete ui.extra.ue_links;
224
+ delete ui.extra.links_added_by_ue;
225
+ }
226
+ return {
227
+ graph: ui,
228
+ report: {
229
+ removed: { getset, reroute, ue },
230
+ added_links: freshLinks.length,
231
+ rewired_inputs: rewired,
232
+ kept_nodes: ui.nodes.length,
233
+ warnings,
234
+ },
235
+ };
236
+ }
237
+ //# sourceMappingURL=flatten-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten-workflow.js","sourceRoot":"","sources":["../../src/services/flatten-workflow.ts"],"names":[],"mappings":"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"}