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>
115 lines
2.4 KiB
TOML
115 lines
2.4 KiB
TOML
[package]
|
|
name = "guruconnect"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
authors = ["AZ Computer Guru"]
|
|
description = "GuruConnect Remote Desktop - Agent and Viewer"
|
|
|
|
[dependencies]
|
|
# CLI
|
|
clap = { version = "4", features = ["derive"] }
|
|
|
|
# Async runtime
|
|
tokio = { version = "1", features = ["full", "sync", "time", "rt-multi-thread", "macros"] }
|
|
|
|
# WebSocket
|
|
tokio-tungstenite = { version = "0.24", features = ["native-tls"] }
|
|
futures-util = "0.3"
|
|
|
|
# Windowing (for viewer)
|
|
winit = { version = "0.30", features = ["rwh_06"] }
|
|
softbuffer = "0.4"
|
|
raw-window-handle = "0.6"
|
|
|
|
# Compression
|
|
zstd = "0.13"
|
|
|
|
# Protocol (protobuf)
|
|
prost = "0.13"
|
|
prost-types = "0.13"
|
|
bytes = "1"
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# Logging
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
|
|
# Error handling
|
|
anyhow = "1"
|
|
thiserror = "1"
|
|
|
|
# Configuration
|
|
toml = "0.8"
|
|
|
|
# Crypto
|
|
ring = "0.17"
|
|
sha2 = "0.10"
|
|
|
|
# HTTP client for updates
|
|
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream", "json"] }
|
|
|
|
# UUID
|
|
uuid = { version = "1", features = ["v4", "serde"] }
|
|
|
|
# Time
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
|
|
# Hostname
|
|
hostname = "0.4"
|
|
|
|
# URL encoding
|
|
urlencoding = "2"
|
|
|
|
# System tray (Windows)
|
|
tray-icon = "0.19"
|
|
muda = "0.15" # Menu for tray icon
|
|
|
|
# Image handling for tray icon
|
|
image = { version = "0.25", default-features = false, features = ["png"] }
|
|
|
|
# URL parsing
|
|
url = "2"
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
# Windows APIs for screen capture, input, and shell operations
|
|
windows = { version = "0.58", features = [
|
|
"Win32_Foundation",
|
|
"Win32_Graphics_Gdi",
|
|
"Win32_Graphics_Dxgi",
|
|
"Win32_Graphics_Dxgi_Common",
|
|
"Win32_Graphics_Direct3D",
|
|
"Win32_Graphics_Direct3D11",
|
|
"Win32_UI_Input_KeyboardAndMouse",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
"Win32_UI_Shell",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_System_Threading",
|
|
"Win32_System_Registry",
|
|
"Win32_System_Console",
|
|
"Win32_System_Environment",
|
|
"Win32_Security",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System_Pipes",
|
|
"Win32_System_SystemServices",
|
|
"Win32_System_IO",
|
|
]}
|
|
|
|
# Windows service support
|
|
windows-service = "0.7"
|
|
|
|
[build-dependencies]
|
|
prost-build = "0.13"
|
|
winres = "0.1"
|
|
chrono = "0.4"
|
|
|
|
[[bin]]
|
|
name = "guruconnect"
|
|
path = "src/main.rs"
|
|
|
|
[[bin]]
|
|
name = "guruconnect-sas-service"
|
|
path = "src/bin/sas_service.rs"
|