From 1155a81c3ba9708795fd4ba1db4e632e21179c18 Mon Sep 17 00:00:00 2001 From: suyx Date: Wed, 5 Aug 2026 11:24:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(POSTV1-01):=20=E6=8E=A5=E5=85=A5Worker?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1=E6=B6=88=E8=B4=B9=E9=93=BE?= =?UTF-8?q?=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/worker/src/worker.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/worker/src/worker.ts b/apps/worker/src/worker.ts index 9bc3ff2..29eada9 100644 --- a/apps/worker/src/worker.ts +++ b/apps/worker/src/worker.ts @@ -2,6 +2,8 @@ import { parentPort } from "node:worker_threads"; import { join } from "node:path"; import { WorkerAiCallGate } from "./ai-call-gate.js"; +import { MockGenerationAdapter } from "./ai-adapter-contract.js"; +import { GenerationProcessor } from "./generation-processor.js"; import { readConfiguredLocalDataRoot } from "./runtime-config.js"; import { RetentionCleanup } from "./retention-cleanup.js"; import { ProjectPurgeCleanup } from "./project-purge-cleanup.js"; @@ -31,11 +33,15 @@ if (!workerPort && process.argv.includes("--dada-credential-stdin")) { let retention: RetentionCleanup | undefined; let projectCleanup: ProjectPurgeCleanup | undefined; let retentionTimer: ReturnType | undefined; + let processor: GenerationProcessor | undefined; + let generationTimer: ReturnType | undefined; const control = attachWorkerSupervisorControl(controlPipe, () => { clearInterval(keepAlive); if (retentionTimer) clearInterval(retentionTimer); retention?.close(); projectCleanup?.close(); + if (generationTimer) clearInterval(generationTimer); + processor?.close(); storage?.close(); }); let storageStatus: "active" | "unavailable" = "active"; @@ -45,6 +51,15 @@ if (!workerPort && process.argv.includes("--dada-credential-stdin")) { storage = new WorkerStorageStatus(databasePath); retention = new RetentionCleanup({ databasePath }); projectCleanup = new ProjectPurgeCleanup({ dataRoot, databasePath }); + processor = new GenerationProcessor({ + adapter: new MockGenerationAdapter({ + status: "completed", + outputs: [{ bytes: Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=", "base64"), mimeType: "image/png", pixelWidth: 1080, pixelHeight: 1440 }], + }), + dataRoot, + databasePath, + workerId: `portable-mock-worker-${process.pid}`, + }); const runRetentionCleanup = () => { try { retention?.purgeExpired(); @@ -71,6 +86,7 @@ if (!workerPort && process.argv.includes("--dada-credential-stdin")) { }); logger.write({ error_category: "none", status_category: "ready" }); new WorkerAiCallGate({ getStorageStatus: () => storageStatus === "unavailable" ? storageStatus : (storage?.getStatus() ?? "unavailable"), logger }); + generationTimer = setInterval(() => { void processor?.processNext().catch(() => undefined); }, 250); } catch { storageStatus = "unavailable"; control.reportStatus("storage_unavailable");