comfyui-mcp 0.52.6 → 0.52.7

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 (48) hide show
  1. package/dist/orchestrator/panel-tools.js +62 -2
  2. package/dist/orchestrator/panel-tools.js.map +1 -1
  3. package/dist/services/skill-generator.js +27 -0
  4. package/dist/services/skill-generator.js.map +1 -1
  5. package/package.json +1 -1
  6. package/packs/README.md +2 -1
  7. package/plugin/agents/explorer.md +2 -0
  8. package/plugin/commands/node-skill.md +1 -1
  9. package/plugin/skills/ai-toolkit-trainer/SKILL.md +5 -0
  10. package/plugin/skills/anima-base/SKILL.md +5 -0
  11. package/plugin/skills/anima-lora-trainer/SKILL.md +5 -0
  12. package/plugin/skills/civitai/SKILL.md +5 -0
  13. package/plugin/skills/color-correction/SKILL.md +5 -0
  14. package/plugin/skills/comfyui-core/SKILL.md +5 -0
  15. package/plugin/skills/comfyui-frontend-extensions/SKILL.md +8 -7
  16. package/plugin/skills/comfyui-launch-flags/SKILL.md +2 -5
  17. package/plugin/skills/comfyui-node-registry/SKILL.md +5 -0
  18. package/plugin/skills/debug-render/SKILL.md +5 -0
  19. package/plugin/skills/director/SKILL.md +5 -0
  20. package/plugin/skills/ernie-image/SKILL.md +5 -0
  21. package/plugin/skills/flux-txt2img/SKILL.md +5 -0
  22. package/plugin/skills/ideogram-ultra/SKILL.md +5 -0
  23. package/plugin/skills/installer-packs/SKILL.md +5 -0
  24. package/plugin/skills/krea2-identity-edit/SKILL.md +5 -0
  25. package/plugin/skills/krea2-txt2img/SKILL.md +5 -0
  26. package/plugin/skills/local-llm-free/SKILL.md +5 -0
  27. package/plugin/skills/lora-manager/SKILL.md +5 -0
  28. package/plugin/skills/ltx-director/SKILL.md +5 -0
  29. package/plugin/skills/ltxv2-video/SKILL.md +5 -0
  30. package/plugin/skills/model-compatibility/SKILL.md +5 -0
  31. package/plugin/skills/model-registry/SKILL.md +5 -0
  32. package/plugin/skills/panel-node-pack-sync/SKILL.md +5 -0
  33. package/plugin/skills/prompt-engineering/SKILL.md +5 -0
  34. package/plugin/skills/qwen-image-edit/SKILL.md +5 -0
  35. package/plugin/skills/qwen-txt2img/SKILL.md +5 -0
  36. package/plugin/skills/report-bug/SKILL.md +5 -0
  37. package/plugin/skills/rgthree/SKILL.md +5 -0
  38. package/plugin/skills/train-character-lora/SKILL.md +5 -0
  39. package/plugin/skills/triton-sageattention/SKILL.md +2 -21
  40. package/plugin/skills/troubleshooting/SKILL.md +5 -0
  41. package/plugin/skills/video-extend/SKILL.md +5 -0
  42. package/plugin/skills/video-upscale/SKILL.md +5 -0
  43. package/plugin/skills/wan-flf-video/SKILL.md +5 -0
  44. package/plugin/skills/wan-multitalk/SKILL.md +5 -0
  45. package/plugin/skills/wan-scail-replacement/SKILL.md +5 -0
  46. package/plugin/skills/wan-t2v-video/SKILL.md +5 -0
  47. package/plugin/skills/workflow-layout/SKILL.md +5 -0
  48. package/plugin/skills/z-image-txt2img/SKILL.md +5 -0
