You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
2.5 KiB
TypeScript
142 lines
2.5 KiB
TypeScript
// Server -> Client messages
|
|
export interface ScreenMessage {
|
|
type: 'screen';
|
|
surface: string;
|
|
content: string;
|
|
lines: string[];
|
|
scrollback?: boolean;
|
|
cursor?: { row: number; col: number };
|
|
}
|
|
|
|
export interface ScreenDiffMessage {
|
|
type: 'screen-diff';
|
|
surface: string;
|
|
patches: DiffPatch[];
|
|
}
|
|
|
|
export interface DiffPatch {
|
|
startLine: number;
|
|
deleteCount: number;
|
|
insertLines: string[];
|
|
}
|
|
|
|
export interface WorkspacesMessage {
|
|
type: 'workspaces';
|
|
workspaces: WorkspaceInfo[];
|
|
}
|
|
|
|
export interface WorkspaceInfo {
|
|
id: string;
|
|
ref: string;
|
|
name?: string;
|
|
panes: PaneInfo[];
|
|
}
|
|
|
|
export interface PaneInfo {
|
|
id: string;
|
|
ref: string;
|
|
surfaces: SurfaceInfo[];
|
|
}
|
|
|
|
export interface SurfaceInfo {
|
|
id: string;
|
|
ref: string;
|
|
type: string;
|
|
title?: string;
|
|
}
|
|
|
|
export interface AuthResultMessage {
|
|
type: 'auth-ok' | 'auth-fail';
|
|
message?: string;
|
|
}
|
|
|
|
export interface ErrorMessage {
|
|
type: 'error';
|
|
message: string;
|
|
}
|
|
|
|
export interface BrowserScreenshotMessage {
|
|
type: 'browser-screenshot';
|
|
surface: string;
|
|
imageData: string; // base64
|
|
mime: string; // e.g. 'image/jpeg'
|
|
}
|
|
|
|
export interface PingMessage {
|
|
type: 'ping';
|
|
}
|
|
|
|
export type ServerMessage =
|
|
| ScreenMessage
|
|
| ScreenDiffMessage
|
|
| WorkspacesMessage
|
|
| AuthResultMessage
|
|
| ErrorMessage
|
|
| BrowserScreenshotMessage
|
|
| PingMessage;
|
|
|
|
// Client -> Server messages
|
|
export interface AuthMessage {
|
|
type: 'auth';
|
|
token: string;
|
|
}
|
|
|
|
export interface SubscribeMessage {
|
|
type: 'subscribe';
|
|
workspace: string;
|
|
surface: string;
|
|
}
|
|
|
|
export interface UnsubscribeMessage {
|
|
type: 'unsubscribe';
|
|
surface: string;
|
|
}
|
|
|
|
export interface SendTextMessage {
|
|
type: 'send-text';
|
|
workspace: string;
|
|
surface: string;
|
|
text: string;
|
|
// When true, the server presses Enter AFTER send_text completes (awaited
|
|
// ordering), so the paste reliably submits without a client-side timing race.
|
|
submit?: boolean;
|
|
}
|
|
|
|
export interface SendKeyMessage {
|
|
type: 'send-key';
|
|
workspace: string;
|
|
surface: string;
|
|
key: string;
|
|
}
|
|
|
|
export interface ListWorkspacesMessage {
|
|
type: 'list-workspaces';
|
|
}
|
|
|
|
export interface ListSurfacesMessage {
|
|
type: 'list-surfaces';
|
|
workspace: string;
|
|
}
|
|
|
|
export interface ScrollRequestMessage {
|
|
type: 'scroll-request';
|
|
workspace: string;
|
|
surface: string;
|
|
lines: number;
|
|
}
|
|
|
|
export interface PongMessage {
|
|
type: 'pong';
|
|
}
|
|
|
|
export type ClientMessage =
|
|
| AuthMessage
|
|
| SubscribeMessage
|
|
| UnsubscribeMessage
|
|
| SendTextMessage
|
|
| SendKeyMessage
|
|
| ListWorkspacesMessage
|
|
| ListSurfacesMessage
|
|
| ScrollRequestMessage
|
|
| PongMessage;
|