feat(scanner): add native artifact pipeline

Add native IK-style capture processing, Artifact Inventory, explicit promotion and single-result review. Confirm the three live OCR corrections in the eval corpus and preserve extraction/value separation.
This commit is contained in:
AzuTear
2026-07-09 23:30:42 +02:00
parent 28d60eb915
commit 639b0b7f59
92 changed files with 13606 additions and 1703 deletions
+33
View File
@@ -19,6 +19,17 @@ import type {
SaveSnapshotResult,
GoodDatabase,
GoodImportFileResult,
NativeScannerCatalogStatus,
NativeScannerDataStatus,
NativeScannerImageLoadStatus,
NativeScannerPreflightStatus,
NativeScannerProcessStatus,
NativeScannerPromotionStatus,
NativeScannerReviewArtifactInput,
NativeScannerReviewStatus,
NativeScannerResultsLoadStatus,
NativeScannerRunStatus,
NativeScannerStartCategory,
ScannerStatusPayload,
} from "../../src/types/global.js";
import type {
@@ -33,6 +44,17 @@ interface AppHandlersDependencies {
moveMainWindowOffGenshin: () => Promise<void>;
focusGenshinForScanStart: () => Promise<FocusGenshinResult>;
publishScannerStatus: (status: ScannerStatusPayload) => Promise<BooleanResult>;
nativeScannerDataStatus: () => Promise<NativeScannerDataStatus>;
nativeScannerCatalog: () => Promise<NativeScannerCatalogStatus>;
nativeScannerPreflight: (options?: { category?: NativeScannerStartCategory | string }) => Promise<NativeScannerPreflightStatus>;
nativeScannerStart: (options?: { limit?: number; category?: NativeScannerStartCategory }) => 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>;
nativeScannerPromoteResults: (options: { runDir?: string; resultIds: string[] }) => Promise<NativeScannerPromotionStatus>;
nativeScannerReviewResult: (options: { runDir?: string; resultId: string; action: "approve" | "reject"; artifact?: NativeScannerReviewArtifactInput; note?: string }) => Promise<NativeScannerReviewStatus>;
nativeScannerLoadImage: (options: { runDir?: string; imagePath: string }) => Promise<NativeScannerImageLoadStatus>;
readRuntimeInfo: () => Promise<RuntimeInfo>;
loadSnapshotFromDisk: () => Promise<AppSnapshot | null>;
saveSnapshotToDisk: (snapshot: AppSnapshot) => Promise<SaveSnapshotResult>;
@@ -73,6 +95,17 @@ export function registerIpcHandlers(dependencies: IpcBootstrapDependencies) {
moveMainWindowOffGenshin: dependencies.moveMainWindowOffGenshin,
focusGenshinForScanStart: dependencies.focusGenshinForScanStart,
publishScannerStatus: dependencies.publishScannerStatus,
nativeScannerDataStatus: dependencies.nativeScannerDataStatus,
nativeScannerCatalog: dependencies.nativeScannerCatalog,
nativeScannerPreflight: dependencies.nativeScannerPreflight,
nativeScannerStart: dependencies.nativeScannerStart,
nativeScannerStop: dependencies.nativeScannerStop,
nativeScannerStatus: dependencies.nativeScannerStatus,
nativeScannerProcessRun: dependencies.nativeScannerProcessRun,
nativeScannerLoadResults: dependencies.nativeScannerLoadResults,
nativeScannerPromoteResults: dependencies.nativeScannerPromoteResults,
nativeScannerReviewResult: dependencies.nativeScannerReviewResult,
nativeScannerLoadImage: dependencies.nativeScannerLoadImage,
getRuntimeInfo: dependencies.readRuntimeInfo,
loadSnapshot: dependencies.loadSnapshotFromDisk,
saveSnapshot: dependencies.saveSnapshotToDisk,