Files
DeskClaw/build_process/commit_2_gateway_refinements.md
Haze e02cf05baf feat(update): implement auto-update functionality with electron-updater
- Add AppUpdater module with update lifecycle management
- Create UpdateSettings UI component with progress display
- Add Progress UI component based on Radix UI
- Create update Zustand store for state management
- Register update IPC handlers in main process
- Auto-check for updates on production startup
- Add commit documentation for commits 2-6
2026-02-05 23:36:12 +08:00

3.1 KiB

Commit 2: Gateway Refinements

Summary

Enhance Gateway process management with auto-reconnection, health checks, and improved state management for more robust WebSocket communication.

Changes

Electron Main Process

electron/gateway/manager.ts

  • Added 'reconnecting' state to GatewayStatus
  • Implemented ReconnectConfig with exponential backoff strategy
  • Added maxAttempts, baseDelay, maxDelay configuration
  • New methods:
    • isConnected() - Check WebSocket connection status
    • restart() - Stop and start Gateway
    • clearAllTimers() - Clean up timers on shutdown
    • startHealthCheck() - Periodic health monitoring
    • checkHealth() - Manual health check
  • Enhanced handleMessage() to dispatch JSON-RPC responses and notifications
  • Expanded GatewayManagerEvents for notification forwarding

electron/gateway/client.ts

  • Extended with new interfaces: SkillBundle, CronTask, ProviderConfig
  • Added cron task management methods:
    • listCronTasks(), createCronTask(), updateCronTask(), deleteCronTask(), runCronTask()
  • Added provider management methods:
    • listProviders(), setProvider(), removeProvider(), testProvider()
  • Enhanced system calls:
    • getHealth() now includes version
    • Added getVersion(), getSkillBundles(), installBundle()

electron/main/ipc-handlers.ts

  • Added gateway:isConnected, gateway:health IPC handlers
  • Added mainWindow.isDestroyed() checks before sending events
  • Forward new gateway events: gateway:notification, gateway:channel-status, gateway:chat-message

electron/preload/index.ts

  • Added new IPC channels for gateway operations
  • Added notification event channels

React Renderer

src/stores/gateway.ts

  • Added health: GatewayHealth | null, lastError: string | null to state
  • Added checkHealth(), rpc(), clearError() actions
  • Enhanced init() to listen for error and notification events

src/types/gateway.ts

  • Added 'reconnecting' to GatewayStatus state enum
  • Added version, reconnectAttempts fields
  • New interfaces: GatewayHealth, GatewayNotification, ProviderConfig

src/components/common/StatusBadge.tsx

  • Added 'reconnecting' status with warning variant

Technical Details

Reconnection Strategy

  • Exponential backoff: delay = min(baseDelay * 2^attempt, maxDelay)
  • Default: 1s base delay, 30s max delay, 10 max attempts
  • Automatic reconnection on unexpected disconnection
  • Manual control via shouldReconnect flag

Health Check

  • Periodic ping/pong via JSON-RPC system.health
  • Returns status, uptime, version information
  • Triggers reconnection on consecutive failures

Event Flow

Gateway Process -> WebSocket -> GatewayManager -> IPC -> Renderer
                                    |
                                    v
                              Event Emitter
                                    |
                    +---------------+---------------+
                    |               |               |
                 status        notification     channel:status

Version

v0.1.0-alpha (incremental)