@myrialabs/clopen 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/chat/stream-manager.ts +23 -12
- package/backend/mcp/project-context.ts +20 -0
- package/backend/mcp/servers/browser-automation/actions.ts +0 -2
- package/backend/mcp/servers/browser-automation/browser.ts +80 -143
- package/backend/mcp/servers/browser-automation/inspection.ts +5 -11
- package/backend/preview/browser/browser-mcp-control.ts +174 -195
- package/backend/preview/browser/browser-preview-service.ts +3 -3
- package/backend/preview/browser/browser-video-capture.ts +12 -14
- package/backend/preview/browser/scripts/video-stream.ts +14 -14
- package/backend/preview/browser/types.ts +7 -7
- package/backend/preview/index.ts +1 -1
- package/backend/terminal/stream-manager.ts +40 -26
- package/backend/ws/preview/index.ts +3 -3
- package/backend/ws/system/operations.ts +23 -0
- package/frontend/components/chat/message/MessageBubble.svelte +2 -2
- package/frontend/components/chat/tools/components/FileHeader.svelte +1 -1
- package/frontend/components/chat/tools/components/TerminalCommand.svelte +8 -1
- package/frontend/components/common/overlay/Dialog.svelte +1 -1
- package/frontend/components/common/overlay/Lightbox.svelte +2 -2
- package/frontend/components/common/overlay/Modal.svelte +2 -2
- package/frontend/components/common/xterm/XTerm.svelte +6 -1
- package/frontend/components/git/ConflictResolver.svelte +1 -1
- package/frontend/components/git/GitModal.svelte +2 -2
- package/frontend/components/preview/browser/BrowserPreview.svelte +1 -1
- package/frontend/components/preview/browser/components/Canvas.svelte +1 -1
- package/frontend/components/preview/browser/components/Toolbar.svelte +4 -4
- package/frontend/components/preview/browser/core/mcp-handlers.svelte.ts +58 -64
- package/frontend/components/settings/SettingsModal.svelte +1 -1
- package/frontend/components/settings/general/DataManagementSettings.svelte +5 -66
- package/frontend/components/terminal/Terminal.svelte +1 -29
- package/frontend/components/tunnel/TunnelInactive.svelte +7 -5
- package/frontend/components/workspace/DesktopNavigator.svelte +1 -1
- package/frontend/components/workspace/PanelHeader.svelte +22 -16
- package/frontend/components/workspace/panels/GitPanel.svelte +1 -6
- package/frontend/services/preview/browser/browser-webcodecs.service.ts +2 -2
- package/frontend/services/project/status.service.ts +11 -1
- package/frontend/stores/core/sessions.svelte.ts +11 -1
- package/frontend/stores/features/terminal.svelte.ts +56 -26
- package/frontend/stores/ui/theme.svelte.ts +1 -1
- package/frontend/utils/ws.ts +42 -0
- package/index.html +2 -2
- package/package.json +1 -1
- package/shared/utils/ws-client.ts +21 -4
- package/static/manifest.json +2 -2
|
@@ -56,6 +56,8 @@ export interface WSClientOptions {
|
|
|
56
56
|
maxReconnectDelay?: number;
|
|
57
57
|
/** Callback when connection status changes */
|
|
58
58
|
onStatusChange?: (status: WSConnectionStatus, reconnectAttempts: number) => void;
|
|
59
|
+
/** Callback when WebSocket reconnects (not on initial connection) */
|
|
60
|
+
onReconnect?: () => void;
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
// ============================================================================
|
|
@@ -204,13 +206,14 @@ function decodeBinaryMessage(buffer: ArrayBuffer): { action: string; payload: an
|
|
|
204
206
|
export class WSClient<TAPI extends { client: any; server: any }> {
|
|
205
207
|
private ws: WebSocket | null = null;
|
|
206
208
|
private url: string;
|
|
207
|
-
private options: Required<Omit<WSClientOptions, 'onStatusChange'>> & Pick<WSClientOptions, 'onStatusChange'>;
|
|
209
|
+
private options: Required<Omit<WSClientOptions, 'onStatusChange' | 'onReconnect'>> & Pick<WSClientOptions, 'onStatusChange' | 'onReconnect'>;
|
|
208
210
|
private reconnectAttempts = 0;
|
|
209
211
|
private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
210
212
|
private listeners = new Map<string, Set<(payload: any) => void>>();
|
|
211
213
|
private messageQueue: Array<{ action: string; payload: any }> = [];
|
|
212
214
|
private isConnected = false;
|
|
213
215
|
private shouldReconnect = true;
|
|
216
|
+
private hasConnectedBefore = false;
|
|
214
217
|
|
|
215
218
|
/** Current context (synced with server) */
|
|
216
219
|
private context: {
|
|
@@ -237,7 +240,8 @@ export class WSClient<TAPI extends { client: any; server: any }> {
|
|
|
237
240
|
maxReconnectAttempts: options.maxReconnectAttempts ?? 5,
|
|
238
241
|
reconnectDelay: options.reconnectDelay ?? 1000,
|
|
239
242
|
maxReconnectDelay: options.maxReconnectDelay ?? 30000,
|
|
240
|
-
onStatusChange: options.onStatusChange ?? undefined
|
|
243
|
+
onStatusChange: options.onStatusChange ?? undefined,
|
|
244
|
+
onReconnect: options.onReconnect ?? undefined
|
|
241
245
|
};
|
|
242
246
|
|
|
243
247
|
this.connect();
|
|
@@ -295,7 +299,20 @@ export class WSClient<TAPI extends { client: any; server: any }> {
|
|
|
295
299
|
}
|
|
296
300
|
}
|
|
297
301
|
|
|
298
|
-
//
|
|
302
|
+
// Fire reconnect handlers BEFORE queue flush so room
|
|
303
|
+
// subscriptions (chat:join-session, projects:join) are
|
|
304
|
+
// restored before any queued messages are sent.
|
|
305
|
+
const isReconnect = this.hasConnectedBefore;
|
|
306
|
+
this.hasConnectedBefore = true;
|
|
307
|
+
if (isReconnect) {
|
|
308
|
+
try {
|
|
309
|
+
this.options.onReconnect?.();
|
|
310
|
+
} catch (err) {
|
|
311
|
+
debug.error('websocket', 'onReconnect callback error:', err);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Flush queued messages AFTER context + room re-joins are synced
|
|
299
316
|
while (this.messageQueue.length > 0) {
|
|
300
317
|
const msg = this.messageQueue.shift();
|
|
301
318
|
if (msg) {
|
|
@@ -303,7 +320,7 @@ export class WSClient<TAPI extends { client: any; server: any }> {
|
|
|
303
320
|
}
|
|
304
321
|
}
|
|
305
322
|
|
|
306
|
-
// Resolve waitUntilConnected() callers AFTER
|
|
323
|
+
// Resolve waitUntilConnected() callers AFTER everything is ready
|
|
307
324
|
for (const resolve of this.connectResolvers) {
|
|
308
325
|
resolve();
|
|
309
326
|
}
|
package/static/manifest.json
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"description": "All-in-one web workspace for Claude Code & OpenCode — chat, terminal, git, browser preview, checkpoints, and real-time collaboration",
|
|
5
5
|
"start_url": "/",
|
|
6
6
|
"display": "standalone",
|
|
7
|
-
"background_color": "#
|
|
8
|
-
"theme_color": "#
|
|
7
|
+
"background_color": "#0e172b",
|
|
8
|
+
"theme_color": "#0e172b",
|
|
9
9
|
"icons": [
|
|
10
10
|
{
|
|
11
11
|
"src": "/favicon.svg",
|