This repository has been archived on 2026-08-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
pi-web/src/client/src/sessionSocket.ts
T

30 lines
865 B
TypeScript

import { sessionEvents } from "./api";
export type SessionUiEvent =
| { type: "assistant.delta"; text: string }
| { type: "tool.start"; toolName: string }
| { type: "tool.end"; toolName: string; isError: boolean }
| { type: "session.error"; message: string };
export class SessionSocket {
private socket?: WebSocket;
connect(sessionId: string, onEvent: (event: SessionUiEvent) => void): void {
this.close();
this.socket = sessionEvents(sessionId);
this.socket.onmessage = (message) => {
const event = JSON.parse(message.data);
if (isSessionUiEvent(event)) onEvent(event);
};
}
close(): void {
this.socket?.close();
this.socket = undefined;
}
}
function isSessionUiEvent(event: any): event is SessionUiEvent {
return ["assistant.delta", "tool.start", "tool.end", "session.error"].includes(event?.type);
}