comfyui-mcp 0.48.21 → 0.48.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +2 -2
  2. package/dist/comfyui/client.js +46 -6
  3. package/dist/comfyui/client.js.map +1 -1
  4. package/dist/config.js +15 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/orchestrator/error-text.js +29 -1
  7. package/dist/orchestrator/error-text.js.map +1 -1
  8. package/dist/orchestrator/error-text.test.js +28 -0
  9. package/dist/orchestrator/error-text.test.js.map +1 -1
  10. package/dist/orchestrator/index.js +151 -50
  11. package/dist/orchestrator/index.js.map +1 -1
  12. package/dist/orchestrator/panel-agent.js +21 -4
  13. package/dist/orchestrator/panel-agent.js.map +1 -1
  14. package/dist/orchestrator/panel-tools.js +1098 -168
  15. package/dist/orchestrator/panel-tools.js.map +1 -1
  16. package/dist/orchestrator/ready-banner.js +70 -0
  17. package/dist/orchestrator/ready-banner.js.map +1 -0
  18. package/dist/services/api-nodes.js +5 -7
  19. package/dist/services/api-nodes.js.map +1 -1
  20. package/dist/services/download-cache.js +126 -18
  21. package/dist/services/download-cache.js.map +1 -1
  22. package/dist/services/download-jobs.js +463 -14
  23. package/dist/services/download-jobs.js.map +1 -1
  24. package/dist/services/download-progress.js +247 -2
  25. package/dist/services/download-progress.js.map +1 -1
  26. package/dist/services/env-capabilities.js +80 -9
  27. package/dist/services/env-capabilities.js.map +1 -1
  28. package/dist/services/generate-audio.js +16 -0
  29. package/dist/services/generate-audio.js.map +1 -1
  30. package/dist/services/local-models-fallback.js +7 -3
  31. package/dist/services/local-models-fallback.js.map +1 -1
  32. package/dist/services/manifest.js +180 -65
  33. package/dist/services/manifest.js.map +1 -1
  34. package/dist/services/model-resolver.js +267 -11
  35. package/dist/services/model-resolver.js.map +1 -1
  36. package/dist/services/node-management.js +38 -27
  37. package/dist/services/node-management.js.map +1 -1
  38. package/dist/services/output-dir.js +33 -3
  39. package/dist/services/output-dir.js.map +1 -1
  40. package/dist/services/panel-secrets.js +19 -7
  41. package/dist/services/panel-secrets.js.map +1 -1
  42. package/dist/services/queue-monitor.js +45 -2
  43. package/dist/services/queue-monitor.js.map +1 -1
  44. package/dist/services/queue-monitor.stall.test.js +78 -0
  45. package/dist/services/queue-monitor.stall.test.js.map +1 -0
  46. package/dist/services/secure-bridge.js +84 -0
  47. package/dist/services/secure-bridge.js.map +1 -1
  48. package/dist/services/storage/azure-blob.js +8 -3
  49. package/dist/services/storage/azure-blob.js.map +1 -1
  50. package/dist/services/storage/index.js +3 -3
  51. package/dist/services/storage/index.js.map +1 -1
  52. package/dist/services/storage/s3.js +9 -3
  53. package/dist/services/storage/s3.js.map +1 -1
  54. package/dist/services/ui-bridge.js +294 -24
  55. package/dist/services/ui-bridge.js.map +1 -1
  56. package/dist/services/workflow-converter.js +767 -72
  57. package/dist/services/workflow-converter.js.map +1 -1
  58. package/dist/services/workflow-lock.js +127 -27
  59. package/dist/services/workflow-lock.js.map +1 -1
  60. package/dist/services/workspace-env.js +48 -0
  61. package/dist/services/workspace-env.js.map +1 -1
  62. package/dist/tools/generate-audio.js +44 -0
  63. package/dist/tools/generate-audio.js.map +1 -1
  64. package/dist/tools/model-extras.js +24 -4
  65. package/dist/tools/model-extras.js.map +1 -1
  66. package/dist/tools/model-management.js +124 -14
  67. package/dist/tools/model-management.js.map +1 -1
  68. package/dist/tools/report-issue.js +220 -66
  69. package/dist/tools/report-issue.js.map +1 -1
  70. package/dist/tools/report-issue.test.js +223 -83
  71. package/dist/tools/report-issue.test.js.map +1 -1
  72. package/dist/tools/skills-access.js +7 -2
  73. package/dist/tools/skills-access.js.map +1 -1
  74. package/dist/tools/template-schema.js +5 -5
  75. package/dist/tools/template-schema.js.map +1 -1
  76. package/dist/tools/workflow-compose.js +18 -3
  77. package/dist/tools/workflow-compose.js.map +1 -1
  78. package/package.json +1 -1
  79. package/packs/anima/install-runpod.sh +0 -1
  80. package/packs/anima/install-windows.bat +0 -1
  81. package/packs/anima/manifest.yaml +0 -1
  82. package/packs/anima-img2img/install-runpod.sh +0 -1
  83. package/packs/anima-img2img/install-windows.bat +0 -1
  84. package/packs/anima-img2img/manifest.yaml +0 -1
  85. package/packs/anima-inpaint/install-runpod.sh +0 -1
  86. package/packs/anima-inpaint/install-windows.bat +0 -1
  87. package/packs/anima-inpaint/manifest.yaml +0 -1
  88. package/packs/anima-txt2img/install-runpod.sh +0 -1
  89. package/packs/anima-txt2img/install-windows.bat +0 -1
  90. package/packs/anima-txt2img/manifest.yaml +0 -1
  91. package/packs/artokun-flow/install-runpod.sh +0 -1
  92. package/packs/artokun-flow/install-windows.bat +0 -1
  93. package/packs/artokun-flow/manifest.yaml +0 -1
  94. package/packs/ernie/install-runpod.sh +0 -1
  95. package/packs/ernie/install-windows.bat +0 -1
  96. package/packs/ernie/manifest.yaml +0 -1
  97. package/packs/ernie-combo/install-runpod.sh +0 -1
  98. package/packs/ernie-combo/install-windows.bat +0 -1
  99. package/packs/ernie-combo/manifest.yaml +0 -1
  100. package/packs/ernie-img2img/install-runpod.sh +0 -1
  101. package/packs/ernie-img2img/install-windows.bat +0 -1
  102. package/packs/ernie-img2img/manifest.yaml +0 -1
  103. package/packs/ernie-txt2img/install-runpod.sh +0 -1
  104. package/packs/ernie-txt2img/install-windows.bat +0 -1
  105. package/packs/ernie-txt2img/manifest.yaml +0 -1
  106. package/packs/ideogram/install-runpod.sh +0 -1
  107. package/packs/ideogram/install-windows.bat +0 -1
  108. package/packs/ideogram/manifest.yaml +0 -1
  109. package/packs/ideogram-img2img/install-runpod.sh +0 -1
  110. package/packs/ideogram-img2img/install-windows.bat +0 -1
  111. package/packs/ideogram-img2img/manifest.yaml +0 -1
  112. package/packs/ideogram-txt2img/install-runpod.sh +0 -1
  113. package/packs/ideogram-txt2img/install-windows.bat +0 -1
  114. package/packs/ideogram-txt2img/manifest.yaml +0 -1
  115. package/packs/ltx-2.3/install-runpod.sh +0 -1
  116. package/packs/ltx-2.3/install-windows.bat +0 -1
  117. package/packs/ltx-2.3/manifest.yaml +0 -1
  118. package/packs/ltx-2.3-extender/install-runpod.sh +0 -1
  119. package/packs/ltx-2.3-extender/install-windows.bat +0 -1
  120. package/packs/ltx-2.3-extender/manifest.yaml +0 -1
  121. package/packs/ltx-2.3-extender-no-audio/install-runpod.sh +0 -1
  122. package/packs/ltx-2.3-extender-no-audio/install-windows.bat +0 -1
  123. package/packs/ltx-2.3-extender-no-audio/manifest.yaml +0 -1
  124. package/packs/ltx-2.3-flf/install-runpod.sh +0 -1
  125. package/packs/ltx-2.3-flf/install-windows.bat +0 -1
  126. package/packs/ltx-2.3-flf/manifest.yaml +0 -1
  127. package/packs/ltx-2.3-img2vid/install-runpod.sh +0 -1
  128. package/packs/ltx-2.3-img2vid/install-windows.bat +0 -1
  129. package/packs/ltx-2.3-img2vid/manifest.yaml +3 -4
  130. package/packs/ltx-2.3-txt2vid/install-runpod.sh +0 -1
  131. package/packs/ltx-2.3-txt2vid/install-windows.bat +0 -1
  132. package/packs/ltx-2.3-txt2vid/manifest.yaml +3 -4
  133. package/packs/ltx-2.3-xy-plot/install-runpod.sh +0 -1
  134. package/packs/ltx-2.3-xy-plot/install-windows.bat +0 -1
  135. package/packs/ltx-2.3-xy-plot/manifest.yaml +0 -1
  136. package/packs/ltx23-distill-3stage/install-runpod.sh +0 -1
  137. package/packs/ltx23-distill-3stage/install-windows.bat +0 -1
  138. package/packs/ltx23-distill-3stage/manifest.yaml +0 -1
  139. package/packs/qwen-image/install-runpod.sh +0 -1
  140. package/packs/qwen-image/install-windows.bat +0 -1
  141. package/packs/qwen-image/manifest.yaml +0 -1
  142. package/packs/qwen-image-edit/install-runpod.sh +0 -1
  143. package/packs/qwen-image-edit/install-windows.bat +0 -1
  144. package/packs/qwen-image-edit/manifest.yaml +0 -1
  145. package/packs/qwen-image-edit-edit/install-runpod.sh +0 -1
  146. package/packs/qwen-image-edit-edit/install-windows.bat +0 -1
  147. package/packs/qwen-image-edit-edit/manifest.yaml +0 -1
  148. package/packs/wan-animate/install-runpod.sh +0 -1
  149. package/packs/wan-animate/install-windows.bat +0 -1
  150. package/packs/wan-animate/manifest.yaml +0 -1
  151. package/packs/wan-animate-character/install-runpod.sh +0 -1
  152. package/packs/wan-animate-character/install-windows.bat +0 -1
  153. package/packs/wan-animate-character/manifest.yaml +0 -1
  154. package/packs/wan-animate-ofm/install-runpod.sh +0 -1
  155. package/packs/wan-animate-ofm/install-windows.bat +0 -1
  156. package/packs/wan-animate-ofm/manifest.yaml +0 -1
  157. package/packs/wan-longer-videos/install-runpod.sh +0 -1
  158. package/packs/wan-longer-videos/install-windows.bat +0 -1
  159. package/packs/wan-longer-videos/manifest.yaml +0 -1
  160. package/packs/wan-longer-videos-i2v/install-runpod.sh +0 -1
  161. package/packs/wan-longer-videos-i2v/install-windows.bat +0 -1
  162. package/packs/wan-longer-videos-i2v/manifest.yaml +0 -1
  163. package/packs/wan-longer-videos-i2v-96gb/install-runpod.sh +0 -1
  164. package/packs/wan-longer-videos-i2v-96gb/install-windows.bat +0 -1
  165. package/packs/wan-longer-videos-i2v-96gb/manifest.yaml +0 -1
  166. package/packs/wan-longer-videos-t2v/install-runpod.sh +0 -1
  167. package/packs/wan-longer-videos-t2v/install-windows.bat +0 -1
  168. package/packs/wan-longer-videos-t2v/manifest.yaml +0 -1
  169. package/packs/wan-longer-videos-t2v-96gb/install-runpod.sh +0 -1
  170. package/packs/wan-longer-videos-t2v-96gb/install-windows.bat +0 -1
  171. package/packs/wan-longer-videos-t2v-96gb/manifest.yaml +0 -1
  172. package/packs/wan-longer-videos-v2v/install-runpod.sh +0 -1
  173. package/packs/wan-longer-videos-v2v/install-windows.bat +0 -1
  174. package/packs/wan-longer-videos-v2v/manifest.yaml +0 -1
  175. package/packs/wan-longer-videos-v2v-96gb/install-runpod.sh +0 -1
  176. package/packs/wan-longer-videos-v2v-96gb/install-windows.bat +0 -1
  177. package/packs/wan-longer-videos-v2v-96gb/manifest.yaml +0 -1
  178. package/packs/wan-multitalk/install-runpod.sh +0 -1
  179. package/packs/wan-multitalk/install-windows.bat +0 -1
  180. package/packs/wan-multitalk/manifest.yaml +0 -1
  181. package/packs/wan-pusa-extend/install-runpod.sh +0 -1
  182. package/packs/wan-pusa-extend/install-windows.bat +0 -1
  183. package/packs/wan-pusa-extend/manifest.yaml +0 -1
  184. package/packs/wan-transparent/install-runpod.sh +0 -1
  185. package/packs/wan-transparent/install-windows.bat +0 -1
  186. package/packs/wan-transparent/manifest.yaml +0 -1
  187. package/packs/wan-transparent-img2vid/install-runpod.sh +0 -1
  188. package/packs/wan-transparent-img2vid/install-windows.bat +0 -1
  189. package/packs/wan-transparent-img2vid/manifest.yaml +0 -1
  190. package/packs/wan-transparent-img2vid-96gb/install-runpod.sh +0 -1
  191. package/packs/wan-transparent-img2vid-96gb/install-windows.bat +0 -1
  192. package/packs/wan-transparent-img2vid-96gb/manifest.yaml +0 -1
  193. package/packs/z-image-base/install-runpod.sh +0 -1
  194. package/packs/z-image-base/install-windows.bat +0 -1
  195. package/packs/z-image-base/manifest.yaml +0 -1
  196. package/packs/z-image-base-combo/install-runpod.sh +0 -1
  197. package/packs/z-image-base-combo/install-windows.bat +0 -1
  198. package/packs/z-image-base-combo/manifest.yaml +0 -1
  199. package/packs/z-image-base-controlnet/install-runpod.sh +0 -1
  200. package/packs/z-image-base-controlnet/install-windows.bat +0 -1
  201. package/packs/z-image-base-controlnet/manifest.yaml +0 -1
  202. package/packs/z-image-base-img2img/install-runpod.sh +0 -1
  203. package/packs/z-image-base-img2img/install-windows.bat +0 -1
  204. package/packs/z-image-base-img2img/manifest.yaml +0 -1
  205. package/packs/z-image-base-inpaint/install-runpod.sh +0 -1
  206. package/packs/z-image-base-inpaint/install-windows.bat +0 -1
  207. package/packs/z-image-base-inpaint/manifest.yaml +0 -1
  208. package/packs/z-image-base-txt2img/install-runpod.sh +0 -1
  209. package/packs/z-image-base-txt2img/install-windows.bat +0 -1
  210. package/packs/z-image-base-txt2img/manifest.yaml +0 -1
  211. package/packs/z-image-turbo/install-runpod.sh +0 -1
  212. package/packs/z-image-turbo/install-windows.bat +0 -1
  213. package/packs/z-image-turbo/manifest.yaml +0 -1
  214. package/packs/z-image-turbo-combo/install-runpod.sh +0 -1
  215. package/packs/z-image-turbo-combo/install-windows.bat +0 -1
  216. package/packs/z-image-turbo-combo/manifest.yaml +0 -1
  217. package/packs/z-image-turbo-controlnet/install-runpod.sh +0 -1
  218. package/packs/z-image-turbo-controlnet/install-windows.bat +0 -1
  219. package/packs/z-image-turbo-controlnet/manifest.yaml +0 -1
  220. package/packs/z-image-turbo-detail-daemon/install-runpod.sh +0 -1
  221. package/packs/z-image-turbo-detail-daemon/install-windows.bat +0 -1
  222. package/packs/z-image-turbo-detail-daemon/manifest.yaml +0 -1
  223. package/packs/z-image-turbo-img2img/install-runpod.sh +0 -1
  224. package/packs/z-image-turbo-img2img/install-windows.bat +0 -1
  225. package/packs/z-image-turbo-img2img/manifest.yaml +0 -1
  226. package/packs/z-image-turbo-inpainting/install-runpod.sh +0 -1
  227. package/packs/z-image-turbo-inpainting/install-windows.bat +0 -1
  228. package/packs/z-image-turbo-inpainting/manifest.yaml +0 -1
  229. package/packs/z-image-turbo-txt2img/install-runpod.sh +0 -1
  230. package/packs/z-image-turbo-txt2img/install-windows.bat +0 -1
  231. package/packs/z-image-turbo-txt2img/manifest.yaml +0 -1
  232. package/packs/z-image-xy-plot/install-runpod.sh +0 -1
  233. package/packs/z-image-xy-plot/install-windows.bat +0 -1
  234. package/packs/z-image-xy-plot/manifest.yaml +0 -1
  235. package/scripts/test-packs.sh +8 -3
