@@ -29,13 +29,25 @@ import {
2929 DESKTOP_WINDOW_CLOSE_CURRENT_CHANNEL ,
3030 DESKTOP_WORKSPACE_TOOL_CONTEXT_SET_CHANNEL ,
3131 DESKTOP_WORKSPACE_TOOL_DIALOG_OPEN_CHANNEL ,
32+ DESKTOP_WORKSPACE_TOOL_SURFACE_CHANGED_CHANNEL ,
33+ DESKTOP_WORKSPACE_TOOL_SURFACE_CONTEXT_SET_CHANNEL ,
34+ DESKTOP_WORKSPACE_TOOL_SURFACE_FOCUS_CHANNEL ,
35+ DESKTOP_WORKSPACE_TOOL_SURFACE_GET_CHANNEL ,
36+ DESKTOP_WORKSPACE_TOOL_SURFACE_HOST_SET_CHANNEL ,
37+ DESKTOP_WORKSPACE_TOOL_SURFACE_SNAPSHOT_SET_CHANNEL ,
3238 DESKTOP_WORKSPACE_TOOL_INSTANCE_CLOSE_CHANNEL ,
3339 DESKTOP_WORKSPACE_TOOL_INSTANCE_REGISTER_CHANNEL ,
3440 DESKTOP_WORKSPACE_TOOL_INSTANCE_UPDATED_CHANNEL ,
3541 DESKTOP_WORKSPACE_TOOL_WINDOW_GET_CHANNEL ,
3642 DESKTOP_WORKSPACE_TOOL_WINDOW_CLOSED_CHANNEL ,
3743 DESKTOP_WORKSPACE_TOOL_WINDOW_OPEN_CHANNEL ,
3844} from "../../shared/desktop-window" ;
45+ import type {
46+ WorkspaceToolSurfaceContextSetInput ,
47+ WorkspaceToolSurfaceHostSetInput ,
48+ WorkspaceToolSurfaceSnapshotSetInput ,
49+ WorkspaceToolSurfaceState ,
50+ } from "../../shared/workspace-tool-surface" ;
3951
4052export function exposeDesktopWindowBridge ( ) {
4153 contextBridge . exposeInMainWorld ( "desktopWindow" , {
@@ -100,10 +112,11 @@ export function exposeDesktopWindowBridge() {
100112 } ;
101113 } ,
102114 onWorkspaceToolWindowClosed ( handler : ( toolId : string ) => void ) {
103- const listener = ( _event : IpcRendererEvent , payload : unknown ) => {
104- if ( isWorkspaceToolWindowClosedEvent ( payload ) ) {
105- handler ( payload . toolId ) ;
106- }
115+ const listener = (
116+ _event : IpcRendererEvent ,
117+ payload : WorkspaceToolInstanceCloseInput ,
118+ ) => {
119+ handler ( payload . toolId ) ;
107120 } ;
108121
109122 ipcRenderer . on ( DESKTOP_WORKSPACE_TOOL_WINDOW_CLOSED_CHANNEL , listener ) ;
@@ -117,10 +130,11 @@ export function exposeDesktopWindowBridge() {
117130 onWorkspaceToolDialogRequested (
118131 handler : ( instance : WorkspaceToolInstance ) => void ,
119132 ) {
120- const listener = ( _event : IpcRendererEvent , payload : unknown ) => {
121- if ( isWorkspaceToolInstance ( payload ) ) {
122- handler ( payload ) ;
123- }
133+ const listener = (
134+ _event : IpcRendererEvent ,
135+ payload : WorkspaceToolInstance ,
136+ ) => {
137+ handler ( payload ) ;
124138 } ;
125139
126140 ipcRenderer . on ( DESKTOP_WORKSPACE_TOOL_DIALOG_OPEN_CHANNEL , listener ) ;
@@ -134,10 +148,11 @@ export function exposeDesktopWindowBridge() {
134148 onWorkspaceToolInstanceUpdated (
135149 handler : ( instance : WorkspaceToolInstance ) => void ,
136150 ) {
137- const listener = ( _event : IpcRendererEvent , payload : unknown ) => {
138- if ( isWorkspaceToolInstance ( payload ) ) {
139- handler ( payload ) ;
140- }
151+ const listener = (
152+ _event : IpcRendererEvent ,
153+ payload : WorkspaceToolInstance ,
154+ ) => {
155+ handler ( payload ) ;
141156 } ;
142157
143158 ipcRenderer . on ( DESKTOP_WORKSPACE_TOOL_INSTANCE_UPDATED_CHANNEL , listener ) ;
@@ -148,6 +163,24 @@ export function exposeDesktopWindowBridge() {
148163 ) ;
149164 } ;
150165 } ,
166+ onWorkspaceToolSurfaceChanged (
167+ handler : ( state : WorkspaceToolSurfaceState ) => void ,
168+ ) {
169+ const listener = (
170+ _event : IpcRendererEvent ,
171+ payload : WorkspaceToolSurfaceState ,
172+ ) => {
173+ handler ( payload ) ;
174+ } ;
175+
176+ ipcRenderer . on ( DESKTOP_WORKSPACE_TOOL_SURFACE_CHANGED_CHANNEL , listener ) ;
177+ return ( ) => {
178+ ipcRenderer . removeListener (
179+ DESKTOP_WORKSPACE_TOOL_SURFACE_CHANGED_CHANNEL ,
180+ listener ,
181+ ) ;
182+ } ;
183+ } ,
151184 async installUpdate ( ) {
152185 return ipcRenderer . invoke ( DESKTOP_INSTALL_UPDATE_CHANNEL ) ;
153186 } ,
@@ -160,6 +193,11 @@ export function exposeDesktopWindowBridge() {
160193 toolId ,
161194 ) as Promise < WorkspaceToolInstance | null > ;
162195 } ,
196+ async getWorkspaceToolSurfaceState ( ) {
197+ return ipcRenderer . invoke (
198+ DESKTOP_WORKSPACE_TOOL_SURFACE_GET_CHANNEL ,
199+ ) as Promise < WorkspaceToolSurfaceState > ;
200+ } ,
163201 openWorkspaceToolWindow ( input : WorkspaceToolWindowOpenInput ) {
164202 ipcRenderer . send ( DESKTOP_WORKSPACE_TOOL_WINDOW_OPEN_CHANNEL , input ) ;
165203 } ,
@@ -172,6 +210,9 @@ export function exposeDesktopWindowBridge() {
172210 registerWorkspaceToolWindowInstance ( input : WorkspaceToolWindowOpenInput ) {
173211 ipcRenderer . send ( DESKTOP_WORKSPACE_TOOL_INSTANCE_REGISTER_CHANNEL , input ) ;
174212 } ,
213+ focusWorkspaceToolSurface ( ) {
214+ ipcRenderer . send ( DESKTOP_WORKSPACE_TOOL_SURFACE_FOCUS_CHANNEL ) ;
215+ } ,
175216 setActiveChatId ( chatId : string | null ) {
176217 ipcRenderer . send ( DESKTOP_ACTIVE_CHAT_SET_CHANNEL , chatId ) ;
177218 } ,
@@ -181,24 +222,26 @@ export function exposeDesktopWindowBridge() {
181222 setWorkspaceToolContext ( input : WorkspaceToolContextSetInput ) {
182223 ipcRenderer . send ( DESKTOP_WORKSPACE_TOOL_CONTEXT_SET_CHANNEL , input ) ;
183224 } ,
225+ setWorkspaceToolSurfaceContext ( input : WorkspaceToolSurfaceContextSetInput ) {
226+ ipcRenderer . send (
227+ DESKTOP_WORKSPACE_TOOL_SURFACE_CONTEXT_SET_CHANNEL ,
228+ input ,
229+ ) ;
230+ } ,
231+ setWorkspaceToolSurfaceHost ( input : WorkspaceToolSurfaceHostSetInput ) {
232+ ipcRenderer . send ( DESKTOP_WORKSPACE_TOOL_SURFACE_HOST_SET_CHANNEL , input ) ;
233+ } ,
234+ setWorkspaceToolSurfaceSnapshot (
235+ input : WorkspaceToolSurfaceSnapshotSetInput ,
236+ ) {
237+ ipcRenderer . send (
238+ DESKTOP_WORKSPACE_TOOL_SURFACE_SNAPSHOT_SET_CHANNEL ,
239+ input ,
240+ ) ;
241+ } ,
184242 } ) ;
185243}
186244
187- function isWorkspaceToolWindowClosedEvent (
188- value : unknown ,
189- ) : value is { toolId : string } {
190- if ( typeof value !== "object" || value === null ) return false ;
191- return typeof ( value as { toolId ?: unknown } ) . toolId === "string" ;
192- }
193-
194- function isWorkspaceToolInstance (
195- value : unknown ,
196- ) : value is WorkspaceToolInstance {
197- if ( typeof value !== "object" || value === null ) return false ;
198- const instance = value as Partial < WorkspaceToolInstance > ;
199- return typeof instance . id === "string" && typeof instance . title === "string" ;
200- }
201-
202245function isDesktopWindowCommandEvent (
203246 value : unknown ,
204247) : value is { command : DesktopWindowCommand } {
0 commit comments