Features: - Agent checks for updates periodically (hourly) during idle - Admin can trigger immediate updates via dashboard "Update Agent" button - Silent updates with in-place binary replacement (no reboot required) - SHA-256 checksum verification before installation - Semantic version comparison Server changes: - New releases table for tracking available versions - GET /api/version endpoint for agent polling (unauthenticated) - POST /api/machines/:id/update endpoint for admin push updates - Release management API (/api/releases CRUD) - Track agent_version in machine status Agent changes: - New update.rs module with download/verify/install/restart logic - Handle ADMIN_UPDATE WebSocket command for push updates - --post-update flag for cleanup after successful update - Periodic update check in idle loop (persistent agents only) - agent_version included in AgentStatus messages Dashboard changes: - Version display in machine detail panel - "Update Agent" button for each connected machine 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
36 lines
1.6 KiB
SQL
36 lines
1.6 KiB
SQL
-- Migration: 003_auto_update.sql
|
|
-- Purpose: Add auto-update infrastructure (releases table and machine version tracking)
|
|
|
|
-- ============================================================================
|
|
-- Releases Table
|
|
-- ============================================================================
|
|
|
|
-- Track available agent releases
|
|
CREATE TABLE IF NOT EXISTS releases (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
version VARCHAR(32) NOT NULL UNIQUE,
|
|
download_url TEXT NOT NULL,
|
|
checksum_sha256 VARCHAR(64) NOT NULL,
|
|
release_notes TEXT,
|
|
is_stable BOOLEAN NOT NULL DEFAULT false,
|
|
is_mandatory BOOLEAN NOT NULL DEFAULT false,
|
|
min_version VARCHAR(32), -- Minimum version that can update to this
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Index for finding latest stable release
|
|
CREATE INDEX IF NOT EXISTS idx_releases_stable ON releases(is_stable, created_at DESC);
|
|
|
|
-- ============================================================================
|
|
-- Machine Version Tracking
|
|
-- ============================================================================
|
|
|
|
-- Add version tracking columns to existing machines table
|
|
ALTER TABLE connect_machines ADD COLUMN IF NOT EXISTS agent_version VARCHAR(32);
|
|
ALTER TABLE connect_machines ADD COLUMN IF NOT EXISTS update_status VARCHAR(32);
|
|
ALTER TABLE connect_machines ADD COLUMN IF NOT EXISTS last_update_check TIMESTAMPTZ;
|
|
|
|
-- Index for finding machines needing updates
|
|
CREATE INDEX IF NOT EXISTS idx_machines_version ON connect_machines(agent_version);
|
|
CREATE INDEX IF NOT EXISTS idx_machines_update_status ON connect_machines(update_status);
|