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:
83
build_process/commit_2_gateway_refinements.md
Normal file
83
build_process/commit_2_gateway_refinements.md
Normal 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)
|
||||
Reference in New Issue
Block a user