comfyui-mcp 0.49.2 → 0.49.4
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/agent-backend.js +8 -0
- package/dist/orchestrator/agent-backend.js.map +1 -1
- package/dist/orchestrator/codex-backend.js +49 -0
- package/dist/orchestrator/codex-backend.js.map +1 -1
- package/dist/orchestrator/grok-backend.js +5 -0
- package/dist/orchestrator/grok-backend.js.map +1 -1
- package/dist/orchestrator/index.js +317 -22
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/ollama-backend.js +11 -2
- package/dist/orchestrator/ollama-backend.js.map +1 -1
- package/dist/orchestrator/panel-agent.js +591 -67
- package/dist/orchestrator/panel-agent.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +518 -65
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/orchestrator/run-completion-journal.js +914 -0
- package/dist/orchestrator/run-completion-journal.js.map +1 -0
- package/dist/orchestrator/session-store.js +11 -3
- package/dist/orchestrator/session-store.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/download-jobs.js +178 -14
- package/dist/services/download-jobs.js.map +1 -1
- package/dist/services/download-progress.js +16 -18
- package/dist/services/download-progress.js.map +1 -1
- package/dist/services/extra-paths.js +61 -9
- package/dist/services/extra-paths.js.map +1 -1
- package/dist/services/hello-retarget.js +165 -0
- package/dist/services/hello-retarget.js.map +1 -0
- 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/manifest.js +92 -9
- package/dist/services/manifest.js.map +1 -1
- package/dist/services/model-resolver.js +616 -17
- package/dist/services/model-resolver.js.map +1 -1
- package/dist/services/output-dir.js +63 -15
- package/dist/services/output-dir.js.map +1 -1
- package/dist/services/panel-pin-guard.js +6 -62
- package/dist/services/panel-pin-guard.js.map +1 -1
- package/dist/services/ui-bridge.js +111 -14
- package/dist/services/ui-bridge.js.map +1 -1
- package/dist/services/workspace-env.js +179 -3
- package/dist/services/workspace-env.js.map +1 -1
- package/dist/tools/assets.js +34 -2
- package/dist/tools/assets.js.map +1 -1
- package/dist/tools/extra-paths.js +6 -4
- package/dist/tools/extra-paths.js.map +1 -1
- package/dist/tools/model-extras.js +26 -7
- package/dist/tools/model-extras.js.map +1 -1
- package/dist/tools/model-management.js +36 -8
- package/dist/tools/model-management.js.map +1 -1
- package/dist/tools/report-issue.js +12 -2
- package/dist/tools/report-issue.js.map +1 -1
- package/dist/tools/vocabulary.js +21 -0
- package/dist/tools/vocabulary.js.map +1 -1
- package/package.json +1 -1
- package/scripts/gen-tool-docs.ts +138 -4
- package/scripts/tool-doc-examples.ts +794 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-completion-journal.js","sourceRoot":"","sources":["../../src/orchestrator/run-completion-journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,12 +104,20 @@ export function carryWorkflowCommandStamp(stamps, migratedFrom, identity) {
|
|
|
104
104
|
/** #570 — does the DESTINATION of a tab-id migration already hold state for a backend, so the
|
|
105
105
|
* incoming tab would inherit/leak it? Covers EVERY kind of per-backend state that must be reset
|
|
106
106
|
* before the source is rebound in: manager live/pending/held (`hasManagerState`), a dormant
|
|
107
|
-
* durable session (`hasDurableSession`),
|
|
107
|
+
* durable session (`hasDurableSession`), a RENDER-HELD queue (`renderHeldCount` — the
|
|
108
108
|
* orchestrator-level heldDuringGen, which manager.reset does NOT clear and which the source-held
|
|
109
109
|
* re-key would otherwise APPEND to, flushing the superseded tab's queued message into the incoming
|
|
110
|
-
* tab on render completion)
|
|
110
|
+
* tab on render completion), OR a JOURNALED RUN COMPLETION (`journaledCompletionCount`, #468 — a
|
|
111
|
+
* tab whose agent and session were already cleared (New chat) can still hold an undelivered
|
|
112
|
+
* completion; without this it reads as UNOCCUPIED, the incoming source is rebound onto its id, and
|
|
113
|
+
* the next flush delivers the DESTINATION tab's render into the SOURCE tab's conversation. A tab
|
|
114
|
+
* holding a journal entry is not empty). Any of these ⇒ collision ⇒ reset + clear the
|
|
115
|
+
* destination's held state. */
|
|
111
116
|
export function destinationHasCollisionState(opts) {
|
|
112
|
-
return opts.hasManagerState ||
|
|
117
|
+
return (opts.hasManagerState ||
|
|
118
|
+
opts.hasDurableSession ||
|
|
119
|
+
opts.renderHeldCount > 0 ||
|
|
120
|
+
(opts.journaledCompletionCount ?? 0) > 0);
|
|
113
121
|
}
|
|
114
122
|
/** #570 — does a connected SIBLING tab own the session behind a candidate stable key? A stable key
|
|
115
123
|
* encodes (workflow identity, backend), so a sibling owns it when its identity derives to the SAME
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/orchestrator/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA6D5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,gBAAgB,GAAG,iEAAiE,CAAC;AAE3F;;;;;;sFAMsF;AACtF,MAAM,UAAU,qBAAqB,CAAC,IAGrC;IACC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,MAAM,GACV,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,uDAAuD;IACjF,OAAO,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;AACzD,CAAC;AAED;;;4EAG4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,IAGtC;IACC,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;;oDAkBoD;AACpD,MAAM,UAAU,yBAAyB,CACvC,MAA2B,EAC3B,YAAoB,EACpB,QAA0B;IAE1B,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/orchestrator/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
|
@@ -16,18 +16,17 @@
|
|
|
16
16
|
import { createHash } from "node:crypto";
|
|
17
17
|
import { realpath } from "node:fs/promises";
|
|
18
18
|
import { basename, dirname, join } from "node:path";
|
|
19
|
-
import { downloadModel, resolveDownloadTarget, shouldDispatchDownloadToManager, } from "./model-resolver.js";
|
|
19
|
+
import { downloadModel, liveListingHasEntry, resolveDownloadTarget, shouldDispatchDownloadToManager, verifyLandedModel, } from "./model-resolver.js";
|
|
20
20
|
import { ModelError } from "../utils/errors.js";
|
|
21
21
|
import { persistDownloadJob, readPersistedDownloadJob, listPersistedDownloadJobs, findPersistedDownloadJob, clearDownloadProgress, persistedRecordsEnabled, PERSIST_OWNER, PERSISTED_INFLIGHT_STALE_MS, } from "./download-progress.js";
|
|
22
22
|
import { logger } from "../utils/logger.js";
|
|
23
23
|
/** How often an in-flight job re-persists its record (liveness heartbeat). Must stay
|
|
24
24
|
* comfortably below PERSISTED_INFLIGHT_STALE_MS so a live download is always fresh. */
|
|
25
25
|
const HEARTBEAT_MS = 15_000;
|
|
26
|
-
/** Cap on heartbeat retries of a transiently-failing TERMINAL persist.
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* progress store from keeping a COMPLETED job's interval doing filesystem work forever. */
|
|
26
|
+
/** Cap on heartbeat retries of a transiently-failing TERMINAL persist. Once this
|
|
27
|
+
* bounded retry window ends the completed job stops touching the filesystem; its
|
|
28
|
+
* last in-flight snapshot remains non-adoptable after the freshness window and is
|
|
29
|
+
* reaped only by the long persisted-record retention bound (#761). */
|
|
31
30
|
const TERMINAL_PERSIST_MAX_ATTEMPTS = 6; // 6 × 15s = 90s > 60s stale window
|
|
32
31
|
// The in-flight registry is indexed under MULTIPLE keys per job so dedup is
|
|
33
32
|
// ROUTE-INDEPENDENT: a repeated request finds the in-flight job whether or not the
|
|
@@ -247,8 +246,18 @@ onComplete) {
|
|
|
247
246
|
// too (the local callback race is inherently local, but this keeps the server
|
|
248
247
|
// write single-writer and the last-started result deterministic).
|
|
249
248
|
let serializeKey;
|
|
249
|
+
/** Did the live server ALREADY list this exact entry before we started? Captured
|
|
250
|
+
* HERE, before any bytes are written, so the post-landing check can tell "the
|
|
251
|
+
* server sees it BECAUSE we wrote it" from "it already knew that name" (#369). */
|
|
252
|
+
let listedBefore;
|
|
250
253
|
if (!dispatchToManager) {
|
|
251
254
|
const target = await resolveDownloadTarget(url, targetSubfolder, filename);
|
|
255
|
+
try {
|
|
256
|
+
listedBefore = await liveListingHasEntry(targetSubfolder, target.filename);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
listedBefore = undefined; // unknowable → the check stays conservative
|
|
260
|
+
}
|
|
252
261
|
// Fold auth into the destination key too (#467 P1-A): two concurrent calls to
|
|
253
262
|
// the SAME on-disk destination with DIFFERENT auth are DIFFERENT downloads
|
|
254
263
|
// (different representations) and must NOT dedup to one writer/one job.
|
|
@@ -393,6 +402,13 @@ onComplete) {
|
|
|
393
402
|
job.path = landedPath;
|
|
394
403
|
job.status = "done";
|
|
395
404
|
job.finished_at = Date.now();
|
|
405
|
+
// A LOCAL landing is not yet a verified placement. Mark it PENDING in the SAME
|
|
406
|
+
// synchronous step that publishes "done" (and in the same persisted record), so
|
|
407
|
+
// no reader — this session's tool call inside its grace window, or another
|
|
408
|
+
// session reading the record — can ever see a completed local download with no
|
|
409
|
+
// verification field and render it as confirmed success (#369, codex gate).
|
|
410
|
+
if (!dispatchToManager)
|
|
411
|
+
job.live_visible = "pending";
|
|
396
412
|
persistJobRecord(job);
|
|
397
413
|
};
|
|
398
414
|
const settled = (async () => {
|
|
@@ -426,6 +442,36 @@ onComplete) {
|
|
|
426
442
|
// dispatch has no local rename, so commit done here when it returns (dispatch
|
|
427
443
|
// accepted — the viaManager flag marks it as unverified in the tools). Idempotent.
|
|
428
444
|
commitDone(path);
|
|
445
|
+
// VERIFY, don't assume (#369). A LOCAL download is reported with the path we
|
|
446
|
+
// confirmed on disk, plus whether the connected ComfyUI actually reads from
|
|
447
|
+
// there. This runs INSIDE `settled`, so a small download that finishes within
|
|
448
|
+
// download_model's grace window is already verified when the tool answers.
|
|
449
|
+
// Never allowed to demote a completed download: verifyLandedModel never throws
|
|
450
|
+
// and the catch below keeps `done`.
|
|
451
|
+
if (!dispatchToManager && job.status === "done") {
|
|
452
|
+
try {
|
|
453
|
+
const verdict = await verifyLandedModel(path, targetSubfolder, { listedBefore });
|
|
454
|
+
if (verdict.verifiedPath)
|
|
455
|
+
job.path = verdict.verifiedPath;
|
|
456
|
+
job.verified_root = verdict.verifiedAgainstRoot;
|
|
457
|
+
// No verifiedPath means the on-disk stat did NOT succeed — the file was
|
|
458
|
+
// removed or became unreadable between the rename and this check. Record
|
|
459
|
+
// that so no renderer claims "verified on disk" for the retained path.
|
|
460
|
+
job.disk_verified = !!verdict.verifiedPath;
|
|
461
|
+
job.live_visible = verdict.liveVisible;
|
|
462
|
+
job.verify_note = verdict.note;
|
|
463
|
+
}
|
|
464
|
+
catch (err) {
|
|
465
|
+
// Verification is a REPORT, never a gate: the bytes are on disk either
|
|
466
|
+
// way. Record that we could not confirm placement and carry on to the
|
|
467
|
+
// post-download hook — swallowing this must not skip onComplete. The
|
|
468
|
+
// on-disk check did not complete either, so nothing may claim it did.
|
|
469
|
+
job.disk_verified = false;
|
|
470
|
+
job.live_visible = "unknown";
|
|
471
|
+
job.verify_note = `Placement could not be verified: ${err instanceof Error ? err.message : String(err)}`;
|
|
472
|
+
}
|
|
473
|
+
persistJobRecord(job);
|
|
474
|
+
}
|
|
429
475
|
if (onComplete) {
|
|
430
476
|
// Post-processing must not turn a landed file into a failed download —
|
|
431
477
|
// the bytes are on disk either way, and reporting "error" here would
|
|
@@ -471,8 +517,9 @@ onComplete) {
|
|
|
471
517
|
// outcome (#529) instead of a forever-"downloading" record. If this atomic
|
|
472
518
|
// replace transiently fails (rare), the heartbeat below KEEPS retrying until the
|
|
473
519
|
// terminal state is durable — so a done/cancelled job can't linger as a
|
|
474
|
-
// fresh-and-adoptable "downloading" record
|
|
475
|
-
//
|
|
520
|
+
// fresh-and-adoptable "downloading" record. The freshness window excludes it from
|
|
521
|
+
// adoption immediately; long retention later bounds the persisted record. Only once
|
|
522
|
+
// the terminal record is durable does the heartbeat stop.
|
|
476
523
|
if (persistJobRecord(job) && heartbeat)
|
|
477
524
|
clearInterval(heartbeat);
|
|
478
525
|
}
|
|
@@ -512,8 +559,8 @@ onComplete) {
|
|
|
512
559
|
const durable = persistJobRecord(job);
|
|
513
560
|
if (job.status !== "downloading") {
|
|
514
561
|
// Stop the interval once the terminal state is durable, OR the retry budget is
|
|
515
|
-
// spent (
|
|
516
|
-
//
|
|
562
|
+
// spent (after which the snapshot is non-adoptable), OR persistence went inactive
|
|
563
|
+
// — never let a completed job's interval do filesystem work forever.
|
|
517
564
|
if ((durable ||
|
|
518
565
|
++terminalPersistAttempts >= TERMINAL_PERSIST_MAX_ATTEMPTS ||
|
|
519
566
|
!persistedRecordsEnabled()) &&
|
|
@@ -591,6 +638,10 @@ function persistJobRecord(job) {
|
|
|
591
638
|
req_key: job.reqKey,
|
|
592
639
|
via_manager: job.viaManager,
|
|
593
640
|
resume: job.resume,
|
|
641
|
+
live_visible: job.live_visible,
|
|
642
|
+
verify_note: job.verify_note,
|
|
643
|
+
disk_verified: job.disk_verified,
|
|
644
|
+
verified_root: job.verified_root,
|
|
594
645
|
});
|
|
595
646
|
}
|
|
596
647
|
/** Rebuild an in-memory DownloadJob view from a persisted record (#529 adoption
|
|
@@ -615,13 +666,19 @@ function jobFromPersisted(rec) {
|
|
|
615
666
|
reqKey: rec.req_key,
|
|
616
667
|
viaManager: rec.via_manager,
|
|
617
668
|
resume: rec.resume,
|
|
669
|
+
live_visible: rec.live_visible,
|
|
670
|
+
verify_note: rec.verify_note,
|
|
671
|
+
disk_verified: rec.disk_verified,
|
|
672
|
+
verified_root: rec.verified_root,
|
|
673
|
+
staleInflight: rec.staleInflight,
|
|
674
|
+
staleForMs: rec.staleForMs,
|
|
618
675
|
};
|
|
619
676
|
}
|
|
620
677
|
/** True when a FRESH foreign in-flight persisted record shares `id` but carries a
|
|
621
678
|
* DIFFERENT trayId — a distinct concurrent physical download in ANOTHER session (two
|
|
622
679
|
* distinct URLs resolving to the same dest+auth). The id alone can't disambiguate, so
|
|
623
680
|
* a by-id lookup/cancel must decline rather than silently act on the local one.
|
|
624
|
-
* Excludes this process's own records (same owner) and stale
|
|
681
|
+
* Excludes this process's own records (same owner) and heartbeat-stale ones. */
|
|
625
682
|
function hasAmbiguousForeignSibling(id, localTrayId) {
|
|
626
683
|
const now = Date.now();
|
|
627
684
|
return listPersistedDownloadJobs().some((rec) => rec.id === id &&
|
|
@@ -630,6 +687,113 @@ function hasAmbiguousForeignSibling(id, localTrayId) {
|
|
|
630
687
|
rec.status === "downloading" &&
|
|
631
688
|
now - (rec.updated ?? 0) < PERSISTED_INFLIGHT_STALE_MS);
|
|
632
689
|
}
|
|
690
|
+
/** " (verified on disk)" only when the post-landing stat actually succeeded. A job
|
|
691
|
+
* whose file vanished between the rename and the check keeps its path but must not
|
|
692
|
+
* carry a disk-verification claim (codex gate, round 9). */
|
|
693
|
+
/** Do two absolute root paths name the same directory? Windows paths are
|
|
694
|
+
* case-insensitive and mix separators, so `C:\ComfyUI\models` and
|
|
695
|
+
* `c:/comfyui/models` are the SAME install — comparing them raw produced a false
|
|
696
|
+
* "a DIFFERENT install" downgrade of a correct verdict (codex gate, round 17). */
|
|
697
|
+
function sameRoot(a, b) {
|
|
698
|
+
if (!a || !b)
|
|
699
|
+
return false;
|
|
700
|
+
const norm = (s) => {
|
|
701
|
+
const slashed = s.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
702
|
+
return process.platform === "win32" ? slashed.toLowerCase() : slashed;
|
|
703
|
+
};
|
|
704
|
+
return norm(a) === norm(b);
|
|
705
|
+
}
|
|
706
|
+
function diskQualifier(job) {
|
|
707
|
+
return job.disk_verified === false ? " (NOT found on disk when checked)" : " (verified on disk)";
|
|
708
|
+
}
|
|
709
|
+
export function describePlacement(job,
|
|
710
|
+
/** The models root the CONNECTED server reads right now (currentLiveModelsRoot()).
|
|
711
|
+
* A stored `visible` verdict may ONLY be re-asserted when this is present and
|
|
712
|
+
* names the same root the verdict was made against — see below. */
|
|
713
|
+
ctx) {
|
|
714
|
+
if (!job.viaManager &&
|
|
715
|
+
job.live_visible === "visible" &&
|
|
716
|
+
!sameRoot(ctx?.liveModelsDir, job.verified_root)) {
|
|
717
|
+
// A CONFIRMED rendering requires the READER to have re-established the verdict,
|
|
718
|
+
// so every way of failing to do that lands here (codex gate, rounds 11, 16, 18):
|
|
719
|
+
// - the verdict names a DIFFERENT root than the server now reads;
|
|
720
|
+
// - the verdict carries NO root (made against a destination only local
|
|
721
|
+
// configuration could vouch for);
|
|
722
|
+
// - and — the inversion this closes — there is NO current observation at all,
|
|
723
|
+
// because the probe transiently failed or resolved non-authoritatively.
|
|
724
|
+
// That last case previously fell through to "confirmed", reading a MISSING
|
|
725
|
+
// observation as "no contradiction". It is not: nothing verified that the server
|
|
726
|
+
// answering NOW can read this file. Absence of evidence renders as unverified.
|
|
727
|
+
return {
|
|
728
|
+
confirmed: false,
|
|
729
|
+
wrongPlace: false,
|
|
730
|
+
pathLabel: "written to",
|
|
731
|
+
pathQualifier: diskQualifier(job),
|
|
732
|
+
warning: !ctx?.liveModelsDir
|
|
733
|
+
? "this download was confirmed earlier, but the connected ComfyUI could not be asked " +
|
|
734
|
+
"just now which models directory it reads, so that confirmation cannot be re-established " +
|
|
735
|
+
"for the server you are connected to. Re-check with download_status, or confirm with " +
|
|
736
|
+
"list_local_models."
|
|
737
|
+
: job.verified_root
|
|
738
|
+
? `this download was verified against a ComfyUI reading "${job.verified_root}", but the ` +
|
|
739
|
+
`connected server now reads "${ctx.liveModelsDir}" — a DIFFERENT install. The earlier ` +
|
|
740
|
+
"confirmation does not apply to it; check list_local_models against the server you are " +
|
|
741
|
+
"connected to now."
|
|
742
|
+
: "this download's placement was confirmed against a models directory that could only be " +
|
|
743
|
+
`inferred from local configuration, and the connected server now reports "${ctx.liveModelsDir}" ` +
|
|
744
|
+
"as the directory it reads. The earlier confirmation cannot be re-asserted for it; " +
|
|
745
|
+
"check list_local_models against the server you are connected to now.",
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
if (job.viaManager) {
|
|
749
|
+
return {
|
|
750
|
+
confirmed: false,
|
|
751
|
+
wrongPlace: false,
|
|
752
|
+
pathLabel: "requested destination",
|
|
753
|
+
pathQualifier: "",
|
|
754
|
+
warning: "the dispatch was ACCEPTED, NOT verified as landed — ComfyUI-Manager reports its queue " +
|
|
755
|
+
"task 'done' even on failure, so this does not guarantee the file is present. Confirm " +
|
|
756
|
+
"with list_local_models before relying on it.",
|
|
757
|
+
};
|
|
758
|
+
}
|
|
759
|
+
switch (job.live_visible) {
|
|
760
|
+
case "visible":
|
|
761
|
+
return {
|
|
762
|
+
confirmed: true,
|
|
763
|
+
wrongPlace: false,
|
|
764
|
+
pathLabel: "landed at",
|
|
765
|
+
pathQualifier: " (verified on disk, and the connected ComfyUI lists it)",
|
|
766
|
+
};
|
|
767
|
+
case "not-visible":
|
|
768
|
+
return {
|
|
769
|
+
confirmed: false,
|
|
770
|
+
wrongPlace: true,
|
|
771
|
+
pathLabel: "written to",
|
|
772
|
+
pathQualifier: diskQualifier(job),
|
|
773
|
+
warning: `NOT VISIBLE to the connected ComfyUI — ${job.verify_note ?? "the running server does not list this file."}`,
|
|
774
|
+
};
|
|
775
|
+
case "unknown":
|
|
776
|
+
return {
|
|
777
|
+
confirmed: false,
|
|
778
|
+
wrongPlace: false,
|
|
779
|
+
pathLabel: "written to",
|
|
780
|
+
pathQualifier: diskQualifier(job),
|
|
781
|
+
warning: `visibility to the connected ComfyUI is UNCONFIRMED${job.verify_note ? ` — ${job.verify_note}` : ""}. Check list_local_models before relying on it.`,
|
|
782
|
+
};
|
|
783
|
+
default:
|
|
784
|
+
// "pending" and undefined (pre-fix record) alike: the file landed, the check
|
|
785
|
+
// has not concluded. Never rendered as a confirmed success.
|
|
786
|
+
return {
|
|
787
|
+
confirmed: false,
|
|
788
|
+
wrongPlace: false,
|
|
789
|
+
pathLabel: "written to",
|
|
790
|
+
pathQualifier: "",
|
|
791
|
+
warning: "the file was materialized locally, but placement has NOT been confirmed yet — the " +
|
|
792
|
+
"check against the connected ComfyUI has not completed. Re-check with download_status, " +
|
|
793
|
+
"or confirm with list_local_models.",
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
}
|
|
633
797
|
export function getDownloadJob(id) {
|
|
634
798
|
// The registry indexes each job under its request key and (when local) its
|
|
635
799
|
// destination key; the public id is one of those, so a direct get resolves it.
|
|
@@ -703,9 +867,9 @@ export function findDownloadJob(query) {
|
|
|
703
867
|
}
|
|
704
868
|
}
|
|
705
869
|
for (const rec of listPersistedDownloadJobs()) {
|
|
706
|
-
// Only FRESH in-flight records count as live candidates — a stale
|
|
707
|
-
//
|
|
708
|
-
//
|
|
870
|
+
// Only FRESH in-flight records count as live candidates — a heartbeat-stale record
|
|
871
|
+
// may still stream, but must not inflate the ambiguity count and force a false
|
|
872
|
+
// "no download" (matching the persisted helpers' fresh-in-flight rule).
|
|
709
873
|
if (rec.status !== "downloading" || now - (rec.updated ?? 0) >= PERSISTED_INFLIGHT_STALE_MS) {
|
|
710
874
|
continue;
|
|
711
875
|
}
|