Skip to content

Releases: Resgrid/Relay

2.0.32

Choose a tag to compare

@github-actions github-actions released this 28 Jun 02:05
aacf19f

Summary

This PR hardens the relay's long-lived LiveKit voice modes (radio, record, dispatch) and adds proper systemd support for the CLI.

Graceful shutdown under systemd / Docker

  • Adds SIGTERM handling in the console host, so systemctl stop and docker stop trigger the same clean teardown path as Ctrl+C instead of killing the process mid-work.

Resilience layer for LiveKit voice modes

  • Introduces a retry-with-exponential-backoff loop and a circuit breaker in RelayServiceBase that wraps the run for LiveKit modes. Faulted runs are automatically restarted after a jittered, capped delay; after a configurable number of consecutive quick failures the circuit opens and the service faults.
  • A run lasting longer than the "healthy run" threshold resets the failure counter, so only rapid repeated failures trip the breaker.
  • Backoff and circuit-breaker thresholds are configurable via new ResilienceOptions.

Hard disconnect detection and reconnection

  • All three voice modes now listen for LiveKit connection state changes. A transient SDK "reconnecting" only degrades the status; a hard disconnect throws so the resilience layer rejoins the room.
  • Recorder and radio modes use linked cancellation tokens / task completion sources so a hard disconnect promptly unwinds the loop and triggers reconnect.

Sentry telemetry for mode lifecycle

  • Adds a new telemetry abstraction (IRelayModeTelemetry) with Sentry-backed and no-op implementations. Mode start, retry, fault, and stop events are reported to Sentry when a DSN is configured.

Tests

  • Adds unit tests covering backoff calculation, circuit-breaker tripping, transient-failure recovery, and the disabled-resilience path.

Docker image

  • resgridllc/resgridrelay:2.0.32
  • resgridllc/resgridrelay:latest

2.0.29

Choose a tag to compare

@github-actions github-actions released this 25 Jun 22:22
4edaa95

Summary

This PR introduces a complete WPF desktop GUI application for Resgrid Relay, replacing the console-only experience with a modern Windows application, and includes several engine reliability and correctness fixes.

Desktop GUI Application (Resgrid.Audio.Relay)

  • Full WPF-UI/Fluent shell with left navigation rail hosting six screens: Dashboard, Operations, Configuration, Logs, Devices, and About
  • System tray integration — closing the window hides to tray while relay modes keep running; a real quit happens via the tray menu
  • Single-instance enforcement via a named mutex, with a message box if another instance is already running
  • Dependency injection container wiring all views, view-models, and services
  • Dashboard with live service tiles showing connection health pills, audio level meters, squelch/TX/RX indicators, and traffic counters
  • Operations screen with per-mode Start/Stop cards, pre-flight validation summaries, and lifecycle state indicators
  • Configuration screen providing a full editor over all relay settings with secret masking/reveal toggles, validation, and atomic config file saves (also surfaces environment-override warnings)
  • Logs screen with a live streaming log view (~10 Hz batched), minimum-level filtering, auto-scroll, copy, and clear
  • Devices screen enumerating audio input/output devices, serial ports, and CM108-class HID devices
  • About screen with version info and a run-at-Windows-startup toggle (HKCU Run key)
  • Custom controls (LevelMeter, Sparkline, StatusPill) and a suite of value converters for consistent status visualization

Engine Improvements (Resgrid.Relay.Engine)

  • Service lifecycle hardening: re-entrant start protection, atomic state/CTS transitions so StopAsync can't slip through a startup window, and pre-flight failure detection that transitions services to Faulted instead of silently reporting success
  • Accurate connection-state reporting: API and TTS connections now report Connected only after actual verification rather than optimistically at startup; Redis and TTS use Unknown (unprobed) instead of a stuck Connecting state
  • RadioBridge squelch/receiving fix: prevents own TX feedback (during AntiLoop suppression) from being incorrectly counted as receiving audio, which would have suppressed in-progress transmits
  • Configuration layering system: layered config (appsettings.json → per-user relay.user.json → RESGRID__RELAY__ env vars) with atomic writes and env-override detection
  • UI log pipeline: a bounded, lossy channel-based log bus and Serilog sink that feeds log records to the desktop UI
  • Mode factory now defaults to smtp when mode is null or whitespace

Build Configuration

  • Added Directory.Build.props defining the NET10_0_WINDOWS preprocessor symbol for the net10.0-windows TFM, ensuring Windows-only code (radio/audio modes, device enumeration, WPF) compiles into the Windows build while staying excluded from cross-platform/Linux builds

Docker image

  • resgridllc/resgridrelay:2.0.29
  • resgridllc/resgridrelay:latest

2.0.12

Choose a tag to compare

@github-actions github-actions released this 29 Apr 15:09
bce535a

Docker image

  • resgridllc/resgridrelay:2.0.12
  • resgridllc/resgridrelay:latest

2.0.7

Choose a tag to compare

@github-actions github-actions released this 28 Apr 17:28
5390fa3

No release notes provided.

Docker image

  • resgridllc/resgridrelay:2.0.7
  • resgridllc/resgridrelay:latest

Version 1.0

Choose a tag to compare

@ucswift ucswift released this 22 Jun 05:01

The initial release of the Resgrid Relay application.

  • Updated documentation and versions
  • Finished setup command
  • Fixed spelling issues

Version 1.0 BETA 1

Version 1.0 BETA 1 Pre-release
Pre-release

Choose a tag to compare

@ucswift ucswift released this 27 Jul 00:25

First beta of the Resgrid Relay application. Console app only and the initial implementation of tone detection and audio listener.