Files
claudetools/session-logs/2025-12-20-session.md

4.2 KiB

Session Log: GuruRMM v0.4.0 Build with Tray Icon

Date: 2025-12-20 Focus: Tray icon implementation, cross-platform builds


Summary

Built GuruRMM v0.4.0 with new system tray application for Windows.

Completed

  1. Tray Icon Implementation (from previous session)

    • IPC infrastructure in agent/src/ipc.rs (Named Pipe for Windows)
    • TrayPolicy struct for admin-controlled visibility
    • Tray app crate with menu, icon states, IPC client
    • SVG icon assets (green/yellow/red/gray states)
  2. Compilation Fixes

    • Fixed device_id::get_device_id() return type (String, not Result)
    • Added TrayPolicyUpdate match arm in WebSocket handler
    • Added last_checkin and tray_policy fields to Windows service AppState
    • Fixed tray-icon API change (set_menu returns unit now)
  3. Cross-Platform Builds

    • Installed mingw-w64 via Homebrew on Mac
    • Added x86_64-pc-windows-gnu target to Rust
    • Configured cargo for Windows cross-compilation

Build Results (v0.4.0)

Component Target Size Location
Agent Linux x86_64 3.3 MB Build server: ~/gururmm/agent/target/release/gururmm-agent
Agent Windows x64 2.8 MB Local: agent/target/x86_64-pc-windows-gnu/release/gururmm-agent.exe
Tray App Windows x64 1.6 MB Local: tray/target/x86_64-pc-windows-gnu/release/gururmm-tray.exe

Architecture

┌─────────────────┐     Policy      ┌─────────────────┐
│   RMM Server    │ ──────────────► │  Agent Service  │
│  (WebSocket)    │                 │  (Background)   │
└─────────────────┘                 └────────┬────────┘
                                             │ IPC
                                             │ (Named Pipe)
                                             ▼
                                    ┌─────────────────┐
                                    │   Tray App      │
                                    │  (User Session) │
                                    └─────────────────┘
  • Named pipe: \\.\pipe\gururmm-agent
  • Agent runs as SYSTEM, tray runs in user session
  • Policy controls: visibility, menu items, allowed actions

Key Files

New Files

  • agent/src/ipc.rs - Named pipe IPC server, TrayPolicy, AgentStatus
  • tray/Cargo.toml - Tray app crate config
  • tray/src/main.rs - Entry point
  • tray/src/tray.rs - Tray icon management
  • tray/src/menu.rs - Dynamic menu building
  • tray/src/ipc.rs - Named pipe client
  • assets/icons/*.svg - Tray icon states

Modified Files

  • agent/Cargo.toml - Version 0.4.0, Windows IPC features
  • agent/src/main.rs - IPC server integration, AppState fields
  • agent/src/service.rs - Added last_checkin, tray_policy to AppState
  • agent/src/transport/mod.rs - Added TrayPolicyUpdate to ServerMessage
  • agent/src/transport/websocket.rs - Handle TrayPolicyUpdate

Build Server (172.16.3.30)

  • SSH: guru@172.16.3.30 or root@172.16.3.30
  • Rust: Installed via rustup
  • Note: Requires sudo for apt (password needed)
  • Linux binary: ~/gururmm/agent/target/release/gururmm-agent

Cross-Compile from Mac

# Windows agent
cd agent && cargo build --release --target x86_64-pc-windows-gnu

# Windows tray
cd tray && cargo build --release --target x86_64-pc-windows-gnu

Pending Tasks

  1. Deploy Windows binaries to downloads server
  2. Implement tray launcher in agent (auto-launch in user sessions)
  3. Add TrayPolicy to server data model and site settings API
  4. Dashboard UI for tray policy management
  5. Mac/Linux tray support (Unix domain socket instead of named pipe)

Credentials Reference

Build Server (172.16.3.30)

  • SSH: guru/root with key
  • PostgreSQL: gururmm / gururmm / 43617ebf7eb242e814ca9988cc4df5ad

Site Code

  • Main Office: SWIFT-CLOUD-6910

URLs