fix: harden desktop JSON-RPC reconnects (#191)
3 months ago
Authored
Max Weinbach* fix: harden desktop jsonrpc reconnects
Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>
* Delay workspace server restart counting until startup succeeds
* fix: tighten jsonrpc reconnect retry safety
* fix: retry read-only jsonrpc get routes
* fix: preserve control state during reconnect
Keep JSON-RPC control bootstrap and pending mutation waiters alive during transient reconnect backoff. Harden the Windows task-subscription smoke cleanup for Bun SQLite handle finalization.
* fix: persist thread start retry keys
* fix: persist journal replay failure health
* fix: drain journal writes on runtime shutdown
* fix: ignore shutdown journal events after close
* fix: force snapshots for untrusted replay
* fix: stop journal flush rescheduling after close
* fix: preserve optimistic messages in forced snapshots
* fix: retry spreadsheet reads during reconnect
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>
Parente8c7bb6
51 files changed
- apps/desktop/electron/ipc/system.ts+17−0
- apps/desktop/electron/main.ts+5−1
- apps/desktop/electron/preload.ts+6−0
- apps/desktop/electron/services/diagnostics.ts+39−0
- apps/desktop/electron/services/serverManager.ts+71−0
- apps/desktop/src/App.tsx+27−2
- apps/desktop/src/app/store.helpers/controlSocket.ts+6−0
- apps/desktop/src/app/store.helpers/jsonRpcSocket.ts
+167
−7
apps/desktop/src/app/store.helpers/threadEventReducer/feedProjection.ts+49−10apps/desktop/src/app/store.helpers/threadEventReducer/jsonRpcWorkspace.ts+6−0apps/desktop/src/app/store.helpers/threadEventReducer/socket.ts+15−3apps/desktop/src/lib/desktopApi.ts+9−0apps/desktop/src/lib/desktopCommands.ts+6−0apps/desktop/src/lib/desktopSchemas.ts+11−0apps/desktop/src/lib/webAdapter.ts+2−0apps/desktop/test/control-socket.ensure.test.ts+159−0apps/desktop/test/control-socket.harness.ts+33−5apps/desktop/test/diagnostics-service.test.ts+53−0apps/desktop/test/helpers/mockDesktopCommands.ts+1−0apps/desktop/test/jsonrpc-single-connection.test.ts+35−3apps/desktop/test/server-manager.test.ts+34−0apps/desktop/test/thread-reconnect.test.ts+109−0apps/mobile/src/features/cowork/protocolTypes.ts+13−0docs/diagnostics.md+6−1docs/generated/websocket-jsonrpc.d.ts+8−6docs/generated/websocket-jsonrpc.schema.json+1−1docs/harness/runbook.md+5−0docs/websocket-protocol.md+11−3src/client/jsonRpcSocket.ts+101−12src/server/jsonrpc/routes/runtime.ts+5−0src/server/jsonrpc/routes/thread.ts+61−2src/server/jsonrpc/routes/types.ts+30−0src/server/jsonrpc/schema.runtime.ts+43−0src/server/jsonrpc/schema.threadTurn.ts+15−0src/server/protocol.ts+1−1src/server/runtime/ServerRuntime.ts+53−0src/server/runtime/SocketSendQueue.ts+46−4src/server/runtime/ThreadJournal.ts+133−13src/server/sessionDb.ts+45−0src/server/sessionDb/migrations.ts+14−0src/server/sessionDb/repository.ts+142−0src/server/sessionDb/writeCoordinator.ts+32−0test/jsonrpc.router.test.ts+60−8test/jsonrpc.task-workspace-subscription.test.ts+25−10test/jsonrpc/flow.harness.ts+3−3test/jsonrpc/flow.journal.test.ts+126−0test/jsonrpcSocket.runtime.test.ts+108−0test/mobile.jsonrpc-client.test.ts+23−0test/server.backpressure.test.ts+57−87test/session-db.test.ts+38−0test/threadJournal.runtime.test.ts+215−0