diff options
| author | Dax Raad <[email protected]> | 2025-12-16 14:45:03 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-12-16 14:45:03 -0500 |
| commit | 4e2d1acf7d1570f7d4738c03636be77541e73c14 (patch) | |
| tree | 160a3a4943a394f874567b750c8b75fe14f0aab2 /packages | |
| parent | 40d63cd1e32b20279d8292f376606637bdd00aca (diff) | |
| download | opencode-4e2d1acf7d1570f7d4738c03636be77541e73c14.tar.gz opencode-4e2d1acf7d1570f7d4738c03636be77541e73c14.zip | |
core: fix Tauri desktop app SSE connection timeout
- Add heartbeat events to /global/event and /event SSE endpoints
- Send server.heartbeat event every 30s to prevent WKWebView 60s timeout
- Fixes desktop app disconnecting from global events after 1 minute
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/server/server.ts | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index f1d4ecd8d..d30fe63b8 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -139,8 +139,22 @@ export namespace Server { }) } GlobalBus.on("event", handler) + + // Send heartbeat every 30s to prevent WKWebView timeout (60s default) + const heartbeat = setInterval(() => { + stream.writeSSE({ + data: JSON.stringify({ + payload: { + type: "server.heartbeat", + properties: {}, + }, + }), + }) + }, 30000) + await new Promise<void>((resolve) => { stream.onAbort(() => { + clearInterval(heartbeat) GlobalBus.off("event", handler) resolve() log.info("global event disconnected") @@ -2470,8 +2484,20 @@ export namespace Server { stream.close() } }) + + // Send heartbeat every 30s to prevent WKWebView timeout (60s default) + const heartbeat = setInterval(() => { + stream.writeSSE({ + data: JSON.stringify({ + type: "server.heartbeat", + properties: {}, + }), + }) + }, 30000) + await new Promise<void>((resolve) => { stream.onAbort(() => { + clearInterval(heartbeat) unsub() resolve() log.info("event disconnected") |
