feat: 内置受管浏览器(CDP + AX 快照 ref 体系)+ 本地浏览器配置导入

This commit is contained in:
Rick Ye
2026-09-07 11:20:51 +08:00
parent 5dd645b745
commit eafbe8c15d
16 changed files with 2490 additions and 37 deletions
+31
View File
@@ -3,6 +3,10 @@ import type {
AgentUiEvent,
AppSettings,
AttachmentInfo,
BrowserImportResult,
BrowserSource,
BrowserUiEvent,
BrowserUiState,
ChatResources,
CustomProviderConfig,
ModelCatalog,
@@ -72,6 +76,33 @@ const api = {
return () => {
ipcRenderer.removeListener('agent:event', listener)
}
},
// ---- 内置受管浏览器 ----
browserGetState: (): Promise<BrowserUiState> => ipcRenderer.invoke('browser:getState'),
browserNavigate: (input: string): Promise<BrowserUiState> => ipcRenderer.invoke('browser:navigate', input),
browserGoBack: (): Promise<BrowserUiState> => ipcRenderer.invoke('browser:goBack'),
browserGoForward: (): Promise<BrowserUiState> => ipcRenderer.invoke('browser:goForward'),
browserReload: (): Promise<BrowserUiState> => ipcRenderer.invoke('browser:reload'),
browserNewTab: (url?: string): Promise<BrowserUiState> => ipcRenderer.invoke('browser:newTab', url),
browserSelectTab: (tabId: string): Promise<BrowserUiState> => ipcRenderer.invoke('browser:selectTab', tabId),
browserCloseTab: (tabId?: string): Promise<BrowserUiState> => ipcRenderer.invoke('browser:closeTab', tabId),
browserClose: (): Promise<BrowserUiState> => ipcRenderer.invoke('browser:close'),
browserAcknowledgeRisk: (): Promise<void> => ipcRenderer.invoke('browser:acknowledgeRisk'),
browserSetLayout: (layout: {
tabId: string
visible: boolean
revision: number
bounds: { x: number; y: number; width: number; height: number }
}): Promise<void> => ipcRenderer.invoke('browser:layout', layout),
browserDetectSources: (): Promise<BrowserSource[]> => ipcRenderer.invoke('browser:detectSources'),
browserImportProfile: (sourceId: string, profileDir: string): Promise<BrowserImportResult> =>
ipcRenderer.invoke('browser:importProfile', sourceId, profileDir),
onBrowserEvent: (callback: (event: BrowserUiEvent) => void): (() => void) => {
const listener = (_e: Electron.IpcRendererEvent, event: BrowserUiEvent): void => callback(event)
ipcRenderer.on('browser:event', listener)
return () => {
ipcRenderer.removeListener('browser:event', listener)
}
}
}