Skip to main content

Deep Dive

Air - Deep Dive

Technical architecture of the Air background daemon: gRPC service definitions, update pipeline, authentication, indexing, and connection lifecycle with Mountain.

Air is a standalone Rust binary structured around a central gRPC server that receives task delegation from Mountain. It runs as a persistent sidecar process alongside Mountain, offloading resource-intensive operations so the editor remains responsive. Internal modules handle distinct responsibilities: updates, downloads, authentication, and health monitoring.

graph TB
    subgraph "Air - Background Daemon"
        Binary["Binary.rs - Entry Point"]
        VineServer["Vine gRPC Server\nPort 50053"]
        UpdateMgr["Updates/\nUpdate Lifecycle"]
        Downloader["Downloader/\nResilient Downloads"]
        AuthService["Authentication/\nCrypto Signing"]
        HealthCheck["HealthCheck/\nProcess Monitoring"]
        Metrics["Metrics/\nTelemetry Collection"]
        HTTP["HTTP/\nHTTP Client with DNS"]
        Initialize["Initialize/\nStartup Sequence"]
        Logging["Logging/\nStructured Tracing"]
    end

    subgraph "Mountain - Main Application"
        MountainCore["Mountain Core"]
        VineClient["Vine gRPC Client"]
    end

    subgraph "External"
        Cloud["Update Servers / Registry"]
    end

    MountainCore --> VineClient
    VineClient --> VineServer
    VineServer --> UpdateMgr
    VineServer --> Downloader
    VineServer --> AuthService
    VineServer --> HealthCheck
    UpdateMgr --> Cloud
    Downloader --> Cloud
    Binary --> Initialize
    Initialize --> VineServer
    Initialize --> Logging
    Initialize --> Metrics

Key Modules

PathDescription
Source/Binary.rsBinary entry point; bootstraps Tokio runtime and starts daemon
Source/Initialize/Startup sequence: config loading, server binding, state init
Source/Vine/gRPC server implementation using tonic; routes incoming calls
Source/Updates/Update lifecycle: check, download, verify, apply patches
Source/Downloader/Resilient download manager with pause, resume, and retry
Source/Authentication/Cryptographic signing of binaries and secure token storage
Source/HTTP/HTTP client configured to use Mist local DNS resolver
Source/HealthCheck/Self-monitoring and watchdog for process health
Source/Metrics/Telemetry collection and reporting to Mountain
Source/Logging/Structured tracing output via the tracing crate
Source/CLI/Command-line argument parsing for daemon startup options
Source/Resilience/Retry logic and circuit breakers for network operations
Source/Security/Signature verification and secure storage utilities
Source/Configuration/Runtime configuration loading and hot-reload support
Source/Library.rsLibrary root exposing the public API for integration tests

Data Flow

The following sequence shows how Mountain delegates an update task to Air and receives progress notifications.

sequenceDiagram
    participant Mountain as Mountain Core
    participant AirGRPC as Air gRPC Server
    participant Updates as Update Manager
    participant Downloader as Downloader
    participant Cloud as Update Server

    Mountain->>AirGRPC: CheckForUpdate (Vine/Air.proto)
    AirGRPC->>Updates: Dispatch check request
    Updates->>Cloud: HTTP GET /releases/latest
    Cloud->>Updates: Release manifest
    Updates->>AirGRPC: UpdateAvailable response
    AirGRPC->>Mountain: Return update metadata

    Mountain->>AirGRPC: StartDownload (artifact URL)
    AirGRPC->>Downloader: Begin resilient download
    loop Progress events
        Downloader->>AirGRPC: ProgressEvent (bytes/total)
        AirGRPC->>Mountain: Stream progress notification
    end
    Downloader->>AirGRPC: DownloadComplete
    AirGRPC->>Mountain: Ready to apply

Port allocation:

  • Air listens on [::1]:50053 (reserved for the Air daemon).
  • Cocoon uses [::1]:50052 (the VS Code extension host).

Integration Points

Connecting ElementDirectionMechanismDescription
MountainBidirectionalgRPC over Vine/Air.protoMountain delegates tasks; Air streams progress events back
MistInboundLocal DNS resolverAir configures its HTTP client to use Mist’s DNS for secure resolution
VineInboundProtocol definitionAir.proto defines service contracts; tonic generates Rust server stubs

Configuration

ParameterSourceDescription
Bind addressCLI flag / environmentDefault [::1]:50053; overridable for testing
Update server URLConfiguration fileBase URL for checking and downloading updates
Download cache directoryConfiguration fileWhere partial downloads are stored for resume
Health check intervalConfiguration fileFrequency of self-monitoring checks
Log levelRUST_LOG environment variableTracing filter for structured log output

Air is spawned automatically by Mountain at startup. Mountain detects whether an Air process is already running before spawning a new instance.