comfyui-mcp 0.49.2 → 0.49.3
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.
- package/dist/orchestrator/ollama-backend.js +11 -2
- package/dist/orchestrator/ollama-backend.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +13 -0
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/services/asset-reconcile.js +83 -0
- package/dist/services/asset-reconcile.js.map +1 -0
- package/dist/services/asset-registry.js +9 -2
- package/dist/services/asset-registry.js.map +1 -1
- package/dist/services/job-history.js +50 -0
- package/dist/services/job-history.js.map +1 -1
- package/dist/services/job-watcher.js +38 -7
- package/dist/services/job-watcher.js.map +1 -1
- package/dist/services/ui-bridge.js +34 -6
- package/dist/services/ui-bridge.js.map +1 -1
- package/dist/tools/assets.js +34 -2
- package/dist/tools/assets.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getHistory } from "../comfyui/client.js";
|
|
2
|
+
import { buildCompletionNotification } from "./job-watcher.js";
|
|
3
|
+
import { extractWorkflowGraph } from "./history-select.js";
|
|
4
|
+
import { hasAffirmativeSuccessStatus, historyCompletionTimeMs } from "./job-history.js";
|
|
5
|
+
import { AssetRegistry } from "./asset-registry.js";
|
|
6
|
+
import { logger } from "../utils/logger.js";
|
|
7
|
+
/** Only the newest N completed prompts are reconciled per call. */
|
|
8
|
+
const DEFAULT_MAX_PROMPTS = 25;
|
|
9
|
+
function queueNumberOf(entry) {
|
|
10
|
+
const p = entry?.prompt;
|
|
11
|
+
return Array.isArray(p) ? Number(p[0]) || 0 : 0;
|
|
12
|
+
}
|
|
13
|
+
export async function reconcileAssetsFromHistory(opts = {}) {
|
|
14
|
+
const maxPrompts = opts.maxPrompts ?? DEFAULT_MAX_PROMPTS;
|
|
15
|
+
const now = opts.now ?? Date.now;
|
|
16
|
+
const history = await getHistory();
|
|
17
|
+
const completed = Object.entries(history)
|
|
18
|
+
.filter(([, entry]) => entry?.status?.completed === true)
|
|
19
|
+
.sort((a, b) => queueNumberOf(b[1]) - queueNumberOf(a[1]))
|
|
20
|
+
.slice(0, maxPrompts);
|
|
21
|
+
let registered = 0;
|
|
22
|
+
let skippedExisting = 0;
|
|
23
|
+
for (const [promptId, entry] of completed) {
|
|
24
|
+
// Eligibility keys on the HISTORY entry's own status via the shared
|
|
25
|
+
// affirmative-success predicate (job-history) — the SAME gate the watched
|
|
26
|
+
// path registers through, never the notification builder's default-success.
|
|
27
|
+
if (!hasAffirmativeSuccessStatus(entry))
|
|
28
|
+
continue;
|
|
29
|
+
// Parse outputs exactly like the watched path does — same extraction and
|
|
30
|
+
// URL building.
|
|
31
|
+
const notification = buildCompletionNotification(promptId, entry, now());
|
|
32
|
+
if (notification.outputs.length === 0)
|
|
33
|
+
continue;
|
|
34
|
+
// The recorded graph is the provenance regenerate / get_asset_metadata
|
|
35
|
+
// rely on; without it there is nothing truthful to register.
|
|
36
|
+
const workflow = extractWorkflowGraph(entry);
|
|
37
|
+
if (!workflow)
|
|
38
|
+
continue;
|
|
39
|
+
// createdAt must be the run's REAL completion time — an entry without a
|
|
40
|
+
// trustworthy execution_success timestamp is skipped rather than guessed
|
|
41
|
+
// (see historyCompletionTimeMs; the watched path can fall back to its own
|
|
42
|
+
// observed finish time, but a reconciler running long after the fact has
|
|
43
|
+
// no such observation).
|
|
44
|
+
const createdAt = historyCompletionTimeMs(entry, now());
|
|
45
|
+
if (createdAt === undefined) {
|
|
46
|
+
logger.debug("Skipping history entry with no usable completion timestamp", {
|
|
47
|
+
prompt_id: promptId,
|
|
48
|
+
});
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const fresh = notification.outputs
|
|
52
|
+
.map((output) => ({
|
|
53
|
+
node_id: output.node_id,
|
|
54
|
+
images: output.images.filter((img) => {
|
|
55
|
+
// Keep the original (watched or earlier-reconciled) record: its
|
|
56
|
+
// createdAt and any already-handed-out asset_id stay stable.
|
|
57
|
+
if (AssetRegistry.has(promptId, img)) {
|
|
58
|
+
skippedExisting++;
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}),
|
|
63
|
+
}))
|
|
64
|
+
.filter((output) => output.images.length > 0);
|
|
65
|
+
if (fresh.length === 0)
|
|
66
|
+
continue;
|
|
67
|
+
const records = AssetRegistry.register({
|
|
68
|
+
promptId,
|
|
69
|
+
workflow,
|
|
70
|
+
outputs: fresh,
|
|
71
|
+
source: "history-reconcile",
|
|
72
|
+
createdAt,
|
|
73
|
+
createdAtSource: "history",
|
|
74
|
+
});
|
|
75
|
+
registered += records.length;
|
|
76
|
+
}
|
|
77
|
+
const result = { scanned: completed.length, registered, skippedExisting };
|
|
78
|
+
if (result.registered > 0) {
|
|
79
|
+
logger.info("Reconciled assets from ComfyUI history", result);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=asset-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-reconcile.js","sourceRoot":"","sources":["../../src/services/asset-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export const AssetRegistry = {
|
|
|
25
25
|
* Register all images produced by a completed prompt.
|
|
26
26
|
* Returns the AssetRecords created (one per image).
|
|
27
27
|
*/
|
|
28
|
-
register({ promptId, workflow, outputs }) {
|
|
28
|
+
register({ promptId, workflow, outputs, source, createdAt, createdAtSource }) {
|
|
29
29
|
const snapshot = deepCloneWorkflow(workflow);
|
|
30
30
|
const created = [];
|
|
31
31
|
for (const output of outputs) {
|
|
@@ -40,7 +40,9 @@ export const AssetRegistry = {
|
|
|
40
40
|
type: img.type,
|
|
41
41
|
url: img.url,
|
|
42
42
|
workflow: snapshot,
|
|
43
|
-
createdAt: state.config.now(),
|
|
43
|
+
createdAt: createdAt ?? state.config.now(),
|
|
44
|
+
createdAtSource: createdAtSource ?? "observed",
|
|
45
|
+
source: source ?? "watched",
|
|
44
46
|
};
|
|
45
47
|
state.records.set(assetId, record);
|
|
46
48
|
created.push(record);
|
|
@@ -48,6 +50,11 @@ export const AssetRegistry = {
|
|
|
48
50
|
}
|
|
49
51
|
return created;
|
|
50
52
|
},
|
|
53
|
+
/** True when a live (unexpired) record exists for this prompt + image. */
|
|
54
|
+
has(promptId, img) {
|
|
55
|
+
const record = state.records.get(makeAssetId(promptId, img));
|
|
56
|
+
return record !== undefined && !isExpired(record);
|
|
57
|
+
},
|
|
51
58
|
/** Look up a record by id. Returns undefined for missing or expired. */
|
|
52
59
|
get(assetId) {
|
|
53
60
|
const record = state.records.get(assetId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-registry.js","sourceRoot":"","sources":["../../src/services/asset-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"asset-registry.js","sourceRoot":"","sources":["../../src/services/asset-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export const TRACEBACK_MAX_CHARS = 2000;
|
|
3
|
+
/**
|
|
4
|
+
* Affirmative-success test for a history entry — the ONE eligibility gate both
|
|
5
|
+
* asset-registration paths (JobWatcher.handleCompletion and the list_assets
|
|
6
|
+
* history reconcile) share, so a run can never become an asset without real
|
|
7
|
+
* success evidence (#751 codex gate r3).
|
|
8
|
+
*
|
|
9
|
+
* It deliberately does NOT trust buildCompletionNotification's derived status:
|
|
10
|
+
* that derivation defaults to "success" whenever messages carry no well-formed
|
|
11
|
+
* execution_error/interrupted event, which silently promotes a run ComfyUI
|
|
12
|
+
* marked status_str:"error" (or any entry with missing/malformed status or
|
|
13
|
+
* messages) to "success". Here the entry's OWN status_str must affirm success
|
|
14
|
+
* AND no error/interrupt message may exist; anything short fails toward NOT
|
|
15
|
+
* registering.
|
|
16
|
+
*/
|
|
17
|
+
export function hasAffirmativeSuccessStatus(entry) {
|
|
18
|
+
if (entry?.status?.status_str !== "success")
|
|
19
|
+
return false;
|
|
20
|
+
const messages = normalizeHistoryMessages(entry);
|
|
21
|
+
return !messages.some((m) => m[0] === "execution_error" || m[0] === "execution_interrupted");
|
|
22
|
+
}
|
|
23
|
+
/** ComfyUI history timestamps are epoch seconds or milliseconds depending on
|
|
24
|
+
* version — infer from magnitude, mirroring durationMs below. */
|
|
25
|
+
function normalizeEpochMs(ts) {
|
|
26
|
+
if (typeof ts !== "number" || !Number.isFinite(ts))
|
|
27
|
+
return undefined;
|
|
28
|
+
if (ts > 1_000_000_000_000)
|
|
29
|
+
return ts; // epoch ms
|
|
30
|
+
if (ts > 1_000_000_000)
|
|
31
|
+
return ts * 1000; // epoch s
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The run's real completion time (ms epoch), taken ONLY from the
|
|
36
|
+
* execution_success message — the one truthful completion timestamp recorded
|
|
37
|
+
* by ComfyUI. execution_start is deliberately not a fallback: it is start
|
|
38
|
+
* time, and using it would backdate a long render past the TTL / a `since`
|
|
39
|
+
* boundary and hide it. Values implausibly far in the future (clock skew,
|
|
40
|
+
* non-epoch garbage) are rejected. Returns undefined when history carries no
|
|
41
|
+
* trustworthy value — the caller must then use its own truthful observation
|
|
42
|
+
* time (watched path) or skip the record (reconcile path). Shared by both
|
|
43
|
+
* asset-registration paths so "real completion time" means the same thing on
|
|
44
|
+
* each (#751 codex gate r4).
|
|
45
|
+
*/
|
|
46
|
+
export function historyCompletionTimeMs(entry, now) {
|
|
47
|
+
const success = normalizeHistoryMessages(entry).find((m) => m[0] === "execution_success");
|
|
48
|
+
const ms = normalizeEpochMs(success?.[1]?.timestamp);
|
|
49
|
+
if (ms === undefined || ms > now + 60_000)
|
|
50
|
+
return undefined;
|
|
51
|
+
return ms;
|
|
52
|
+
}
|
|
3
53
|
const executionErrorSchema = z.object({
|
|
4
54
|
node_id: z.union([z.string(), z.number()]).optional(),
|
|
5
55
|
node_type: z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-history.js","sourceRoot":"","sources":["../../src/services/job-history.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"job-history.js","sourceRoot":"","sources":["../../src/services/job-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { getCloudUrl, getComfyUIBaseUrl, isCloudMode, } from "../config.js";
|
|
|
6
6
|
import { attachExecutionListeners } from "../comfyui/events.js";
|
|
7
7
|
import { logger } from "../utils/logger.js";
|
|
8
8
|
import { AssetRegistry } from "./asset-registry.js";
|
|
9
|
-
import { analyzeHistoryEntry, normalizeHistoryMessages, } from "./job-history.js";
|
|
9
|
+
import { analyzeHistoryEntry, hasAffirmativeSuccessStatus, historyCompletionTimeMs, normalizeHistoryMessages, } from "./job-history.js";
|
|
10
10
|
// ── Constants ──────────────────────────────────────────────────────────
|
|
11
11
|
const COMPLETIONS_DIR = join(tmpdir(), "comfyui-mcp-completions");
|
|
12
12
|
const HISTORY_FLUSH_DELAY_MS = 500;
|
|
@@ -41,6 +41,12 @@ function buildImageUrl(filename, subfolder, type) {
|
|
|
41
41
|
}
|
|
42
42
|
return `${getComfyUIBaseUrl()}/view?${params.toString()}`;
|
|
43
43
|
}
|
|
44
|
+
function isHistoryMediaRef(value) {
|
|
45
|
+
if (value === null || typeof value !== "object")
|
|
46
|
+
return false;
|
|
47
|
+
const filename = value.filename;
|
|
48
|
+
return typeof filename === "string" && filename.length > 0;
|
|
49
|
+
}
|
|
44
50
|
export function buildCompletionNotification(promptId, entry, startTime) {
|
|
45
51
|
const messages = normalizeHistoryMessages(entry);
|
|
46
52
|
const analysis = analyzeHistoryEntry(entry);
|
|
@@ -78,9 +84,13 @@ export function buildCompletionNotification(promptId, entry, startTime) {
|
|
|
78
84
|
if (!nodeOutput || typeof nodeOutput !== "object")
|
|
79
85
|
continue;
|
|
80
86
|
const out = nodeOutput;
|
|
81
|
-
// Extract image outputs (SaveImage, PreviewImage)
|
|
87
|
+
// Extract image outputs (SaveImage, PreviewImage) — malformed refs are
|
|
88
|
+
// filtered BEFORE any use, so a bad /history entry can neither crash the
|
|
89
|
+
// parse nor surface as an output with filename=undefined.
|
|
82
90
|
if (Array.isArray(out.images)) {
|
|
83
|
-
const images = out.images
|
|
91
|
+
const images = out.images
|
|
92
|
+
.filter(isHistoryMediaRef)
|
|
93
|
+
.map((img) => ({
|
|
84
94
|
filename: img.filename,
|
|
85
95
|
subfolder: img.subfolder ?? "",
|
|
86
96
|
type: img.type ?? "output",
|
|
@@ -99,7 +109,7 @@ export function buildCompletionNotification(promptId, entry, startTime) {
|
|
|
99
109
|
const videoData = out[videoKey];
|
|
100
110
|
if (!Array.isArray(videoData))
|
|
101
111
|
continue;
|
|
102
|
-
for (const vid of videoData) {
|
|
112
|
+
for (const vid of videoData.filter(isHistoryMediaRef)) {
|
|
103
113
|
videos.push({
|
|
104
114
|
filename: vid.filename,
|
|
105
115
|
subfolder: vid.subfolder ?? "",
|
|
@@ -130,6 +140,13 @@ async function handleCompletion(promptId, state, detectedBy) {
|
|
|
130
140
|
if (state.completed)
|
|
131
141
|
return;
|
|
132
142
|
state.completed = true;
|
|
143
|
+
// The watch's OWN observed finish time: the moment this watcher detected
|
|
144
|
+
// the completion (WS event or poll tick). For a live-watched job this is a
|
|
145
|
+
// real, truthful observation — within one poll interval / WS latency of the
|
|
146
|
+
// actual finish — and serves as the createdAt fallback when the history
|
|
147
|
+
// entry carries no usable execution_success timestamp (never the registry's
|
|
148
|
+
// silent default-now; provenance is recorded on the record, #751 r4 gate).
|
|
149
|
+
const observedFinishAt = Date.now();
|
|
133
150
|
logger.info(`Completion detected via ${detectedBy}`, { prompt_id: promptId });
|
|
134
151
|
// Stop both monitoring tracks
|
|
135
152
|
cleanup(state);
|
|
@@ -166,10 +183,22 @@ async function handleCompletion(promptId, state, detectedBy) {
|
|
|
166
183
|
try {
|
|
167
184
|
const notification = buildCompletionNotification(promptId, entry, state.startTime);
|
|
168
185
|
// Register outputs with the AssetRegistry so they can be referenced by
|
|
169
|
-
// asset_id for view_image / regenerate.
|
|
170
|
-
//
|
|
171
|
-
|
|
186
|
+
// asset_id for view_image / regenerate. Registration requires AFFIRMATIVE
|
|
187
|
+
// success evidence — the shared predicate (job-history) both registration
|
|
188
|
+
// paths use. The live watch only detects "finished" (WS and poll both
|
|
189
|
+
// route success AND error to this handler), and notification.status is a
|
|
190
|
+
// derivation that defaults to success when messages are absent/malformed;
|
|
191
|
+
// the history entry's own status_str + messages are therefore the
|
|
192
|
+
// AUTHORITATIVE status source for registration on this path too. (The
|
|
193
|
+
// derived status still drives the completion FILE, where presenting a
|
|
194
|
+
// best-effort outcome is a display matter, not an asset guarantee.)
|
|
195
|
+
if (hasAffirmativeSuccessStatus(entry) && state.workflow) {
|
|
172
196
|
try {
|
|
197
|
+
// createdAt is a REAL time, never the registry's silent default-now:
|
|
198
|
+
// prefer the entry's recorded execution_success timestamp; fall back
|
|
199
|
+
// to this watcher's own observed finish time — distinguishable via
|
|
200
|
+
// createdAtSource ("history" vs "observed").
|
|
201
|
+
const recordedAt = historyCompletionTimeMs(entry, observedFinishAt);
|
|
173
202
|
const records = AssetRegistry.register({
|
|
174
203
|
promptId,
|
|
175
204
|
workflow: state.workflow,
|
|
@@ -182,6 +211,8 @@ async function handleCompletion(promptId, state, detectedBy) {
|
|
|
182
211
|
url: img.url,
|
|
183
212
|
})),
|
|
184
213
|
})),
|
|
214
|
+
createdAt: recordedAt ?? observedFinishAt,
|
|
215
|
+
createdAtSource: recordedAt !== undefined ? "history" : "observed",
|
|
185
216
|
});
|
|
186
217
|
const idByKey = new Map(records.map((r) => [`${r.nodeId}|${r.filename}|${r.subfolder}|${r.type}`, r.assetId]));
|
|
187
218
|
for (const output of notification.outputs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-watcher.js","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"job-watcher.js","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { randomUUID, timingSafeEqual } from "node:crypto";
|
|
18
18
|
import { WebSocketServer, WebSocket } from "ws";
|
|
19
19
|
import { logger } from "../utils/logger.js";
|
|
20
|
-
import { compareSemver } from "./self-update.js";
|
|
20
|
+
import { compareSemver, detectInstallMode } from "./self-update.js";
|
|
21
21
|
export const DEFAULT_BRIDGE_PORT = 9101;
|
|
22
22
|
/** Panel build that first implements the full graph_* / ui_* bridge command set.
|
|
23
23
|
* Used as the DEFAULT minimum for any bridge command not listed in
|
|
@@ -177,9 +177,37 @@ export function panelVersionProvesUnsupported(cmd, panelVersion) {
|
|
|
177
177
|
* gate only ever fires for tabled commands), so "this panel build does not
|
|
178
178
|
* implement it" is an observed fact, and "update to the latest release" is the
|
|
179
179
|
* only remedy guaranteed sufficient — never a fabricated, possibly-already-met
|
|
180
|
-
* version number.
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
* version number.
|
|
181
|
+
*
|
|
182
|
+
* The "(detected …)" parenthetical names BOTH sides of the skew (#422): the
|
|
183
|
+
* detected PANEL build (when known) AND the detecting MCP server build. A
|
|
184
|
+
* "stale panel version" report is only actionable when the reader can see which
|
|
185
|
+
* MCP build made the verdict — an outdated orchestrator can hold an outdated
|
|
186
|
+
* minimum table, so both versions belong in the error. The MCP version is
|
|
187
|
+
* resolved once per process (it cannot change without a restart); callers may
|
|
188
|
+
* pass `mcpVersion` explicitly (tests). */
|
|
189
|
+
// The resolution result is cached BOTH ways — an unavailable version (or a
|
|
190
|
+
// throwing detectInstallMode) resolves to null ONCE, never re-probed per error
|
|
191
|
+
// (codex gate: undefined would conflate 'not yet resolved' with 'unavailable'
|
|
192
|
+
// and re-run detectInstallMode on every error on those installs).
|
|
193
|
+
let cachedMcpVersion;
|
|
194
|
+
function mcpServerVersion() {
|
|
195
|
+
if (cachedMcpVersion === undefined) {
|
|
196
|
+
try {
|
|
197
|
+
cachedMcpVersion = detectInstallMode().currentVersion ?? null;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
cachedMcpVersion = null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return cachedMcpVersion ?? undefined;
|
|
204
|
+
}
|
|
205
|
+
function buildPanelTooOldError(cmd, panelVersion, mcpVersion = mcpServerVersion()) {
|
|
206
|
+
const detected = panelVersion
|
|
207
|
+
? ` (detected panel ${panelVersion}${mcpVersion ? `, mcp ${mcpVersion}` : ""})`
|
|
208
|
+
: mcpVersion
|
|
209
|
+
? ` (detected mcp ${mcpVersion})`
|
|
210
|
+
: "";
|
|
183
211
|
const min = BRIDGE_CMD_MIN_PANEL_VERSION[cmd];
|
|
184
212
|
const e = new Error(min
|
|
185
213
|
? `This ComfyUI-MCP panel is too old for "${cmd}"${detected} — update the ComfyUI-MCP panel ` +
|
|
@@ -238,7 +266,7 @@ const UNKNOWN_COMMAND_RE = /^unknown command\s*["“']?([\w.-]+)["”']?/i;
|
|
|
238
266
|
export function isUnknownCommandReply(error) {
|
|
239
267
|
return UNKNOWN_COMMAND_RE.test(String(error ?? "").trim());
|
|
240
268
|
}
|
|
241
|
-
export function makeUnknownCommandError(error, panelVersion) {
|
|
269
|
+
export function makeUnknownCommandError(error, panelVersion, mcpVersion) {
|
|
242
270
|
// Match the panel's exact shape: `Unknown command "graph_query"` (quotes
|
|
243
271
|
// optional/variable). ANCHORED at the start of the (trimmed) message so an
|
|
244
272
|
// unrelated error that merely QUOTES an unknown-command phrase somewhere in its
|
|
@@ -256,7 +284,7 @@ export function makeUnknownCommandError(error, panelVersion) {
|
|
|
256
284
|
// Return null so the raw error surfaces and the gate is never poisoned.
|
|
257
285
|
if (panelSupportsCmd(cmd, panelVersion))
|
|
258
286
|
return null;
|
|
259
|
-
return buildPanelTooOldError(cmd, panelVersion);
|
|
287
|
+
return buildPanelTooOldError(cmd, panelVersion, mcpVersion);
|
|
260
288
|
}
|
|
261
289
|
/**
|
|
262
290
|
* Bridge commands with NO side effect — safe to re-dispatch after a reconnect and
|