Releases: Resgrid/Relay
Releases · Resgrid/Relay
Release list
2.0.32
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
SIGTERMhandling in the console host, sosystemctl stopanddocker stoptrigger 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
RelayServiceBasethat 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.32resgridllc/resgridrelay:latest
2.0.29
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
Connectedonly after actual verification rather than optimistically at startup; Redis and TTS useUnknown(unprobed) instead of a stuckConnectingstate - 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
smtpwhen mode is null or whitespace
Build Configuration
- Added
Directory.Build.propsdefining theNET10_0_WINDOWSpreprocessor symbol for thenet10.0-windowsTFM, 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.29resgridllc/resgridrelay:latest
2.0.12
Docker image
resgridllc/resgridrelay:2.0.12resgridllc/resgridrelay:latest
2.0.7
No release notes provided.
Docker image
resgridllc/resgridrelay:2.0.7resgridllc/resgridrelay:latest
Version 1.0
The initial release of the Resgrid Relay application.
- Updated documentation and versions
- Finished setup command
- Fixed spelling issues
Version 1.0 BETA 1
First beta of the Resgrid Relay application. Console app only and the initial implementation of tone detection and audio listener.