返回 DeepSeek-Reasonix
browserHost.ts
根目录 / desktop / frontend / src / lib / browserHost.ts
1 // Renderer view of the shell's browser surface manager. Mirrors the
2 // `window.reasonixDesktop.browser` preload API (docs/DESKTOP_BROWSER.md).
3 export type BrowserTabMode = "agent" | "human";
4
5 export interface BrowserTabView {
6 restorePreview?: boolean;
7 sessionId?: string;
8 id: string;
9 taskId: string;
10 url: string;
11 title: string;
12 loading: boolean;
13 canGoBack: boolean;
14 canGoForward: boolean;
15 temporary: boolean;
16 mode: BrowserTabMode;
17 epoch: number;
18 zoom: number;
19 viewport?: { width: number; height: number; scale: "fit" | number } | null;
20 operation?: { id: string; phase: string; message?: string };
21 error: { code: number; description: string } | null;
22 }
23
24 export type BrowserDownloadState = "progressing" | "completed" | "cancelled" | "interrupted";
25
26 export interface BrowserDownloadView {
27 id: string;
28 tabId: string;
29 url: string;
30 filename: string;
31 path: string;
32 state: BrowserDownloadState;
33 received: number;
34 total: number;
35 }
36
37 export interface BrowserLayoutRect {
38 x: number;
39 y: number;
40 width: number;
41 height: number;
42 }
43
44 export interface BrowserNavigationTarget {
45 url?: string;
46 action?: "back" | "forward" | "reload" | "stop";
47 }
48
49 export interface DesktopBrowserHost {
50 list(): Promise<BrowserTabView[]>;
51 open(url: string, opts?: { temporary?: boolean; taskId?: string }): Promise<BrowserTabView>;
52 close(tabId: string): Promise<void>;
53 activate(tabId: string | null): Promise<void>;
54 navigate(tabId: string, target: BrowserNavigationTarget): Promise<void>;
55 setZoom(tabId: string, factor: number): Promise<void>;
56 setViewport?(tabId: string, viewport: { width: number; height: number; scale: "fit" | number } | null): Promise<void>;
57 pickElement?(tabId: string): Promise<{ taskId: string; sessionId: string; tabId: string; epoch: number; url: string; time: number; element: unknown } | null>;
58 record?(tabId: string, action: "start" | "status" | "stop" | "cancel"): Promise<{ id: string; state: string; bytes: number; path?: string; error?: string } | null>;
59 diagnostics?(tabId: string): Promise<{ available: boolean; entries?: unknown[] }>;
60 screenshot?(tabId: string): Promise<{ path: string; width: number; height: number }>;
61 restorePreview?(tabId: string): Promise<void>;
62 toggleDevTools(tabId: string): Promise<void>;
63 resume(tabId: string): Promise<void>;
64 takeover(tabId: string): Promise<void>;
65 setLayout(rect: BrowserLayoutRect | null): void;
66 setOverlay(active: boolean): void;
67 onTabs(cb: (tabs: BrowserTabView[]) => void): () => void;
68 onDownload(cb: (download: BrowserDownloadView) => void): () => void;
69 }
70
70 lines TYPESCRIPT