539c33ef42
Step 0: Infrastructure hardening — Redis BlockingConnectionPool, WebSocket two-layer (memory+Redis Pub/Sub), JWT auth, DB session leak fix Step 1: Data layer — 4 new tables (platforms/nodes/command_logs/ssh_sessions), data migration (category→Node), repos + API routes Step 2: Auth layer — JWT middleware on all routes, TOTP JWT integration Step 3: Web SSH — asyncssh connection pool, /ws/terminal endpoint, xterm.js frontend, Koko protocol Step 4: Sync engine v2 — file/command/config/SFTP modes, parallel execution Step 5: Frontend migration — 12 Tailwind CSS v4 + Alpine.js pages, PHP-FPM removal from nginx config 21 Python backend + 12 HTML frontend + 2 deploy configs + 3 test files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>