feat: automatic worker restart on version updates
Critical improvement for seamless upgrades across all versions. Changes: 1. Added /api/version endpoint to worker service - Returns current worker version from package.json 2. Added version checking in worker-utils.ts - getPluginVersion() - reads plugin's package.json version - getWorkerVersion() - fetches version from worker API - ensureWorkerVersionMatches() - compares and restarts if needed 3. Modified ensureWorkerRunning() - Now calls ensureWorkerVersionMatches() after health check - Automatically restarts worker when version mismatch detected - Logs version mismatch for debugging Impact: - Users no longer need to manually restart worker after upgrades - Eliminates connection errors from running old worker code - Critical for v7.1.1 (Bun auto-install) and all future releases - Fixes the issue where PR #236 changes weren't applied until manual restart Testing: - Version endpoint working: returns {"version":"7.1.0"} - Worker health check: passing - Auto-restart logic: triggers on version mismatch 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -132,6 +132,22 @@ export class WorkerService {
|
||||
res.status(200).json({ status: 'ok' });
|
||||
});
|
||||
|
||||
// Version endpoint - returns the worker's current version
|
||||
this.app.get('/api/version', (_req, res) => {
|
||||
try {
|
||||
// Read version from marketplace package.json
|
||||
const { homedir } = require('os');
|
||||
const { readFileSync } = require('fs');
|
||||
const marketplaceRoot = path.join(homedir(), '.claude', 'plugins', 'marketplaces', 'thedotmack');
|
||||
const packageJsonPath = path.join(marketplaceRoot, 'package.json');
|
||||
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
||||
res.status(200).json({ version: packageJson.version });
|
||||
} catch (error) {
|
||||
logger.error('SYSTEM', 'Failed to read version', {}, error as Error);
|
||||
res.status(500).json({ error: 'Failed to read version' });
|
||||
}
|
||||
});
|
||||
|
||||
// Admin endpoints for process management
|
||||
this.app.post('/api/admin/restart', async (_req, res) => {
|
||||
res.json({ status: 'restarting' });
|
||||
|
||||
Reference in New Issue
Block a user