feat: add MCP creator screenshot metrics recognition

This commit is contained in:
巫凤萍
2026-08-19 15:08:17 +08:00
parent 8f7ea0558d
commit ab3a544eec
12 changed files with 342 additions and 36 deletions

View File

@@ -13,6 +13,13 @@ import {
parseResultScreenshotKeys,
serializeResultScreenshotKeys,
} from "../../../lib/result-screenshots";
import { creatorScreenshotMcpUrl } from "../../../lib/creator-screenshot-access";
import {
extractCreatorMetricsFromMcp,
resolveCollectionMcpConfig,
type CollectionMcpBindings,
} from "../../../lib/mcp-collection-client";
import { getRuntimeEnv } from "../../../lib/runtime-env";
async function readUpload(request: Request) {
const contentType = request.headers.get("content-type") ?? "";
@@ -163,13 +170,47 @@ async function handlePost(request: Request) {
screenshot_key = ?,
ocr_status = CASE
WHEN exposure IS NOT NULL AND views IS NOT NULL THEN ocr_status
ELSE 'uploaded'
ELSE 'processing'
END,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?`,
)
.bind(key, upload.distributionId)
.run();
try {
const metrics = await extractCreatorMetricsFromMcp(
creatorScreenshotMcpUrl(request, upload.distributionId, key),
resolveCollectionMcpConfig(
getRuntimeEnv() as unknown as CollectionMcpBindings,
),
);
await getRawDb()
.prepare(
`UPDATE distributions SET exposure = ?, views = ?,
ocr_status = 'success', updated_at = CURRENT_TIMESTAMP
WHERE id = ?`,
)
.bind(metrics.exposure, metrics.views, upload.distributionId)
.run();
return Response.json({
uploaded: true,
exposure: metrics.exposure,
views: metrics.views,
ocrStatus: "success",
kind: "creator-center",
});
} catch (error) {
console.error("[KOC LOOP] creator screenshot OCR failed", {
distributionId: upload.distributionId,
detail: error instanceof Error ? error.message : String(error),
});
await getRawDb()
.prepare(
`UPDATE distributions SET ocr_status = 'failed', updated_at = CURRENT_TIMESTAMP WHERE id = ?`,
)
.bind(upload.distributionId)
.run();
}
} else {
await getRawDb()
.prepare(
@@ -189,6 +230,7 @@ async function handlePost(request: Request) {
: isCreatorCenter
? "creator-center"
: "publish",
ocrStatus: isCreatorCenter ? "failed" : undefined,
});
} catch (error) {
return Response.json(