@@ -1,9 +1,12 @@
1
1
  import { z } from "zod";
2
- // Issue reporting. For OUR repos (comfyui-mcp / comfyui-mcp-panel) this now
3
- // *files* the issue through the async intake Worker submit → get a job_id →
4
- // poll /status/<job_id> for the created issue link. For third-party repos, or
5
- // when the Worker is unreachable, it falls back to a PREFILLED GitHub "new
6
- // issue" URL the user can review and submit in one click (no auth, no network).
2
+ import { detectInstallMode } from "../services/self-update.js";
3
+ // Issue reporting. For OUR repos (comfyui-mcp / comfyui-mcp-panel) this FILES the
4
+ // issue through the async AI-triage Worker: submit (with the reporter's versions)
5
+ // get an instant version-ack + job_id poll /status/<job_id> until the triage
6
+ // agent CLOSEs the job, then surface its result (a new issue, a dedup, a reopen,
7
+ // or an "already fixed — upgrade" answer with the fixing PR + version). For
8
+ // third-party repos, or when the Worker is unreachable, it falls back to a
9
+ // PREFILLED GitHub "new issue" URL the user can review and submit in one click.
7
10
  const DEFAULT_REPO = "artokun/comfyui-mcp";
8
11
  // Repos the intake Worker is allowed to file into (owner is fixed server-side).
