comfyui-mcp 0.52.161 → 0.52.163

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.
@@ -62,7 +62,7 @@ import { tabRouteCarriesPath } from "./turn-origins.js";
62
62
  import { NODE_ID_MESSAGE, NODE_ID_PATTERN, normalizeNodeId, PLAIN_NODE_ID_PATTERN, unionErrorFor, } from "./node-id.js";
63
63
  import { unrecognizedKeysError } from "./unrecognized-keys.js";
64
64
  import { FIND_NODES_DEFAULT_FIELDS, FIND_NODES_FIELDS, GROUP_ID_MESSAGE, GROUP_ID_PATTERN, GROUP_REF_MESSAGE, normalizeGroupId, normalizeShowMediaItem, normalizeTodoItemKeys, pickAlias, projectFindNodesPayload, } from "./panel-arg-aliases.js";
65
- import { addressedNodeMatchesPersistRemedy, parseAmbiguousPromotedWidgetRefusal, parseContradictoryPromotedWidgetRefusal, parseLinkDrivenPromotedWriteWarning, parseSubgraphScopeRefusal, parseUnpromotedControlPersistRemedy, promotedScopeWitnessFromEnvelope, promotedViewingMatchesScope, resolveLegacyInnerPromotedTarget, resolveInnerPromotedTarget, validatePromotedSubgraphEnvelope, isInnerLinkDrivenWriteWarning, shapeParentAuthoritativePromotedWrite, } from "./promoted-widget.js";
65
+ import { addressedNodeMatchesPersistRemedy, parseAmbiguousPromotedWidgetRefusal, parseContradictoryPromotedWidgetRefusal, parseLinkDrivenPromotedWriteWarning, parseSubgraphScopeRefusal, parseUnpromotedControlPersistRemedy, promotedScopeWitnessFromEnvelope, promotedViewingMatchesScope, resolveLegacyInnerPromotedTarget, promotedInnerWidgetIsLinkDriven, resolveInnerPromotedTarget, validatePromotedSubgraphEnvelope, isInnerLinkDrivenWriteWarning, shapeParentAuthoritativePromotedWrite, } from "./promoted-widget.js";
66
66
  import { includeRequestedCreateGroupMembers } from "./create-group-membership.js";
67
67
  import { sizeForUncollapse } from "./edit-node-uncollapse.js";
68
68
  import { fastGroupsFilterPropertyNote, isFastGroupsFilterProperty, } from "./rgthree-fast-groups-property.js";
@@ -6417,8 +6417,12 @@ const PROMOTED_PRIMITIVE_INNER_TYPES = new Set([
6417
6417
  /** #2488 — a promoted subgraph INPUT whose inner widget is a different name
6418
6418
  * (frame_counts → length) or a linked primitive must be written on the host.
6419
6419
  * Same-name proxyWidgets promotions keep the inner write so #2314's known-bad
6420
- * live probe still runs before any container mutation. */
6420
+ * live probe still runs before any container mutation.
6421
+ * #2500 — a Primitive* `value` that exists as a live input is driven by the
6422
+ * promoted rail even when the parent-rail witness is missing; write the host. */
6421
6423
  function shouldWritePromotedHostFirst(plan) {
6424
+ if (plan.innerLinkDriven)
6425
+ return true;
6422
6426
  if (!plan.inner.parentRail)
6423
6427
  return false;
6424
6428
  if (plan.hostWidget.toLowerCase() !== plan.inner.widget.toLowerCase())
@@ -6920,6 +6924,7 @@ async function preparePromotedWidgetWrite(ctx, nodeId, widget) {
6920
6924
  ...(outerNodeIdentity ? { outerNodeIdentity } : {}),
6921
6925
  inner,
6922
6926
  innerNodeType,
6927
+ innerLinkDriven: promotedInnerWidgetIsLinkDriven(innerNode, inner.widget, inner.terminal),
6923
6928
  ...(inner.terminal ? { terminal: inner.terminal } : {}),
6924
6929
  scope,
6925
6930
  binding: {
@@ -16974,6 +16979,40 @@ export function buildPanelToolDefs() {
16974
16979
  const afterMappingError = currentPromotedBindingError(ctx, plan.binding);
16975
16980
  if (afterMappingError)
16976
16981
  return promotedWriteRefusal(args.widget, afterMappingError);
16982
+ // #2500 — a link-driven inner Primitive (duration/value_2, fps/value_3)
16983
+ // accepts a write and warns that rendering still reads the enclosing
16984
+ // subgraph widget. Write that container first, at the caller's current
16985
+ // graph, and do not enter the inner scope. This is the #1655 fallback
16986
+ // path when the #2488 host-rail write already contradicted.
16987
+ if (plan.innerLinkDriven) {
16988
+ if (plan.terminal) {
16989
+ const terminalBlocked = refuseKnownBadPromotedTerminal(plan.terminal);
16990
+ if (terminalBlocked)
16991
+ return terminalBlocked;
16992
+ }
16993
+ const hostWidget = plan.hostWidget;
16994
+ const hostScope = plan.outerScope;
16995
+ const written = await write(plan.outerNodeId, hostWidget, plan.outerNodeType, () => {
16996
+ const error = currentPromotedBindingError(ctx, plan.binding);
16997
+ if (error) {
16998
+ throw new Error(`Refusing promoted container graph_set_widget: ${error}. No graph_set_widget was dispatched.`);
16999
+ }
17000
+ if (hostScope) {
17001
+ const scopeError = currentPromotedExpectedScopeError(ctx, hostScope);
17002
+ if (scopeError) {
17003
+ throw new Error(`Refusing promoted container graph_set_widget: ${scopeError}. No graph_set_widget was dispatched.`);
17004
+ }
17005
+ }
17006
+ }, hostScope, plan.outerNodeIdentity);
17007
+ if (written.isError) {
17008
+ return appendToolResultText(written, `\n\n(Tried the enclosing subgraph widget on node ${plan.outerNodeId} ` +
17009
+ `"${hostWidget}" first because the promoted inner widget is link-driven. ` +
17010
+ `Navigation scope was left unchanged.)`);
17011
+ }
17012
+ markPanelSchemaReady(panelSchemaKey(ctx));
17013
+ const persisted = await persistUnpromotedControlAfterGenerate(written, ctx, plan.outerNodeId);
17014
+ return appendToolResultText(persisted, promotedHostAppliedNote(plan));
17015
+ }
16977
17016
  const enter = await ctx.call({ cmd: "graph_enter_subgraph", node_id: plan.outerNodeId }, 15000);
16978
17017
  if (enter.isError) {
16979
17018
  return promotedWriteRefusal(args.widget, `panel_enter_subgraph failed (${textOfToolResult(enter)})`);