@@ -74,7 +74,7 @@ function journalTabFor(ctx) {
74
74
  function journalConversationFor(ctx) {
75
75
  return conversationOfScopeAddress(ctx.tabId);
76
76
  }
77
- import { BRIDGE_DEFAULT_TIMEOUT_MS, BRIDGE_READ_DEFAULT_TIMEOUT_MS, dispatchOutcomeOf, isCapabilityRefusal, isPanelCmdUnsupportedError, isReplyTimeoutTagged, isRoutingAmbiguity, } from "../services/ui-bridge.js";
77
+ import { BRIDGE_DEFAULT_TIMEOUT_MS, BRIDGE_READ_DEFAULT_TIMEOUT_MS, dispatchOutcomeOf, isCapabilityRefusal, isPanelCmdUnsupportedError, isReplyTimeoutTagged, isRoutingAmbiguity, requiresWorkflowStampEnforcement, } from "../services/ui-bridge.js";
78
78
  import { withWorkflowTarget, } from "../services/workflow-target-store.js";
79
79
  import { addUserMcpServer, readUserMcpServers, removeUserMcpServer, setUserMcpServerSecret, } from "../services/user-mcp-config.js";
80
80
  import { setComfyuiSecret, setAgentSecret, isAllowedAgentSecretKey, receiptDisclosures, shadowedNote, storeDamageNote, } from "../services/panel-secrets.js";
@@ -791,6 +791,26 @@ function isFencedGraphRead(cmd) {
791
791
  const name = typeof cmd.cmd === "string" ? cmd.cmd : "";
792
792
  return name.startsWith("graph_") && !MUTATING_GRAPH_EDIT_CMDS.has(name);
793
793
  }
794
+ /**
795
+ * #1778 — a fenced command that is neither a graph edit nor a graph read.
796
+ *
797
+ * `workflow_save` / `workflow_save_as` / `workflow_rename` / `workflow_close`
798
+ * require a workflow stamp (`requiresWorkflowStampEnforcement`) and the
799
+ * dispatch gate refuses them the same way it refuses a graph_* command. They
800
+ * are not in MUTATING_GRAPH_EDIT_CMDS and they do not start with `graph_`, so
801
+ * neither existing probe branch fires. The save handler then returns at
802
+ * `if (res.isError) return res` with the generic "tab may be disconnected"
803
+ * wrapper and an empty corroboration, so a save-only retry never self-heals.
804
+ *
805
+ * Derived from the stamp-enforcement classifier minus the `graph_` prefix, so
806
+ * a newly added active-workflow mutator cannot drift out. The prefix is still
807
+ * load-bearing for the same reason as `isFencedGraphRead`: the diagnosis runs
808
+ * `workflow_list`, which must not re-enter this branch.
809
+ */
810
+ function isFencedActiveWorkflowMutator(cmd) {
811
+ const name = typeof cmd.cmd === "string" ? cmd.cmd : "";
812
+ return !name.startsWith("graph_") && requiresWorkflowStampEnforcement(cmd);
813
+ }
794
814
  /** True when an error is a TRANSIENT transport/reconnect drop (the tab went away
795
815
  * or was replaced), NOT a genuine command error or a live-but-frozen reply
796
816
  * timeout. Deliberately EXCLUDES "did not reply within N ms" (a backgrounded/
@@ -7016,7 +7036,47 @@ export function makePanelToolCtx(bridge, tabId, workflowTargets) {
7016
7036
  //
7017
7037
  // Safe to recommend a retry because a fence refusal is checked BEFORE the handler
7018
7038
  // runs — "Nothing was applied" is structural here, not an echoed claim.
7019
- if (isWorkflowInstanceMismatch(err) && isMutatingGraphCmd(cmd)) {
7039
+ //
7040
+ // #1778 — the same refusal on workflow_save / save_as / rename / close. Those
7041
+ // carry a workflow target but are not graph_*, so neither isMutatingGraphCmd
7042
+ // nor isFencedGraphRead was true and the call fell through to the generic
7043
+ // dispatched:false wrapper: no probe, no corroborateTabStamp, and a
7044
+ // "tab may be disconnected" line that is false here (the tab is connected;
7045
+ // what is stale is the stamp). Widening this branch is the self-heal.
7046
+ //
7047
+ // THE PHRASE IS NOT THE STATE, AND TWO OTHER REFUSALS QUOTE IT.
7048
+ //
7049
+ // `isWorkflowInstanceMismatch` is an unanchored `/workflow instance mismatch/i`,
7050
+ // and the fence is not the only thing that says those words. The bridge's
7051
+ // `"<cmd>" cannot be safely targeted to the active workflow` reject quotes them
7052
+ // inside its `readsNote` — to describe what a DIFFERENT command would get — and
7053
+ // carries the second look-alike, `no trusted identity`, in its `why` clause.
7054
+ // Both are minted pre-dispatch and flagged `dispatched:false`, so both satisfy
7055
+ // the phrase match on their way through here.
7056
+ //
7057
+ // For a mutating graph edit that never surfaced, by ORDERING rather than by
7058
+ // design: the #1401 branch catches `no trusted identity` for `isMutatingGraphCmd`
7059
+ // above. The four active-workflow mutators have no branch above them, so the
7060
+ // widening alone handed each of these two states the OTHER's remedy — measured,
7061
+ // not reasoned. A capability refusal ending "Update the panel and hard-refresh
7062
+ // the browser tab" came back with "Retry once — … panel_open_workflow is the way
7063
+ // to settle which one you mean" appended to it: the futile retry #709 exists to
7064
+ // suppress, contradicting the sentence directly above it, plus a wasted
7065
+ // workflow_list round trip. And a fence-less session got #1330's "the fence
7066
+ // already names the live canvas" for the state whose own docstring says "a
7067
+ // mismatch may clear by itself, this never does".
7068
+ //
7069
+ // So the arm carries the discriminators the graph arm gets from ordering. Both
7070
+ // are TYPED-or-explicit, never a second reading of the same prose:
7071
+ // `isCapabilityRefusal` is the bridge's own symbol marker, and
7072
+ // `isNoTrustedIdentityRefusal` matches a distinct phrase a mismatch refusal never
7073
+ // contains. Scoped to THIS arm on purpose — `isMutatingGraphCmd` keeps its exact
7074
+ // prior behaviour, so nothing about the graph path moves here.
7075
+ if (isWorkflowInstanceMismatch(err) &&
7076
+ (isMutatingGraphCmd(cmd) ||
7077
+ (isFencedActiveWorkflowMutator(cmd) &&
7078
+ !isCapabilityRefusal(err) &&
7079
+ !isNoTrustedIdentityRefusal(err)))) {
7020
7080
  const name = typeof cmd.cmd === "string" ? cmd.cmd : "panel command";
7021
7081
  const raw = err instanceof Error ? err.message : String(err);
7022
7082
  // The uuid the command CARRIED, read from the panel's own refusal rather than