comfyui-mcp 0.52.170 → 0.52.171

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.
@@ -15652,9 +15652,11 @@ function runLateAckGraceMs() {
15652
15652
  *
15653
15653
  * Returns null when there is nothing to reconcile. The negatives are deliberate:
15654
15654
  *
15655
- * - NOT an unacked post-write (timeout or disconnect), or the Panel's explicit
15656
- * id-less queued_unknown receipt (#1728) ⇒ nothing to wait for.
15657
- * Gated on the bridge's own typed marks, never on message text: an acked
15655
+ * - A `queued_unknown` with no exact receipt and no scoped queue-attribution
15656
+ * contract ⇒ nothing to claim. Full-graph uncertainty waits only for the
15657
+ * bridge's rid-correlated `run_receipt`; scoped uncertainty may additionally
15658
+ * use its existing bounded queue observation. Gated on the bridge's own typed
15659
+ * marks, never on message text: an acked
15658
15660
  * panel error can quote our timeout/OUTCOME UNKNOWN sentence verbatim
15659
15661
  * (#1468 round 2), and the difference is whether the tab answered, which
15660
15662
  * only the bridge knows.
@@ -15696,7 +15698,7 @@ function latePanelReceiptResult(parsed, latePromptIds) {
15696
15698
  ...(ids.length > 1 ? { prompt_ids: ids } : {}),
15697
15699
  };
15698
15700
  }
15699
- async function reconcileLateRunAck(ctx, res, rid, preRunningPromptId, allowPanelQueueUnknown = false, expectedTabId, expectedPromptCount = 1) {
15701
+ async function reconcileLateRunAck(ctx, res, rid, preRunningPromptId, allowPanelQueueUnknownReceipt = false, expectedTabId, expectedPromptCount = 1, allowQueueUnknownInference = false) {
15700
15702
  const parsed = parseToolResultJson(res);
15701
15703
  // An exact Panel receipt is safe even when a queued_unknown reply already
15702
15704
  // carried some ids: the bridge event is the producer's own prompt capture,
@@ -15705,10 +15707,15 @@ async function reconcileLateRunAck(ctx, res, rid, preRunningPromptId, allowPanel
15705
15707
  // available after the transport failed. The old queue path remains
15706
15708
  // id-less-only below.
15707
15709
  const receiptEligible = Boolean(rid) &&
15708
- ((allowPanelQueueUnknown && isPanelQueueUncertainty(parsed)) ||
15710
+ ((allowPanelQueueUnknownReceipt && isPanelQueueUncertainty(parsed)) ||
15709
15711
  isReplyTimeoutResult(res) ||
15710
15712
  isMidCommandDisconnectResult(res));
15711
- const queueEligible = isUnackedGraphRunResult(res, allowPanelQueueUnknown);
15713
+ // A run_receipt is exact Panel evidence for BOTH full and scoped runs. Queue
15714
+ // observation is weaker: only the scoped Panel contract makes a new queue id
15715
+ // attributable to this dispatch. Keep those authorities separate so enabling
15716
+ // full-graph receipt recovery cannot turn a foreign back-to-back render into
15717
+ // this run's prompt id.
15718
+ const queueEligible = isUnackedGraphRunResult(res, allowQueueUnknownInference);
15712
15719
  if (!receiptEligible && !queueEligible)
15713
15720
  return null;
15714
15721
  const fromQueue = () => {
@@ -18902,9 +18909,13 @@ export function buildPanelToolDefs() {
18902
18909
  // guidance. Rebuilding the reply here (rather than describing it) is what
18903
18910
  // makes that possible — `ok()` is exactly what ctx.call would have produced.
18904
18911
  const reconcileRun = async () => {
18905
- const recovered = await reconcileLateRunAck(ctx, res, runRid, pre.runningPromptId, typeof args.to_node_id === "number", runTicketTab, typeof args.batch_count === "number"
18912
+ const recovered = await reconcileLateRunAck(ctx, res, runRid, pre.runningPromptId,
18913
+ // #2143 — queued_unknown is receipt-recoverable for full graph runs
18914
+ // too. Only exact run_receipt evidence is allowed there; the weaker
18915
+ // QueueMonitor inference remains scoped-run-only below.
18916
+ true, runTicketTab, typeof args.batch_count === "number"
18906
18917
  ? Math.max(1, Math.min(64, Math.floor(args.batch_count)))
18907
- : 1);
18918
+ : 1, typeof args.to_node_id === "number");
18908
18919
  if (!recovered)
18909
18920
  return;
18910
18921
  for (const entry of recovered.completionKeys ?? []) {