import type { AutomationGuard, CaptureOptions, CaptureResult, CaptureSourceInfo, ClickResult, ArtifactStoreLoadResult, ArtifactStoreRemoveResult, ArtifactStoreSaveResult, ReviewSampleListResult, ReviewSamplePayload, LoadScannerLearningRulesResult, SaveScannerLearningRulesResult, SaveResultWithPath, FocusGenshinResult, RuntimeInfo, BooleanResult, ScrollResult, ScannerStatusPayload, ScannerLearningRulePayload, } from "../../src/types/global.js"; import type { StoredArtifactRecord } from "../../src/types/storage.js"; import type { AppSnapshot } from "../../src/types/domain.js"; export type { ArtifactStoreLoadResult, ArtifactStoreRemoveResult, ArtifactStoreSaveResult, ReviewSampleListResult, ReviewSamplePayload, LoadScannerLearningRulesResult, SaveScannerLearningRulesResult, } from "../../src/types/global.js"; export interface ArtifactStoreRepositoryPort { loadAll(): Promise; loadMap(): Promise>; saveMany(records: StoredArtifactRecord[]): Promise; removeByIds(ids: string[]): Promise; } export interface ReviewSamplesRepositoryPort { list(limit?: number): Promise; append(sample: ReviewSamplePayload): Promise; } export type ScannerLearningRules = ScannerLearningRulePayload; export interface ScannerLearningLoadResult extends LoadScannerLearningRulesResult {} export interface ScannerLearningSaveResult extends SaveScannerLearningRulesResult {} export interface ScannerLearningRepositoryPort { load(): Promise; save(rules: ScannerLearningRules): Promise; } export interface SnapshotRepositoryPort { load(): Promise; save(snapshot: AppSnapshot): Promise; } export interface RuntimeRepositoryPort { focusMainWindow(): Promise; moveMainWindowOffGenshin(): Promise; focusGenshinForScanStart(): Promise; publishScannerStatus(status: ScannerStatusPayload): Promise; getRuntimeInfo(): Promise; showOverlay: () => Promise; hideOverlay: () => Promise; } export interface AutomationRepositoryPort { getAutomationGuard(): Promise; clickScreen(x: number, y: number): Promise; scrollScreen(notches: number, anchorX?: number, anchorY?: number): Promise; } export interface CaptureRepositoryPort { listSources(): Promise; captureSource(sourceId: string, delayMs?: number, focusGenshin?: boolean, options?: CaptureOptions): Promise; }