9
12
  const OUR_OWNER = "artokun";
@@ -36,18 +39,21 @@ export function isOurRepo(repo) {
36
39
  // which must still be recognized as ours (not misrouted as third-party).
37
40
  return owner?.toLowerCase() === OUR_OWNER && OUR_REPO_NAMES.has(name?.toLowerCase());
38
41
  }
39
- // Submit to the async intake Worker and poll /status/<job_id> a few times for
40
- // the created issue link. Injectable fetch/sleep for testing. Throws on network
41
- // failure or non-OK submit so the caller can fall back to a prefilled URL.
42
+ /**
43
+ * Submit to the async AI-triage Worker and poll /status/<job_id> until the job
44
+ * CLOSEs or the budget runs out. Injectable fetch/sleep for testing.
45
+ * THROWS only on a submit failure (so the caller uses the prefilled fallback);
46
+ * a still-running job at the budget returns { kind: "pending" }.
47
+ */
42
48
  export async function submitAndPoll(opts) {
43
49
  const doFetch = opts.fetchImpl ?? fetch;
44
50
  const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
45
- const maxPolls = opts.maxPolls ?? 5;
46
- const pollDelayMs = opts.pollDelayMs ?? 1000;
47
- const timeoutMs = opts.timeoutMs ?? 8000;
51
+ // AI triage runs ~30-120s; poll patiently but bounded. ~40 * 3s ≈ 2 min.
52
+ const maxPolls = opts.maxPolls ?? 40;
53
+ const pollDelayMs = opts.pollDelayMs ?? 3000;
54
+ const timeoutMs = opts.timeoutMs ?? 15000; // per-request cap (not the whole job)
48
55
  // Keep the abort active through BOTH the fetch AND the body parse — otherwise
49
- // a hung `.json()` after headers arrive would never time out. The whole
50
- // request+parse runs under one AbortController + a hard timeout.
56
+ // a hung `.json()` after headers arrive would never time out.
51
57
  const withTimeout = async (fn) => {
52
58
  const ac = new AbortController();
53
59
  const t = setTimeout(() => ac.abort(), timeoutMs);
@@ -58,50 +64,142 @@ export async function submitAndPoll(opts) {
58
64
  clearTimeout(t);
59
65
  }
60
66
  };
61
- const submit = await withTimeout(async (signal) => {
62
- const r = await doFetch(opts.workerUrl, {
63
- method: "POST",
64
- headers: { "Content-Type": "application/json", "X-Client-Key": opts.clientKey },
65
- body: JSON.stringify({ repo: opts.repoName, title: opts.title, body: opts.body, labels: opts.labels }),
66
- signal,
67
+ // `accepted` flips true the instant the worker returns a 2xx — from that point
68
+ // the worker HAS the report and is filing autonomously, so a later body
69
+ // stall/parse failure must NOT throw into a prefill (that would double-file).
70
+ let accepted = false;
71
+ let submit;
72
+ try {
73
+ submit = await withTimeout(async (signal) => {
74
+ const r = await doFetch(opts.workerUrl, {
75
+ method: "POST",
76
+ headers: {
77
+ "Content-Type": "application/json",
78
+ "X-Client-Key": opts.clientKey,
79
+ // Opt into the async AI-triage contract. Absent this header the worker
80
+ // runs its legacy synchronous dumb-file path (old clients stay working).
81
+ "X-Triage-Async": "1",
82
+ },
83
+ body: JSON.stringify({
84
+ repo: opts.repoName,
85
+ title: opts.title,
86
+ body: opts.body,
87
+ labels: opts.labels,
88
+ reporter_versions: opts.reporterVersions ?? {},
89
+ }),
90
+ signal,
91
+ });
92
+ if (!r.ok)
93
+ throw new Error(`worker submit failed: HTTP ${r.status}`);
94
+ accepted = true; // 2xx → the worker took the report
95
+ return (await r.json());
67
96
  });
68
- if (!r.ok)
69
- throw new Error(`worker submit failed: HTTP ${r.status}`);
70
- return (await r.json());
71
- });
72
- // Common path: the Worker files synchronously and returns the link inline.
73
- if (submit.url)
74
- return { ...submit, status: submit.status ?? "done" };
75
- const jobId = submit.job_id;
76
- if (!jobId) {
77
- // No url AND no job to poll — nothing we can surface. Throw so the caller
78
- // falls back to the prefilled link.
79
- throw new Error("worker returned neither a url nor a job_id");
80
97
  }
81
- // Fallback poll (only if the submit somehow lacked a url): /status/<job_id>.
82
- // A 200 "queued" is retried; ANY hard poll failure (transport error, timeout,
83
- // non-OK HTTP, body-parse failure) or a "done" without a url, or exhausting
84
- // the retries, THROWS so the caller uses the prefilled-URL fallback rather
85
- // than claiming success without a link.
98
+ catch (err) {
99
+ // A 2xx whose body stalled/was malformed: the worker still took it and is
100
+ // filing surface pending (no job_id, no ack) so the caller does NOT
101
+ // prefill. A pre-2xx failure (network / non-OK) rethrows caller prefills.
102
+ if (accepted)
103
+ return { kind: "pending", ack: {} };
104
+ throw err;
105
+ }
106
+ const ack = {
107
+ job_id: submit.job_id,
108
+ versions: submit.versions,
109
+ up_to_date: submit.up_to_date,
110
+ upgrade_hint: submit.upgrade_hint,
111
+ };
112
+ // A synchronous worker (legacy / very fast) may return the result inline.
113
+ if (isClosedFrame(submit)) {
114
+ const inline = frameToResult(submit);
115
+ return inline ? { kind: "closed", ack, result: inline } : { kind: "unfiled", ack };
116
+ }
117
+ const jobId = submit.job_id;
118
+ // Accepted (2xx) but no job_id and no inline result → we can't poll, but the
119
+ // worker took it and is filing. Surface pending (never prefill → no double).
120
+ if (!jobId)
121
+ return { kind: "pending", ack };
86
122
  const base = opts.workerUrl.replace(/\/+$/, "");
87
123
  for (let i = 0; i < maxPolls; i++) {
88
124
  await sleep(pollDelayMs);
89
- const parsed = await withTimeout(async (signal) => {
90
- const r = await doFetch(`${base}/status/${jobId}`, { signal });
91
- if (!r.ok)
92
- throw new Error(`poll failed: HTTP ${r.status}`);
93
- return (await r.json());
94
- });
95
- if (parsed.status === "done" && parsed.url)
96
- return { ...parsed, job_id: jobId };
97
- if (parsed.status === "error")
98
- throw new Error(`worker filing errored: ${parsed.error || "unknown"}`);
99
- // else "queued" (or done-without-url) → keep polling
125
+ let parsed;
126
+ try {
127
+ parsed = await withTimeout(async (signal) => {
128
+ const r = await doFetch(`${base}/status/${jobId}`, {
129
+ signal,
130
+ headers: { "X-Client-Key": opts.clientKey },
131
+ });
132
+ if (!r.ok)
133
+ throw new Error(`poll failed: HTTP ${r.status}`);
134
+ return (await r.json());
135
+ });
136
+ }
137
+ catch {
138
+ // A transient poll error does NOT mean the job failed — the worker keeps
139
+ // running. Keep polling; only a real terminal frame or the budget ends it.
140
+ continue;
141
+ }
142
+ if (isClosedFrame(parsed) || isTerminalError(parsed)) {
143
+ const result = frameToResult(parsed);
144
+ // Terminal WITH a usable issue/answer → closed; terminal WITHOUT one
145
+ // (unfiled_needs_manual / hard error) → the worker gave up filing, so the
146
+ // caller may safely prefill (nothing was written → no double-file).
147
+ return result ? { kind: "closed", ack, result } : { kind: "unfiled", ack };
148
+ }
149
+ // else PENDING / INVESTIGATING → keep polling
150
+ }
151
+ // Still running at the budget: the worker will finish autonomously — do NOT
152
+ // prefill (that duplicates). Surface the ack + job id.
153
+ return { kind: "pending", ack, job_id: jobId };
154
+ }
155
+ /** A frame is TERMINAL (job finished) iff CLOSED, a legacy done, or a legacy
156
+ * sync response that carries a url with no lifecycle field at all. */
157
+ function isClosedFrame(frame) {
158
+ return (frame.state === "CLOSED" ||
159
+ frame.status === "done" ||
160
+ (frame.state == null && frame.status == null && !!frame.url));
161
+ }
162
+ /** Flatten a terminal frame to a TriageResult, or null if it carries no usable
163
+ * issue link / answer (→ the caller treats it as "unfiled"). */
164
+ function frameToResult(frame) {
165
+ const p = frame.payload;
166
+ const issueUrl = p?.issue?.url ?? frame.url;
167
+ const issueNumber = p?.issue?.number ?? frame.number;
168
+ // "Usable" = there is a real issue link, OR it is the advise-upgrade answer
169
+ // (no created issue, but real fix guidance). A terminal frame WITHOUT either —
170
+ // e.g. unfiled_needs_manual, which still carries an agent_message — is NOT a
171
+ // success: return null so the caller treats it as "unfiled" and prefills. (Do
172
+ // NOT key this on agent_message; the worker sets one even on failure.)
173
+ const usable = !!issueUrl || p?.action_taken === "advised_upgrade";
174
+ if (!usable)
175
+ return null;
176
+ return {
177
+ url: issueUrl,
178
+ number: issueNumber,
179
+ deduped: p?.deduped,
180
+ classification: p?.classification,
181
+ action_taken: p?.action_taken,
182
+ fixed_in_version: p?.fixed_in_version ?? null,
183
+ fix_pr_url: p?.fix_pr_url ?? null,
184
+ recommend_upgrade: p?.recommend_upgrade,
185
+ agent_message: p?.agent_message,
186
+ possible_duplicate: p?.possible_duplicate,
187
+ };
188
+ }
189
+ function isTerminalError(frame) {
190
+ return frame.status === "error" && !frame.url && !frame.payload;
191
+ }
192
+ /** The running comfyui-mcp version (best-effort; undefined if undetectable). */
193
+ function detectMcpVersion() {
194
+ try {
195
+ return detectInstallMode().currentVersion ?? undefined;
196
+ }
197
+ catch {
198
+ return undefined;
100
199
  }
101
- throw new Error("worker filing did not complete before polling gave up");
102
200
  }
103
201
  export function registerReportIssueTools(server) {
104
- server.tool("report_issue", "File or link a GitHub issue for a bug/problem you hit (ComfyUI, a workflow, a model, custom nodes, or comfyui-mcp itself). For OUR repos (artokun/comfyui-mcp, artokun/comfyui-mcp-panel) it FILES the issue via the intake Worker and returns the created issue link (no end-user GitHub auth needed); if the Worker is unreachable it falls back to a prefilled GitHub 'new issue' URL. For third-party repos it returns a prefilled URL to SHARE with the user (it does not auto-file). Pass repo='owner/name' for third-party projects. The filing is autonomous surface the resulting link to the user only if they want it.", {
202
+ server.tool("report_issue", "File or triage a GitHub issue for a bug/problem you hit (ComfyUI, a workflow, a model, custom nodes, or comfyui-mcp/its panel). For OUR repos (artokun/comfyui-mcp, artokun/comfyui-mcp-panel) it sends the report to the AI triage worker, which searches existing OPEN and CLOSED issues, version-matches, and either files a new issue, adds context to an existing one, or — if the problem was already FIXED in a newer version than the user runs — answers with the fixing PR + fixed-in version and a recommendation to upgrade (no new issue). It returns that triage result plus an instant check of whether the user is on the latest versions. If the worker is unreachable it falls back to a prefilled GitHub 'new issue' URL. For third-party repos it returns a prefilled URL to SHARE (it does not auto-file). ALWAYS pass mcp_version and panel_version from the known environment (the env line in your context, e.g. 'mcp=… panel=…') so the worker can tell the user if simply upgrading fixes it — the single most common resolution. Surface the worker's agent_message / upgrade advice to the user.", {
105
203
  title: z.string().min(1).describe("Short, specific issue title."),
106
204
  body: z
107
205
  .string()
@@ -112,6 +210,14 @@ export function registerReportIssueTools(server) {
112
210
  .optional()
113
211
  .describe("owner/repo (default 'artokun/comfyui-mcp'; use 'artokun/comfyui-mcp-panel' for the sidebar panel)."),
114
212
  labels: z.array(z.string()).optional().describe("Optional GitHub label names to prefill."),
213
+ mcp_version: z
214
+ .string()
215
+ .optional()
216
+ .describe("The running comfyui-mcp version (from the env line in your context). Auto-detected if omitted."),
217
+ panel_version: z
218
+ .string()
219
+ .optional()
220
+ .describe("The running comfyui-mcp-panel (sidebar) version, from the env line in your context, if known."),
115
221
  no_file: z
116
222
  .boolean()
117
223
  .optional()
@@ -129,46 +235,94 @@ export function registerReportIssueTools(server) {
129
235
  note: "Prefilled issue link (not auto-filed). Share it with the user to review and submit.",
130
236
  });
131
237
  }
132
- // Our repo: file via the intake Worker (submit + poll for the link).
133
238
  const workerUrl = process.env.COMFYUI_MCP_ISSUE_WORKER_URL || DEFAULT_WORKER_URL;
134
239
  const clientKey = process.env.COMFYUI_MCP_ISSUE_CLIENT_KEY || DEFAULT_CLIENT_KEY;
135
240
  const timeoutEnv = Number(process.env.COMFYUI_MCP_ISSUE_TIMEOUT_MS);
136
241
  const timeoutMs = Number.isFinite(timeoutEnv) && timeoutEnv > 0 ? timeoutEnv : undefined;
242
+ const maxPollsEnv = Math.floor(Number(process.env.COMFYUI_MCP_ISSUE_MAX_POLLS));
243
+ // Clamp to a sane ceiling so a mis-set env can't poll for hours.
244
+ const maxPolls = Number.isFinite(maxPollsEnv) && maxPollsEnv > 0 ? Math.min(maxPollsEnv, 200) : undefined;
245
+ const pollMsEnv = Number(process.env.COMFYUI_MCP_ISSUE_POLL_MS);
246
+ const pollDelayMs = Number.isFinite(pollMsEnv) && pollMsEnv >= 0 ? Math.min(pollMsEnv, 60000) : undefined;
137
247
  const repoName = repo.split("/")[1];
248
+ const reporterVersions = {
249
+ mcp: args.mcp_version ?? detectMcpVersion(),
250
+ panel: args.panel_version ?? process.env.COMFYUI_MCP_PANEL_VERSION ?? undefined,
251
+ };
138
252
  try {
139
- // submitAndPoll ONLY resolves with a done result carrying a real url;
140
- // any failure (non-OK submit, transport/timeout, poll error/exhaustion)
141
- // throws → we fall back to the prefilled link below.
142
- const result = await submitAndPoll({
253
+ const outcome = await submitAndPoll({
143
254
  workerUrl,
144
255
  clientKey,
145
256
  repoName,
146
257
  title: args.title,
147
258
  body: args.body,
148
259
  labels: args.labels,
260
+ reporterVersions,
149
261
  timeoutMs,
262
+ maxPolls,
263
+ pollDelayMs,
150
264
  });
265
+ if (outcome.kind === "closed") {
266
+ const r = outcome.result;
267
+ return jsonResult({
268
+ // "filed" means a real issue was created/updated. advised_upgrade
269
+ // files nothing; and a closed result always has a url here (a
270
+ // no-url terminal is routed to "unfiled" above).
271
+ filed: !!r.url && r.action_taken !== "advised_upgrade",
272
+ repo,
273
+ url: r.url,
274
+ number: r.number,
275
+ classification: r.classification,
276
+ action_taken: r.action_taken,
277
+ deduped: r.deduped,
278
+ fixed_in_version: r.fixed_in_version,
279
+ fix_pr_url: r.fix_pr_url,
280
+ recommend_upgrade: r.recommend_upgrade,
281
+ possible_duplicate: r.possible_duplicate,
282
+ versions: outcome.ack.versions,
283
+ up_to_date: outcome.ack.up_to_date,
284
+ upgrade_hint: outcome.ack.upgrade_hint,
285
+ // The one line to relay to the user.
286
+ agent_message: r.agent_message,
287
+ note: "Triaged by the AI issue worker. Relay agent_message (and the upgrade advice) to the user.",
288
+ });
289
+ }
290
+ // Terminal without an issue: the worker's triage AND its own fallback
291
+ // both gave up — nothing was filed, so a prefilled URL is the safe
292
+ // last resort (no double-file risk).
293
+ if (outcome.kind === "unfiled") {
294
+ return jsonResult({
295
+ url: prefilledUrl,
296
+ repo,
297
+ filed: false,
298
+ versions: outcome.ack.versions,
299
+ up_to_date: outcome.ack.up_to_date,
300
+ upgrade_hint: outcome.ack.upgrade_hint,
301
+ note: "The triage worker could not file this report. Fallback: prefilled issue link for the user to submit in one click.",
302
+ });
303
+ }
304
+ // Still triaging at the budget: the worker WILL finish + file/dedup on
305
+ // its own. Do NOT prefill (would double-file). Surface the version-ack.
151
306
  return jsonResult({
152
- url: result.url,
153
- number: result.number,
154
- deduped: result.deduped,
307
+ filed: false,
308
+ pending: true,
155
309
  repo,
156
- filed: true,
157
- job_id: result.job_id,
158
- note: result.deduped
159
- ? "Filed via intake Worker (matched an existing open issue). Share the link only if the user wants it."
160
- : "Filed via intake Worker. Share the link only if the user wants it.",
310
+ job_id: outcome.job_id,
311
+ versions: outcome.ack.versions,
312
+ up_to_date: outcome.ack.up_to_date,
313
+ upgrade_hint: outcome.ack.upgrade_hint,
314
+ agent_message: outcome.ack.upgrade_hint,
315
+ note: "The AI triage is still running; the worker will file or dedup this report autonomously. If the user is behind on versions (see upgrade_hint), suggest upgrading first — that often resolves it.",
161
316
  });
162
317
  }
163
318
  catch (workerErr) {
164
- // ANY submit OR poll failure (non-OK, timeout, unreachable, parse
165
- // stall, server error) prefilled URL fallback. Never claim success
166
- // without a real issue link.
319
+ // SUBMIT failed (worker unreachable / non-OK) the worker never took
320
+ // the report, so a prefilled URL is safe (no double-file risk).
167
321
  return jsonResult({
168
322
  url: prefilledUrl,
169
323
  repo,
170
324
  filed: false,
171
- note: `Could not file via the intake Worker (${workerErr instanceof Error ? workerErr.message : String(workerErr)}). Fallback: prefilled issue link for the user to submit in one click.`,
325
+ note: `Could not reach the AI triage worker (${workerErr instanceof Error ? workerErr.message : String(workerErr)}). Fallback: prefilled issue link for the user to submit in one click.`,
172
326
  });
173
327
  }
174
328
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report-issue.js","sourceRoot":"","sources":["../../src/tools/report-issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-issue.js","sourceRoot":"","sources":["../../src/tools/report-issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,kFAAkF;AAClF,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,2EAA2E;AAC3E,gFAAgF;AAEhF,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,gFAAgF;AAChF,MAAM,SAAS,GAAG,SAAS,CAAC;AAC5B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAErE,iFAAiF;AACjF,wEAAwE;AACxE,8BAA8B;AAC9B,MAAM,kBAAkB,GAAG,sDAAsD,CAAC;AAClF,MAAM,kBAAkB,GAAG,kDAAkD,CAAC;AAE9E,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC;SACjC,IAAI,EAAE;SACN,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC;SACzC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,yBAAyB,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,MAAiB;IACxF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,MAAM,EAAE,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,sBAAsB,IAAI,eAAe,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,2EAA2E;IAC3E,yEAAyE;IACzE,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACvF,CAAC;AA8DD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAanC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,sCAAsC;IAEjF,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAM,WAAW,GAAG,KAAK,EAAK,EAAuC,EAAc,EAAE;QACnF,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,+EAA+E;IAC/E,wEAAwE;IACxE,8EAA8E;IAC9E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,EAAoC,EAAE;YAC5E,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,IAAI,CAAC,SAAS;oBAC9B,uEAAuE;oBACvE,yEAAyE;oBACzE,gBAAgB,EAAE,GAAG;iBACtB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,QAAQ;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;iBAC/C,CAAC;gBACF,MAAM;aACP,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,QAAQ,GAAG,IAAI,CAAC,CAAC,mCAAmC;YACpD,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,0EAA0E;QAC1E,sEAAsE;QACtE,4EAA4E;QAC5E,IAAI,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAc;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;IAEF,0EAA0E;IAC1E,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,6EAA6E;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,MAAmB,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,EAAwB,EAAE;gBAChE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,WAAW,KAAK,EAAE,EAAE;oBACjD,MAAM;oBACN,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE;iBAC5C,CAAC,CAAC;gBACH,IAAI,CAAC,CAAC,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAgB,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,2EAA2E;YAC3E,SAAS;QACX,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,qEAAqE;YACrE,0EAA0E;YAC1E,oEAAoE;YACpE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC7E,CAAC;QACD,8CAA8C;IAChD,CAAC;IACD,4EAA4E;IAC5E,uDAAuD;IACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED;uEACuE;AACvE,SAAS,aAAa,CAAC,KAAkB;IACvC,OAAO,CACL,KAAK,CAAC,KAAK,KAAK,QAAQ;QACxB,KAAK,CAAC,MAAM,KAAK,MAAM;QACvB,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;iEACiE;AACjE,SAAS,aAAa,CAAC,KAAkB;IACvC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;IAC5C,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACrD,4EAA4E;IAC5E,+EAA+E;IAC/E,6EAA6E;IAC7E,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,YAAY,KAAK,iBAAiB,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,CAAC,EAAE,OAAO;QACnB,cAAc,EAAE,CAAC,EAAE,cAAc;QACjC,YAAY,EAAE,CAAC,EAAE,YAAY;QAC7B,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,IAAI,IAAI;QAC7C,UAAU,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI;QACjC,iBAAiB,EAAE,CAAC,EAAE,iBAAiB;QACvC,aAAa,EAAE,CAAC,EAAE,aAAa;QAC/B,kBAAkB,EAAE,CAAC,EAAE,kBAAkB;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAClE,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,OAAO,iBAAiB,EAAE,CAAC,cAAc,IAAI,SAAS,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,8jCAA8jC,EAC9jC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACjE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,qJAAqJ,CACtJ;QACH,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oGAAoG,CAAC;QACjH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC1F,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gGAAgG,CAAC;QAC7G,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+FAA+F,CAAC;QAC5G,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,mFAAmF,CAAC;KACjG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7E,wEAAwE;YACxE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,OAAO,UAAU,CAAC;oBAChB,GAAG,EAAE,YAAY;oBACjB,IAAI;oBACJ,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,qFAAqF;iBAC5F,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,kBAAkB,CAAC;YACjF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,kBAAkB,CAAC;YACjF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACzF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAChF,iEAAiE;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1G,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAChE,MAAM,WAAW,GACf,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,MAAM,gBAAgB,GAAqB;gBACzC,GAAG,EAAE,IAAI,CAAC,WAAW,IAAI,gBAAgB,EAAE;gBAC3C,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS;aAChF,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;oBAClC,SAAS;oBACT,SAAS;oBACT,QAAQ;oBACR,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,gBAAgB;oBAChB,SAAS;oBACT,QAAQ;oBACR,WAAW;iBACZ,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;oBACzB,OAAO,UAAU,CAAC;wBAChB,kEAAkE;wBAClE,8DAA8D;wBAC9D,iDAAiD;wBACjD,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY,KAAK,iBAAiB;wBACtD,IAAI;wBACJ,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,YAAY,EAAE,CAAC,CAAC,YAAY;wBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;wBACpC,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;wBACtC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;wBACxC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;wBAC9B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;wBAClC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;wBACtC,qCAAqC;wBACrC,aAAa,EAAE,CAAC,CAAC,aAAa;wBAC9B,IAAI,EAAE,2FAA2F;qBAClG,CAAC,CAAC;gBACL,CAAC;gBAED,sEAAsE;gBACtE,mEAAmE;gBACnE,qCAAqC;gBACrC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC/B,OAAO,UAAU,CAAC;wBAChB,GAAG,EAAE,YAAY;wBACjB,IAAI;wBACJ,KAAK,EAAE,KAAK;wBACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;wBAC9B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;wBAClC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;wBACtC,IAAI,EAAE,mHAAmH;qBAC1H,CAAC,CAAC;gBACL,CAAC;gBAED,uEAAuE;gBACvE,wEAAwE;gBACxE,OAAO,UAAU,CAAC;oBAChB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,IAAI;oBACb,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;oBAC9B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;oBAClC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;oBACtC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;oBACvC,IAAI,EAAE,iMAAiM;iBACxM,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,sEAAsE;gBACtE,gEAAgE;gBAChE,OAAO,UAAU,CAAC;oBAChB,GAAG,EAAE,YAAY;oBACjB,IAAI;oBACJ,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,yCAAyC,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,wEAAwE;iBAC1L,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;iBAClH;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;AACJ,CAAC"}