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
This commit is contained in:
Haze
2026-02-05 23:36:12 +08:00
Unverified
parent 98a2d9bc83
commit e02cf05baf
13 changed files with 1313 additions and 50 deletions

View File

@@ -0,0 +1,83 @@
# 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)