const { contextBridge, ipcRenderer } = require("electron"); contextBridge.exposeInMainWorld("assistantApi", { loadSnapshot: () => ipcRenderer.invoke("snapshot:load"), saveSnapshot: (snapshot) => ipcRenderer.invoke("snapshot:save", snapshot), runMockScan: () => ipcRenderer.invoke("scan:runMock"), listCaptureSources: () => ipcRenderer.invoke("capture:listSources"), captureSource: (sourceId, delayMs = 0, focusGenshin = false, options) => ipcRenderer.invoke("capture:captureSource", sourceId, delayMs, focusGenshin, options), clickScreen: (x, y) => ipcRenderer.invoke("automation:clickScreen", x, y), scrollScreen: (notches, anchorX, anchorY) => ipcRenderer.invoke("automation:scrollScreen", notches, anchorX, anchorY), keyPress: (key) => ipcRenderer.invoke("automation:keyPress", key), getAutomationGuard: () => ipcRenderer.invoke("automation:getGuard"), focusMainWindow: () => ipcRenderer.invoke("app:focusMainWindow"), focusGenshin: () => ipcRenderer.invoke("automation:focusGenshin"), focusGenshinForScanStart: () => ipcRenderer.invoke("automation:focusGenshin"), getRuntimeInfo: () => ipcRenderer.invoke("app:getRuntimeInfo"), saveReviewSample: (sample) => ipcRenderer.invoke("review:saveSample", sample), loadReviewSamples: (limit = 50) => ipcRenderer.invoke("review:loadSamples", limit), loadScannerLearningRules: () => ipcRenderer.invoke("scanner:loadLearningRules"), saveScannerLearningRules: (rules) => ipcRenderer.invoke("scanner:saveLearningRules", rules), loadArtifacts: () => ipcRenderer.invoke("artifacts:load"), saveArtifacts: (records) => ipcRenderer.invoke("artifacts:saveMany", records), exportGood: (payload) => ipcRenderer.invoke("good:export", payload), importGoodFile: () => ipcRenderer.invoke("good:importFile"), publishScannerStatus: (status) => ipcRenderer.invoke("scanner:publishStatus", status), showOverlay: () => ipcRenderer.invoke("overlay:show"), hideOverlay: () => ipcRenderer.invoke("overlay:hide"), onScannerCommand: (callback) => { const listener = (_event, command) => callback(command); ipcRenderer.on("scanner:command", listener); return () => ipcRenderer.removeListener("scanner:command", listener); }, });