feat(scanner): complete localized artifact quality checkpoint

This commit is contained in:
AzuTear
2026-07-11 15:59:19 +02:00
parent 639b0b7f59
commit 8b9f948c6b
215 changed files with 35440 additions and 7273 deletions
+10 -2
View File
@@ -13,7 +13,9 @@ import type {
NativeScannerDataStatus,
NativeScannerImageLoadStatus,
NativeScannerPreflightStatus,
NativeScannerProcessOptions,
NativeScannerProcessStatus,
NativeScannerResultsLoadOptions,
NativeScannerResultsLoadStatus,
NativeScannerRunStatus,
ScannerCommand,
@@ -37,8 +39,8 @@ interface DevControlServerDependencies {
nativeScannerStart: (options?: { limit?: number; category?: string }) => Promise<NativeScannerRunStatus>;
nativeScannerStop: () => Promise<NativeScannerRunStatus>;
nativeScannerStatus: () => Promise<NativeScannerRunStatus>;
nativeScannerProcessRun: (options?: { runDir?: string; persist?: boolean; limit?: number }) => Promise<NativeScannerProcessStatus>;
nativeScannerLoadResults: (options?: { runDir?: string; limit?: number }) => Promise<NativeScannerResultsLoadStatus>;
nativeScannerProcessRun: (options?: NativeScannerProcessOptions) => Promise<NativeScannerProcessStatus>;
nativeScannerLoadResults: (options?: NativeScannerResultsLoadOptions) => Promise<NativeScannerResultsLoadStatus>;
nativeScannerLoadImage: (options: { runDir?: string; imagePath: string }) => Promise<NativeScannerImageLoadStatus>;
warmOcr: (engine: "current") => Promise<unknown>;
loadReviewSamples: (limit?: number) => Promise<ReviewSampleListResult>;
@@ -235,11 +237,15 @@ export function createDevControlServer(deps: DevControlServerDependencies): Serv
if (url.pathname === "/scanner/native/process") {
const runDir = url.searchParams.get("runDir") ?? undefined;
const persist = url.searchParams.get("persist") === "1";
const stream = url.searchParams.get("stream") === "1";
const limit = Number(url.searchParams.get("limit") ?? Number.NaN);
const expectedTotal = Number(url.searchParams.get("expectedTotal") ?? Number.NaN);
deps.nativeScannerProcessRun({
runDir,
persist,
stream,
limit: Number.isFinite(limit) && limit > 0 ? limit : undefined,
expectedTotal: Number.isFinite(expectedTotal) && expectedTotal > 0 ? expectedTotal : undefined,
})
.then((status) => writeDevJson(res, status.ok ? 200 : 409, { ok: status.ok, status }))
.catch((error: unknown) => writeDevJson(res, 500, { ok: false, error: error instanceof Error ? error.message : String(error) }));
@@ -248,9 +254,11 @@ export function createDevControlServer(deps: DevControlServerDependencies): Serv
if (url.pathname === "/scanner/native/results") {
const runDir = url.searchParams.get("runDir") ?? undefined;
const limit = Number(url.searchParams.get("limit") ?? Number.NaN);
const afterSequence = Number(url.searchParams.get("afterSequence") ?? Number.NaN);
deps.nativeScannerLoadResults({
runDir,
limit: Number.isFinite(limit) && limit > 0 ? limit : undefined,
afterSequence: Number.isFinite(afterSequence) && afterSequence >= 0 ? afterSequence : undefined,
})
.then((status) => writeDevJson(res, status.ok ? 200 : 409, { ok: status.ok, status }))
.catch((error: unknown) => writeDevJson(res, 500, { ok: false, error: error instanceof Error ? error.message : String(error) }));