Releases

Download the latest AirCast Raspberry Pi images and view version history.

v1.2.3-stage.9

Latest
May 3, 2026

v1.2.3-stage.9

Changelog

  • 35f176eci: add debug output for GPG key visibility in aptly step

v1.2.3-stage.8

May 3, 2026

v1.2.3-stage.8

Changelog

  • 15430f8ci: set aptly gpgProvider to gpg explicitly

v1.2.3-stage.7

May 3, 2026

v1.2.3-stage.7

Changelog

  • 9d25610ci: fix GPG key visibility for aptly by exporting GNUPGHOME
  • cdd74bcci: configure aptly to use gpg2 for package signing

v1.2.3-stage.6

May 3, 2026

v1.2.3-stage.6

Changelog

  • bd24b8achore: add .claude/ to gitignore
  • a1093c7fix: update tests for 4Mbps start bitrate and add GOWORK=off to hooks
  • 6c198a7fix: wire GCC bandwidth getter to SFU publisher instead of empty P2P registry
  • f7d8e84fix: prevent false zombie detection when Pion stats are limited
  • dfd3123feat: persist modem recovery state across agent restarts
  • c805921refactor: use forked go-onvif library directly for ONVIF bitrate control
  • e69e2d6test: remove time.Sleep from SwapStream test
  • aeafb38refactor: resolve code review issues for SwapStream
  • f6ca546fix: send clean ONVIF SetVideoEncoderConfiguration via direct HTTP with WS-Security
  • 87a5727fix: namespace-agnostic XML parsing for ONVIF GetVideoEncoderConfiguration
  • 48f78c7fix: add debug logging for GetVideoEncoderConfiguration fallback
  • 06de710fix: retry ONVIF verify on failure instead of permanent disable
  • 9a30202refactor: add canonical wide events to ONVIF camera controller
  • 4e97bd6fix: fetch full encoder config when GetProfiles returns empty fields
  • db7f142fix: use library's device connection for ONVIF SetVideoEncoderConfiguration
  • 248143afix: use exponential backoff for ONVIF bitrate control retries
  • b5d04ccfix: reduce ONVIF backoff from 5 minutes to 30 seconds for faster recovery
  • 2742d85fix: restart recovering pipelines in route monitor
  • 156cc5cfix: start camera at 4 Mbps instead of 1 Mbps — reduce on congestion, not ramp up
  • 6d57024fix: reduce ABR stability period from 30s to 10s for faster bitrate ramp-up
  • 29da0f6fix: harden SwapStream with status guard, nil check, and codec preservation
  • 884d045fix: disable HTTP keep-alive for ONVIF requests to prevent stale connections
  • a373b51fix: use minimal SOAP body for ONVIF SetVideoEncoderConfiguration
  • 27baaa6fix: hot-swap media stream on source reconnect without tearing down SFU
  • e1eaacffix: increase ONVIF timeout to 5s and retry on EOF
  • 9bfed05fix: allow deferred SFU reconnect when media stream is nil during pipeline recovery
  • eb9c44bfix: ABR stuck at 1 Mbps — allow increases without sessions, retry ONVIF
  • 717b08bfeat: add deep modem observability — USB, interface, and signal tracking
  • 9805b12feat: add modem_check event on every 10s poll for deep modem tracking
  • 00fe79dfeat: add detailed modem recovery tracking events
  • 6628369fix: increase maxRapidICERestarts from 3 to 10 for cellular resilience
  • 89f5963fix: raise SFU health monitor RTT thresholds for cellular networks
  • 9ba16e0fix: return stale ICE server cache instead of nil on API fetch failure
  • e0b64edfix: match consumers by media type string instead of pointer on reconnect
  • dc61fabfeat: add consumer_restart_pre_check diagnostic log
  • 9d783e1test: comprehensive test coverage for InternetPrioritySwitcher
  • b8f17a6feat: auto-rollback internet priority when selected network has no internet
  • 5628dc1fix: clean up stale buildx builders before CI builds
  • ab76b7cfeat: reliable internet priority switching with InternetPrioritySwitcher
  • a3ab595fix: close stale SFU WebSocket connections before reconnecting
  • 28a8068Revert "fix: wire GCC bandwidth estimate to SFU track bandwidth limiter"
  • 43a613bfix: wire GCC bandwidth estimate to SFU track bandwidth limiter
  • d63040afix: lower keyframe-only threshold from 5x to 2x for RTSP cameras
  • d7b22d2fix: remove autoStartDefaultRoutes from hook — route monitor handles it
  • 81acfb8fix: make autoStartDefaultRoutes concurrent and non-blocking
  • 6d86f64fix: cancel stall monitor goroutine on track re-setup to prevent leak
  • 6e3259dfeat: force TCP TURN on cellular to survive LTE NAT rebinding
  • e2c6245fix: address code review — periodic callback, clear on stop, fix comments
  • 93affb6fix: propagate SFU reconnect failures to pipeline for auto-recovery
  • 8322719fix: remove dead pipelines from registry so route monitor can restart them
  • ce111c4feat: report device features in session ready for opt-in SIYI UI
  • 5feda4bfix: start routes concurrently and reduce stream wait timeout
  • 4af656dfix: re-enable force relay (symmetric LTE NAT requires TURN)
  • 6478ac3fix: disable force relay on agent for stable LTE connections
  • 3359720fix: increase SFU request timeout from 10s to 30s for LTE networks
  • 717c680chore: pin Go 1.25.5 and update skip-duplicate-actions to v5
  • dff4832perf: optimize CI pipeline — merge build+release, reduce runner contention
  • 30e17d6feat: expose LTE signal metrics (RSRP, RSRQ, SNR) via modem API
  • 8a7b844fix: switch to keyframe-only mode when severely overbudget (>5x)
  • 0460c93fix: resolve lint errors in WebRTC session cancellation
  • 2786717fix: prevent orphaned WebRTC sessions from blocking new connections
  • c283787fix: prevent SFU publisher from getting stuck on dead media stream after RTSP reconnect
  • 0b78cb6fix: suppress gosec G115 for safe int-to-uint32 netmask conversion
  • 1b48b03fix: treat unknown current version as needing update
  • 04a53bbrefactor: make USBNetworkMonitor sole owner of USB interface lifecycle
  • 55e90a9fix: untrack generated output.css that was breaking GoReleaser
  • 6cc0653fix: auto-update gets permanently jammed after failed apt install
  • 6d802f8fix: data race in GetOrCreateSource reading refCount after unlock
  • 7ccc2adfix: resolve lint errors for unused param and unused func
  • b06e83ffix: use debian base for CSS builder stage (Tailwind needs glibc)
  • b613f24fix: use multi-stage Docker build for cross-platform Tailwind CSS
  • f7bd643fix: use TARGETARCH for Tailwind binary in Docker cross-compilation
  • 5b0aa96perf: optimize build times across local, CI, and Docker builds
  • 610474cfix: stop route-metric-validator from destabilizing cellular bearer
  • 65b4456fix: resolve code review issues across source manager, WebRTC, and routes
  • e16ad76fix: ensure SFU routes exist at boot before starting pipelines
  • 2723f7erefactor: simplify tailscale resume connection and reduce lock scope
  • 1432cf3feat: add update_in_progress field to package status response
  • 1a3b613refactor: remove unused ActionSessionInit and ValidateAndFixRouteMetrics
  • 4d02b6ffix: detect and recover from tailscale node-not-found errors
  • 92d3948feat: add internet priority switching to prefer WiFi over cellular
  • 5248be8fix: resolve source manager lock contention and WebRTC signaling races
  • 2991c5ffix: stop SFU publisher reconnecting with stale stream after source reconnect
  • 5848807fix: deduplicate video tracks in dynamic attach to prevent duplicate a=msid SDP lines
  • a89434fci: optimize builds for self-hosted runner
  • 8c8d7dbfix: increase timeout for speedtest handler to 120s
  • c572e71fix: defer QMI mode switch to after stable connectivity
  • 02c074afix: use timestamp in snapshot versions for correct APT sorting
  • 429e978feat: add network speed test functionality
  • 843e955feat: auto-switch SimTech modems from PPP to QMI mode at boot
  • 891f124fix: resolve deadlock in WebRTCDestination.Start() when existing sessions present
  • 423f6a6fix: disconnect dead cellular route to unblock WiFi failover
  • f7947f3fix: detect zombie SFU connections with zero RTP but active RTCP
  • c964d5ffix: video device count, WebRTC listener race, SFU circuit breaker, interface state detection
  • d850f96ci: fix release pipeline skipping on tag pushes
  • 2e1276efix: redact RTSP credentials in errors, fix stale SFU loss rate, fix WebRTC listener race
  • 557e92cfix: add gosec nolint to ParseForm calls and cleanup stale E2E containers
  • f91b537fix: quote docker port command to avoid YAML parsing error
  • 67d06a8ci: trigger test workflow
  • ca9e3aefix: add remaining gosec nolint directives and use dynamic SFU port in E2E
  • 8380eedfix: add gosec nolint directives for false positives on x64 runner
  • 75e3ca3fix: run E2E tests on X64 runner for amd64-only SFU image
  • f93a15dfix: resolve lint errors, test failures, and WaitGroup.Add race
  • bbc6494ci: pin release workflow jobs to Linux runner
  • 89189a2fix: detect architecture for Tailwind CSS binary in CI
  • bec439afix: resolve data races and add missing IsConnectionError to test mocks
  • 469a067fix: run E2E tests on Linux runner for Docker service support
  • 8cc82f2ci: trigger .deb release on push to develop without pi-gen
  • 2671c46fix: add IsConnectionError to relay MockClient for SDK interface change
  • 70c483dfix: install Tailwind CSS without sudo on macOS runner
  • 001a2dbfix: CI workflow for macOS self-hosted runner and uncommitted changes
  • 92df259feat: implement IsConnectionError on WsConnectionAdapter
  • f154784fix: update SDK with comprehensive queue tests
  • 0ec5ecbtest: add integration test verifying GCS heartbeat fields reach drone
  • e6f8c51fix: update SDK with isConnectionError extraction and TOCTOU fix
  • c84a179fix: replace time.Sleep in droneHeartbeat tests with fast ticker
  • f2a8b8efix: resolve all golangci-lint errors
  • 230611arefactor: introduce classifyConnection as single source of truth for connection types
  • 6a591a4refactor: remove dead RoutingTargetDroneOnly and rename SendCommandToDrone
  • 665886bfix: detect QMI/wwan modem connections as cellular
  • caaccccfix: restore SFU publisher after network recovery
  • 605b786test: add unit tests for SOURCE_OFFLINE error code in route handlers
  • f51358dfix: bump gomavlib to v3.3.1-aircast.7 with race-free tests
  • eab2f8bfix: upgrade gomavlib to fix pong deadlock on 4G networks
  • 664a2b1feat: send GCS heartbeats from agent to prevent failsafe on 4G degradation
  • dcce31bfeat: return SOURCE_OFFLINE error code when camera source is paused
  • 7459852fix: prevent WebRTC session creation timeout during SFU reconnect
  • 210dd3ffix: prevent WebSocket error cascade on context cancellation
  • 3255dd8fix: reduce resource waste from RTSP probes on Pi
  • 48006ebfix: resolve lint errors and flaky RTSP test
  • d2ee86cfeat: broadcast source status on pipeline state recovery and failure
  • 80a5ceffix: detect NDIS modems via NM connection type and add SFU waiting state
  • bae37e7fix: update SDK to prevent queue death spiral
  • 850ff42fix: reconnect message client and router after WebSocket recreation
  • 0429cb1fix: prevent stale-token retries after WebSocket reconnection
  • 90efd25fix: handle paused RTSP sources, fix action constant, add modem activation escalation
  • ca57539fix: resolve all lint errors and data race failures in CI
  • 08c0d90fix serial switch
  • d1a4430ci: add weekly GHCR cleanup for untagged container images
  • e2d770ffeat: auto-pause RTSP source after consecutive failures
  • 484e222fix: throttle ABR stats broadcast to every 5 ticks instead of every tick
  • e4dae95fix: prevent unnecessary teardown of connections waiting for drone
  • 7990899fix: use config DataDir for disk buffer path instead of hardcoded /var/lib/aircast
  • d3d1503fix: use safe Get for optional services in message router
  • 47cfca8test: add RC override started flag tests for throughput reset independence
  • acb2aaafix: trigger recovery immediately on USB interface corruption detection
  • 4de493dfix: use dedicated flag for first RC override log to avoid re-logging after throughput reset
  • 9ce0403fix: detect zombie WebRTC sessions via RTCP activity tracking
  • 4022ae7feat: add canonical logs for SFU WebSocket diagnostics
  • 381652afix: graceful handling of 4G modem overload death spiral
  • 0052229fix: close WebRTC sessions on modem reconnect to prevent session exhaustion
  • ca25ef0fix: rate-limit datachannel drop logs and skip enqueue without consumers
  • d82f8affeat: add RC override (joystick) logging to MAVLink frame routing
  • 152c39dfix: buffer pre-connection ICE candidates, fix drop log spam, enable WAL
  • 2c517b0fix: prevent USB bounce from killing API connection on shared interface
  • 9eaf92bchore: update gomavlib to v3.3.1-aircast.5
  • 353c6f6fix: return error from HeaderProvider when auth token unavailable
  • f1ca28efix: prevent read loop stall from blocking ping/pong processing
  • b34724cfeat: add RTCP REMB bitrate feedback for plain RTSP sources
  • 2542706refactor: update e2e test constants
  • 381116efeat: add WaitForStream to ABR source decorator
  • 081e640refactor: inject dependencies into websocket handlers directly
  • eeefba7refactor: improve WebRTC session media and expand tests
  • 4a2e5f6fix: improve terminal session manager lifecycle
  • 6728d3efix: improve MAVLink connection lifecycle and add tests
  • 86df7b8chore: update shared utilities and wire new dependencies
  • 8fc79cffeat: add media preview handlers and improve WebRTC session management
  • d5b5c89fix: improve MAVLink connection lifecycle and config builder
  • 59ba585feat: drop terminal session privileges to non-root user
  • 45732fdrefactor: simplify auth service tests and improve oauth2 error handling
  • 9b44b00refactor: improve environment manager with dependency injection
  • f04aafechore: regenerate templ files for v0.3.1001
  • 420725brefactor: relocate testutil and counterdumper packages
  • e696decfix: resolve code review issues across agent codebase
  • 211d349fix: instrument frames_to_datachannel counter in throughput logging
  • 18d8ffafeat: add debug logging for MAVLink serial connection lifecycle
  • 2f398a7feat: add MAVLink throughput logging and fix Loki offline buffering
  • c23b9d8fix: remove duplicate BroadcasterProvider registration causing panic on startup
  • 80fc22efeat: prefer NDIS over PPP for cellular, add PDP context reset and activation diagnostics
  • ca8ba70feat: auto-manage USB ethernet interfaces via D-Bus
  • 0bfb406refactor: add error wrapping at package boundaries
  • 3b2a003refactor: propagate parent context instead of context.Background()
  • 34f7a2arefactor: decompose MediaStream into sub-interfaces (ISP)
  • 242422crefactor: extract magic numbers into named constants
  • 4e985f2refactor: split god objects into focused files
  • 6f9393crefactor: add MustRegister/MustRegisterHook to DI container
  • a7be382refactor: consolidate Clock/Timer interfaces into domain/shared
  • 1dddc0fadd e2e test
  • 67ef268feat: improve cellular connectivity with PDP reset, hotspot triggers, and diagnostics
  • a73bc4dfeat: add periodic auto-connect retry and PDP context reset for modem
  • 926ee5bfix: recover gracefully from corrupted keyring store
  • a187eecfix: resolve gosec lint warnings in backoff calculation
  • c6cfec1fix: detect USB interface corruption when modem reports connected with zero signal
  • f199f91refactor: MAVLink architecture improvements and modem port safety
  • d4d0492fix: resolve gocritic lint violations
  • 712226afix: resolve data race conditions in test mocks
  • f0b1d79test: add drone disconnect reason status tracker test
  • be1bfc0fix: resolve lint errcheck and gocritic violations
  • 1c9b11ffeat: add SFU bandwidth feedback handler and measured bitrate getter
  • 308f9fcfix: throttle ws_error events and reduce queue to prevent reconnect storms
  • e140b42fix: use WriteControl for ping/pong to prevent congestion disconnects
  • b9e28c9fix: only update connection status from drone channel events
  • 2f4273ffeat: show measured RTSP bitrate in ABR stats UI
  • feb91ecfix: resolve lint errcheck violations and stale connection reuse in publisher
  • 1a06516fix: sync initial bitrate to camera on ABR startup
  • ec3b1dffix(ci): fix YAML parse error and outdated action versions in test workflow
  • 02505dfrefactor: rewrite RTSP camera e2e tests with piClient abstraction
  • ad4ccb0refactor: extract CameraNetworkService and RefactoredRTSPCameraHandler
  • e8e44f4fix: cascade-delete routes and stop pipelines when deleting sources or destinations
  • a43cb83refactor: extract ConsumerCreator interface for SFU publisher
  • ce42b85feat: add immediate SFU reconnect on server shutdown
  • 60041cafix: allow detaching media streams during running P2P sessions for recovery
  • d20b532feat: add URL-based connection pooling to prevent duplicate RTSP connections
  • ad93ea4feat: use discovered ONVIF port and credentials for camera bitrate control
  • 6191c8ffeat: add ONVIF subnet scan fallback and manufacturer default credential retry
  • 8ad5fd5feat: use SFU bandwidth feedback as primary ABR signal
  • 840fbc8fix(webrtc): remove GCC from P2P sessions to fix VBR camera streams
  • 605c3b4fix(sfu): prevent false unhealthy from Pion stats limitation
  • 56e18c1fix(webrtc): deduplicate tracks by media type to prevent duplicate a=msid
  • 56dc193fix(sfu): disable WebSocket compression and increase buffers
  • 332b3f4test: update e2e test suites for RTSP and source recovery
  • 3fd78c7feat: SFU publisher reconnect and WebRTC session manager improvements
  • c5e7f5efix: enable agent-driven MAVLink rate control
  • 378757afix: aggressive WebSocket keepalive for 4G carrier NAT survival
  • 40a4ba1fix: disable ONVIF controller after 3 consecutive failures
  • d8745f9feat: add ONVIF bitrate control for non-OpenIPC cameras
  • 2e7924frefactor: auth simplification, ABR improvements, modem recovery, SFU health
  • 51fc71afix: worst-case subscriber quality merge and RTCP diagnostic logging
  • 95b97b9refactor: collapse plugin system and remove unused codecs
  • 5a38174test: add PLI rate limiting and keyframe replay throttle tests
  • 4da35f5fix: add PLI rate limiting at track and stream layers to prevent PLI storms
  • 2037593feat: add ICE restart as fast reconnect path with jitter backoff
  • acd0a0cfix: keep RTCP RR TotalLost consistent with local sequence tracking
  • 5a91e2afeat: add camera HTTP proxy handler for remote camera UI access
  • c000459fix: use SSH connectivity check instead of ping for deploy preflight
  • fbc90b0feat: add media quality logging — FPS drop detection, GCC bitrate change visibility
  • c733092feat: relay RTCP receiver reports from P2P viewer to camera
  • 2c09510fix: bandwidth limiter gate unreliable — use time-based grace period
  • a3b334ffix: P2P bandwidth limiter not dropping frames
  • 6f8561drefactor: downgrade webui and utility logs to appropriate levels
  • 807dec5refactor: migrate remaining scattered logs to canonical events
  • f51039erefactor: downgrade noisy Info/Warn logs to Debug
  • ef7b753refactor: migrate remaining scattered logs to canonical wide events
  • f1c242crefactor: migrate all scattered logs to canonical events
  • c4b0b27feat: add trace context to canonical events and migrate network lifecycle logs
  • 79d8781feat: add canonical log lines for wide event observability
  • 3b204d1feat: WebRTC GCC bandwidth estimation, SFU reconnect scheduler, and web UI improvements
  • be30d1bfeat: auto-create SFU routes for all sources alongside WebRTC
  • 7f2751efeat: add default SFU destination on boot
  • b130e6ffix: modem monitor and websocket error improvements
  • 33e0d4efix(rtsp): improve backoff reset test to measure elapsed time from actual connection drop
  • 50ef663fix(websocket): add structured error types and expand RTSP/pipeline tests
  • 86025affix(modem): improve recovery logic and expand modem monitor tests
  • d6e1f26fix(scripts): support user@host PI_HOST format and handle SSH drops during deploy
  • 58aa0e6feat(e2e): add mock network interfaces support and allow re-scanning cameras
  • 5f247f5feat(discovery): fall back to subnet scan when specific camera IP probe fails
  • b124477fix(network): remap Ethernet interface states for clarity
  • a7d61defix(stream): improve consumer error logging -- context cancellation is debug, not error
  • 6c6c13afeat(network): reset WebSocket backoff on modem reconnect for faster recovery
  • 61bd7cdrefactor(abr): move rate limiting from CameraController to ABR coordinator
  • 912df49refactor(media): change MediaSource.Status() return type from string to SourceStatus
  • 74558dafeat(media): add RTSP source auto-reconnect and pipeline source-driven recovery
  • dc29ddbrefactor(mavlink): introduce ConnectionStatusTracker as single source of truth for connection state
  • c949503refactor(websocket): replace listener map with typed callbacks, remove health monitor and stats collector
  • e67fe64chore: miscellaneous improvements and fixes
  • b5cdd40feat(providers): add source health tracking for media routing
  • 4fe3044feat(webrtc): improve WebRTC session management and stability
  • ebf5479refactor(auth): improve OAuth2 token refresh flow
  • 5e1e31dfeat(rtsp): improve RTSP error handling and UDP timeout detection
  • b31f32ffeat(mavlink): add connection flapping detection and stability improvements
  • f781b6ffeat(mavlink): add real-time connection status events
  • b3e824arefactor(discovery): separate local and network discovery into packages
  • 53a14f8feat(e2e): add mock support for camera interfaces and network analysis
  • c731685fix(mavlink): detect TCP/UDP channels wrapped in EndpointCustomClient
  • 6d95fbctest(system): add unit tests for auto-update functionality
  • bef2609feat: make auto-update trigger immediately
  • 5cd7f44fix(mavlink): correctly identify TCP/UDP channels wrapped in EndpointCustomServer
  • 85d2c1achore: add SystemHealthProvider implementation to StatusMonitor
  • 2e255a5chore: add missing health_provider.go
  • a2c2eb9feat: implement auto-update trigger when enabled
  • 852380ffix: detect environment from API host when no state file
  • 6651fa1feat: enable auto-update for dev environment profile
  • 29fab7dfix(modem): reconnect D-Bus after ModemManager restart
  • 83f3f8frefactor(handlers): consolidate error codes and enhance WebRTC logging
  • 4a32137fix(sources): refresh cached source after config update
  • bbeea1efix: handle invalid_credentials error in auth retry loop
  • aee1799fix(rtsp): handle UDP transport issues with auto-fallback to TCP
  • d59a481fix(auth): add invalid_credentials to auth error types
  • 4d32801test(auth): add test for invalid_grant credential clearing
  • 479f558fix(auth): clear tokens after 3 consecutive 401s instead of 10
  • 0861373feat: add cellular auto-connect when modem becomes registered
  • e63159dfix: use update-first approach for Aptly publish
  • 0f69742fix: register connectivity_checker before NetworkManager check
  • 665d30fci: use self-hosted runners for all workflows
  • 8436e39ci: use self-hosted runners for docker workflow
  • 89ba915refactor: improve architecture with error logging and layer separation
  • 392bb9dfix: add device heartbeat to prevent stale session detection
  • 00770d1Add end-to-end latency logging for video pipeline debugging
  • 9cc9c67feat(helm): add secretEnv support for secret-based env vars
  • 62448a6Add auto_connect option to mavlink.config.create handler
  • 169f310chore: update aircast-sdk with IsClosed connection fix
  • 2c97625test: add integration tests for IsClosed connection state fix
  • 38a510ffeat(auth): add E2E token support for simulator authentication
  • 9147771refactor(mavlink): simplify rate control and improve connection handling
  • c8b8c52fix(websocket): detect temporary disconnections in IsClosed() for queue flush
  • d8850a0fix(mavlink): prevent connection cycling with grace period for new connections
  • d9b764ffeat(mavlink): add filter stats to rate control ack
  • 67679b5feat(mavlink): add dynamic WebRTC endpoint registration and datachannel events
  • 6126466fix(mavlink): enable WebRTC telemetry forwarding for all connection types
  • f6dc6ccfeat(mavlink): add receiver-driven rate control
  • f872564chore: trigger auto-deploy test
  • c2f1696Add modem signal quality to WebSocket reconnection logs
  • 52f2386refactor(mavlink): require explicit API host/port configuration
  • f2a59d4fix(mavlink): prevent duplicate connection race condition
  • dba1d06fix(mavlink): enable congestion monitor for all connections
  • 1f73055feat(mavlink): wire congestion broadcaster and refactor MAVLink internals
  • 038b45drefactor(webrtc): use constructor injection for session context
  • 532ee91fix(websocket): make unknown errors recoverable to prevent reconnect loop exit
  • f0ff96cfeat(mavlink): add adaptive rate control for WebRTC congestion
  • 6d082barefactor(keyring,activate): add tracing and fix code review issues
  • ac3f2b5feat(keyring): add migration from legacy paths on startup
  • e7761a5fix: start hotspot when device is not authenticated
  • 31136a9fix: fail release if Pi image build trigger fails
  • f912020fix: correct OTEL collector endpoint for development
  • 33ae628ci: add Telegram notification on test failure
  • 1d0b9faci: add Telegram notification on release failure
  • b1f5756ci: use PAT_TOKEN for cross-repo cleanup
  • 115056fci: add pi-gen release cleanup to workflow
  • 6a21fd5ci: add GitHub release deletion to cleanup workflow
  • 0d24924ci: add git tag deletion to release cleanup workflow
  • bece220ci: add manual trigger to release cleanup workflow
  • 110a8f5ci: add workflow to cleanup S3 on release deletion
  • 614c76ffeat: add release.delete command to remove releases
  • 88c6aa0fix(modem): move nosec directive to line above for gosec recognition
  • 2f4318afix(modem): correct nosec comment format for gosec linter
  • 4dce103fix(modem): resolve gosec and unparam lint issues in recovery service
  • 11dfee4fix(deps): remove local replace directive and update gomavlib to v3.3.1-aircast.3
  • 0574437feat(modem): improve ModemManager recovery with active polling
  • e5c268echore(scripts): add Pi reachability check and udev deployment
  • e114564chore(debian): improve udev rules installation
  • 18b0325feat(webui): improve WiFi configuration interface
  • fcfd8a2feat(system): add network health tracking to status monitor
  • 2ff3e9bfeat(network): integrate connectivity state machine
  • 0d22766feat(system): add modem monitoring and connectivity state machine
  • 3a4db3ffeat(logging): integrate disk buffer with LokiHook for offline resilience
  • d38397bfeat(logging): add disk buffer for offline log persistence
  • 1342d9ffeat(webtransport): add direct connection mode and separate host config
  • 3f8682cfeat(auth): improve authentication and environment handling
  • 11bd93afeat(tls): add TLS support for local development connectivity
  • b1ce6c4feat(env): add multi-environment switching support
  • b4dfa69feat(sfu): add exponential backoff retry for SFU publish failures
  • b61d811feat(tailscale): decouple from auth - start on boot before authentication
  • 51e15e4feat(tailscale): keep connection alive when auth logs out
  • d1bb79efix(tailscale): prevent duplicate device registrations on transient failures
  • 503e230Use templated app label in deployment
  • abe108fdocs(webtransport): add configuration documentation
  • 9ea8b18feat(mavlink): add WebTransport endpoint support
  • 93ddcceIncrease SFU unhealthy loss rate threshold to 50%
  • b0458bechore: migrate gomavlib imports to aircast-one fork
  • b44b378feat(auth): generate drone-themed device names during bind
  • 335eee1feat(siyi): add SIYI gimbal/camera WebSocket control
  • 9bcd348fix(mavlink): increase WebRTC queue and non-blocking writes
  • a75503crefactor(tailscale): use managed service pattern with device ID isolation
  • 3b74b86feat(update): add apt progress streaming and fix stale cache
  • e1895c0fix(cellular): wait for modem registration before connecting
  • c857b4ffeat(tailscale): add SSH forwarder and use device ID as hostname
  • 7804042fix(update): improve update detection with proper version comparison
  • 7543c85feat(rtcp): add comprehensive RTCP observability with bitrate tracking
  • b7e03bdfeat(logging): add wide event logging to webui handlers
  • 849e8a2fix(e2e): fix TOCTOU race in EventEmitter WaitForEvent
  • be08921fix(ci): pin Go version to 1.25.5 to fix cache mismatch
  • 7740a21refactor(media): rebuild pipeline architecture with auto-detect ABR
  • 5a2f80efeat(media): add pipeline plugin architecture for ABR
  • a166fa0refactor(system): improve logging for system update event broadcasting
  • 0003a65feat(tracing): add write stall detection with tracing for outgoing track
  • 4d19032fix: register http_client dependency in SFU provider tests
  • 60b97eechore: run lint and format only on staged files
  • 12fb9c2refactor(infrastructure): remove unused OpenIPC and WebRTC code
  • 637e0e7refactor(media): remove unused bitrate clamping and camera detection
  • 46307ccfix(tracing): improve OTLP endpoint parsing for TLS detection
  • 2648dcdfeat(mavlink): track connection errors in status response
  • 8e3ce78feat(updates): add update orchestrator for safe self-updates
  • 4256de2feat(tailscale): add status types, config, and node ID reporting
  • 9ad6746fix(auth): handle no_credentials error to stop retry loop gracefully
  • d248c99feat(events): add configurable buffer size to event bus
  • 399e6ebfeat(config): add duration and integer helpers to environment config
  • eb3a78drefactor(websocket): simplify reconnector with proper circuit breaker
  • f6fe577feat(sfu): add Tailscale routing support for WebSocket client
  • ab277b9refactor: update remaining components for consistency
  • b532a26chore: remaining ClientProvider adoption and system updates
  • c31a1d6refactor(media): improve SFU publisher and consumer lifecycle
  • 73d1dc0refactor(mavlink): use ClientProvider for MAVLink WebSocket
  • bfc3183refactor(websocket): use ClientProvider for WebSocket dialing
  • dd15e2frefactor(webrtc): use ClientProvider for ICE server fetching
  • 2c33cabrefactor(network): use ClientProvider for connectivity checks
  • 41efc10refactor(logging): use ClientProvider for Loki HTTP requests
  • 3c4fce1refactor(auth): use ClientProvider for HTTP requests
  • ca3d612feat(tracing): route OTEL metrics and traces through Tailscale
  • 5fcd48bfeat(http): add ClientProvider for Tailscale HTTP routing
  • ec39830refactor(logging): adopt wide event pattern for SFU reconnection
  • 71dd284fix(sfu): move consumer stopping from scheduleReconnect to attemptReconnect
  • 8cf8bf0feat(logging): add wide event logging for packet drop diagnosis
  • e6a9b0ffeat(abr): add wide event logging following loggingsucks.com pattern
  • f18af76fix(abr): detect OpenIPC cameras by name instead of source type
  • 2530e5dfix(health): preserve RTCP-reported RTT and loss rate in collectStats
  • a23e3aefeat(logging): add wide event logging for WebRTC stats
  • 7189ad8feat(logging): add wide event logging for WebSocket reconnection
  • e93b767feat(rtcp): implement RTCP feedback and media pipeline improvements
  • 470106dfeat(sfu): detect connection failure via write errors for faster disconnect
  • 4cb772bfix(helm): correct OTEL metrics endpoint service name
  • 9588590fix(sfu): stop consumers during reconnection to prevent buffer overruns
  • 5021e2cfix(ice): fix broken HTTP fallback and increase timeout
  • 34b5318ci(docker): remove arm64, build amd64 only
  • f6ab16eci(docker): build amd64 only for develop branch
  • afa1798feat(network): add SimulatedCellularManager for simulation mode
  • 13a5130fix(webui): handle nil interfaces in StatusCache to prevent panic in simulation mode
  • 887c0c2fix(sfu): mark connection as disconnected on request timeout
  • bb0f182fix(media): recover from error state in StartSource
  • 7ad2bb2fix(sfu): restart consumers on WebRTC reconnection
  • a0fe181feat(stream): add consumer Restart() for WebRTC reconnection
  • 826d0e7fix(counterdumper): make Start/Stop idempotent and thread-safe
  • 945e00afeat(webrtc): add ICE_FORCE_RELAY support for STUNner
  • 9158832refactor(webui): split setup_handler into domain-specific handlers
  • 422a6ccrefactor(webui): split setup_handler into domain-specific handlers
  • be206derefactor(webui): remove adapter pattern, use domain types directly
  • 913d2c1refactor(webui): query cameras directly instead of caching
  • a251048feat(webui): implement GetCameras to fetch from database
  • 5745ebcfix: move SIMULATION_RTSP_URL to environment-specific patches
  • 7845db9feat(simulation): add RTSP camera seeding for simulation mode
  • 6de1c81feat: use GitOps dispatch for automatic sync
  • 1f806a3chore: update Chart appVersion to v0.0.0-dev-a62eaac [skip ci]
  • a62eaacfix: make gitignore patterns root-relative to allow helm/aircast-agent
  • 6c7263cfix: auto-update Chart appVersion after Docker build
  • 383d041chore: update Chart appVersion to latest build
  • 0abe634fix: resolve staticcheck SA5011 in reachability checker test
  • 9b21cc1fix: handle nil cellular manager in handler and provider
  • b149011fix: resolve staticcheck SA5011 false positives in tests
  • 31395e1fix: handle nil connectivityChecker interface in auth handler
  • 2aabdb1feat(simulation): add K8s simulation mode for USB, modem, and MAVLink
  • 61b396ffix(helm): update appVersion to latest build
  • b279536fix(helm): correct image repository and version
  • cd3312echore(helm): update appVersion to v1.2.4-dev.6
  • e9b4a05fix(sfu): add sfu url to all envs
  • 23666e0feat(onvif): remove onvif media source
  • e318c4ffeat(rtsp): add automatic discovery handlers
  • 70c625ffeat(tracing): improve sampling and timeouts
  • 83f72b2fix(e2e): use atomic send-and-wait pattern to eliminate race conditions
  • a5cf3e8fix(lint): remove redundant nil checks in provider tests
  • 2973d76ci: use PAT_TOKEN for GHCR access
  • 8195291ci: add GHCR credentials for aircast-sfu service
  • bc8f587fix(sfu): add WaitGroup to ensure goroutines stop before reconnect
  • b49c8fbfix(test): fix data race and SFU test configuration
  • f9a5c6efix(test): mockDeviceLinux returns default driver for tests
  • cb310d8fix(test): add missing Linux mock types for network package tests
  • 9b8a211feat(tailscale): migrate from CLI to embedded tsnet
  • 226a721feat: add Tailscale integration for automatic network join
  • d757545fix(ci): make .env include optional in Makefile
  • 6191a68fix(media): prevent RTSP destination from dying after startup
  • afec12afix(release): redirect warnings to stderr to prevent version corruption
  • 2527cafci(docker): align workflow with aircast-api pattern
  • 03fd915feat(tracing): add session-level span for SFU connections
  • 51fac56feat(tracing): add OpenTelemetry spans to media pipeline
  • 58b559bfix(e2e): prevent race conditions in route tests
  • 49c7a58feat(tracing): add session-level traces to P2P WebRTC handlers
  • 769cb5dfeat(tracing): link offer/answer/ICE in single session trace
  • f6b809bfeat(tracing): add distributed tracing to SFU WebSocket client
  • 85b3709Remove verbose heartbeat debug logging
  • be22e92feat(tracing): add trace context propagation for events
  • a101ba3build: update Tailwind CSS output
  • 5f51750refactor: improve WebRTC debugging and stream attachment
  • f857b9afeat: fetch ICE servers from API with caching
  • 1951444fix: use routeID as pipeline ID for uniqueness
  • 85ed9f0feat: add error tracking to media sources
  • 2b16770feat: add waiting_for_drone status to MAVLink connection handler
  • 5806a12refactor: improve logging field handling and reduce noise
  • f970424chore: tune message queue for better memory management
  • ae8f433fix: prevent log spam on media consumer context cancellation
  • 23b3aa3chore: downgrade MAVLink frame logs from debug to trace
  • 9f63e6dfix: add timestamp to session IDs and include session ID in track IDs
  • 8ea95fcfix(mavlink): prevent GCS heartbeat echo causing UI state flicker
  • 8cd033brefactor(discovery): code review fixes
  • aad1b8brefactor(discovery): unify RTSP path lists to CommonRTSPPaths
  • 2ab3c7drefactor(discovery): use CameraTypeRegistry for manufacturer detection
  • 8150b22refactor(discovery): consolidate camera ID generation to shared function
  • 6e29d61fix(rtsp): auto-refresh stale tokens and fix device_id mismatch
  • 781d16crefactor(discovery): extract shared RTSP utilities and camera type registry
  • 20828efrefactor(discovery): extract reachability and RTSP validation to discovery package
  • 6c1c9adAdd clearer logging for MAVLink command forwarding and fix network build
  • f8af8b9feat(network): add granular connectivity status for better diagnostics
  • a941208fix(e2e): increase MediaRouteSelectSuite timeouts to 5 seconds
  • b461127fix(e2e): improve MediaRouteSelectSuite test stability
  • 0c1986bfix(e2e): improve test stability with event-driven waiting
  • 388a029refactor(sfu): remove dead API proxy code paths
  • 3b03701refactor(sfu): remove API proxy fallback, use direct SFU connection only
  • 2381b5aRename publisher_ready to room_ready
  • 7eab2adrefactor: update tests for publisher_ready event rename
  • 45054edfix(sfu): resolve deadlock preventing media tracks from flowing
  • a200802Add ICE connection state change handler for faster SFU disconnect detection
  • 6db4eacfix(sfu): auto-start routes when web client connects
  • 4f51c01fix: restore network.camera.analyze handler from master
  • 08bac8cfix(modem): remove build constraint to enable simulated modem on Linux
  • 415a225refactor: clean up dead code and naming inconsistencies
  • 0c7bec9refactor(media): remove dead code duplicates from domain/media
  • 6f4fcd9refactor(rtsp): consolidate duplicate RTSP implementations
  • ab99997refactor(webrtc): consolidate duplicate WebRTC implementations
  • c2194b8refactor(session): decouple WebSession from WebRTC
  • 79d5218fix(webrtc): correct session ID field names in logs
  • 9bac615refactor(media): apply SOLID principles to media pipeline
  • 8236edefix(e2e): use namespaced keyring keys for auth token seeding
  • 1c3b24frefactor(media): eliminate MediaPipeline abstraction and fix goroutine leaks
  • 6bc2224fix(handlers): update ABR stats mock to use proper type
  • 01e1fa5chore: misc infrastructure and test improvements
  • e247f2ddocs: add protocol documentation for Betaflight MSP and SIYI SDK
  • 1debc14refactor(session): improve session and WebRTC handler management
  • 48113fbrefactor(providers): improve provider and service architecture
  • 3e4b0dafeat(webui): add RTSP camera management to web UI
  • 7e15223feat(auth): improve token refresh and auto-clear behavior
  • 2041bc6refactor(media): improve RTSP source and stream handling
  • eb698carefactor(abr): improve adaptive bitrate implementation
  • 4e7171arefactor(discovery): improve IP camera discovery architecture
  • c5bfe26refactor(events): replace broadcaster with event bus
  • e90a763feat(mavlink): add transport configuration support
  • 839901etest(services): add IPCameraScannerManagedService tests
  • 9ddcb3atest(providers): add MediaProvider registration tests
  • 381d58brefactor(discovery): add network abstractions for testability
  • 6e29367refactor(handlers): improve WebSocket handler testability
  • 33fa221Merge branch 'master' into develop
  • f43783eupdate styles
  • fd37413please use Ethernet for ip search
  • c75d6a6feat: add RTSP camera management to web UI
  • 5b98593refactor abr implementation
  • cf1e02bchore: add bin/ to gitignore
  • c56f600fix: only use RTT from nominated ICE candidate pair
  • 9ed77eefix: clean up stale stream sessions on browser refresh
  • 8dc9849feat: add IP camera auto-discovery with RTSP validation
  • ad87f3afix: local deploy IP auto-detection when LOCAL_IP not set
  • 8f97d1dchore: reduce log verbosity and remove emojis
  • db536a9refactor: extract Makefile logic into shell scripts
  • 645fbbbpush debug logs to loki too
  • 3aad1b5refactor: move Clock implementation to infrastructure with proper DI
  • c896f45Move Clock interface to domain/shared for proper decoupling
  • 068488dMerge ABR and camera network analysis from master
  • cff0286Merge branch 'master' into develop
  • 7716f08add PLI forwarding and automatic ICE restart for video recovery
  • 81e18a4add PLI forwarding and automatic ICE restart for video recovery
  • c131b7frefactor: decouple ABR from OpenIPC using Clean Architecture
  • 465c8adrefactor: decouple ABR from OpenIPC using Clean Architecture
  • 51193a7add GCC bandwidth estimation to ABR system
  • 89a5d50add GCC bandwidth estimation to ABR system
  • 0beb147add abr
  • ab7b831add abr
  • 55f5895add abr
  • 3529763add abr
  • 1ead764add NewTestKeyring helper for auth tests
  • de6486cadd NewTestKeyring helper for auth tests
  • c5dd2c5add tracing to remaining websocket handlers
  • 0ee5e18add tracing to remaining websocket handlers
  • f25fc0ffix my envs for tracing
  • 0d9a1f2fix my envs for tracing
  • 4419ee8add tracing to websocket handlers
  • c64a058add tracing to websocket handlers
  • 817fda7fix my envs for tracing
  • ed56501fix my envs for tracing
  • 117041ffix auth logout issues
  • 2598919fix auth logout issues
  • 272e336reformat websocket imports
  • 456c1b7reformat websocket imports
  • c638a4breformat mavlink imports
  • fe33b21reformat mavlink imports
  • 176eb35downgrade registerLifecycleHooks logs
  • e535098downgrade registerLifecycleHooks logs
  • 38d0482add clock testing package
  • 3b54436add clock testing package
  • 5bdd986fix http server boot sequence
  • 96c2bb2fix http server boot sequence
  • 4c6d0b4add DATABASE_PATH environment override
  • 5e99fc4add DATABASE_PATH environment override
  • 9c6561dfix oTEL tracing
  • ef67365fix oTEL tracing
  • b86a1c2add metrics
  • b93fb63add metrics
  • e96f8f5fix nil pointer panic in camera network service registration
  • 1143d76fix nil pointer panic in camera network service registration
  • 722d652extract camera network analysis to domain layer
  • 3eec318extract camera network analysis to domain layer
  • 28b9104fix cellular connection failing after modem re-enumeration
  • 422fa89fix cellular connection failing after modem re-enumeration
  • de212bffix clipboard copy for non-secure contexts (HTTP)
  • 2ad7ae2fix clipboard copy for non-secure contexts (HTTP)
  • 0a8a73bremove network dependencies from service file
  • 7e31c0fremove network dependencies from service file
  • 667ab4dfix release version detection to use stable tags only
  • 93c7ec5fix release version detection to use stable tags only
  • 1d8bb17fix hotspot creation with legacy addresses format
  • d925da0fix hotspot creation with legacy addresses format
  • ca0b787improve connectivity checker
  • 8b932a9improve connectivity checker
  • b26c6e5Merge branch 'master' into develop
  • e882281fix release.stage to strip existing prerelease suffixes
  • 723a41ffix release.stage to strip existing prerelease suffixes
  • 31c62c7rename version.* to release.* and remove confirmation prompts
  • 4f345c2rename version.* to release.* and remove confirmation prompts
  • 380de82add stage tag support to release workflow
  • e7043d1add stage tag support to release workflow
  • b5cc975add version.stage target
  • 4655389add version.stage target
  • e282e23fix version targets to push only specific tag
  • 67c0e0ffix version targets to push only specific tag
  • 9c1e011Replace ffprobe with native gortsplib for RTSP discovery
  • 4ec81a7add new webui interface
  • d7d185eadd new webui interface
  • 4718d1dimprove logs page with infinite scroll and mobile layout
  • f20a4b5improve logs page with infinite scroll and mobile layout
  • a56cb3bsimplify pi-gen trigger (remove VERSION file sync)
  • d65604bsimplify pi-gen trigger (remove VERSION file sync)
  • 0e46c39auto-update pi-gen VERSION file on release
  • 639622dauto-update pi-gen VERSION file on release
  • d510c88fix goreleaser env file mapping for stable/testing distributions
  • 45012bffix goreleaser env file mapping for stable/testing distributions
  • b5dbe7fsingle release workflow
  • 4f4462fadd staging tag support (v1.0.0-staging.1)
  • f6fc30eadd staging tag support (v1.0.0-staging.1)
  • c3f1999combine production and development workflows into single release.yml
  • 8857f1ccombine production and development workflows into single release.yml
  • 6802a37update pi-gen trigger to use build-development-image event
  • 8efa79cupdate pi-gen trigger to use build-development-image event
  • ec44fc2simplify Pi image trigger to use distribution only
  • cb4e8afsimplify Pi image trigger to use distribution only
  • 6feb224trigger Pi image builds for RC releases
  • 218165atrigger Pi image builds for RC releases
  • bd46f45add RC release support to production workflow
  • 6f967b7add RC release support to production workflow
  • 14b4f53refactor webui and fix pre-commit issues
  • 5d4438arefactor wifi scanning to non-blocking API
  • 7756e16refactor wifi scanning to non-blocking API
  • aa7a8a8add new webui interface
  • b7511beadd new webui interface
  • caf46e8fix hotspot reconfiguration
  • 1f27cedfix hotspot reconfiguration
  • 1275879add get typed container config
  • fcb4fc9add get typed container config
  • c0c6ae3fix lint issues in network provider and connection validator
  • 437557eMerge branch 'master' into develop
  • c938c4eadd ignore ipv6 routes
  • 182af91add ignore ipv6 routes
  • 2c8845bignore ipv6 to prevent reconnections
  • d0578b1ignore ipv6 to prevent reconnections
  • a75562dfix serial autoconnect
  • 85cc5dcfix serial autoconnect
  • 675455fMerge branch 'master' into develop
  • 655a201fix: update aircast-pi-gen repository to aircast-one organization
  • bc767b5fix: update aircast-pi-gen repository to aircast-one organization
  • 80afabbfix: set route-metric for ethernet and prevent hotspot default route
  • b2538b4fix: set route-metric for ethernet and prevent hotspot default route
  • 7aeaa91fix: update goreleaser owner from pavliha to aircast-one
  • 370c1d1fix: update goreleaser owner from pavliha to aircast-one
  • a4fee92refactor: event-driven NetworkManager route management with D-Bus signals
  • dfaf711refactor: event-driven NetworkManager route management with D-Bus signals
  • eeb44d5fix: validate route-metrics on device changes to handle boot race condition
  • 6a9109ffix: validate route-metrics on device changes to handle boot race condition
  • 5c033c7refactor: remove disabled RouteMetricManager code
  • 9055d5brefactor: remove disabled RouteMetricManager code
  • 78e9b74Merge branch 'master' into develop
  • f1c6be2fix fps count
  • 0ed7d48fix fps count
  • 8a72b82fix: prevent USB ethernet (cameras) from creating default routes
  • 039722dfix: prevent USB ethernet (cameras) from creating default routes
  • a388afefix: deduplicate MAVLink devices and add auto-baud rate detection
  • 243abb5fix: deduplicate MAVLink devices and add auto-baud rate detection
  • 65584fbfix route managment
  • cad2a04fix route managment
  • 7a70d6erefactor: reduce connectivity checker log noise
  • f4ec066refactor: reduce connectivity checker log noise
  • 83c5419fix: preserve existing network settings when updating route-metrics
  • 56cf3c4fix: preserve existing network settings when updating route-metrics
  • 3a08911fix: preserve all IPv4/IPv6 settings when updating route-metric
  • fee3a39Migrate CI/CD workflows to self-hosted runner
  • 86197c6Improve Network page UX and add USB tab
  • 309d87eSimplify cellular configuration form
  • 20ba8d5Add loading state and validation to cellular configuration
  • d633484Separate WiFi configuration from bind functionality
  • ef83b7cAdd tab-based navigation with separate pages for each section
  • a5bd609Fix WebUI dependency injection and refactor Router
  • 39980f5Consolidate templates into shadcn-like component library
  • 3219c84Refactor Router to use RouteRegistrar interface
  • 4c37168Use di.GetTyped helper in MAVLink and MediaRouting providers
  • 77d34d6Fix system provider tests to execute auth.complete hook
  • dd4f9bcRefactor router to pure DI and simplify WebUIProvider
  • 5ed1048add new get typed method
  • fcca8b4Refactor web UI handlers with comprehensive unit tests
  • c8c1f38Set Content-Type header for 404 page to text/html
  • ec99207Fix 404 page handling and improve user experience
  • f47ae21Optimize login and main page with async data loading
  • 39baf06Optimize web UI performance with async loading and background caching
  • ea52178Make WiFi manager optional for Kubernetes deployments
  • 07641d8feat(build): add make test.docker for Linux environment testing
  • d8122e3test(network): remove unnecessary sleep from DeviceChangeReaction test
  • 23a54b7perf(network): add D-Bus signals, retry logic, and configurable delays
  • 0db224ffix(network): add shutdown hook for RouteMetricManager and USBNetworkMonitor
  • 6326bd2refactor(network): improve RouteMetricManager architecture
  • f93f61fCommit built CSS file and simplify Docker build
  • 25aae41Use TARGETARCH for multi-arch Docker builds with tailwindcss
  • eb0812cFix tailwindcss architecture detection in Docker build
  • dd0d224Build WebUI assets in Docker for web access
  • 4f1c5b6Use nginx ingress class instead of traefik
  • b1a75e7Add Ingress support to Helm chart for external access
  • 0200059Add GitOps repository dispatch trigger for automated deployments
  • 1efdcbcImplement semantic versioning for Docker images
  • 1e16cf3Fix pre-existing test failures
  • dcc4b6dFix update checker initialization - resolve dependencies after managed services start
  • d227651Fix shouldConfigureInterface to include USB interfaces
  • a61097eForce Docker rebuild - update checker fix wasn't applied due to layer caching
  • 8b9cb6bFix linter warning: use switch instead of if-else chain
  • 3557bafFix test failures and linter errors
  • b3ee98cFix update checker to start after authentication
  • a2833adAdd comprehensive test coverage and Docker test runner
  • 9269de2Remove SKIP_MODEM_PROVIDER to test DBus fallback
  • 1684780Use PAT_TOKEN for GHCR authentication
  • 2abf6a4Build Docker image for amd64 only to speed up CI
  • 939ffb3Refactor route metric manager to use event-driven architecture
  • 037c35dRefactor route metric manager to use event-driven architecture
  • c01ab1bRefactor route metric manager to use event-driven architecture
  • 750753aSkip WebUI asset building in Docker - not needed for container deployment
  • 64e517fDownload correct Tailwind CSS binary for target architecture
  • 18b67bfCombine Tailwind CSS download and build in single RUN step
  • 7e27059Run tailwindcss and templ directly instead of via Make
  • 7e19838Fix route metric manager to use NetworkManager API for modem detection
  • 9a81290Fix route metric manager to use NetworkManager API for modem detection
  • f41213cInstall tailwindcss to /go/bin and remove unused test types
  • 927de18Remove Makefile from .dockerignore to enable WebUI builds
  • 1b35a8cFix Makefile target invocation in Dockerfile
  • 8db31baBuild WebUI assets in Dockerfile before Go build
  • 8d4b64cAdd Docker build workflow for GHCR
  • 1556b18Make .env file optional in Makefile
  • d0fd0cfAdd .env file creation before building WebUI assets in all test jobs
  • 44fd69aFix CI: Build WebUI assets before running tests
  • 66a7b20Remove modem_other.go to fix build conflicts
  • 987dc0dAdd shared simulated modem implementation
  • 90ab5f5Add fallback to simulated ModemManager when DBus unavailable
  • 6cf74bfAdd Helm chart files for Kubernetes deployment
  • 9b10265Add Kubernetes deployment with Helm chart
  • 031e2dfadd turn server config
  • 03aaa63fix open telemetry tracing
  • 084ff63Refactor USBNetworkMonitor for testability and add comprehensive tests
  • d2dcf70fix router.go format
  • f7bfd73add output.css to .gitignore
  • eb4405fadd missing sfu destination
  • fb1c49aAdd tests for CaptivePortalDNS and refactor for testability
  • 2cc4e9fAdd custom 404 page and automated captive portal DNS management
  • 40745e3Start hotspot when internet unavailable even if device is authenticated
  • 6b9c6d9Fix Loki cardinality issues
  • 5ba88f3Enable MAVLink heartbeats to prevent SITL from exiting
  • 2e32a63Fix MAVLink connection reopening every 30 seconds
  • bcff21cFix WebSocket SendMessage to check connection state
  • 30fc921refactor: migrate time operations to Clock interface across application
  • 810c099docs: add Clock interface migration tracking document
  • 0844b6ffeat: add MAVLink connection health monitoring and auto-recovery
  • 1e7f98cfix: implement WebRTC data channel setup
  • 5c3deffrefactor: migrate time-based operations to Clock interface
  • b03cc68refactor: move Clock interface to shared testing infrastructure
  • 8baf56bfix: prevent duplicate a=msid lines in WebRTC SDP for P2P mode
  • f4a672etest: improve auth package coverage from 3.8% to 31.2%
  • 5a93fcafix: use XDG paths in E2E tests instead of relative paths
  • f9a22a0debug: add comprehensive logging for XDG path resolution
  • 36919b1fix: call xdg.Reload() to pick up environment variables in E2E tests
  • 262cc6bdebug: output to stderr and show xdg.DataHome value
  • 7313dd9debug: add logging to show XDG_DATA_HOME and SecretsDir paths
  • 37c6912fix: set XDG_DATA_HOME environment variable for test instances
  • 7163205fix: seed keyring with mock auth tokens for e2e tests
  • 3f86253fix: release agent HTTP port listener before starting agent
  • a389f22fix: change agent output logging from debug to info level
  • 443e393fix: increase e2e timeouts to 2s for reliable CI execution
  • f1a7513fix: increase WebSocketConnectTimeout to 1000ms for CI reliability
  • fa8eb2afix: increase ClientWaitTimeout to 1000ms for CI reliability
  • 2835e7efix: increase ClientWaitTimeout for reliable agent startup in CI
  • 81cc3effix: properly shutdown AuthService in e2e tests to prevent zombie processes
  • 04e7945fix: resolve Mock API server port binding conflict causing CI timeouts
  • 0659261perf: optimize e2e tests to 6s with 30s timeout
  • 00d803brefactor: complete migration to event-driven e2e testing architecture
  • e3f8421add best practices README.md
  • d8f4e93feat: add DATABASE_PATH environment variable for test isolation
  • 944e0a9fix: handle missing messageClient dependency gracefully in SystemProvider
  • 9535bd5feat: implement dynamic port allocation for parallel e2e test execution
  • 78b3cf7test: eliminate all remaining time.Sleep from e2e tests (part 4)
  • ded1c6ctest: eliminate arbitrary delays from SFU and auth e2e tests (part 3)
  • c0fdf01test: eliminate arbitrary delays from RTSP and disconnection e2e tests (part 2)
  • c13222crefactor: eliminate arbitrary delays in e2e tests (part 1)
  • 71c7043fix: use SO_REUSEADDR to properly check port availability in e2e tests
  • a4a4cf0fix: replace sleep with active port release waiting in e2e tests
  • b83f70efix: increase mock API port release delay for CI reliability
  • e2f0e2afix: increase session stabilization delay and add port release delay
  • 6b59b3bFix UpdateChecker tests to skip when package not installed
  • da2897bFix race conditions in UpdateChecker
  • 03318ccImplement automatic update checking system for aircast-agent
  • fc67ebdfix: add session stabilization delay and increase timeouts in disconnection test
  • a20875ffix: improve e2e test reliability for CI/CD
  • 87afc66Fix gomavlib dependency for CI/CD pipeline
  • 8b4409aSync MAVLink WebSocket timeouts with API for stable connections
  • 8d0926crefactor: reduce MAVLink logging verbosity
  • d8f1c7dUse native gomavlib WebSocket endpoint to fix goroutine leak
  • ed6c894fix: auto-clear invalid tokens for remote devices
  • 011db4cFix RTSP destination streaming by adding runtime config transformation
  • 2a5d858Enable automatic MAVLink stream requests
  • 1c29141Upgrade aircast-sdk to include FromMemberID field support
  • d15c390Add retry logic for token refresh with network failure handling
  • dc4e0b2test: increase RTSP source ready timeout for CI stability
  • c1bddf5fix: resolve remaining linting issues in route metric manager
  • 2ea3729fix: correct RouteUpdate field access and restore error return
  • a8d09c0fix: resolve additional linting issues found in CI
  • cbbf2b8fix: resolve all linting issues
  • 8ec57faci: make linting failures block CI pipeline
  • 54a9ab0chore: remove obsolete +build tags
  • f4a9b2ffix: implement RTSP route auto-start and update SDK to v0.3.0-dev.3
  • 881d715chore: update aircast-sdk to v0.3.1-0.20251103142911-f6ae61001238
  • a9acaa9refactor: update media package
  • d1d44e5refactor: update media package
  • f499f20refactor: update media package
  • 75ee603refactor: update media package
  • 33547a5refactor: update media package
  • 83febfafeat: update output.css
  • 310f5adfix: make E2E tests fail CI properly and fix timing issue
  • d861abafix: resolve CI test workflow issues
  • 79ef820feat: add ci/cd test setup
  • 232c38cfeat: new rtsp functionality
  • b759d3arefactor: simplify WebRTC negotiation by removing conditional SFU mode
  • a27bd64perf: optimize E2E test suite performance (67% faster)
  • 0bfae4etest: improve tests
  • 0f98762fix: upgrade aircast-sdk
  • 02fabbbfix: update precommit hook
  • 65af9acfeat: bump patch version when creating dev release from stable version
  • 56d1e4cMerge branch 'master' into develop
  • 8b03786fix: automatic token refresh on startup prevents auth expiration after restarts
  • b9ad88bfix: automatic token refresh on startup prevents auth expiration after restarts
  • be8ff33Merge branch 'feature/automatic-route-managment'
  • 2df0acdMerge branch 'feature/automatic-route-managment'
  • 2edb0d6feat: add automatic route metric management for plug-and-play modem support
  • b2fb92dfeat: add automatic route metric management for plug-and-play modem support
  • ef99c65Merge branch 'master' into develop
  • 24a45e5fix: auto installation of rpi camera
  • 4205450fix: auto installation of rpi camera
  • 403e6dbfeat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • f7fead1feat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • 0347ad8refactor: add event broadcaster to media system and update deployment
  • 8d39f41refactor: add event broadcaster to media system and update deployment
  • 52d5705fix: resolve WebUI timeout errors and optimize page load performance
  • a1df47dfix: resolve WebUI timeout errors and optimize page load performance
  • 6a253cefeat: implement proper ONVIF library integration
  • d4775a5test: remove flaky TestDisconnectionDuringNegotiation E2E test
  • 521de54fix: make disconnection E2E test more resilient to ICE gathering timing
  • 67e0d8afix: update camera sources to use MediaSource interface and fix linting errors
  • d851285Merge branch 'feature/add-new-sfu' into develop
  • 771e636feat: implement WS-Discovery and subnet scanning for ONVIF camera detection
  • 484cc2etest: skip obsolete SFU tests that use removed media.stream.join
  • b4d12f3feat: add route_id to agent SFU messages for multi-room support
  • a53d105test: add E2E tests for media source keep-alive feature
  • 24c1af0feat: implement keep-alive for media sources
  • c391ecdfeat: implement keep-alive for media sources
  • 277f369fix: add ResponseMessage handling to enable SFU publisher answers
  • 319fabdrefactor: make SFU the only streaming mode and remove media.stream.join
  • 5ec34b4refactor: complete SDK field alignment across codebase
  • 1a3d4fafeat: add media.route.select handler for single-action route switching
  • ce13590chore: fix tests
  • 8efaed1fix: resolve E2E test failures and flakiness
  • 38795b9refactor: migrate to new aircast-sdk API
  • ffce8e7chore: cleanup code
  • c665b89Merge branch 'develop' into feature/add-new-sfu
  • e58e891add destination to types
  • 20a199bupdate go.mod
  • 86218deremove device id storage
  • 48f3663Merge branch 'develop'
  • 0a54266Merge branch 'develop'
  • 4e70e1bupdate sdk
  • 7ebbd11update sdk
  • d4ad18aupdate network fix command
  • 1b4653fupdate network fix command
  • 6e74649refactor: standardize logging field names for consistency
  • 374fd23refactor: standardize logging field names for consistency
  • cd6bb00feat: add comprehensive tracing and OTLP configuration for agent
  • 76309bbfeat: add comprehensive tracing and OTLP configuration for agent
  • 5876800fix source manager release bug
  • 8171f09fix source manager release bug
  • 86f0047fix: resolve E2E test failures by fixing message routing
  • 58ea2fffix: make SFU mode configurable via environment variable
  • 8550d3bfeat: add SFU publisher session close handler
  • 1283947fix: add destination parameter to SendEventToChannel interface
  • 595da84fix: implement graceful handling for SFU publisher offers
  • f183ec3fix: resolve shutdown panic and add linting fixes
  • a055923Merge pull request #15 from pavliha/develop
  • 076fdcfMerge pull request #15 from pavliha/develop
  • f9ee622fix: improve WebRTC stability and buffer monitoring
  • e1ff448fix: resolve linter issues and fix all failing tests
  • 8aa415efix: resolve source recovery test failures
  • f3d2726fix: resolve linter issues in SFU tests and handlers
  • 2a8216afix: recreate media sources when in error state
  • cb62b5badd WebRTC video track metrics for latency debugging
  • d9e8bbcadd WebRTC video track metrics for latency debugging
  • b15a83efix: resolve test deadlock in WebRTC session manager
  • 7e7f2dafix: resolve test deadlock in WebRTC session manager
  • 8da2361feat: add system.ping websocket action for health checks
  • 5878556feat: add system.ping websocket action for health checks
  • 74ec3f9fix: resolve WebRTC high latency issue caused by route removal
  • 83f49f4fix: resolve WebRTC high latency issue caused by route removal
  • 4690463feat: add NAT masquerading and IP forwarding for cellular connections
  • 4bd1af0feat: add NAT masquerading and IP forwarding for cellular connections
  • c666e08fix: resolve WebRTC test failures and lint issues
  • 7a241bbfix: resolve WebRTC test failures and lint issues
  • 469c22cchore: disable cyclop linter
  • ad92a7cchore: disable cyclop linter
  • 5418322fix: improve WebRTC session error messages and tracking
  • f2a0d29fix: improve WebRTC session error messages and tracking
  • 3a5a10cfix: prevent UDP socket leak in WebRTC sessions
  • 1507386fix: prevent UDP socket leak in WebRTC sessions
  • 62d7d53cleanup code
  • 49595f6cleanup code
  • f74a1eeupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 73877adupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 483e9bcupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 0b62991upgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 465525brefactor: simplify E2E test suite with sensible defaults
  • 2ad7f7erefactor: simplify E2E test suite with sensible defaults
  • 4c9f499fix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • f3bafcffix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • 1bb0f8afix: include WebRTC offer in session create response to eliminate timing issues
  • fc419effix: include WebRTC offer in session create response to eliminate timing issues
  • d660472fix: include WebRTC offer in session create response to eliminate timing issues
  • a38af6bfix: include WebRTC offer in session create response to eliminate timing issues
  • d4c45bffix: resolve UDP source race condition in connection handling
  • 8a5789dfix: resolve UDP source race condition in connection handling
  • 830cc67fix: resolve race condition in UDP source connection handling
  • d6a1156fix: resolve race condition in UDP source connection handling
  • 2746039fix: resolve all lint issues and improve code quality
  • e01e9b7fix: resolve all lint issues and improve code quality
  • fec846ffix: resolve type assertion and interface implementation issues
  • 1ee7f99fix: resolve type assertion and interface implementation issues
  • ffef8a4fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 38b57d0fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 2fcdb91fix: allow overwriting existing files in Aptly S3 configuration
  • d5ec49afix: allow overwriting existing files in Aptly S3 configuration
  • 0a07b6bfix: use specific event type for production Pi image builds
  • 4a97e1bfix: use specific event type for production Pi image builds
  • f8b4521update: trigger Pi image build from main branch for production releases
  • 27322ddupdate: trigger Pi image build from main branch for production releases
  • a56e770update: align production workflow with development structure
  • d59a54bupdate: align production workflow with development structure
  • 06617d2Merge branch 'develop'
  • fa9a759Merge branch 'develop'
  • 6cf2b5cfix: always attempt token revocation on logout
  • 5e4d7edfix: always attempt token revocation on logout
  • c2b9cfdfix: handle missing refresh token properly to force re-authentication
  • 3596e18fix: handle missing refresh token properly to force re-authentication
  • b744b79fix: resolve WebRTC session race conditions with device.session.ready event
  • cc5e087fix: resolve WebRTC session race conditions with device.session.ready event
  • 77fe141refactor: update relay infrastructure and WebSocket handlers
  • b132620refactor: update relay infrastructure and WebSocket handlers
  • d5946cbchore: update to use any instead of interface{}
  • b08fe57chore: update to use any instead of interface{}
  • 0b0eda9fix: ensure WebSocket connects on startup for authenticated devices
  • a05197ffix: ensure WebSocket connects on startup for authenticated devices
  • df9db02fix: add automatic network route management and WebRTC session cleanup
  • e88959bfix: add automatic network route management and WebRTC session cleanup
  • 7e599eafix my turn server url
  • 206817cfix my turn server url
  • 76b3975feat: remove nginx dependency from Debian package
  • ce05d49feat: remove nginx dependency from Debian package
  • 52e0d33chore: update dependencies and build improvements
  • 322f497chore: update dependencies and build improvements
  • 828c809fix: resolve stream sharing conflicts and improve codec negotiation
  • 5892c1dfix: resolve stream sharing conflicts and improve codec negotiation
  • 46c1db2fix: improve RTSP and media processing debug logging
  • c9b8d2bfix: improve RTSP and media processing debug logging
  • 344f67afix: improve RTSP error reporting and remove redundant events
  • efa1c91fix: improve RTSP error reporting and remove redundant events
  • d8fa6d1fix: prevent udevadm process leaks in camera monitor
  • 5e968cdfix: prevent udevadm process leaks in camera monitor
  • cc7d436fix: update WiFi configuration text to reference drone capabilities
  • 4c41b41fix: update WiFi configuration text to reference drone capabilities
  • 2f0f817feat: add camera and MAVLink status display to home page
  • b3d3173feat: add camera and MAVLink status display to home page
  • c913c4efix: improve system logs page layout and handling
  • f156e86fix: improve system logs page layout and handling
  • e7bee2ffeat: implement in-memory log storage and fix PPP route parsing
  • 339815afeat: implement in-memory log storage and fix PPP route parsing
  • fd6e062add system logs page
  • a69de52add system logs page
  • fac7366feat: enhance cellular UI with real-time data and internet connectivity tracking
  • d57c380feat: enhance cellular UI with real-time data and internet connectivity tracking
  • db44ab2feat: add configurable HTTP port and HTTPS redirect support
  • 3f5b594feat: add configurable HTTP port and HTTPS redirect support
  • f488ffcfeat: implement udev-based camera monitoring to replace polling
  • 8ce473ffeat: implement udev-based camera monitoring to replace polling
  • b334e84add pi camera support
  • 5a57513add pi camera support
  • 83eaf07feat: add automatic Raspberry Pi camera detection and streaming
  • 5d2674ffeat: add automatic Raspberry Pi camera detection and streaming
  • 8e9ba43feat: add Raspberry Pi camera support
  • a000b8ffeat: add Raspberry Pi camera support
  • 1c88449feat: add UDP video source support
  • 3128899feat: add UDP video source support
  • 3cea006Merge branch 'refs/heads/feature/udp-video-source' into develop
  • 4b3a2b9Merge branch 'refs/heads/feature/udp-video-source' into develop
  • bfd298fadd permissions check
  • e540dccadd permissions check
  • 2a401e2Add USB hotplug monitoring for MAVLink devices
  • d6d6e33Add USB hotplug monitoring for MAVLink devices
  • c0b66e3Fix TURN server 400 errors and improve WebRTC ICE handling
  • 003a063Fix TURN server 400 errors and improve WebRTC ICE handling
  • afb314dfix connection issues
  • 0f86405fix connection issues
  • 806c3bbfeat: add UDP video source support
  • b1f99e9feat: add UDP video source support
  • 7277fa4update templ
  • 0fa8567update templ
  • 6d36f4aapply auth logout fixes
  • dbf8c1aapply auth logout fixes
  • 84e4211apply hotspot fixes
  • 977e781apply hotspot fixes
  • b0ccbfffix deprecation
  • 0a13de4fix deprecation
  • ad3760eadd rebuild trigger
  • 373178dadd rebuild trigger
  • 9755df4add cellular status indicator
  • 34dec55add cellular status indicator
  • d8a74d4downgrade logs
  • 8f09880downgrade logs
  • 31ad675add connectivity error handling
  • 7756bc9add connectivity error handling
  • e5aade0update login ui
  • 140ca03update login ui
  • 3b810fdupdate on device login flow
  • fd23995update on device login flow
  • 7a5f259fix auth token
  • 06a94acfix auth token
  • ce6dd4dadd terminal support
  • f6e5e7fadd terminal support
  • 4885481fix hotspot
  • 96ebda3fix hotspot
  • 528d992fix wifi service unavailable
  • 1f86d90fix wifi service unavailable
  • f1365adfix nginx service
  • c518bbefix nginx service
  • 592b9a1fix autoconnect service
  • 0a260fbfix autoconnect service
  • 0b5c4feuse dialect
  • a247a00use dialect
  • 14ef62bremove command sender
  • ae02be1remove command sender
  • f355bbffix auth expiration
  • 0c9eac5fix auth expiration
  • 539429cfix auth expiration
  • 7828964fix auth expiration
  • f8f4b30save mavlink
  • f97b717save mavlink
  • 54dcc24fix do reposition command
  • bd5bfa9fix do reposition command
  • e2507f8use new send command approach
  • 5f4ce5ause new send command approach
  • ec4fa20use new send command approach
  • 20f3787use new send command approach
  • aaf29adadd message throttle
  • 6baae24add message throttle
  • 01ac0ddsave telemetry messages refactor
  • 3631f4asave telemetry messages refactor
  • 22b38d8remove sitl
  • 2dffcb4remove sitl
  • 97fbd42fix webrtc signaling
  • a5d47c2fix webrtc signaling
  • b0c3c86fix turn servers
  • 4234acffix turn servers
  • 818abcfMerge remote-tracking branch 'origin/develop' into develop
  • e5af64cMerge remote-tracking branch 'origin/develop' into develop
  • 100a260remove usage of aircast sdk types
  • 0732749remove usage of aircast sdk types
  • 32db038refactor message handlers
  • 4dfbaccrefactor message handlers
  • 48049fafix hotspot ip address order
  • e44ee75fix hotspot ip address order
  • 3c2f105add more stun servers
  • 86676d2add more stun servers
  • 8a0b739fix ice candidate support
  • 81b217efix ice candidate support
  • 7f426a3update default ice servers
  • 84ad5c4update default ice servers
  • 81e88dcadd interfaces' cleanup
  • a3c97a9add interfaces' cleanup
  • 1e46147fix turn server
  • f6773e1fix turn server
  • ed65104remove update check
  • 7a056c7remove update check
  • 31268fbadd hotspot start
  • fb341d1add hotspot start
  • 33bb807add hotspot start
  • b183b5aadd hotspot start
  • 8ec1e99add hotspot start
  • 6e6de2dadd hotspot start
  • 04a099efix websocket reconnection
  • 48e466bfix websocket reconnection
  • 16d957dupdate .gitignore
  • 8173947update .gitignore
  • 476fb9bfix release
  • 235c3f2fix release
  • 48b49c2fix database migrations
  • 99b40a8fix database migrations
  • ddbcb6fupdate print config
  • 0e86221update print config
  • 0781004reduce logs verbosity
  • 4c0fd29reduce logs verbosity
  • d89c728add token refresh
  • 0923529add token refresh
  • 16ac247fix telemetry errors
  • bbc7695fix telemetry errors
  • 57b465bfix media pipeline errors
  • 381be2dfix media pipeline errors
  • 4847fc2resolve circular dependencies
  • 90ff565resolve circular dependencies
  • 5abf321intermediate save
  • f6c21ffintermediate save
  • de176f0refactor mavlink telemetry auto setup
  • c812784refactor mavlink telemetry auto setup
  • 11b6a47refactor mavlink
  • 9163ccfrefactor mavlink
  • a4b991bresolve warnings
  • 90bebf6resolve warnings
  • 0f1b61fadd system handlers
  • 0d9c4dbadd system handlers
  • 2a9350badd more network handlers
  • fa7f7c3add more network handlers
  • 3e9d618fix agent networking
  • 1b1291bfix agent networking
  • 05cc195add cleanup
  • b45f6d8add cleanup
  • 533b396consolidate mavlink component
  • 6c9c0fbconsolidate mavlink component
  • c0b1783add mavlink autoconnect
  • 3d861cdadd mavlink autoconnect
  • 2082fd2add cleanup functions
  • 4e262f6add cleanup functions
  • aa5e9aeadd auto webrtc destination fill in
  • e560613add auto webrtc destination fill in
  • fce1218add auto hostname fill
  • 9d7598eadd auto hostname fill
  • a44a035add auto token refresh
  • 73c32f4add auto token refresh
  • 28d8d46rename websocket route
  • e339fa2rename websocket route
  • 6011bb5fix exit states
  • 022782ffix exit states
  • 599c080remove app state
  • 5a40268remove app state
  • efe871ffix loki logging
  • 194d2b9fix loki logging
  • d74599bsimplify logging
  • bd8ca36simplify logging
  • 957d229Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 825b0b2Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 2b42d16[AIR-40] fix logout
  • 89d4d38[AIR-40] fix logout
  • 7123ba1[AIR-40] update service handlers
  • f0bf578[AIR-40] update service handlers
  • 60e8dd7[AIR-40] fix logging
  • a359d77[AIR-40] fix logging
  • 28b9597[AIR-40] fix websocket state management
  • af31dcd[AIR-40] fix websocket state management
  • fa8d480[AIR-40] fix auth lifecycle
  • e020c5e[AIR-40] fix auth lifecycle
  • 200f007[AIR-40] add token revocation
  • 728d641[AIR-40] add token revocation
  • 90beb04[AIR-40] fix device auth flow
  • c264ad1[AIR-40] fix device auth flow
  • f776272[AIR-40] update auth flow
  • f97a490[AIR-40] update auth flow
  • 58302f5[AIR-40] fix connection messages
  • aead670[AIR-40] fix connection messages
  • 6c9b256[AIR-40] update device sign in flow
  • 44f464d[AIR-40] update device sign in flow
  • 0a19a31fix sitl
  • 5556081fix sitl
  • c328a4drun systemd service as root
  • 42ab75frun systemd service as root
  • 2240376fix systemd service
  • 5f52b4ffix systemd service
  • f0bb1cefix active connections
  • cba5a3dfix active connections
  • 5cae012add handlers
  • fa7aa69add handlers
  • 0ea86a6rename copy in frame.go
  • 1773e4crename copy in frame.go
  • dda9ef5fix delete logic
  • a378baefix delete logic
  • 8f97faeadd mavlink feedback
  • 3ad9ec8add mavlink feedback
  • 7599040fix development build
  • f1c0da1fix development build
  • b818981fix development Makefile
  • 78d9736fix development Makefile
  • 444924bfix development ci
  • 1ef9b56fix development ci
  • bc804b6fix network manager
  • 3f9b5b1fix network manager
  • 396098cmake network manager cross platform
  • 216276bmake network manager cross platform
  • 7e48598save refactor for now
  • cf3771bsave refactor for now
  • 5078fe5fix sign in url
  • c03fd58fix sign in url
  • fb40601update permission
  • f5be9e3update permission
  • f2688ebfix loki setup
  • 487ffe4fix loki setup
  • d2843defix a database path
  • dbe3279fix a database path
  • f554cc1fix config and environments
  • 7ebf609fix config and environments
  • 625d688fix network provider
  • 218352ffix network provider
  • 6764c66fix environments loading
  • 1307046fix environments loading
  • a23c86dfix migrations
  • 69b03abfix migrations
  • 65ba2e9add gpg signin back
  • b07721fadd gpg signin back
  • 8b4a043fix ci build
  • 8bb6c50fix ci build
  • 61db5f9[Air-000] add modem manager (#11)
  • f881133[Air-000] add modem manager (#11)
  • 23efcecfix ci build
  • 46e1ea9fix ci build
  • 6c154b3fix ci build
  • 50745e3fix ci build
  • f863ce1fix ci build
  • 9da6dccfix ci build
  • 9b41087refactor application bind phase
  • 4cd942arefactor application bind phase
  • aa7b24cfix release as systemd
  • 4046c75fix release as systemd
  • e213b69[AIR-32] add private module support
  • eecf436[AIR-32] add private module support
  • 22f10a0[AIR-32] add private module support
  • 15ad5f8[AIR-32] add private module support
  • 3b71d8asave bind changes
  • 3943183save bind changes
  • f097094remove mdns
  • efd5b84remove mdns
  • c1960c4fix wifi bind mode
  • 2a00a1ffix wifi bind mode
  • 73f02c6[AIR-32] refactor setup
  • 1d3c608[AIR-32] refactor setup
  • f0048e0refactor wifi setup
  • 5edf4darefactor wifi setup
  • 228240d[AIR-32] update network manager
  • 4912f4c[AIR-32] update network manager
  • 14baa86save hotspot mode
  • 40f4218save hotspot mode
  • 01956a6[AIR-32] update webrtc session management
  • 04dccdd[AIR-32] update webrtc session management
  • f17eba3[AIR-32] add envs fallback
  • 4bbe8ad[AIR-32] add envs fallback
  • 735e120Add tailwindcss to .gitignore
  • 3d08368Add tailwindcss to .gitignore
  • 52245c0[AIR-32] fix tailwind installation
  • d695edf[AIR-32] fix tailwind installation
  • b3b7818[AIR-32] fix bind service
  • 359204f[AIR-32] fix bind service
  • 27021e2[AIR-32] add output.css
  • 09086e9[AIR-32] add output.css
  • e0afd75[AIR-32] fix bind mode for application
  • 4433c77[AIR-32] fix bind mode for application
  • 161b834[AIR-32] fix bind mode for application
  • 26caa9c[AIR-32] fix bind mode for application
  • 182cafe[AIR-32] add setup mode to application
  • 5bd2358[AIR-32] add setup mode to application
  • 7520c22[AIR-32] add setup mode for application
  • 5ee3887[AIR-32] add setup mode for application
  • 743bbe3[AIR-32] add hotspot setup
  • ddb0c5c[AIR-32] add hotspot setup
  • 3ee157a[AIR-12] silence loki if it is not available (#8)
  • cbe5aaa[AIR-00] fix sdk build
  • f160558[AIR-00] fix sdk build
  • 39b4226[AIR-28] add telemetry sender functionality
  • 9caf085[AIR-28] add telemetry sender functionality
  • 11659cd[AIR-28] add telemetry sender functionality
  • 3a33ba9[AIR-28] add telemetry sender functionality
  • b2cc8b1[AIR-28] fix telemetry connection
  • 91d3d2d[AIR-28] fix telemetry connection
  • 2c88abb[AIR-28] fix telemetry sending
  • e4a1e75[AIR-28] fix telemetry sending
  • d82aa18[AIR-28] fix telemetry requests
  • 22b80b9[AIR-28] fix telemetry requests
  • cc50c0c[AIR-28] update docker file
  • 411f312[AIR-28] update docker file
  • fc0c88b[AIR-28] add mavlink commands support
  • a31d733[AIR-28] add mavlink commands support
  • a2087bf[AIR-28] upgrade mavlink telemetry
  • e8a1b17[AIR-28] upgrade mavlink telemetry
  • 2b87157[AIR-28] fix mavlink telemetry
  • 1b7adc9[AIR-28] fix mavlink telemetry
  • 8c601f5[AIR-28] fix mavlink connection
  • 3e13f5a[AIR-28] fix mavlink connection
  • 2505220[AIR-28] add datachannel telemetry handler
  • 684fb40[AIR-28] add datachannel telemetry handler
  • fdbbe63[AIR-28] add datachannel mavlink connection
  • 8d22158[AIR-28] add datachannel mavlink connection
  • f924e1e[AIR-28] refactor mavlink connection
  • d37d56a[AIR-28] refactor mavlink connection
  • 7bad84d[AIR-28] fix session closure
  • 8f5e5e3[AIR-28] fix session closure
  • 74a5730[AIR-28] add mavlink telemetry over datachannel
  • 1cd16cd[AIR-28] add mavlink telemetry over datachannel
  • 9385921[AIR-28] add mavlink telemetry
  • d656d71[AIR-28] add mavlink telemetry
  • a325785[AIR-28] refactor mavlink connection
  • b837c41[AIR-28] refactor mavlink connection
  • c0bb321[AIR-28] extract to mavlink repository
  • a1c5629[AIR-28] extract to mavlink repository
  • 9043ba5[AIR-28] add mavlink handlers
  • 8f2bf79[AIR-28] add mavlink handlers
  • a81b275[AIR-28] add mavlink package
  • 2ae5a8b[AIR-28] add mavlink package
  • cc1b49e[AIR-28] cleanup
  • 0a4041a[AIR-28] cleanup
  • adde79f[AIR-28] refactor webrtc session
  • 0e4cb5c[AIR-28] refactor webrtc session
  • e793f08[AIR-28] refactor stream
  • a6966f1[AIR-28] refactor stream
  • 9de9c5d[AIR-28] refactor handlers
  • a14ec69[AIR-28] refactor handlers
  • 2354b0b[AIR-28] update webrtc handlers
  • c22cf94[AIR-28] update webrtc handlers
  • 49b11ca[AIR-28] refactor handlers
  • c44bd32[AIR-28] refactor handlers
  • fafb9d5[AIR-28] add answer handler
  • 9516119[AIR-28] add answer handler
  • 1b95842[AIR-28] fix webrtc error handling
  • 2eca9ae[AIR-28] fix webrtc error handling
  • 84ae223[AIR-28] fix rtsp client error handling
  • 15ac6ab[AIR-28] fix rtsp client error handling
  • efdf686[AIR-28] add templ dependency
  • 35f8637[AIR-28] add templ dependency
  • 64ffbff[AIR-28] refactor rtsp source
  • 7b7f9ff[AIR-28] refactor rtsp source
  • 1c93194[AIR-28] add better logging
  • a6d8cfc[AIR-28] add better logging
  • 6c68b1e[AIR-28] fix SIYI camera
  • 367fb8b[AIR-28] fix SIYI camera
  • 642460b[AIR-28] code cleanup
  • 2f565f4[AIR-28] code cleanup
  • f6d9f83[AIR-28] code cleanup
  • 7045313[AIR-28] code cleanup
  • 354d038[AIR-28] code cleanup
  • dcb0f8c[AIR-28] code cleanup
  • 433fa90[AIR-28] downgrade logs
  • 977d32c[AIR-28] downgrade logs
  • db8de90[AIR-28] update h264 decoder
  • 5881ebf[AIR-28] update h264 decoder
  • 01c3bfd[AIR-28] fix media stream
  • f823e61[AIR-28] fix media stream
  • 8c7cb29[AIR-28] save media package
  • 0ca806e[AIR-28] save media package
  • 55f3934[AIR-28] move unit inside stream
  • 9f5b267[AIR-28] move unit inside stream
  • eff7ff0[AIR-28] refactor stream package
  • 6eace51[AIR-28] refactor stream package
  • 75c70c0[AIR-28] fix warnings
  • 8eacd5a[AIR-28] fix warnings
  • fe7a6df[AIR-28] downgrade logs
  • 9e71072[AIR-28] downgrade logs
  • 948760d[AIR-28] add enhanced stream package
  • 1f144d6[...

v1.2.3-stage.5

May 3, 2026

v1.2.3-stage.5

Changelog

  • bd24b8achore: add .claude/ to gitignore
  • a1093c7fix: update tests for 4Mbps start bitrate and add GOWORK=off to hooks
  • 6c198a7fix: wire GCC bandwidth getter to SFU publisher instead of empty P2P registry
  • f7d8e84fix: prevent false zombie detection when Pion stats are limited
  • dfd3123feat: persist modem recovery state across agent restarts
  • c805921refactor: use forked go-onvif library directly for ONVIF bitrate control
  • e69e2d6test: remove time.Sleep from SwapStream test
  • aeafb38refactor: resolve code review issues for SwapStream
  • f6ca546fix: send clean ONVIF SetVideoEncoderConfiguration via direct HTTP with WS-Security
  • 87a5727fix: namespace-agnostic XML parsing for ONVIF GetVideoEncoderConfiguration
  • 48f78c7fix: add debug logging for GetVideoEncoderConfiguration fallback
  • 06de710fix: retry ONVIF verify on failure instead of permanent disable
  • 9a30202refactor: add canonical wide events to ONVIF camera controller
  • 4e97bd6fix: fetch full encoder config when GetProfiles returns empty fields
  • db7f142fix: use library's device connection for ONVIF SetVideoEncoderConfiguration
  • 248143afix: use exponential backoff for ONVIF bitrate control retries
  • b5d04ccfix: reduce ONVIF backoff from 5 minutes to 30 seconds for faster recovery
  • 2742d85fix: restart recovering pipelines in route monitor
  • 156cc5cfix: start camera at 4 Mbps instead of 1 Mbps — reduce on congestion, not ramp up
  • 6d57024fix: reduce ABR stability period from 30s to 10s for faster bitrate ramp-up
  • 29da0f6fix: harden SwapStream with status guard, nil check, and codec preservation
  • 884d045fix: disable HTTP keep-alive for ONVIF requests to prevent stale connections
  • a373b51fix: use minimal SOAP body for ONVIF SetVideoEncoderConfiguration
  • 27baaa6fix: hot-swap media stream on source reconnect without tearing down SFU
  • e1eaacffix: increase ONVIF timeout to 5s and retry on EOF
  • 9bfed05fix: allow deferred SFU reconnect when media stream is nil during pipeline recovery
  • eb9c44bfix: ABR stuck at 1 Mbps — allow increases without sessions, retry ONVIF
  • 717b08bfeat: add deep modem observability — USB, interface, and signal tracking
  • 9805b12feat: add modem_check event on every 10s poll for deep modem tracking
  • 00fe79dfeat: add detailed modem recovery tracking events
  • 6628369fix: increase maxRapidICERestarts from 3 to 10 for cellular resilience
  • 89f5963fix: raise SFU health monitor RTT thresholds for cellular networks
  • 9ba16e0fix: return stale ICE server cache instead of nil on API fetch failure
  • e0b64edfix: match consumers by media type string instead of pointer on reconnect
  • dc61fabfeat: add consumer_restart_pre_check diagnostic log
  • 9d783e1test: comprehensive test coverage for InternetPrioritySwitcher
  • b8f17a6feat: auto-rollback internet priority when selected network has no internet
  • 5628dc1fix: clean up stale buildx builders before CI builds
  • ab76b7cfeat: reliable internet priority switching with InternetPrioritySwitcher
  • a3ab595fix: close stale SFU WebSocket connections before reconnecting
  • 28a8068Revert "fix: wire GCC bandwidth estimate to SFU track bandwidth limiter"
  • 43a613bfix: wire GCC bandwidth estimate to SFU track bandwidth limiter
  • d63040afix: lower keyframe-only threshold from 5x to 2x for RTSP cameras
  • d7b22d2fix: remove autoStartDefaultRoutes from hook — route monitor handles it
  • 81acfb8fix: make autoStartDefaultRoutes concurrent and non-blocking
  • 6d86f64fix: cancel stall monitor goroutine on track re-setup to prevent leak
  • 6e3259dfeat: force TCP TURN on cellular to survive LTE NAT rebinding
  • e2c6245fix: address code review — periodic callback, clear on stop, fix comments
  • 93affb6fix: propagate SFU reconnect failures to pipeline for auto-recovery
  • 8322719fix: remove dead pipelines from registry so route monitor can restart them
  • ce111c4feat: report device features in session ready for opt-in SIYI UI
  • 5feda4bfix: start routes concurrently and reduce stream wait timeout
  • 4af656dfix: re-enable force relay (symmetric LTE NAT requires TURN)
  • 6478ac3fix: disable force relay on agent for stable LTE connections
  • 3359720fix: increase SFU request timeout from 10s to 30s for LTE networks
  • 717c680chore: pin Go 1.25.5 and update skip-duplicate-actions to v5
  • dff4832perf: optimize CI pipeline — merge build+release, reduce runner contention
  • 30e17d6feat: expose LTE signal metrics (RSRP, RSRQ, SNR) via modem API
  • 8a7b844fix: switch to keyframe-only mode when severely overbudget (>5x)
  • 0460c93fix: resolve lint errors in WebRTC session cancellation
  • 2786717fix: prevent orphaned WebRTC sessions from blocking new connections
  • c283787fix: prevent SFU publisher from getting stuck on dead media stream after RTSP reconnect
  • 0b78cb6fix: suppress gosec G115 for safe int-to-uint32 netmask conversion
  • 1b48b03fix: treat unknown current version as needing update
  • 04a53bbrefactor: make USBNetworkMonitor sole owner of USB interface lifecycle
  • 55e90a9fix: untrack generated output.css that was breaking GoReleaser
  • 6cc0653fix: auto-update gets permanently jammed after failed apt install
  • 6d802f8fix: data race in GetOrCreateSource reading refCount after unlock
  • 7ccc2adfix: resolve lint errors for unused param and unused func
  • b06e83ffix: use debian base for CSS builder stage (Tailwind needs glibc)
  • b613f24fix: use multi-stage Docker build for cross-platform Tailwind CSS
  • f7bd643fix: use TARGETARCH for Tailwind binary in Docker cross-compilation
  • 5b0aa96perf: optimize build times across local, CI, and Docker builds
  • 610474cfix: stop route-metric-validator from destabilizing cellular bearer
  • 65b4456fix: resolve code review issues across source manager, WebRTC, and routes
  • e16ad76fix: ensure SFU routes exist at boot before starting pipelines
  • 2723f7erefactor: simplify tailscale resume connection and reduce lock scope
  • 1432cf3feat: add update_in_progress field to package status response
  • 1a3b613refactor: remove unused ActionSessionInit and ValidateAndFixRouteMetrics
  • 4d02b6ffix: detect and recover from tailscale node-not-found errors
  • 92d3948feat: add internet priority switching to prefer WiFi over cellular
  • 5248be8fix: resolve source manager lock contention and WebRTC signaling races
  • 2991c5ffix: stop SFU publisher reconnecting with stale stream after source reconnect
  • 5848807fix: deduplicate video tracks in dynamic attach to prevent duplicate a=msid SDP lines
  • a89434fci: optimize builds for self-hosted runner
  • 8c8d7dbfix: increase timeout for speedtest handler to 120s
  • c572e71fix: defer QMI mode switch to after stable connectivity
  • 02c074afix: use timestamp in snapshot versions for correct APT sorting
  • 429e978feat: add network speed test functionality
  • 843e955feat: auto-switch SimTech modems from PPP to QMI mode at boot
  • 891f124fix: resolve deadlock in WebRTCDestination.Start() when existing sessions present
  • 423f6a6fix: disconnect dead cellular route to unblock WiFi failover
  • f7947f3fix: detect zombie SFU connections with zero RTP but active RTCP
  • c964d5ffix: video device count, WebRTC listener race, SFU circuit breaker, interface state detection
  • d850f96ci: fix release pipeline skipping on tag pushes
  • 2e1276efix: redact RTSP credentials in errors, fix stale SFU loss rate, fix WebRTC listener race
  • 557e92cfix: add gosec nolint to ParseForm calls and cleanup stale E2E containers
  • f91b537fix: quote docker port command to avoid YAML parsing error
  • 67d06a8ci: trigger test workflow
  • ca9e3aefix: add remaining gosec nolint directives and use dynamic SFU port in E2E
  • 8380eedfix: add gosec nolint directives for false positives on x64 runner
  • 75e3ca3fix: run E2E tests on X64 runner for amd64-only SFU image
  • f93a15dfix: resolve lint errors, test failures, and WaitGroup.Add race
  • bbc6494ci: pin release workflow jobs to Linux runner
  • 89189a2fix: detect architecture for Tailwind CSS binary in CI
  • bec439afix: resolve data races and add missing IsConnectionError to test mocks
  • 469a067fix: run E2E tests on Linux runner for Docker service support
  • 8cc82f2ci: trigger .deb release on push to develop without pi-gen
  • 2671c46fix: add IsConnectionError to relay MockClient for SDK interface change
  • 70c483dfix: install Tailwind CSS without sudo on macOS runner
  • 001a2dbfix: CI workflow for macOS self-hosted runner and uncommitted changes
  • 92df259feat: implement IsConnectionError on WsConnectionAdapter
  • f154784fix: update SDK with comprehensive queue tests
  • 0ec5ecbtest: add integration test verifying GCS heartbeat fields reach drone
  • e6f8c51fix: update SDK with isConnectionError extraction and TOCTOU fix
  • c84a179fix: replace time.Sleep in droneHeartbeat tests with fast ticker
  • f2a8b8efix: resolve all golangci-lint errors
  • 230611arefactor: introduce classifyConnection as single source of truth for connection types
  • 6a591a4refactor: remove dead RoutingTargetDroneOnly and rename SendCommandToDrone
  • 665886bfix: detect QMI/wwan modem connections as cellular
  • caaccccfix: restore SFU publisher after network recovery
  • 605b786test: add unit tests for SOURCE_OFFLINE error code in route handlers
  • f51358dfix: bump gomavlib to v3.3.1-aircast.7 with race-free tests
  • eab2f8bfix: upgrade gomavlib to fix pong deadlock on 4G networks
  • 664a2b1feat: send GCS heartbeats from agent to prevent failsafe on 4G degradation
  • dcce31bfeat: return SOURCE_OFFLINE error code when camera source is paused
  • 7459852fix: prevent WebRTC session creation timeout during SFU reconnect
  • 210dd3ffix: prevent WebSocket error cascade on context cancellation
  • 3255dd8fix: reduce resource waste from RTSP probes on Pi
  • 48006ebfix: resolve lint errors and flaky RTSP test
  • d2ee86cfeat: broadcast source status on pipeline state recovery and failure
  • 80a5ceffix: detect NDIS modems via NM connection type and add SFU waiting state
  • bae37e7fix: update SDK to prevent queue death spiral
  • 850ff42fix: reconnect message client and router after WebSocket recreation
  • 0429cb1fix: prevent stale-token retries after WebSocket reconnection
  • 90efd25fix: handle paused RTSP sources, fix action constant, add modem activation escalation
  • ca57539fix: resolve all lint errors and data race failures in CI
  • 08c0d90fix serial switch
  • d1a4430ci: add weekly GHCR cleanup for untagged container images
  • e2d770ffeat: auto-pause RTSP source after consecutive failures
  • 484e222fix: throttle ABR stats broadcast to every 5 ticks instead of every tick
  • e4dae95fix: prevent unnecessary teardown of connections waiting for drone
  • 7990899fix: use config DataDir for disk buffer path instead of hardcoded /var/lib/aircast
  • d3d1503fix: use safe Get for optional services in message router
  • 47cfca8test: add RC override started flag tests for throughput reset independence
  • acb2aaafix: trigger recovery immediately on USB interface corruption detection
  • 4de493dfix: use dedicated flag for first RC override log to avoid re-logging after throughput reset
  • 9ce0403fix: detect zombie WebRTC sessions via RTCP activity tracking
  • 4022ae7feat: add canonical logs for SFU WebSocket diagnostics
  • 381652afix: graceful handling of 4G modem overload death spiral
  • 0052229fix: close WebRTC sessions on modem reconnect to prevent session exhaustion
  • ca25ef0fix: rate-limit datachannel drop logs and skip enqueue without consumers
  • d82f8affeat: add RC override (joystick) logging to MAVLink frame routing
  • 152c39dfix: buffer pre-connection ICE candidates, fix drop log spam, enable WAL
  • 2c517b0fix: prevent USB bounce from killing API connection on shared interface
  • 9eaf92bchore: update gomavlib to v3.3.1-aircast.5
  • 353c6f6fix: return error from HeaderProvider when auth token unavailable
  • f1ca28efix: prevent read loop stall from blocking ping/pong processing
  • b34724cfeat: add RTCP REMB bitrate feedback for plain RTSP sources
  • 2542706refactor: update e2e test constants
  • 381116efeat: add WaitForStream to ABR source decorator
  • 081e640refactor: inject dependencies into websocket handlers directly
  • eeefba7refactor: improve WebRTC session media and expand tests
  • 4a2e5f6fix: improve terminal session manager lifecycle
  • 6728d3efix: improve MAVLink connection lifecycle and add tests
  • 86df7b8chore: update shared utilities and wire new dependencies
  • 8fc79cffeat: add media preview handlers and improve WebRTC session management
  • d5b5c89fix: improve MAVLink connection lifecycle and config builder
  • 59ba585feat: drop terminal session privileges to non-root user
  • 45732fdrefactor: simplify auth service tests and improve oauth2 error handling
  • 9b44b00refactor: improve environment manager with dependency injection
  • f04aafechore: regenerate templ files for v0.3.1001
  • 420725brefactor: relocate testutil and counterdumper packages
  • e696decfix: resolve code review issues across agent codebase
  • 211d349fix: instrument frames_to_datachannel counter in throughput logging
  • 18d8ffafeat: add debug logging for MAVLink serial connection lifecycle
  • 2f398a7feat: add MAVLink throughput logging and fix Loki offline buffering
  • c23b9d8fix: remove duplicate BroadcasterProvider registration causing panic on startup
  • 80fc22efeat: prefer NDIS over PPP for cellular, add PDP context reset and activation diagnostics
  • ca8ba70feat: auto-manage USB ethernet interfaces via D-Bus
  • 0bfb406refactor: add error wrapping at package boundaries
  • 3b2a003refactor: propagate parent context instead of context.Background()
  • 34f7a2arefactor: decompose MediaStream into sub-interfaces (ISP)
  • 242422crefactor: extract magic numbers into named constants
  • 4e985f2refactor: split god objects into focused files
  • 6f9393crefactor: add MustRegister/MustRegisterHook to DI container
  • a7be382refactor: consolidate Clock/Timer interfaces into domain/shared
  • 1dddc0fadd e2e test
  • 67ef268feat: improve cellular connectivity with PDP reset, hotspot triggers, and diagnostics
  • a73bc4dfeat: add periodic auto-connect retry and PDP context reset for modem
  • 926ee5bfix: recover gracefully from corrupted keyring store
  • a187eecfix: resolve gosec lint warnings in backoff calculation
  • c6cfec1fix: detect USB interface corruption when modem reports connected with zero signal
  • f199f91refactor: MAVLink architecture improvements and modem port safety
  • d4d0492fix: resolve gocritic lint violations
  • 712226afix: resolve data race conditions in test mocks
  • f0b1d79test: add drone disconnect reason status tracker test
  • be1bfc0fix: resolve lint errcheck and gocritic violations
  • 1c9b11ffeat: add SFU bandwidth feedback handler and measured bitrate getter
  • 308f9fcfix: throttle ws_error events and reduce queue to prevent reconnect storms
  • e140b42fix: use WriteControl for ping/pong to prevent congestion disconnects
  • b9e28c9fix: only update connection status from drone channel events
  • 2f4273ffeat: show measured RTSP bitrate in ABR stats UI
  • feb91ecfix: resolve lint errcheck violations and stale connection reuse in publisher
  • 1a06516fix: sync initial bitrate to camera on ABR startup
  • ec3b1dffix(ci): fix YAML parse error and outdated action versions in test workflow
  • 02505dfrefactor: rewrite RTSP camera e2e tests with piClient abstraction
  • ad4ccb0refactor: extract CameraNetworkService and RefactoredRTSPCameraHandler
  • e8e44f4fix: cascade-delete routes and stop pipelines when deleting sources or destinations
  • a43cb83refactor: extract ConsumerCreator interface for SFU publisher
  • ce42b85feat: add immediate SFU reconnect on server shutdown
  • 60041cafix: allow detaching media streams during running P2P sessions for recovery
  • d20b532feat: add URL-based connection pooling to prevent duplicate RTSP connections
  • ad93ea4feat: use discovered ONVIF port and credentials for camera bitrate control
  • 6191c8ffeat: add ONVIF subnet scan fallback and manufacturer default credential retry
  • 8ad5fd5feat: use SFU bandwidth feedback as primary ABR signal
  • 840fbc8fix(webrtc): remove GCC from P2P sessions to fix VBR camera streams
  • 605c3b4fix(sfu): prevent false unhealthy from Pion stats limitation
  • 56e18c1fix(webrtc): deduplicate tracks by media type to prevent duplicate a=msid
  • 56dc193fix(sfu): disable WebSocket compression and increase buffers
  • 332b3f4test: update e2e test suites for RTSP and source recovery
  • 3fd78c7feat: SFU publisher reconnect and WebRTC session manager improvements
  • c5e7f5efix: enable agent-driven MAVLink rate control
  • 378757afix: aggressive WebSocket keepalive for 4G carrier NAT survival
  • 40a4ba1fix: disable ONVIF controller after 3 consecutive failures
  • d8745f9feat: add ONVIF bitrate control for non-OpenIPC cameras
  • 2e7924frefactor: auth simplification, ABR improvements, modem recovery, SFU health
  • 51fc71afix: worst-case subscriber quality merge and RTCP diagnostic logging
  • 95b97b9refactor: collapse plugin system and remove unused codecs
  • 5a38174test: add PLI rate limiting and keyframe replay throttle tests
  • 4da35f5fix: add PLI rate limiting at track and stream layers to prevent PLI storms
  • 2037593feat: add ICE restart as fast reconnect path with jitter backoff
  • acd0a0cfix: keep RTCP RR TotalLost consistent with local sequence tracking
  • 5a91e2afeat: add camera HTTP proxy handler for remote camera UI access
  • c000459fix: use SSH connectivity check instead of ping for deploy preflight
  • fbc90b0feat: add media quality logging — FPS drop detection, GCC bitrate change visibility
  • c733092feat: relay RTCP receiver reports from P2P viewer to camera
  • 2c09510fix: bandwidth limiter gate unreliable — use time-based grace period
  • a3b334ffix: P2P bandwidth limiter not dropping frames
  • 6f8561drefactor: downgrade webui and utility logs to appropriate levels
  • 807dec5refactor: migrate remaining scattered logs to canonical events
  • f51039erefactor: downgrade noisy Info/Warn logs to Debug
  • ef7b753refactor: migrate remaining scattered logs to canonical wide events
  • f1c242crefactor: migrate all scattered logs to canonical events
  • c4b0b27feat: add trace context to canonical events and migrate network lifecycle logs
  • 79d8781feat: add canonical log lines for wide event observability
  • 3b204d1feat: WebRTC GCC bandwidth estimation, SFU reconnect scheduler, and web UI improvements
  • be30d1bfeat: auto-create SFU routes for all sources alongside WebRTC
  • 7f2751efeat: add default SFU destination on boot
  • b130e6ffix: modem monitor and websocket error improvements
  • 33e0d4efix(rtsp): improve backoff reset test to measure elapsed time from actual connection drop
  • 50ef663fix(websocket): add structured error types and expand RTSP/pipeline tests
  • 86025affix(modem): improve recovery logic and expand modem monitor tests
  • d6e1f26fix(scripts): support user@host PI_HOST format and handle SSH drops during deploy
  • 58aa0e6feat(e2e): add mock network interfaces support and allow re-scanning cameras
  • 5f247f5feat(discovery): fall back to subnet scan when specific camera IP probe fails
  • b124477fix(network): remap Ethernet interface states for clarity
  • a7d61defix(stream): improve consumer error logging -- context cancellation is debug, not error
  • 6c6c13afeat(network): reset WebSocket backoff on modem reconnect for faster recovery
  • 61bd7cdrefactor(abr): move rate limiting from CameraController to ABR coordinator
  • 912df49refactor(media): change MediaSource.Status() return type from string to SourceStatus
  • 74558dafeat(media): add RTSP source auto-reconnect and pipeline source-driven recovery
  • dc29ddbrefactor(mavlink): introduce ConnectionStatusTracker as single source of truth for connection state
  • c949503refactor(websocket): replace listener map with typed callbacks, remove health monitor and stats collector
  • e67fe64chore: miscellaneous improvements and fixes
  • b5cdd40feat(providers): add source health tracking for media routing
  • 4fe3044feat(webrtc): improve WebRTC session management and stability
  • ebf5479refactor(auth): improve OAuth2 token refresh flow
  • 5e1e31dfeat(rtsp): improve RTSP error handling and UDP timeout detection
  • b31f32ffeat(mavlink): add connection flapping detection and stability improvements
  • f781b6ffeat(mavlink): add real-time connection status events
  • b3e824arefactor(discovery): separate local and network discovery into packages
  • 53a14f8feat(e2e): add mock support for camera interfaces and network analysis
  • c731685fix(mavlink): detect TCP/UDP channels wrapped in EndpointCustomClient
  • 6d95fbctest(system): add unit tests for auto-update functionality
  • bef2609feat: make auto-update trigger immediately
  • 5cd7f44fix(mavlink): correctly identify TCP/UDP channels wrapped in EndpointCustomServer
  • 85d2c1achore: add SystemHealthProvider implementation to StatusMonitor
  • 2e255a5chore: add missing health_provider.go
  • a2c2eb9feat: implement auto-update trigger when enabled
  • 852380ffix: detect environment from API host when no state file
  • 6651fa1feat: enable auto-update for dev environment profile
  • 29fab7dfix(modem): reconnect D-Bus after ModemManager restart
  • 83f3f8frefactor(handlers): consolidate error codes and enhance WebRTC logging
  • 4a32137fix(sources): refresh cached source after config update
  • bbeea1efix: handle invalid_credentials error in auth retry loop
  • aee1799fix(rtsp): handle UDP transport issues with auto-fallback to TCP
  • d59a481fix(auth): add invalid_credentials to auth error types
  • 4d32801test(auth): add test for invalid_grant credential clearing
  • 479f558fix(auth): clear tokens after 3 consecutive 401s instead of 10
  • 0861373feat: add cellular auto-connect when modem becomes registered
  • e63159dfix: use update-first approach for Aptly publish
  • 0f69742fix: register connectivity_checker before NetworkManager check
  • 665d30fci: use self-hosted runners for all workflows
  • 8436e39ci: use self-hosted runners for docker workflow
  • 89ba915refactor: improve architecture with error logging and layer separation
  • 392bb9dfix: add device heartbeat to prevent stale session detection
  • 00770d1Add end-to-end latency logging for video pipeline debugging
  • 9cc9c67feat(helm): add secretEnv support for secret-based env vars
  • 62448a6Add auto_connect option to mavlink.config.create handler
  • 169f310chore: update aircast-sdk with IsClosed connection fix
  • 2c97625test: add integration tests for IsClosed connection state fix
  • 38a510ffeat(auth): add E2E token support for simulator authentication
  • 9147771refactor(mavlink): simplify rate control and improve connection handling
  • c8b8c52fix(websocket): detect temporary disconnections in IsClosed() for queue flush
  • d8850a0fix(mavlink): prevent connection cycling with grace period for new connections
  • d9b764ffeat(mavlink): add filter stats to rate control ack
  • 67679b5feat(mavlink): add dynamic WebRTC endpoint registration and datachannel events
  • 6126466fix(mavlink): enable WebRTC telemetry forwarding for all connection types
  • f6dc6ccfeat(mavlink): add receiver-driven rate control
  • f872564chore: trigger auto-deploy test
  • c2f1696Add modem signal quality to WebSocket reconnection logs
  • 52f2386refactor(mavlink): require explicit API host/port configuration
  • f2a59d4fix(mavlink): prevent duplicate connection race condition
  • dba1d06fix(mavlink): enable congestion monitor for all connections
  • 1f73055feat(mavlink): wire congestion broadcaster and refactor MAVLink internals
  • 038b45drefactor(webrtc): use constructor injection for session context
  • 532ee91fix(websocket): make unknown errors recoverable to prevent reconnect loop exit
  • f0ff96cfeat(mavlink): add adaptive rate control for WebRTC congestion
  • 6d082barefactor(keyring,activate): add tracing and fix code review issues
  • ac3f2b5feat(keyring): add migration from legacy paths on startup
  • e7761a5fix: start hotspot when device is not authenticated
  • 31136a9fix: fail release if Pi image build trigger fails
  • f912020fix: correct OTEL collector endpoint for development
  • 33ae628ci: add Telegram notification on test failure
  • 1d0b9faci: add Telegram notification on release failure
  • b1f5756ci: use PAT_TOKEN for cross-repo cleanup
  • 115056fci: add pi-gen release cleanup to workflow
  • 6a21fd5ci: add GitHub release deletion to cleanup workflow
  • 0d24924ci: add git tag deletion to release cleanup workflow
  • bece220ci: add manual trigger to release cleanup workflow
  • 110a8f5ci: add workflow to cleanup S3 on release deletion
  • 614c76ffeat: add release.delete command to remove releases
  • 88c6aa0fix(modem): move nosec directive to line above for gosec recognition
  • 2f4318afix(modem): correct nosec comment format for gosec linter
  • 4dce103fix(modem): resolve gosec and unparam lint issues in recovery service
  • 11dfee4fix(deps): remove local replace directive and update gomavlib to v3.3.1-aircast.3
  • 0574437feat(modem): improve ModemManager recovery with active polling
  • e5c268echore(scripts): add Pi reachability check and udev deployment
  • e114564chore(debian): improve udev rules installation
  • 18b0325feat(webui): improve WiFi configuration interface
  • fcfd8a2feat(system): add network health tracking to status monitor
  • 2ff3e9bfeat(network): integrate connectivity state machine
  • 0d22766feat(system): add modem monitoring and connectivity state machine
  • 3a4db3ffeat(logging): integrate disk buffer with LokiHook for offline resilience
  • d38397bfeat(logging): add disk buffer for offline log persistence
  • 1342d9ffeat(webtransport): add direct connection mode and separate host config
  • 3f8682cfeat(auth): improve authentication and environment handling
  • 11bd93afeat(tls): add TLS support for local development connectivity
  • b1ce6c4feat(env): add multi-environment switching support
  • b4dfa69feat(sfu): add exponential backoff retry for SFU publish failures
  • b61d811feat(tailscale): decouple from auth - start on boot before authentication
  • 51e15e4feat(tailscale): keep connection alive when auth logs out
  • d1bb79efix(tailscale): prevent duplicate device registrations on transient failures
  • 503e230Use templated app label in deployment
  • abe108fdocs(webtransport): add configuration documentation
  • 9ea8b18feat(mavlink): add WebTransport endpoint support
  • 93ddcceIncrease SFU unhealthy loss rate threshold to 50%
  • b0458bechore: migrate gomavlib imports to aircast-one fork
  • b44b378feat(auth): generate drone-themed device names during bind
  • 335eee1feat(siyi): add SIYI gimbal/camera WebSocket control
  • 9bcd348fix(mavlink): increase WebRTC queue and non-blocking writes
  • a75503crefactor(tailscale): use managed service pattern with device ID isolation
  • 3b74b86feat(update): add apt progress streaming and fix stale cache
  • e1895c0fix(cellular): wait for modem registration before connecting
  • c857b4ffeat(tailscale): add SSH forwarder and use device ID as hostname
  • 7804042fix(update): improve update detection with proper version comparison
  • 7543c85feat(rtcp): add comprehensive RTCP observability with bitrate tracking
  • b7e03bdfeat(logging): add wide event logging to webui handlers
  • 849e8a2fix(e2e): fix TOCTOU race in EventEmitter WaitForEvent
  • be08921fix(ci): pin Go version to 1.25.5 to fix cache mismatch
  • 7740a21refactor(media): rebuild pipeline architecture with auto-detect ABR
  • 5a2f80efeat(media): add pipeline plugin architecture for ABR
  • a166fa0refactor(system): improve logging for system update event broadcasting
  • 0003a65feat(tracing): add write stall detection with tracing for outgoing track
  • 4d19032fix: register http_client dependency in SFU provider tests
  • 60b97eechore: run lint and format only on staged files
  • 12fb9c2refactor(infrastructure): remove unused OpenIPC and WebRTC code
  • 637e0e7refactor(media): remove unused bitrate clamping and camera detection
  • 46307ccfix(tracing): improve OTLP endpoint parsing for TLS detection
  • 2648dcdfeat(mavlink): track connection errors in status response
  • 8e3ce78feat(updates): add update orchestrator for safe self-updates
  • 4256de2feat(tailscale): add status types, config, and node ID reporting
  • 9ad6746fix(auth): handle no_credentials error to stop retry loop gracefully
  • d248c99feat(events): add configurable buffer size to event bus
  • 399e6ebfeat(config): add duration and integer helpers to environment config
  • eb3a78drefactor(websocket): simplify reconnector with proper circuit breaker
  • f6fe577feat(sfu): add Tailscale routing support for WebSocket client
  • ab277b9refactor: update remaining components for consistency
  • b532a26chore: remaining ClientProvider adoption and system updates
  • c31a1d6refactor(media): improve SFU publisher and consumer lifecycle
  • 73d1dc0refactor(mavlink): use ClientProvider for MAVLink WebSocket
  • bfc3183refactor(websocket): use ClientProvider for WebSocket dialing
  • dd15e2frefactor(webrtc): use ClientProvider for ICE server fetching
  • 2c33cabrefactor(network): use ClientProvider for connectivity checks
  • 41efc10refactor(logging): use ClientProvider for Loki HTTP requests
  • 3c4fce1refactor(auth): use ClientProvider for HTTP requests
  • ca3d612feat(tracing): route OTEL metrics and traces through Tailscale
  • 5fcd48bfeat(http): add ClientProvider for Tailscale HTTP routing
  • ec39830refactor(logging): adopt wide event pattern for SFU reconnection
  • 71dd284fix(sfu): move consumer stopping from scheduleReconnect to attemptReconnect
  • 8cf8bf0feat(logging): add wide event logging for packet drop diagnosis
  • e6a9b0ffeat(abr): add wide event logging following loggingsucks.com pattern
  • f18af76fix(abr): detect OpenIPC cameras by name instead of source type
  • 2530e5dfix(health): preserve RTCP-reported RTT and loss rate in collectStats
  • a23e3aefeat(logging): add wide event logging for WebRTC stats
  • 7189ad8feat(logging): add wide event logging for WebSocket reconnection
  • e93b767feat(rtcp): implement RTCP feedback and media pipeline improvements
  • 470106dfeat(sfu): detect connection failure via write errors for faster disconnect
  • 4cb772bfix(helm): correct OTEL metrics endpoint service name
  • 9588590fix(sfu): stop consumers during reconnection to prevent buffer overruns
  • 5021e2cfix(ice): fix broken HTTP fallback and increase timeout
  • 34b5318ci(docker): remove arm64, build amd64 only
  • f6ab16eci(docker): build amd64 only for develop branch
  • afa1798feat(network): add SimulatedCellularManager for simulation mode
  • 13a5130fix(webui): handle nil interfaces in StatusCache to prevent panic in simulation mode
  • 887c0c2fix(sfu): mark connection as disconnected on request timeout
  • bb0f182fix(media): recover from error state in StartSource
  • 7ad2bb2fix(sfu): restart consumers on WebRTC reconnection
  • a0fe181feat(stream): add consumer Restart() for WebRTC reconnection
  • 826d0e7fix(counterdumper): make Start/Stop idempotent and thread-safe
  • 945e00afeat(webrtc): add ICE_FORCE_RELAY support for STUNner
  • 9158832refactor(webui): split setup_handler into domain-specific handlers
  • 422a6ccrefactor(webui): split setup_handler into domain-specific handlers
  • be206derefactor(webui): remove adapter pattern, use domain types directly
  • 913d2c1refactor(webui): query cameras directly instead of caching
  • a251048feat(webui): implement GetCameras to fetch from database
  • 5745ebcfix: move SIMULATION_RTSP_URL to environment-specific patches
  • 7845db9feat(simulation): add RTSP camera seeding for simulation mode
  • 6de1c81feat: use GitOps dispatch for automatic sync
  • 1f806a3chore: update Chart appVersion to v0.0.0-dev-a62eaac [skip ci]
  • a62eaacfix: make gitignore patterns root-relative to allow helm/aircast-agent
  • 6c7263cfix: auto-update Chart appVersion after Docker build
  • 383d041chore: update Chart appVersion to latest build
  • 0abe634fix: resolve staticcheck SA5011 in reachability checker test
  • 9b21cc1fix: handle nil cellular manager in handler and provider
  • b149011fix: resolve staticcheck SA5011 false positives in tests
  • 31395e1fix: handle nil connectivityChecker interface in auth handler
  • 2aabdb1feat(simulation): add K8s simulation mode for USB, modem, and MAVLink
  • 61b396ffix(helm): update appVersion to latest build
  • b279536fix(helm): correct image repository and version
  • cd3312echore(helm): update appVersion to v1.2.4-dev.6
  • e9b4a05fix(sfu): add sfu url to all envs
  • 23666e0feat(onvif): remove onvif media source
  • e318c4ffeat(rtsp): add automatic discovery handlers
  • 70c625ffeat(tracing): improve sampling and timeouts
  • 83f72b2fix(e2e): use atomic send-and-wait pattern to eliminate race conditions
  • a5cf3e8fix(lint): remove redundant nil checks in provider tests
  • 2973d76ci: use PAT_TOKEN for GHCR access
  • 8195291ci: add GHCR credentials for aircast-sfu service
  • bc8f587fix(sfu): add WaitGroup to ensure goroutines stop before reconnect
  • b49c8fbfix(test): fix data race and SFU test configuration
  • f9a5c6efix(test): mockDeviceLinux returns default driver for tests
  • cb310d8fix(test): add missing Linux mock types for network package tests
  • 9b8a211feat(tailscale): migrate from CLI to embedded tsnet
  • 226a721feat: add Tailscale integration for automatic network join
  • d757545fix(ci): make .env include optional in Makefile
  • 6191a68fix(media): prevent RTSP destination from dying after startup
  • afec12afix(release): redirect warnings to stderr to prevent version corruption
  • 2527cafci(docker): align workflow with aircast-api pattern
  • 03fd915feat(tracing): add session-level span for SFU connections
  • 51fac56feat(tracing): add OpenTelemetry spans to media pipeline
  • 58b559bfix(e2e): prevent race conditions in route tests
  • 49c7a58feat(tracing): add session-level traces to P2P WebRTC handlers
  • 769cb5dfeat(tracing): link offer/answer/ICE in single session trace
  • f6b809bfeat(tracing): add distributed tracing to SFU WebSocket client
  • 85b3709Remove verbose heartbeat debug logging
  • be22e92feat(tracing): add trace context propagation for events
  • a101ba3build: update Tailwind CSS output
  • 5f51750refactor: improve WebRTC debugging and stream attachment
  • f857b9afeat: fetch ICE servers from API with caching
  • 1951444fix: use routeID as pipeline ID for uniqueness
  • 85ed9f0feat: add error tracking to media sources
  • 2b16770feat: add waiting_for_drone status to MAVLink connection handler
  • 5806a12refactor: improve logging field handling and reduce noise
  • f970424chore: tune message queue for better memory management
  • ae8f433fix: prevent log spam on media consumer context cancellation
  • 23b3aa3chore: downgrade MAVLink frame logs from debug to trace
  • 9f63e6dfix: add timestamp to session IDs and include session ID in track IDs
  • 8ea95fcfix(mavlink): prevent GCS heartbeat echo causing UI state flicker
  • 8cd033brefactor(discovery): code review fixes
  • aad1b8brefactor(discovery): unify RTSP path lists to CommonRTSPPaths
  • 2ab3c7drefactor(discovery): use CameraTypeRegistry for manufacturer detection
  • 8150b22refactor(discovery): consolidate camera ID generation to shared function
  • 6e29d61fix(rtsp): auto-refresh stale tokens and fix device_id mismatch
  • 781d16crefactor(discovery): extract shared RTSP utilities and camera type registry
  • 20828efrefactor(discovery): extract reachability and RTSP validation to discovery package
  • 6c1c9adAdd clearer logging for MAVLink command forwarding and fix network build
  • f8af8b9feat(network): add granular connectivity status for better diagnostics
  • a941208fix(e2e): increase MediaRouteSelectSuite timeouts to 5 seconds
  • b461127fix(e2e): improve MediaRouteSelectSuite test stability
  • 0c1986bfix(e2e): improve test stability with event-driven waiting
  • 388a029refactor(sfu): remove dead API proxy code paths
  • 3b03701refactor(sfu): remove API proxy fallback, use direct SFU connection only
  • 2381b5aRename publisher_ready to room_ready
  • 7eab2adrefactor: update tests for publisher_ready event rename
  • 45054edfix(sfu): resolve deadlock preventing media tracks from flowing
  • a200802Add ICE connection state change handler for faster SFU disconnect detection
  • 6db4eacfix(sfu): auto-start routes when web client connects
  • 4f51c01fix: restore network.camera.analyze handler from master
  • 08bac8cfix(modem): remove build constraint to enable simulated modem on Linux
  • 415a225refactor: clean up dead code and naming inconsistencies
  • 0c7bec9refactor(media): remove dead code duplicates from domain/media
  • 6f4fcd9refactor(rtsp): consolidate duplicate RTSP implementations
  • ab99997refactor(webrtc): consolidate duplicate WebRTC implementations
  • c2194b8refactor(session): decouple WebSession from WebRTC
  • 79d5218fix(webrtc): correct session ID field names in logs
  • 9bac615refactor(media): apply SOLID principles to media pipeline
  • 8236edefix(e2e): use namespaced keyring keys for auth token seeding
  • 1c3b24frefactor(media): eliminate MediaPipeline abstraction and fix goroutine leaks
  • 6bc2224fix(handlers): update ABR stats mock to use proper type
  • 01e1fa5chore: misc infrastructure and test improvements
  • e247f2ddocs: add protocol documentation for Betaflight MSP and SIYI SDK
  • 1debc14refactor(session): improve session and WebRTC handler management
  • 48113fbrefactor(providers): improve provider and service architecture
  • 3e4b0dafeat(webui): add RTSP camera management to web UI
  • 7e15223feat(auth): improve token refresh and auto-clear behavior
  • 2041bc6refactor(media): improve RTSP source and stream handling
  • eb698carefactor(abr): improve adaptive bitrate implementation
  • 4e7171arefactor(discovery): improve IP camera discovery architecture
  • c5bfe26refactor(events): replace broadcaster with event bus
  • e90a763feat(mavlink): add transport configuration support
  • 839901etest(services): add IPCameraScannerManagedService tests
  • 9ddcb3atest(providers): add MediaProvider registration tests
  • 381d58brefactor(discovery): add network abstractions for testability
  • 6e29367refactor(handlers): improve WebSocket handler testability
  • 33fa221Merge branch 'master' into develop
  • f43783eupdate styles
  • fd37413please use Ethernet for ip search
  • c75d6a6feat: add RTSP camera management to web UI
  • 5b98593refactor abr implementation
  • cf1e02bchore: add bin/ to gitignore
  • c56f600fix: only use RTT from nominated ICE candidate pair
  • 9ed77eefix: clean up stale stream sessions on browser refresh
  • 8dc9849feat: add IP camera auto-discovery with RTSP validation
  • ad87f3afix: local deploy IP auto-detection when LOCAL_IP not set
  • 8f97d1dchore: reduce log verbosity and remove emojis
  • db536a9refactor: extract Makefile logic into shell scripts
  • 645fbbbpush debug logs to loki too
  • 3aad1b5refactor: move Clock implementation to infrastructure with proper DI
  • c896f45Move Clock interface to domain/shared for proper decoupling
  • 068488dMerge ABR and camera network analysis from master
  • cff0286Merge branch 'master' into develop
  • 7716f08add PLI forwarding and automatic ICE restart for video recovery
  • 81e18a4add PLI forwarding and automatic ICE restart for video recovery
  • c131b7frefactor: decouple ABR from OpenIPC using Clean Architecture
  • 465c8adrefactor: decouple ABR from OpenIPC using Clean Architecture
  • 51193a7add GCC bandwidth estimation to ABR system
  • 89a5d50add GCC bandwidth estimation to ABR system
  • 0beb147add abr
  • ab7b831add abr
  • 55f5895add abr
  • 3529763add abr
  • 1ead764add NewTestKeyring helper for auth tests
  • de6486cadd NewTestKeyring helper for auth tests
  • c5dd2c5add tracing to remaining websocket handlers
  • 0ee5e18add tracing to remaining websocket handlers
  • f25fc0ffix my envs for tracing
  • 0d9a1f2fix my envs for tracing
  • 4419ee8add tracing to websocket handlers
  • c64a058add tracing to websocket handlers
  • 817fda7fix my envs for tracing
  • ed56501fix my envs for tracing
  • 117041ffix auth logout issues
  • 2598919fix auth logout issues
  • 272e336reformat websocket imports
  • 456c1b7reformat websocket imports
  • c638a4breformat mavlink imports
  • fe33b21reformat mavlink imports
  • 176eb35downgrade registerLifecycleHooks logs
  • e535098downgrade registerLifecycleHooks logs
  • 38d0482add clock testing package
  • 3b54436add clock testing package
  • 5bdd986fix http server boot sequence
  • 96c2bb2fix http server boot sequence
  • 4c6d0b4add DATABASE_PATH environment override
  • 5e99fc4add DATABASE_PATH environment override
  • 9c6561dfix oTEL tracing
  • ef67365fix oTEL tracing
  • b86a1c2add metrics
  • b93fb63add metrics
  • e96f8f5fix nil pointer panic in camera network service registration
  • 1143d76fix nil pointer panic in camera network service registration
  • 722d652extract camera network analysis to domain layer
  • 3eec318extract camera network analysis to domain layer
  • 28b9104fix cellular connection failing after modem re-enumeration
  • 422fa89fix cellular connection failing after modem re-enumeration
  • de212bffix clipboard copy for non-secure contexts (HTTP)
  • 2ad7ae2fix clipboard copy for non-secure contexts (HTTP)
  • 0a8a73bremove network dependencies from service file
  • 7e31c0fremove network dependencies from service file
  • 667ab4dfix release version detection to use stable tags only
  • 93c7ec5fix release version detection to use stable tags only
  • 1d8bb17fix hotspot creation with legacy addresses format
  • d925da0fix hotspot creation with legacy addresses format
  • ca0b787improve connectivity checker
  • 8b932a9improve connectivity checker
  • b26c6e5Merge branch 'master' into develop
  • e882281fix release.stage to strip existing prerelease suffixes
  • 723a41ffix release.stage to strip existing prerelease suffixes
  • 31c62c7rename version.* to release.* and remove confirmation prompts
  • 4f345c2rename version.* to release.* and remove confirmation prompts
  • 380de82add stage tag support to release workflow
  • e7043d1add stage tag support to release workflow
  • b5cc975add version.stage target
  • 4655389add version.stage target
  • e282e23fix version targets to push only specific tag
  • 67c0e0ffix version targets to push only specific tag
  • 9c1e011Replace ffprobe with native gortsplib for RTSP discovery
  • 4ec81a7add new webui interface
  • d7d185eadd new webui interface
  • 4718d1dimprove logs page with infinite scroll and mobile layout
  • f20a4b5improve logs page with infinite scroll and mobile layout
  • a56cb3bsimplify pi-gen trigger (remove VERSION file sync)
  • d65604bsimplify pi-gen trigger (remove VERSION file sync)
  • 0e46c39auto-update pi-gen VERSION file on release
  • 639622dauto-update pi-gen VERSION file on release
  • d510c88fix goreleaser env file mapping for stable/testing distributions
  • 45012bffix goreleaser env file mapping for stable/testing distributions
  • b5dbe7fsingle release workflow
  • 4f4462fadd staging tag support (v1.0.0-staging.1)
  • f6fc30eadd staging tag support (v1.0.0-staging.1)
  • c3f1999combine production and development workflows into single release.yml
  • 8857f1ccombine production and development workflows into single release.yml
  • 6802a37update pi-gen trigger to use build-development-image event
  • 8efa79cupdate pi-gen trigger to use build-development-image event
  • ec44fc2simplify Pi image trigger to use distribution only
  • cb4e8afsimplify Pi image trigger to use distribution only
  • 6feb224trigger Pi image builds for RC releases
  • 218165atrigger Pi image builds for RC releases
  • bd46f45add RC release support to production workflow
  • 6f967b7add RC release support to production workflow
  • 14b4f53refactor webui and fix pre-commit issues
  • 5d4438arefactor wifi scanning to non-blocking API
  • 7756e16refactor wifi scanning to non-blocking API
  • aa7a8a8add new webui interface
  • b7511beadd new webui interface
  • caf46e8fix hotspot reconfiguration
  • 1f27cedfix hotspot reconfiguration
  • 1275879add get typed container config
  • fcb4fc9add get typed container config
  • c0c6ae3fix lint issues in network provider and connection validator
  • 437557eMerge branch 'master' into develop
  • c938c4eadd ignore ipv6 routes
  • 182af91add ignore ipv6 routes
  • 2c8845bignore ipv6 to prevent reconnections
  • d0578b1ignore ipv6 to prevent reconnections
  • a75562dfix serial autoconnect
  • 85cc5dcfix serial autoconnect
  • 675455fMerge branch 'master' into develop
  • 655a201fix: update aircast-pi-gen repository to aircast-one organization
  • bc767b5fix: update aircast-pi-gen repository to aircast-one organization
  • 80afabbfix: set route-metric for ethernet and prevent hotspot default route
  • b2538b4fix: set route-metric for ethernet and prevent hotspot default route
  • 7aeaa91fix: update goreleaser owner from pavliha to aircast-one
  • 370c1d1fix: update goreleaser owner from pavliha to aircast-one
  • a4fee92refactor: event-driven NetworkManager route management with D-Bus signals
  • dfaf711refactor: event-driven NetworkManager route management with D-Bus signals
  • eeb44d5fix: validate route-metrics on device changes to handle boot race condition
  • 6a9109ffix: validate route-metrics on device changes to handle boot race condition
  • 5c033c7refactor: remove disabled RouteMetricManager code
  • 9055d5brefactor: remove disabled RouteMetricManager code
  • 78e9b74Merge branch 'master' into develop
  • f1c6be2fix fps count
  • 0ed7d48fix fps count
  • 8a72b82fix: prevent USB ethernet (cameras) from creating default routes
  • 039722dfix: prevent USB ethernet (cameras) from creating default routes
  • a388afefix: deduplicate MAVLink devices and add auto-baud rate detection
  • 243abb5fix: deduplicate MAVLink devices and add auto-baud rate detection
  • 65584fbfix route managment
  • cad2a04fix route managment
  • 7a70d6erefactor: reduce connectivity checker log noise
  • f4ec066refactor: reduce connectivity checker log noise
  • 83c5419fix: preserve existing network settings when updating route-metrics
  • 56cf3c4fix: preserve existing network settings when updating route-metrics
  • 3a08911fix: preserve all IPv4/IPv6 settings when updating route-metric
  • fee3a39Migrate CI/CD workflows to self-hosted runner
  • 86197c6Improve Network page UX and add USB tab
  • 309d87eSimplify cellular configuration form
  • 20ba8d5Add loading state and validation to cellular configuration
  • d633484Separate WiFi configuration from bind functionality
  • ef83b7cAdd tab-based navigation with separate pages for each section
  • a5bd609Fix WebUI dependency injection and refactor Router
  • 39980f5Consolidate templates into shadcn-like component library
  • 3219c84Refactor Router to use RouteRegistrar interface
  • 4c37168Use di.GetTyped helper in MAVLink and MediaRouting providers
  • 77d34d6Fix system provider tests to execute auth.complete hook
  • dd4f9bcRefactor router to pure DI and simplify WebUIProvider
  • 5ed1048add new get typed method
  • fcca8b4Refactor web UI handlers with comprehensive unit tests
  • c8c1f38Set Content-Type header for 404 page to text/html
  • ec99207Fix 404 page handling and improve user experience
  • f47ae21Optimize login and main page with async data loading
  • 39baf06Optimize web UI performance with async loading and background caching
  • ea52178Make WiFi manager optional for Kubernetes deployments
  • 07641d8feat(build): add make test.docker for Linux environment testing
  • d8122e3test(network): remove unnecessary sleep from DeviceChangeReaction test
  • 23a54b7perf(network): add D-Bus signals, retry logic, and configurable delays
  • 0db224ffix(network): add shutdown hook for RouteMetricManager and USBNetworkMonitor
  • 6326bd2refactor(network): improve RouteMetricManager architecture
  • f93f61fCommit built CSS file and simplify Docker build
  • 25aae41Use TARGETARCH for multi-arch Docker builds with tailwindcss
  • eb0812cFix tailwindcss architecture detection in Docker build
  • dd0d224Build WebUI assets in Docker for web access
  • 4f1c5b6Use nginx ingress class instead of traefik
  • b1a75e7Add Ingress support to Helm chart for external access
  • 0200059Add GitOps repository dispatch trigger for automated deployments
  • 1efdcbcImplement semantic versioning for Docker images
  • 1e16cf3Fix pre-existing test failures
  • dcc4b6dFix update checker initialization - resolve dependencies after managed services start
  • d227651Fix shouldConfigureInterface to include USB interfaces
  • a61097eForce Docker rebuild - update checker fix wasn't applied due to layer caching
  • 8b9cb6bFix linter warning: use switch instead of if-else chain
  • 3557bafFix test failures and linter errors
  • b3ee98cFix update checker to start after authentication
  • a2833adAdd comprehensive test coverage and Docker test runner
  • 9269de2Remove SKIP_MODEM_PROVIDER to test DBus fallback
  • 1684780Use PAT_TOKEN for GHCR authentication
  • 2abf6a4Build Docker image for amd64 only to speed up CI
  • 939ffb3Refactor route metric manager to use event-driven architecture
  • 037c35dRefactor route metric manager to use event-driven architecture
  • c01ab1bRefactor route metric manager to use event-driven architecture
  • 750753aSkip WebUI asset building in Docker - not needed for container deployment
  • 64e517fDownload correct Tailwind CSS binary for target architecture
  • 18b67bfCombine Tailwind CSS download and build in single RUN step
  • 7e27059Run tailwindcss and templ directly instead of via Make
  • 7e19838Fix route metric manager to use NetworkManager API for modem detection
  • 9a81290Fix route metric manager to use NetworkManager API for modem detection
  • f41213cInstall tailwindcss to /go/bin and remove unused test types
  • 927de18Remove Makefile from .dockerignore to enable WebUI builds
  • 1b35a8cFix Makefile target invocation in Dockerfile
  • 8db31baBuild WebUI assets in Dockerfile before Go build
  • 8d4b64cAdd Docker build workflow for GHCR
  • 1556b18Make .env file optional in Makefile
  • d0fd0cfAdd .env file creation before building WebUI assets in all test jobs
  • 44fd69aFix CI: Build WebUI assets before running tests
  • 66a7b20Remove modem_other.go to fix build conflicts
  • 987dc0dAdd shared simulated modem implementation
  • 90ab5f5Add fallback to simulated ModemManager when DBus unavailable
  • 6cf74bfAdd Helm chart files for Kubernetes deployment
  • 9b10265Add Kubernetes deployment with Helm chart
  • 031e2dfadd turn server config
  • 03aaa63fix open telemetry tracing
  • 084ff63Refactor USBNetworkMonitor for testability and add comprehensive tests
  • d2dcf70fix router.go format
  • f7bfd73add output.css to .gitignore
  • eb4405fadd missing sfu destination
  • fb1c49aAdd tests for CaptivePortalDNS and refactor for testability
  • 2cc4e9fAdd custom 404 page and automated captive portal DNS management
  • 40745e3Start hotspot when internet unavailable even if device is authenticated
  • 6b9c6d9Fix Loki cardinality issues
  • 5ba88f3Enable MAVLink heartbeats to prevent SITL from exiting
  • 2e32a63Fix MAVLink connection reopening every 30 seconds
  • bcff21cFix WebSocket SendMessage to check connection state
  • 30fc921refactor: migrate time operations to Clock interface across application
  • 810c099docs: add Clock interface migration tracking document
  • 0844b6ffeat: add MAVLink connection health monitoring and auto-recovery
  • 1e7f98cfix: implement WebRTC data channel setup
  • 5c3deffrefactor: migrate time-based operations to Clock interface
  • b03cc68refactor: move Clock interface to shared testing infrastructure
  • 8baf56bfix: prevent duplicate a=msid lines in WebRTC SDP for P2P mode
  • f4a672etest: improve auth package coverage from 3.8% to 31.2%
  • 5a93fcafix: use XDG paths in E2E tests instead of relative paths
  • f9a22a0debug: add comprehensive logging for XDG path resolution
  • 36919b1fix: call xdg.Reload() to pick up environment variables in E2E tests
  • 262cc6bdebug: output to stderr and show xdg.DataHome value
  • 7313dd9debug: add logging to show XDG_DATA_HOME and SecretsDir paths
  • 37c6912fix: set XDG_DATA_HOME environment variable for test instances
  • 7163205fix: seed keyring with mock auth tokens for e2e tests
  • 3f86253fix: release agent HTTP port listener before starting agent
  • a389f22fix: change agent output logging from debug to info level
  • 443e393fix: increase e2e timeouts to 2s for reliable CI execution
  • f1a7513fix: increase WebSocketConnectTimeout to 1000ms for CI reliability
  • fa8eb2afix: increase ClientWaitTimeout to 1000ms for CI reliability
  • 2835e7efix: increase ClientWaitTimeout for reliable agent startup in CI
  • 81cc3effix: properly shutdown AuthService in e2e tests to prevent zombie processes
  • 04e7945fix: resolve Mock API server port binding conflict causing CI timeouts
  • 0659261perf: optimize e2e tests to 6s with 30s timeout
  • 00d803brefactor: complete migration to event-driven e2e testing architecture
  • e3f8421add best practices README.md
  • d8f4e93feat: add DATABASE_PATH environment variable for test isolation
  • 944e0a9fix: handle missing messageClient dependency gracefully in SystemProvider
  • 9535bd5feat: implement dynamic port allocation for parallel e2e test execution
  • 78b3cf7test: eliminate all remaining time.Sleep from e2e tests (part 4)
  • ded1c6ctest: eliminate arbitrary delays from SFU and auth e2e tests (part 3)
  • c0fdf01test: eliminate arbitrary delays from RTSP and disconnection e2e tests (part 2)
  • c13222crefactor: eliminate arbitrary delays in e2e tests (part 1)
  • 71c7043fix: use SO_REUSEADDR to properly check port availability in e2e tests
  • a4a4cf0fix: replace sleep with active port release waiting in e2e tests
  • b83f70efix: increase mock API port release delay for CI reliability
  • e2f0e2afix: increase session stabilization delay and add port release delay
  • 6b59b3bFix UpdateChecker tests to skip when package not installed
  • da2897bFix race conditions in UpdateChecker
  • 03318ccImplement automatic update checking system for aircast-agent
  • fc67ebdfix: add session stabilization delay and increase timeouts in disconnection test
  • a20875ffix: improve e2e test reliability for CI/CD
  • 87afc66Fix gomavlib dependency for CI/CD pipeline
  • 8b4409aSync MAVLink WebSocket timeouts with API for stable connections
  • 8d0926crefactor: reduce MAVLink logging verbosity
  • d8f1c7dUse native gomavlib WebSocket endpoint to fix goroutine leak
  • ed6c894fix: auto-clear invalid tokens for remote devices
  • 011db4cFix RTSP destination streaming by adding runtime config transformation
  • 2a5d858Enable automatic MAVLink stream requests
  • 1c29141Upgrade aircast-sdk to include FromMemberID field support
  • d15c390Add retry logic for token refresh with network failure handling
  • dc4e0b2test: increase RTSP source ready timeout for CI stability
  • c1bddf5fix: resolve remaining linting issues in route metric manager
  • 2ea3729fix: correct RouteUpdate field access and restore error return
  • a8d09c0fix: resolve additional linting issues found in CI
  • cbbf2b8fix: resolve all linting issues
  • 8ec57faci: make linting failures block CI pipeline
  • 54a9ab0chore: remove obsolete +build tags
  • f4a9b2ffix: implement RTSP route auto-start and update SDK to v0.3.0-dev.3
  • 881d715chore: update aircast-sdk to v0.3.1-0.20251103142911-f6ae61001238
  • a9acaa9refactor: update media package
  • d1d44e5refactor: update media package
  • f499f20refactor: update media package
  • 75ee603refactor: update media package
  • 33547a5refactor: update media package
  • 83febfafeat: update output.css
  • 310f5adfix: make E2E tests fail CI properly and fix timing issue
  • d861abafix: resolve CI test workflow issues
  • 79ef820feat: add ci/cd test setup
  • 232c38cfeat: new rtsp functionality
  • b759d3arefactor: simplify WebRTC negotiation by removing conditional SFU mode
  • a27bd64perf: optimize E2E test suite performance (67% faster)
  • 0bfae4etest: improve tests
  • 0f98762fix: upgrade aircast-sdk
  • 02fabbbfix: update precommit hook
  • 65af9acfeat: bump patch version when creating dev release from stable version
  • 56d1e4cMerge branch 'master' into develop
  • 8b03786fix: automatic token refresh on startup prevents auth expiration after restarts
  • b9ad88bfix: automatic token refresh on startup prevents auth expiration after restarts
  • be8ff33Merge branch 'feature/automatic-route-managment'
  • 2df0acdMerge branch 'feature/automatic-route-managment'
  • 2edb0d6feat: add automatic route metric management for plug-and-play modem support
  • b2fb92dfeat: add automatic route metric management for plug-and-play modem support
  • ef99c65Merge branch 'master' into develop
  • 24a45e5fix: auto installation of rpi camera
  • 4205450fix: auto installation of rpi camera
  • 403e6dbfeat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • f7fead1feat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • 0347ad8refactor: add event broadcaster to media system and update deployment
  • 8d39f41refactor: add event broadcaster to media system and update deployment
  • 52d5705fix: resolve WebUI timeout errors and optimize page load performance
  • a1df47dfix: resolve WebUI timeout errors and optimize page load performance
  • 6a253cefeat: implement proper ONVIF library integration
  • d4775a5test: remove flaky TestDisconnectionDuringNegotiation E2E test
  • 521de54fix: make disconnection E2E test more resilient to ICE gathering timing
  • 67e0d8afix: update camera sources to use MediaSource interface and fix linting errors
  • d851285Merge branch 'feature/add-new-sfu' into develop
  • 771e636feat: implement WS-Discovery and subnet scanning for ONVIF camera detection
  • 484cc2etest: skip obsolete SFU tests that use removed media.stream.join
  • b4d12f3feat: add route_id to agent SFU messages for multi-room support
  • a53d105test: add E2E tests for media source keep-alive feature
  • 24c1af0feat: implement keep-alive for media sources
  • c391ecdfeat: implement keep-alive for media sources
  • 277f369fix: add ResponseMessage handling to enable SFU publisher answers
  • 319fabdrefactor: make SFU the only streaming mode and remove media.stream.join
  • 5ec34b4refactor: complete SDK field alignment across codebase
  • 1a3d4fafeat: add media.route.select handler for single-action route switching
  • ce13590chore: fix tests
  • 8efaed1fix: resolve E2E test failures and flakiness
  • 38795b9refactor: migrate to new aircast-sdk API
  • ffce8e7chore: cleanup code
  • c665b89Merge branch 'develop' into feature/add-new-sfu
  • e58e891add destination to types
  • 20a199bupdate go.mod
  • 86218deremove device id storage
  • 48f3663Merge branch 'develop'
  • 0a54266Merge branch 'develop'
  • 4e70e1bupdate sdk
  • 7ebbd11update sdk
  • d4ad18aupdate network fix command
  • 1b4653fupdate network fix command
  • 6e74649refactor: standardize logging field names for consistency
  • 374fd23refactor: standardize logging field names for consistency
  • cd6bb00feat: add comprehensive tracing and OTLP configuration for agent
  • 76309bbfeat: add comprehensive tracing and OTLP configuration for agent
  • 5876800fix source manager release bug
  • 8171f09fix source manager release bug
  • 86f0047fix: resolve E2E test failures by fixing message routing
  • 58ea2fffix: make SFU mode configurable via environment variable
  • 8550d3bfeat: add SFU publisher session close handler
  • 1283947fix: add destination parameter to SendEventToChannel interface
  • 595da84fix: implement graceful handling for SFU publisher offers
  • f183ec3fix: resolve shutdown panic and add linting fixes
  • a055923Merge pull request #15 from pavliha/develop
  • 076fdcfMerge pull request #15 from pavliha/develop
  • f9ee622fix: improve WebRTC stability and buffer monitoring
  • e1ff448fix: resolve linter issues and fix all failing tests
  • 8aa415efix: resolve source recovery test failures
  • f3d2726fix: resolve linter issues in SFU tests and handlers
  • 2a8216afix: recreate media sources when in error state
  • cb62b5badd WebRTC video track metrics for latency debugging
  • d9e8bbcadd WebRTC video track metrics for latency debugging
  • b15a83efix: resolve test deadlock in WebRTC session manager
  • 7e7f2dafix: resolve test deadlock in WebRTC session manager
  • 8da2361feat: add system.ping websocket action for health checks
  • 5878556feat: add system.ping websocket action for health checks
  • 74ec3f9fix: resolve WebRTC high latency issue caused by route removal
  • 83f49f4fix: resolve WebRTC high latency issue caused by route removal
  • 4690463feat: add NAT masquerading and IP forwarding for cellular connections
  • 4bd1af0feat: add NAT masquerading and IP forwarding for cellular connections
  • c666e08fix: resolve WebRTC test failures and lint issues
  • 7a241bbfix: resolve WebRTC test failures and lint issues
  • 469c22cchore: disable cyclop linter
  • ad92a7cchore: disable cyclop linter
  • 5418322fix: improve WebRTC session error messages and tracking
  • f2a0d29fix: improve WebRTC session error messages and tracking
  • 3a5a10cfix: prevent UDP socket leak in WebRTC sessions
  • 1507386fix: prevent UDP socket leak in WebRTC sessions
  • 62d7d53cleanup code
  • 49595f6cleanup code
  • f74a1eeupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 73877adupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 483e9bcupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 0b62991upgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 465525brefactor: simplify E2E test suite with sensible defaults
  • 2ad7f7erefactor: simplify E2E test suite with sensible defaults
  • 4c9f499fix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • f3bafcffix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • 1bb0f8afix: include WebRTC offer in session create response to eliminate timing issues
  • fc419effix: include WebRTC offer in session create response to eliminate timing issues
  • d660472fix: include WebRTC offer in session create response to eliminate timing issues
  • a38af6bfix: include WebRTC offer in session create response to eliminate timing issues
  • d4c45bffix: resolve UDP source race condition in connection handling
  • 8a5789dfix: resolve UDP source race condition in connection handling
  • 830cc67fix: resolve race condition in UDP source connection handling
  • d6a1156fix: resolve race condition in UDP source connection handling
  • 2746039fix: resolve all lint issues and improve code quality
  • e01e9b7fix: resolve all lint issues and improve code quality
  • fec846ffix: resolve type assertion and interface implementation issues
  • 1ee7f99fix: resolve type assertion and interface implementation issues
  • ffef8a4fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 38b57d0fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 2fcdb91fix: allow overwriting existing files in Aptly S3 configuration
  • d5ec49afix: allow overwriting existing files in Aptly S3 configuration
  • 0a07b6bfix: use specific event type for production Pi image builds
  • 4a97e1bfix: use specific event type for production Pi image builds
  • f8b4521update: trigger Pi image build from main branch for production releases
  • 27322ddupdate: trigger Pi image build from main branch for production releases
  • a56e770update: align production workflow with development structure
  • d59a54bupdate: align production workflow with development structure
  • 06617d2Merge branch 'develop'
  • fa9a759Merge branch 'develop'
  • 6cf2b5cfix: always attempt token revocation on logout
  • 5e4d7edfix: always attempt token revocation on logout
  • c2b9cfdfix: handle missing refresh token properly to force re-authentication
  • 3596e18fix: handle missing refresh token properly to force re-authentication
  • b744b79fix: resolve WebRTC session race conditions with device.session.ready event
  • cc5e087fix: resolve WebRTC session race conditions with device.session.ready event
  • 77fe141refactor: update relay infrastructure and WebSocket handlers
  • b132620refactor: update relay infrastructure and WebSocket handlers
  • d5946cbchore: update to use any instead of interface{}
  • b08fe57chore: update to use any instead of interface{}
  • 0b0eda9fix: ensure WebSocket connects on startup for authenticated devices
  • a05197ffix: ensure WebSocket connects on startup for authenticated devices
  • df9db02fix: add automatic network route management and WebRTC session cleanup
  • e88959bfix: add automatic network route management and WebRTC session cleanup
  • 7e599eafix my turn server url
  • 206817cfix my turn server url
  • 76b3975feat: remove nginx dependency from Debian package
  • ce05d49feat: remove nginx dependency from Debian package
  • 52e0d33chore: update dependencies and build improvements
  • 322f497chore: update dependencies and build improvements
  • 828c809fix: resolve stream sharing conflicts and improve codec negotiation
  • 5892c1dfix: resolve stream sharing conflicts and improve codec negotiation
  • 46c1db2fix: improve RTSP and media processing debug logging
  • c9b8d2bfix: improve RTSP and media processing debug logging
  • 344f67afix: improve RTSP error reporting and remove redundant events
  • efa1c91fix: improve RTSP error reporting and remove redundant events
  • d8fa6d1fix: prevent udevadm process leaks in camera monitor
  • 5e968cdfix: prevent udevadm process leaks in camera monitor
  • cc7d436fix: update WiFi configuration text to reference drone capabilities
  • 4c41b41fix: update WiFi configuration text to reference drone capabilities
  • 2f0f817feat: add camera and MAVLink status display to home page
  • b3d3173feat: add camera and MAVLink status display to home page
  • c913c4efix: improve system logs page layout and handling
  • f156e86fix: improve system logs page layout and handling
  • e7bee2ffeat: implement in-memory log storage and fix PPP route parsing
  • 339815afeat: implement in-memory log storage and fix PPP route parsing
  • fd6e062add system logs page
  • a69de52add system logs page
  • fac7366feat: enhance cellular UI with real-time data and internet connectivity tracking
  • d57c380feat: enhance cellular UI with real-time data and internet connectivity tracking
  • db44ab2feat: add configurable HTTP port and HTTPS redirect support
  • 3f5b594feat: add configurable HTTP port and HTTPS redirect support
  • f488ffcfeat: implement udev-based camera monitoring to replace polling
  • 8ce473ffeat: implement udev-based camera monitoring to replace polling
  • b334e84add pi camera support
  • 5a57513add pi camera support
  • 83eaf07feat: add automatic Raspberry Pi camera detection and streaming
  • 5d2674ffeat: add automatic Raspberry Pi camera detection and streaming
  • 8e9ba43feat: add Raspberry Pi camera support
  • a000b8ffeat: add Raspberry Pi camera support
  • 1c88449feat: add UDP video source support
  • 3128899feat: add UDP video source support
  • 3cea006Merge branch 'refs/heads/feature/udp-video-source' into develop
  • 4b3a2b9Merge branch 'refs/heads/feature/udp-video-source' into develop
  • bfd298fadd permissions check
  • e540dccadd permissions check
  • 2a401e2Add USB hotplug monitoring for MAVLink devices
  • d6d6e33Add USB hotplug monitoring for MAVLink devices
  • c0b66e3Fix TURN server 400 errors and improve WebRTC ICE handling
  • 003a063Fix TURN server 400 errors and improve WebRTC ICE handling
  • afb314dfix connection issues
  • 0f86405fix connection issues
  • 806c3bbfeat: add UDP video source support
  • b1f99e9feat: add UDP video source support
  • 7277fa4update templ
  • 0fa8567update templ
  • 6d36f4aapply auth logout fixes
  • dbf8c1aapply auth logout fixes
  • 84e4211apply hotspot fixes
  • 977e781apply hotspot fixes
  • b0ccbfffix deprecation
  • 0a13de4fix deprecation
  • ad3760eadd rebuild trigger
  • 373178dadd rebuild trigger
  • 9755df4add cellular status indicator
  • 34dec55add cellular status indicator
  • d8a74d4downgrade logs
  • 8f09880downgrade logs
  • 31ad675add connectivity error handling
  • 7756bc9add connectivity error handling
  • e5aade0update login ui
  • 140ca03update login ui
  • 3b810fdupdate on device login flow
  • fd23995update on device login flow
  • 7a5f259fix auth token
  • 06a94acfix auth token
  • ce6dd4dadd terminal support
  • f6e5e7fadd terminal support
  • 4885481fix hotspot
  • 96ebda3fix hotspot
  • 528d992fix wifi service unavailable
  • 1f86d90fix wifi service unavailable
  • f1365adfix nginx service
  • c518bbefix nginx service
  • 592b9a1fix autoconnect service
  • 0a260fbfix autoconnect service
  • 0b5c4feuse dialect
  • a247a00use dialect
  • 14ef62bremove command sender
  • ae02be1remove command sender
  • f355bbffix auth expiration
  • 0c9eac5fix auth expiration
  • 539429cfix auth expiration
  • 7828964fix auth expiration
  • f8f4b30save mavlink
  • f97b717save mavlink
  • 54dcc24fix do reposition command
  • bd5bfa9fix do reposition command
  • e2507f8use new send command approach
  • 5f4ce5ause new send command approach
  • ec4fa20use new send command approach
  • 20f3787use new send command approach
  • aaf29adadd message throttle
  • 6baae24add message throttle
  • 01ac0ddsave telemetry messages refactor
  • 3631f4asave telemetry messages refactor
  • 22b38d8remove sitl
  • 2dffcb4remove sitl
  • 97fbd42fix webrtc signaling
  • a5d47c2fix webrtc signaling
  • b0c3c86fix turn servers
  • 4234acffix turn servers
  • 818abcfMerge remote-tracking branch 'origin/develop' into develop
  • e5af64cMerge remote-tracking branch 'origin/develop' into develop
  • 100a260remove usage of aircast sdk types
  • 0732749remove usage of aircast sdk types
  • 32db038refactor message handlers
  • 4dfbaccrefactor message handlers
  • 48049fafix hotspot ip address order
  • e44ee75fix hotspot ip address order
  • 3c2f105add more stun servers
  • 86676d2add more stun servers
  • 8a0b739fix ice candidate support
  • 81b217efix ice candidate support
  • 7f426a3update default ice servers
  • 84ad5c4update default ice servers
  • 81e88dcadd interfaces' cleanup
  • a3c97a9add interfaces' cleanup
  • 1e46147fix turn server
  • f6773e1fix turn server
  • ed65104remove update check
  • 7a056c7remove update check
  • 31268fbadd hotspot start
  • fb341d1add hotspot start
  • 33bb807add hotspot start
  • b183b5aadd hotspot start
  • 8ec1e99add hotspot start
  • 6e6de2dadd hotspot start
  • 04a099efix websocket reconnection
  • 48e466bfix websocket reconnection
  • 16d957dupdate .gitignore
  • 8173947update .gitignore
  • 476fb9bfix release
  • 235c3f2fix release
  • 48b49c2fix database migrations
  • 99b40a8fix database migrations
  • ddbcb6fupdate print config
  • 0e86221update print config
  • 0781004reduce logs verbosity
  • 4c0fd29reduce logs verbosity
  • d89c728add token refresh
  • 0923529add token refresh
  • 16ac247fix telemetry errors
  • bbc7695fix telemetry errors
  • 57b465bfix media pipeline errors
  • 381be2dfix media pipeline errors
  • 4847fc2resolve circular dependencies
  • 90ff565resolve circular dependencies
  • 5abf321intermediate save
  • f6c21ffintermediate save
  • de176f0refactor mavlink telemetry auto setup
  • c812784refactor mavlink telemetry auto setup
  • 11b6a47refactor mavlink
  • 9163ccfrefactor mavlink
  • a4b991bresolve warnings
  • 90bebf6resolve warnings
  • 0f1b61fadd system handlers
  • 0d9c4dbadd system handlers
  • 2a9350badd more network handlers
  • fa7f7c3add more network handlers
  • 3e9d618fix agent networking
  • 1b1291bfix agent networking
  • 05cc195add cleanup
  • b45f6d8add cleanup
  • 533b396consolidate mavlink component
  • 6c9c0fbconsolidate mavlink component
  • c0b1783add mavlink autoconnect
  • 3d861cdadd mavlink autoconnect
  • 2082fd2add cleanup functions
  • 4e262f6add cleanup functions
  • aa5e9aeadd auto webrtc destination fill in
  • e560613add auto webrtc destination fill in
  • fce1218add auto hostname fill
  • 9d7598eadd auto hostname fill
  • a44a035add auto token refresh
  • 73c32f4add auto token refresh
  • 28d8d46rename websocket route
  • e339fa2rename websocket route
  • 6011bb5fix exit states
  • 022782ffix exit states
  • 599c080remove app state
  • 5a40268remove app state
  • efe871ffix loki logging
  • 194d2b9fix loki logging
  • d74599bsimplify logging
  • bd8ca36simplify logging
  • 957d229Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 825b0b2Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 2b42d16[AIR-40] fix logout
  • 89d4d38[AIR-40] fix logout
  • 7123ba1[AIR-40] update service handlers
  • f0bf578[AIR-40] update service handlers
  • 60e8dd7[AIR-40] fix logging
  • a359d77[AIR-40] fix logging
  • 28b9597[AIR-40] fix websocket state management
  • af31dcd[AIR-40] fix websocket state management
  • fa8d480[AIR-40] fix auth lifecycle
  • e020c5e[AIR-40] fix auth lifecycle
  • 200f007[AIR-40] add token revocation
  • 728d641[AIR-40] add token revocation
  • 90beb04[AIR-40] fix device auth flow
  • c264ad1[AIR-40] fix device auth flow
  • f776272[AIR-40] update auth flow
  • f97a490[AIR-40] update auth flow
  • 58302f5[AIR-40] fix connection messages
  • aead670[AIR-40] fix connection messages
  • 6c9b256[AIR-40] update device sign in flow
  • 44f464d[AIR-40] update device sign in flow
  • 0a19a31fix sitl
  • 5556081fix sitl
  • c328a4drun systemd service as root
  • 42ab75frun systemd service as root
  • 2240376fix systemd service
  • 5f52b4ffix systemd service
  • f0bb1cefix active connections
  • cba5a3dfix active connections
  • 5cae012add handlers
  • fa7aa69add handlers
  • 0ea86a6rename copy in frame.go
  • 1773e4crename copy in frame.go
  • dda9ef5fix delete logic
  • a378baefix delete logic
  • 8f97faeadd mavlink feedback
  • 3ad9ec8add mavlink feedback
  • 7599040fix development build
  • f1c0da1fix development build
  • b818981fix development Makefile
  • 78d9736fix development Makefile
  • 444924bfix development ci
  • 1ef9b56fix development ci
  • bc804b6fix network manager
  • 3f9b5b1fix network manager
  • 396098cmake network manager cross platform
  • 216276bmake network manager cross platform
  • 7e48598save refactor for now
  • cf3771bsave refactor for now
  • 5078fe5fix sign in url
  • c03fd58fix sign in url
  • fb40601update permission
  • f5be9e3update permission
  • f2688ebfix loki setup
  • 487ffe4fix loki setup
  • d2843defix a database path
  • dbe3279fix a database path
  • f554cc1fix config and environments
  • 7ebf609fix config and environments
  • 625d688fix network provider
  • 218352ffix network provider
  • 6764c66fix environments loading
  • 1307046fix environments loading
  • a23c86dfix migrations
  • 69b03abfix migrations
  • 65ba2e9add gpg signin back
  • b07721fadd gpg signin back
  • 8b4a043fix ci build
  • 8bb6c50fix ci build
  • 61db5f9[Air-000] add modem manager (#11)
  • f881133[Air-000] add modem manager (#11)
  • 23efcecfix ci build
  • 46e1ea9fix ci build
  • 6c154b3fix ci build
  • 50745e3fix ci build
  • f863ce1fix ci build
  • 9da6dccfix ci build
  • 9b41087refactor application bind phase
  • 4cd942arefactor application bind phase
  • aa7b24cfix release as systemd
  • 4046c75fix release as systemd
  • e213b69[AIR-32] add private module support
  • eecf436[AIR-32] add private module support
  • 22f10a0[AIR-32] add private module support
  • 15ad5f8[AIR-32] add private module support
  • 3b71d8asave bind changes
  • 3943183save bind changes
  • f097094remove mdns
  • efd5b84remove mdns
  • c1960c4fix wifi bind mode
  • 2a00a1ffix wifi bind mode
  • 73f02c6[AIR-32] refactor setup
  • 1d3c608[AIR-32] refactor setup
  • f0048e0refactor wifi setup
  • 5edf4darefactor wifi setup
  • 228240d[AIR-32] update network manager
  • 4912f4c[AIR-32] update network manager
  • 14baa86save hotspot mode
  • 40f4218save hotspot mode
  • 01956a6[AIR-32] update webrtc session management
  • 04dccdd[AIR-32] update webrtc session management
  • f17eba3[AIR-32] add envs fallback
  • 4bbe8ad[AIR-32] add envs fallback
  • 735e120Add tailwindcss to .gitignore
  • 3d08368Add tailwindcss to .gitignore
  • 52245c0[AIR-32] fix tailwind installation
  • d695edf[AIR-32] fix tailwind installation
  • b3b7818[AIR-32] fix bind service
  • 359204f[AIR-32] fix bind service
  • 27021e2[AIR-32] add output.css
  • 09086e9[AIR-32] add output.css
  • e0afd75[AIR-32] fix bind mode for application
  • 4433c77[AIR-32] fix bind mode for application
  • 161b834[AIR-32] fix bind mode for application
  • 26caa9c[AIR-32] fix bind mode for application
  • 182cafe[AIR-32] add setup mode to application
  • 5bd2358[AIR-32] add setup mode to application
  • 7520c22[AIR-32] add setup mode for application
  • 5ee3887[AIR-32] add setup mode for application
  • 743bbe3[AIR-32] add hotspot setup
  • ddb0c5c[AIR-32] add hotspot setup
  • 3ee157a[AIR-12] silence loki if it is not available (#8)
  • cbe5aaa[AIR-00] fix sdk build
  • f160558[AIR-00] fix sdk build
  • 39b4226[AIR-28] add telemetry sender functionality
  • 9caf085[AIR-28] add telemetry sender functionality
  • 11659cd[AIR-28] add telemetry sender functionality
  • 3a33ba9[AIR-28] add telemetry sender functionality
  • b2cc8b1[AIR-28] fix telemetry connection
  • 91d3d2d[AIR-28] fix telemetry connection
  • 2c88abb[AIR-28] fix telemetry sending
  • e4a1e75[AIR-28] fix telemetry sending
  • d82aa18[AIR-28] fix telemetry requests
  • 22b80b9[AIR-28] fix telemetry requests
  • cc50c0c[AIR-28] update docker file
  • 411f312[AIR-28] update docker file
  • fc0c88b[AIR-28] add mavlink commands support
  • a31d733[AIR-28] add mavlink commands support
  • a2087bf[AIR-28] upgrade mavlink telemetry
  • e8a1b17[AIR-28] upgrade mavlink telemetry
  • 2b87157[AIR-28] fix mavlink telemetry
  • 1b7adc9[AIR-28] fix mavlink telemetry
  • 8c601f5[AIR-28] fix mavlink connection
  • 3e13f5a[AIR-28] fix mavlink connection
  • 2505220[AIR-28] add datachannel telemetry handler
  • 684fb40[AIR-28] add datachannel telemetry handler
  • fdbbe63[AIR-28] add datachannel mavlink connection
  • 8d22158[AIR-28] add datachannel mavlink connection
  • f924e1e[AIR-28] refactor mavlink connection
  • d37d56a[AIR-28] refactor mavlink connection
  • 7bad84d[AIR-28] fix session closure
  • 8f5e5e3[AIR-28] fix session closure
  • 74a5730[AIR-28] add mavlink telemetry over datachannel
  • 1cd16cd[AIR-28] add mavlink telemetry over datachannel
  • 9385921[AIR-28] add mavlink telemetry
  • d656d71[AIR-28] add mavlink telemetry
  • a325785[AIR-28] refactor mavlink connection
  • b837c41[AIR-28] refactor mavlink connection
  • c0bb321[AIR-28] extract to mavlink repository
  • a1c5629[AIR-28] extract to mavlink repository
  • 9043ba5[AIR-28] add mavlink handlers
  • 8f2bf79[AIR-28] add mavlink handlers
  • a81b275[AIR-28] add mavlink package
  • 2ae5a8b[AIR-28] add mavlink package
  • cc1b49e[AIR-28] cleanup
  • 0a4041a[AIR-28] cleanup
  • adde79f[AIR-28] refactor webrtc session
  • 0e4cb5c[AIR-28] refactor webrtc session
  • e793f08[AIR-28] refactor stream
  • a6966f1[AIR-28] refactor stream
  • 9de9c5d[AIR-28] refactor handlers
  • a14ec69[AIR-28] refactor handlers
  • 2354b0b[AIR-28] update webrtc handlers
  • c22cf94[AIR-28] update webrtc handlers
  • 49b11ca[AIR-28] refactor handlers
  • c44bd32[AIR-28] refactor handlers
  • fafb9d5[AIR-28] add answer handler
  • 9516119[AIR-28] add answer handler
  • 1b95842[AIR-28] fix webrtc error handling
  • 2eca9ae[AIR-28] fix webrtc error handling
  • 84ae223[AIR-28] fix rtsp client error handling
  • 15ac6ab[AIR-28] fix rtsp client error handling
  • efdf686[AIR-28] add templ dependency
  • 35f8637[AIR-28] add templ dependency
  • 64ffbff[AIR-28] refactor rtsp source
  • 7b7f9ff[AIR-28] refactor rtsp source
  • 1c93194[AIR-28] add better logging
  • a6d8cfc[AIR-28] add better logging
  • 6c68b1e[AIR-28] fix SIYI camera
  • 367fb8b[AIR-28] fix SIYI camera
  • 642460b[AIR-28] code cleanup
  • 2f565f4[AIR-28] code cleanup
  • f6d9f83[AIR-28] code cleanup
  • 7045313[AIR-28] code cleanup
  • 354d038[AIR-28] code cleanup
  • dcb0f8c[AIR-28] code cleanup
  • 433fa90[AIR-28] downgrade logs
  • 977d32c[AIR-28] downgrade logs
  • db8de90[AIR-28] update h264 decoder
  • 5881ebf[AIR-28] update h264 decoder
  • 01c3bfd[AIR-28] fix media stream
  • f823e61[AIR-28] fix media stream
  • 8c7cb29[AIR-28] save media package
  • 0ca806e[AIR-28] save media package
  • 55f3934[AIR-28] move unit inside stream
  • 9f5b267[AIR-28] move unit inside stream
  • eff7ff0[AIR-28] refactor stream package
  • 6eace51[AIR-28] refactor stream package
  • 75c70c0[AIR-28] fix warnings
  • 8eacd5a[AIR-28] fix warnings
  • fe7a6df[AIR-28] downgrade logs
  • 9e71072[AIR-28] downgrade logs
  • 948760d[AIR-28] add enhanced stream package
  • 1f144d6[...

v1.2.3-stage.4

May 3, 2026

v1.2.3-stage.4

Changelog

  • bd24b8achore: add .claude/ to gitignore
  • a1093c7fix: update tests for 4Mbps start bitrate and add GOWORK=off to hooks
  • 6c198a7fix: wire GCC bandwidth getter to SFU publisher instead of empty P2P registry
  • f7d8e84fix: prevent false zombie detection when Pion stats are limited
  • dfd3123feat: persist modem recovery state across agent restarts
  • c805921refactor: use forked go-onvif library directly for ONVIF bitrate control
  • e69e2d6test: remove time.Sleep from SwapStream test
  • aeafb38refactor: resolve code review issues for SwapStream
  • f6ca546fix: send clean ONVIF SetVideoEncoderConfiguration via direct HTTP with WS-Security
  • 87a5727fix: namespace-agnostic XML parsing for ONVIF GetVideoEncoderConfiguration
  • 48f78c7fix: add debug logging for GetVideoEncoderConfiguration fallback
  • 06de710fix: retry ONVIF verify on failure instead of permanent disable
  • 9a30202refactor: add canonical wide events to ONVIF camera controller
  • 4e97bd6fix: fetch full encoder config when GetProfiles returns empty fields
  • db7f142fix: use library's device connection for ONVIF SetVideoEncoderConfiguration
  • 248143afix: use exponential backoff for ONVIF bitrate control retries
  • b5d04ccfix: reduce ONVIF backoff from 5 minutes to 30 seconds for faster recovery
  • 2742d85fix: restart recovering pipelines in route monitor
  • 156cc5cfix: start camera at 4 Mbps instead of 1 Mbps — reduce on congestion, not ramp up
  • 6d57024fix: reduce ABR stability period from 30s to 10s for faster bitrate ramp-up
  • 29da0f6fix: harden SwapStream with status guard, nil check, and codec preservation
  • 884d045fix: disable HTTP keep-alive for ONVIF requests to prevent stale connections
  • a373b51fix: use minimal SOAP body for ONVIF SetVideoEncoderConfiguration
  • 27baaa6fix: hot-swap media stream on source reconnect without tearing down SFU
  • e1eaacffix: increase ONVIF timeout to 5s and retry on EOF
  • 9bfed05fix: allow deferred SFU reconnect when media stream is nil during pipeline recovery
  • eb9c44bfix: ABR stuck at 1 Mbps — allow increases without sessions, retry ONVIF
  • 717b08bfeat: add deep modem observability — USB, interface, and signal tracking
  • 9805b12feat: add modem_check event on every 10s poll for deep modem tracking
  • 00fe79dfeat: add detailed modem recovery tracking events
  • 6628369fix: increase maxRapidICERestarts from 3 to 10 for cellular resilience
  • 89f5963fix: raise SFU health monitor RTT thresholds for cellular networks
  • 9ba16e0fix: return stale ICE server cache instead of nil on API fetch failure
  • e0b64edfix: match consumers by media type string instead of pointer on reconnect
  • dc61fabfeat: add consumer_restart_pre_check diagnostic log
  • 9d783e1test: comprehensive test coverage for InternetPrioritySwitcher
  • b8f17a6feat: auto-rollback internet priority when selected network has no internet
  • 5628dc1fix: clean up stale buildx builders before CI builds
  • ab76b7cfeat: reliable internet priority switching with InternetPrioritySwitcher
  • a3ab595fix: close stale SFU WebSocket connections before reconnecting
  • 28a8068Revert "fix: wire GCC bandwidth estimate to SFU track bandwidth limiter"
  • 43a613bfix: wire GCC bandwidth estimate to SFU track bandwidth limiter
  • d63040afix: lower keyframe-only threshold from 5x to 2x for RTSP cameras
  • d7b22d2fix: remove autoStartDefaultRoutes from hook — route monitor handles it
  • 81acfb8fix: make autoStartDefaultRoutes concurrent and non-blocking
  • 6d86f64fix: cancel stall monitor goroutine on track re-setup to prevent leak
  • 6e3259dfeat: force TCP TURN on cellular to survive LTE NAT rebinding
  • e2c6245fix: address code review — periodic callback, clear on stop, fix comments
  • 93affb6fix: propagate SFU reconnect failures to pipeline for auto-recovery
  • 8322719fix: remove dead pipelines from registry so route monitor can restart them
  • ce111c4feat: report device features in session ready for opt-in SIYI UI
  • 5feda4bfix: start routes concurrently and reduce stream wait timeout
  • 4af656dfix: re-enable force relay (symmetric LTE NAT requires TURN)
  • 6478ac3fix: disable force relay on agent for stable LTE connections
  • 3359720fix: increase SFU request timeout from 10s to 30s for LTE networks
  • 717c680chore: pin Go 1.25.5 and update skip-duplicate-actions to v5
  • dff4832perf: optimize CI pipeline — merge build+release, reduce runner contention
  • 30e17d6feat: expose LTE signal metrics (RSRP, RSRQ, SNR) via modem API
  • 8a7b844fix: switch to keyframe-only mode when severely overbudget (>5x)
  • 0460c93fix: resolve lint errors in WebRTC session cancellation
  • 2786717fix: prevent orphaned WebRTC sessions from blocking new connections
  • c283787fix: prevent SFU publisher from getting stuck on dead media stream after RTSP reconnect
  • 0b78cb6fix: suppress gosec G115 for safe int-to-uint32 netmask conversion
  • 1b48b03fix: treat unknown current version as needing update
  • 04a53bbrefactor: make USBNetworkMonitor sole owner of USB interface lifecycle
  • 55e90a9fix: untrack generated output.css that was breaking GoReleaser
  • 6cc0653fix: auto-update gets permanently jammed after failed apt install
  • 6d802f8fix: data race in GetOrCreateSource reading refCount after unlock
  • 7ccc2adfix: resolve lint errors for unused param and unused func
  • b06e83ffix: use debian base for CSS builder stage (Tailwind needs glibc)
  • b613f24fix: use multi-stage Docker build for cross-platform Tailwind CSS
  • f7bd643fix: use TARGETARCH for Tailwind binary in Docker cross-compilation
  • 5b0aa96perf: optimize build times across local, CI, and Docker builds
  • 610474cfix: stop route-metric-validator from destabilizing cellular bearer
  • 65b4456fix: resolve code review issues across source manager, WebRTC, and routes
  • e16ad76fix: ensure SFU routes exist at boot before starting pipelines
  • 2723f7erefactor: simplify tailscale resume connection and reduce lock scope
  • 1432cf3feat: add update_in_progress field to package status response
  • 1a3b613refactor: remove unused ActionSessionInit and ValidateAndFixRouteMetrics
  • 4d02b6ffix: detect and recover from tailscale node-not-found errors
  • 92d3948feat: add internet priority switching to prefer WiFi over cellular
  • 5248be8fix: resolve source manager lock contention and WebRTC signaling races
  • 2991c5ffix: stop SFU publisher reconnecting with stale stream after source reconnect
  • 5848807fix: deduplicate video tracks in dynamic attach to prevent duplicate a=msid SDP lines
  • a89434fci: optimize builds for self-hosted runner
  • 8c8d7dbfix: increase timeout for speedtest handler to 120s
  • c572e71fix: defer QMI mode switch to after stable connectivity
  • 02c074afix: use timestamp in snapshot versions for correct APT sorting
  • 429e978feat: add network speed test functionality
  • 843e955feat: auto-switch SimTech modems from PPP to QMI mode at boot
  • 891f124fix: resolve deadlock in WebRTCDestination.Start() when existing sessions present
  • 423f6a6fix: disconnect dead cellular route to unblock WiFi failover
  • f7947f3fix: detect zombie SFU connections with zero RTP but active RTCP
  • c964d5ffix: video device count, WebRTC listener race, SFU circuit breaker, interface state detection
  • d850f96ci: fix release pipeline skipping on tag pushes
  • 2e1276efix: redact RTSP credentials in errors, fix stale SFU loss rate, fix WebRTC listener race
  • 557e92cfix: add gosec nolint to ParseForm calls and cleanup stale E2E containers
  • f91b537fix: quote docker port command to avoid YAML parsing error
  • 67d06a8ci: trigger test workflow
  • ca9e3aefix: add remaining gosec nolint directives and use dynamic SFU port in E2E
  • 8380eedfix: add gosec nolint directives for false positives on x64 runner
  • 75e3ca3fix: run E2E tests on X64 runner for amd64-only SFU image
  • f93a15dfix: resolve lint errors, test failures, and WaitGroup.Add race
  • bbc6494ci: pin release workflow jobs to Linux runner
  • 89189a2fix: detect architecture for Tailwind CSS binary in CI
  • bec439afix: resolve data races and add missing IsConnectionError to test mocks
  • 469a067fix: run E2E tests on Linux runner for Docker service support
  • 8cc82f2ci: trigger .deb release on push to develop without pi-gen
  • 2671c46fix: add IsConnectionError to relay MockClient for SDK interface change
  • 70c483dfix: install Tailwind CSS without sudo on macOS runner
  • 001a2dbfix: CI workflow for macOS self-hosted runner and uncommitted changes
  • 92df259feat: implement IsConnectionError on WsConnectionAdapter
  • f154784fix: update SDK with comprehensive queue tests
  • 0ec5ecbtest: add integration test verifying GCS heartbeat fields reach drone
  • e6f8c51fix: update SDK with isConnectionError extraction and TOCTOU fix
  • c84a179fix: replace time.Sleep in droneHeartbeat tests with fast ticker
  • f2a8b8efix: resolve all golangci-lint errors
  • 230611arefactor: introduce classifyConnection as single source of truth for connection types
  • 6a591a4refactor: remove dead RoutingTargetDroneOnly and rename SendCommandToDrone
  • 665886bfix: detect QMI/wwan modem connections as cellular
  • caaccccfix: restore SFU publisher after network recovery
  • 605b786test: add unit tests for SOURCE_OFFLINE error code in route handlers
  • f51358dfix: bump gomavlib to v3.3.1-aircast.7 with race-free tests
  • eab2f8bfix: upgrade gomavlib to fix pong deadlock on 4G networks
  • 664a2b1feat: send GCS heartbeats from agent to prevent failsafe on 4G degradation
  • dcce31bfeat: return SOURCE_OFFLINE error code when camera source is paused
  • 7459852fix: prevent WebRTC session creation timeout during SFU reconnect
  • 210dd3ffix: prevent WebSocket error cascade on context cancellation
  • 3255dd8fix: reduce resource waste from RTSP probes on Pi
  • 48006ebfix: resolve lint errors and flaky RTSP test
  • d2ee86cfeat: broadcast source status on pipeline state recovery and failure
  • 80a5ceffix: detect NDIS modems via NM connection type and add SFU waiting state
  • bae37e7fix: update SDK to prevent queue death spiral
  • 850ff42fix: reconnect message client and router after WebSocket recreation
  • 0429cb1fix: prevent stale-token retries after WebSocket reconnection
  • 90efd25fix: handle paused RTSP sources, fix action constant, add modem activation escalation
  • ca57539fix: resolve all lint errors and data race failures in CI
  • 08c0d90fix serial switch
  • d1a4430ci: add weekly GHCR cleanup for untagged container images
  • e2d770ffeat: auto-pause RTSP source after consecutive failures
  • 484e222fix: throttle ABR stats broadcast to every 5 ticks instead of every tick
  • e4dae95fix: prevent unnecessary teardown of connections waiting for drone
  • 7990899fix: use config DataDir for disk buffer path instead of hardcoded /var/lib/aircast
  • d3d1503fix: use safe Get for optional services in message router
  • 47cfca8test: add RC override started flag tests for throughput reset independence
  • acb2aaafix: trigger recovery immediately on USB interface corruption detection
  • 4de493dfix: use dedicated flag for first RC override log to avoid re-logging after throughput reset
  • 9ce0403fix: detect zombie WebRTC sessions via RTCP activity tracking
  • 4022ae7feat: add canonical logs for SFU WebSocket diagnostics
  • 381652afix: graceful handling of 4G modem overload death spiral
  • 0052229fix: close WebRTC sessions on modem reconnect to prevent session exhaustion
  • ca25ef0fix: rate-limit datachannel drop logs and skip enqueue without consumers
  • d82f8affeat: add RC override (joystick) logging to MAVLink frame routing
  • 152c39dfix: buffer pre-connection ICE candidates, fix drop log spam, enable WAL
  • 2c517b0fix: prevent USB bounce from killing API connection on shared interface
  • 9eaf92bchore: update gomavlib to v3.3.1-aircast.5
  • 353c6f6fix: return error from HeaderProvider when auth token unavailable
  • f1ca28efix: prevent read loop stall from blocking ping/pong processing
  • b34724cfeat: add RTCP REMB bitrate feedback for plain RTSP sources
  • 2542706refactor: update e2e test constants
  • 381116efeat: add WaitForStream to ABR source decorator
  • 081e640refactor: inject dependencies into websocket handlers directly
  • eeefba7refactor: improve WebRTC session media and expand tests
  • 4a2e5f6fix: improve terminal session manager lifecycle
  • 6728d3efix: improve MAVLink connection lifecycle and add tests
  • 86df7b8chore: update shared utilities and wire new dependencies
  • 8fc79cffeat: add media preview handlers and improve WebRTC session management
  • d5b5c89fix: improve MAVLink connection lifecycle and config builder
  • 59ba585feat: drop terminal session privileges to non-root user
  • 45732fdrefactor: simplify auth service tests and improve oauth2 error handling
  • 9b44b00refactor: improve environment manager with dependency injection
  • f04aafechore: regenerate templ files for v0.3.1001
  • 420725brefactor: relocate testutil and counterdumper packages
  • e696decfix: resolve code review issues across agent codebase
  • 211d349fix: instrument frames_to_datachannel counter in throughput logging
  • 18d8ffafeat: add debug logging for MAVLink serial connection lifecycle
  • 2f398a7feat: add MAVLink throughput logging and fix Loki offline buffering
  • c23b9d8fix: remove duplicate BroadcasterProvider registration causing panic on startup
  • 80fc22efeat: prefer NDIS over PPP for cellular, add PDP context reset and activation diagnostics
  • ca8ba70feat: auto-manage USB ethernet interfaces via D-Bus
  • 0bfb406refactor: add error wrapping at package boundaries
  • 3b2a003refactor: propagate parent context instead of context.Background()
  • 34f7a2arefactor: decompose MediaStream into sub-interfaces (ISP)
  • 242422crefactor: extract magic numbers into named constants
  • 4e985f2refactor: split god objects into focused files
  • 6f9393crefactor: add MustRegister/MustRegisterHook to DI container
  • a7be382refactor: consolidate Clock/Timer interfaces into domain/shared
  • 1dddc0fadd e2e test
  • 67ef268feat: improve cellular connectivity with PDP reset, hotspot triggers, and diagnostics
  • a73bc4dfeat: add periodic auto-connect retry and PDP context reset for modem
  • 926ee5bfix: recover gracefully from corrupted keyring store
  • a187eecfix: resolve gosec lint warnings in backoff calculation
  • c6cfec1fix: detect USB interface corruption when modem reports connected with zero signal
  • f199f91refactor: MAVLink architecture improvements and modem port safety
  • d4d0492fix: resolve gocritic lint violations
  • 712226afix: resolve data race conditions in test mocks
  • f0b1d79test: add drone disconnect reason status tracker test
  • be1bfc0fix: resolve lint errcheck and gocritic violations
  • 1c9b11ffeat: add SFU bandwidth feedback handler and measured bitrate getter
  • 308f9fcfix: throttle ws_error events and reduce queue to prevent reconnect storms
  • e140b42fix: use WriteControl for ping/pong to prevent congestion disconnects
  • b9e28c9fix: only update connection status from drone channel events
  • 2f4273ffeat: show measured RTSP bitrate in ABR stats UI
  • feb91ecfix: resolve lint errcheck violations and stale connection reuse in publisher
  • 1a06516fix: sync initial bitrate to camera on ABR startup
  • ec3b1dffix(ci): fix YAML parse error and outdated action versions in test workflow
  • 02505dfrefactor: rewrite RTSP camera e2e tests with piClient abstraction
  • ad4ccb0refactor: extract CameraNetworkService and RefactoredRTSPCameraHandler
  • e8e44f4fix: cascade-delete routes and stop pipelines when deleting sources or destinations
  • a43cb83refactor: extract ConsumerCreator interface for SFU publisher
  • ce42b85feat: add immediate SFU reconnect on server shutdown
  • 60041cafix: allow detaching media streams during running P2P sessions for recovery
  • d20b532feat: add URL-based connection pooling to prevent duplicate RTSP connections
  • ad93ea4feat: use discovered ONVIF port and credentials for camera bitrate control
  • 6191c8ffeat: add ONVIF subnet scan fallback and manufacturer default credential retry
  • 8ad5fd5feat: use SFU bandwidth feedback as primary ABR signal
  • 840fbc8fix(webrtc): remove GCC from P2P sessions to fix VBR camera streams
  • 605c3b4fix(sfu): prevent false unhealthy from Pion stats limitation
  • 56e18c1fix(webrtc): deduplicate tracks by media type to prevent duplicate a=msid
  • 56dc193fix(sfu): disable WebSocket compression and increase buffers
  • 332b3f4test: update e2e test suites for RTSP and source recovery
  • 3fd78c7feat: SFU publisher reconnect and WebRTC session manager improvements
  • c5e7f5efix: enable agent-driven MAVLink rate control
  • 378757afix: aggressive WebSocket keepalive for 4G carrier NAT survival
  • 40a4ba1fix: disable ONVIF controller after 3 consecutive failures
  • d8745f9feat: add ONVIF bitrate control for non-OpenIPC cameras
  • 2e7924frefactor: auth simplification, ABR improvements, modem recovery, SFU health
  • 51fc71afix: worst-case subscriber quality merge and RTCP diagnostic logging
  • 95b97b9refactor: collapse plugin system and remove unused codecs
  • 5a38174test: add PLI rate limiting and keyframe replay throttle tests
  • 4da35f5fix: add PLI rate limiting at track and stream layers to prevent PLI storms
  • 2037593feat: add ICE restart as fast reconnect path with jitter backoff
  • acd0a0cfix: keep RTCP RR TotalLost consistent with local sequence tracking
  • 5a91e2afeat: add camera HTTP proxy handler for remote camera UI access
  • c000459fix: use SSH connectivity check instead of ping for deploy preflight
  • fbc90b0feat: add media quality logging — FPS drop detection, GCC bitrate change visibility
  • c733092feat: relay RTCP receiver reports from P2P viewer to camera
  • 2c09510fix: bandwidth limiter gate unreliable — use time-based grace period
  • a3b334ffix: P2P bandwidth limiter not dropping frames
  • 6f8561drefactor: downgrade webui and utility logs to appropriate levels
  • 807dec5refactor: migrate remaining scattered logs to canonical events
  • f51039erefactor: downgrade noisy Info/Warn logs to Debug
  • ef7b753refactor: migrate remaining scattered logs to canonical wide events
  • f1c242crefactor: migrate all scattered logs to canonical events
  • c4b0b27feat: add trace context to canonical events and migrate network lifecycle logs
  • 79d8781feat: add canonical log lines for wide event observability
  • 3b204d1feat: WebRTC GCC bandwidth estimation, SFU reconnect scheduler, and web UI improvements
  • be30d1bfeat: auto-create SFU routes for all sources alongside WebRTC
  • 7f2751efeat: add default SFU destination on boot
  • b130e6ffix: modem monitor and websocket error improvements
  • 33e0d4efix(rtsp): improve backoff reset test to measure elapsed time from actual connection drop
  • 50ef663fix(websocket): add structured error types and expand RTSP/pipeline tests
  • 86025affix(modem): improve recovery logic and expand modem monitor tests
  • d6e1f26fix(scripts): support user@host PI_HOST format and handle SSH drops during deploy
  • 58aa0e6feat(e2e): add mock network interfaces support and allow re-scanning cameras
  • 5f247f5feat(discovery): fall back to subnet scan when specific camera IP probe fails
  • b124477fix(network): remap Ethernet interface states for clarity
  • a7d61defix(stream): improve consumer error logging -- context cancellation is debug, not error
  • 6c6c13afeat(network): reset WebSocket backoff on modem reconnect for faster recovery
  • 61bd7cdrefactor(abr): move rate limiting from CameraController to ABR coordinator
  • 912df49refactor(media): change MediaSource.Status() return type from string to SourceStatus
  • 74558dafeat(media): add RTSP source auto-reconnect and pipeline source-driven recovery
  • dc29ddbrefactor(mavlink): introduce ConnectionStatusTracker as single source of truth for connection state
  • c949503refactor(websocket): replace listener map with typed callbacks, remove health monitor and stats collector
  • e67fe64chore: miscellaneous improvements and fixes
  • b5cdd40feat(providers): add source health tracking for media routing
  • 4fe3044feat(webrtc): improve WebRTC session management and stability
  • ebf5479refactor(auth): improve OAuth2 token refresh flow
  • 5e1e31dfeat(rtsp): improve RTSP error handling and UDP timeout detection
  • b31f32ffeat(mavlink): add connection flapping detection and stability improvements
  • f781b6ffeat(mavlink): add real-time connection status events
  • b3e824arefactor(discovery): separate local and network discovery into packages
  • 53a14f8feat(e2e): add mock support for camera interfaces and network analysis
  • c731685fix(mavlink): detect TCP/UDP channels wrapped in EndpointCustomClient
  • 6d95fbctest(system): add unit tests for auto-update functionality
  • bef2609feat: make auto-update trigger immediately
  • 5cd7f44fix(mavlink): correctly identify TCP/UDP channels wrapped in EndpointCustomServer
  • 85d2c1achore: add SystemHealthProvider implementation to StatusMonitor
  • 2e255a5chore: add missing health_provider.go
  • a2c2eb9feat: implement auto-update trigger when enabled
  • 852380ffix: detect environment from API host when no state file
  • 6651fa1feat: enable auto-update for dev environment profile
  • 29fab7dfix(modem): reconnect D-Bus after ModemManager restart
  • 83f3f8frefactor(handlers): consolidate error codes and enhance WebRTC logging
  • 4a32137fix(sources): refresh cached source after config update
  • bbeea1efix: handle invalid_credentials error in auth retry loop
  • aee1799fix(rtsp): handle UDP transport issues with auto-fallback to TCP
  • d59a481fix(auth): add invalid_credentials to auth error types
  • 4d32801test(auth): add test for invalid_grant credential clearing
  • 479f558fix(auth): clear tokens after 3 consecutive 401s instead of 10
  • 0861373feat: add cellular auto-connect when modem becomes registered
  • e63159dfix: use update-first approach for Aptly publish
  • 0f69742fix: register connectivity_checker before NetworkManager check
  • 665d30fci: use self-hosted runners for all workflows
  • 8436e39ci: use self-hosted runners for docker workflow
  • 89ba915refactor: improve architecture with error logging and layer separation
  • 392bb9dfix: add device heartbeat to prevent stale session detection
  • 00770d1Add end-to-end latency logging for video pipeline debugging
  • 9cc9c67feat(helm): add secretEnv support for secret-based env vars
  • 62448a6Add auto_connect option to mavlink.config.create handler
  • 169f310chore: update aircast-sdk with IsClosed connection fix
  • 2c97625test: add integration tests for IsClosed connection state fix
  • 38a510ffeat(auth): add E2E token support for simulator authentication
  • 9147771refactor(mavlink): simplify rate control and improve connection handling
  • c8b8c52fix(websocket): detect temporary disconnections in IsClosed() for queue flush
  • d8850a0fix(mavlink): prevent connection cycling with grace period for new connections
  • d9b764ffeat(mavlink): add filter stats to rate control ack
  • 67679b5feat(mavlink): add dynamic WebRTC endpoint registration and datachannel events
  • 6126466fix(mavlink): enable WebRTC telemetry forwarding for all connection types
  • f6dc6ccfeat(mavlink): add receiver-driven rate control
  • f872564chore: trigger auto-deploy test
  • c2f1696Add modem signal quality to WebSocket reconnection logs
  • 52f2386refactor(mavlink): require explicit API host/port configuration
  • f2a59d4fix(mavlink): prevent duplicate connection race condition
  • dba1d06fix(mavlink): enable congestion monitor for all connections
  • 1f73055feat(mavlink): wire congestion broadcaster and refactor MAVLink internals
  • 038b45drefactor(webrtc): use constructor injection for session context
  • 532ee91fix(websocket): make unknown errors recoverable to prevent reconnect loop exit
  • f0ff96cfeat(mavlink): add adaptive rate control for WebRTC congestion
  • 6d082barefactor(keyring,activate): add tracing and fix code review issues
  • ac3f2b5feat(keyring): add migration from legacy paths on startup
  • e7761a5fix: start hotspot when device is not authenticated
  • 31136a9fix: fail release if Pi image build trigger fails
  • f912020fix: correct OTEL collector endpoint for development
  • 33ae628ci: add Telegram notification on test failure
  • 1d0b9faci: add Telegram notification on release failure
  • b1f5756ci: use PAT_TOKEN for cross-repo cleanup
  • 115056fci: add pi-gen release cleanup to workflow
  • 6a21fd5ci: add GitHub release deletion to cleanup workflow
  • 0d24924ci: add git tag deletion to release cleanup workflow
  • bece220ci: add manual trigger to release cleanup workflow
  • 110a8f5ci: add workflow to cleanup S3 on release deletion
  • 614c76ffeat: add release.delete command to remove releases
  • 88c6aa0fix(modem): move nosec directive to line above for gosec recognition
  • 2f4318afix(modem): correct nosec comment format for gosec linter
  • 4dce103fix(modem): resolve gosec and unparam lint issues in recovery service
  • 11dfee4fix(deps): remove local replace directive and update gomavlib to v3.3.1-aircast.3
  • 0574437feat(modem): improve ModemManager recovery with active polling
  • e5c268echore(scripts): add Pi reachability check and udev deployment
  • e114564chore(debian): improve udev rules installation
  • 18b0325feat(webui): improve WiFi configuration interface
  • fcfd8a2feat(system): add network health tracking to status monitor
  • 2ff3e9bfeat(network): integrate connectivity state machine
  • 0d22766feat(system): add modem monitoring and connectivity state machine
  • 3a4db3ffeat(logging): integrate disk buffer with LokiHook for offline resilience
  • d38397bfeat(logging): add disk buffer for offline log persistence
  • 1342d9ffeat(webtransport): add direct connection mode and separate host config
  • 3f8682cfeat(auth): improve authentication and environment handling
  • 11bd93afeat(tls): add TLS support for local development connectivity
  • b1ce6c4feat(env): add multi-environment switching support
  • b4dfa69feat(sfu): add exponential backoff retry for SFU publish failures
  • b61d811feat(tailscale): decouple from auth - start on boot before authentication
  • 51e15e4feat(tailscale): keep connection alive when auth logs out
  • d1bb79efix(tailscale): prevent duplicate device registrations on transient failures
  • 503e230Use templated app label in deployment
  • abe108fdocs(webtransport): add configuration documentation
  • 9ea8b18feat(mavlink): add WebTransport endpoint support
  • 93ddcceIncrease SFU unhealthy loss rate threshold to 50%
  • b0458bechore: migrate gomavlib imports to aircast-one fork
  • b44b378feat(auth): generate drone-themed device names during bind
  • 335eee1feat(siyi): add SIYI gimbal/camera WebSocket control
  • 9bcd348fix(mavlink): increase WebRTC queue and non-blocking writes
  • a75503crefactor(tailscale): use managed service pattern with device ID isolation
  • 3b74b86feat(update): add apt progress streaming and fix stale cache
  • e1895c0fix(cellular): wait for modem registration before connecting
  • c857b4ffeat(tailscale): add SSH forwarder and use device ID as hostname
  • 7804042fix(update): improve update detection with proper version comparison
  • 7543c85feat(rtcp): add comprehensive RTCP observability with bitrate tracking
  • b7e03bdfeat(logging): add wide event logging to webui handlers
  • 849e8a2fix(e2e): fix TOCTOU race in EventEmitter WaitForEvent
  • be08921fix(ci): pin Go version to 1.25.5 to fix cache mismatch
  • 7740a21refactor(media): rebuild pipeline architecture with auto-detect ABR
  • 5a2f80efeat(media): add pipeline plugin architecture for ABR
  • a166fa0refactor(system): improve logging for system update event broadcasting
  • 0003a65feat(tracing): add write stall detection with tracing for outgoing track
  • 4d19032fix: register http_client dependency in SFU provider tests
  • 60b97eechore: run lint and format only on staged files
  • 12fb9c2refactor(infrastructure): remove unused OpenIPC and WebRTC code
  • 637e0e7refactor(media): remove unused bitrate clamping and camera detection
  • 46307ccfix(tracing): improve OTLP endpoint parsing for TLS detection
  • 2648dcdfeat(mavlink): track connection errors in status response
  • 8e3ce78feat(updates): add update orchestrator for safe self-updates
  • 4256de2feat(tailscale): add status types, config, and node ID reporting
  • 9ad6746fix(auth): handle no_credentials error to stop retry loop gracefully
  • d248c99feat(events): add configurable buffer size to event bus
  • 399e6ebfeat(config): add duration and integer helpers to environment config
  • eb3a78drefactor(websocket): simplify reconnector with proper circuit breaker
  • f6fe577feat(sfu): add Tailscale routing support for WebSocket client
  • ab277b9refactor: update remaining components for consistency
  • b532a26chore: remaining ClientProvider adoption and system updates
  • c31a1d6refactor(media): improve SFU publisher and consumer lifecycle
  • 73d1dc0refactor(mavlink): use ClientProvider for MAVLink WebSocket
  • bfc3183refactor(websocket): use ClientProvider for WebSocket dialing
  • dd15e2frefactor(webrtc): use ClientProvider for ICE server fetching
  • 2c33cabrefactor(network): use ClientProvider for connectivity checks
  • 41efc10refactor(logging): use ClientProvider for Loki HTTP requests
  • 3c4fce1refactor(auth): use ClientProvider for HTTP requests
  • ca3d612feat(tracing): route OTEL metrics and traces through Tailscale
  • 5fcd48bfeat(http): add ClientProvider for Tailscale HTTP routing
  • ec39830refactor(logging): adopt wide event pattern for SFU reconnection
  • 71dd284fix(sfu): move consumer stopping from scheduleReconnect to attemptReconnect
  • 8cf8bf0feat(logging): add wide event logging for packet drop diagnosis
  • e6a9b0ffeat(abr): add wide event logging following loggingsucks.com pattern
  • f18af76fix(abr): detect OpenIPC cameras by name instead of source type
  • 2530e5dfix(health): preserve RTCP-reported RTT and loss rate in collectStats
  • a23e3aefeat(logging): add wide event logging for WebRTC stats
  • 7189ad8feat(logging): add wide event logging for WebSocket reconnection
  • e93b767feat(rtcp): implement RTCP feedback and media pipeline improvements
  • 470106dfeat(sfu): detect connection failure via write errors for faster disconnect
  • 4cb772bfix(helm): correct OTEL metrics endpoint service name
  • 9588590fix(sfu): stop consumers during reconnection to prevent buffer overruns
  • 5021e2cfix(ice): fix broken HTTP fallback and increase timeout
  • 34b5318ci(docker): remove arm64, build amd64 only
  • f6ab16eci(docker): build amd64 only for develop branch
  • afa1798feat(network): add SimulatedCellularManager for simulation mode
  • 13a5130fix(webui): handle nil interfaces in StatusCache to prevent panic in simulation mode
  • 887c0c2fix(sfu): mark connection as disconnected on request timeout
  • bb0f182fix(media): recover from error state in StartSource
  • 7ad2bb2fix(sfu): restart consumers on WebRTC reconnection
  • a0fe181feat(stream): add consumer Restart() for WebRTC reconnection
  • 826d0e7fix(counterdumper): make Start/Stop idempotent and thread-safe
  • 945e00afeat(webrtc): add ICE_FORCE_RELAY support for STUNner
  • 9158832refactor(webui): split setup_handler into domain-specific handlers
  • 422a6ccrefactor(webui): split setup_handler into domain-specific handlers
  • be206derefactor(webui): remove adapter pattern, use domain types directly
  • 913d2c1refactor(webui): query cameras directly instead of caching
  • a251048feat(webui): implement GetCameras to fetch from database
  • 5745ebcfix: move SIMULATION_RTSP_URL to environment-specific patches
  • 7845db9feat(simulation): add RTSP camera seeding for simulation mode
  • 6de1c81feat: use GitOps dispatch for automatic sync
  • 1f806a3chore: update Chart appVersion to v0.0.0-dev-a62eaac [skip ci]
  • a62eaacfix: make gitignore patterns root-relative to allow helm/aircast-agent
  • 6c7263cfix: auto-update Chart appVersion after Docker build
  • 383d041chore: update Chart appVersion to latest build
  • 0abe634fix: resolve staticcheck SA5011 in reachability checker test
  • 9b21cc1fix: handle nil cellular manager in handler and provider
  • b149011fix: resolve staticcheck SA5011 false positives in tests
  • 31395e1fix: handle nil connectivityChecker interface in auth handler
  • 2aabdb1feat(simulation): add K8s simulation mode for USB, modem, and MAVLink
  • 61b396ffix(helm): update appVersion to latest build
  • b279536fix(helm): correct image repository and version
  • cd3312echore(helm): update appVersion to v1.2.4-dev.6
  • e9b4a05fix(sfu): add sfu url to all envs
  • 23666e0feat(onvif): remove onvif media source
  • e318c4ffeat(rtsp): add automatic discovery handlers
  • 70c625ffeat(tracing): improve sampling and timeouts
  • 83f72b2fix(e2e): use atomic send-and-wait pattern to eliminate race conditions
  • a5cf3e8fix(lint): remove redundant nil checks in provider tests
  • 2973d76ci: use PAT_TOKEN for GHCR access
  • 8195291ci: add GHCR credentials for aircast-sfu service
  • bc8f587fix(sfu): add WaitGroup to ensure goroutines stop before reconnect
  • b49c8fbfix(test): fix data race and SFU test configuration
  • f9a5c6efix(test): mockDeviceLinux returns default driver for tests
  • cb310d8fix(test): add missing Linux mock types for network package tests
  • 9b8a211feat(tailscale): migrate from CLI to embedded tsnet
  • 226a721feat: add Tailscale integration for automatic network join
  • d757545fix(ci): make .env include optional in Makefile
  • 6191a68fix(media): prevent RTSP destination from dying after startup
  • afec12afix(release): redirect warnings to stderr to prevent version corruption
  • 2527cafci(docker): align workflow with aircast-api pattern
  • 03fd915feat(tracing): add session-level span for SFU connections
  • 51fac56feat(tracing): add OpenTelemetry spans to media pipeline
  • 58b559bfix(e2e): prevent race conditions in route tests
  • 49c7a58feat(tracing): add session-level traces to P2P WebRTC handlers
  • 769cb5dfeat(tracing): link offer/answer/ICE in single session trace
  • f6b809bfeat(tracing): add distributed tracing to SFU WebSocket client
  • 85b3709Remove verbose heartbeat debug logging
  • be22e92feat(tracing): add trace context propagation for events
  • a101ba3build: update Tailwind CSS output
  • 5f51750refactor: improve WebRTC debugging and stream attachment
  • f857b9afeat: fetch ICE servers from API with caching
  • 1951444fix: use routeID as pipeline ID for uniqueness
  • 85ed9f0feat: add error tracking to media sources
  • 2b16770feat: add waiting_for_drone status to MAVLink connection handler
  • 5806a12refactor: improve logging field handling and reduce noise
  • f970424chore: tune message queue for better memory management
  • ae8f433fix: prevent log spam on media consumer context cancellation
  • 23b3aa3chore: downgrade MAVLink frame logs from debug to trace
  • 9f63e6dfix: add timestamp to session IDs and include session ID in track IDs
  • 8ea95fcfix(mavlink): prevent GCS heartbeat echo causing UI state flicker
  • 8cd033brefactor(discovery): code review fixes
  • aad1b8brefactor(discovery): unify RTSP path lists to CommonRTSPPaths
  • 2ab3c7drefactor(discovery): use CameraTypeRegistry for manufacturer detection
  • 8150b22refactor(discovery): consolidate camera ID generation to shared function
  • 6e29d61fix(rtsp): auto-refresh stale tokens and fix device_id mismatch
  • 781d16crefactor(discovery): extract shared RTSP utilities and camera type registry
  • 20828efrefactor(discovery): extract reachability and RTSP validation to discovery package
  • 6c1c9adAdd clearer logging for MAVLink command forwarding and fix network build
  • f8af8b9feat(network): add granular connectivity status for better diagnostics
  • a941208fix(e2e): increase MediaRouteSelectSuite timeouts to 5 seconds
  • b461127fix(e2e): improve MediaRouteSelectSuite test stability
  • 0c1986bfix(e2e): improve test stability with event-driven waiting
  • 388a029refactor(sfu): remove dead API proxy code paths
  • 3b03701refactor(sfu): remove API proxy fallback, use direct SFU connection only
  • 2381b5aRename publisher_ready to room_ready
  • 7eab2adrefactor: update tests for publisher_ready event rename
  • 45054edfix(sfu): resolve deadlock preventing media tracks from flowing
  • a200802Add ICE connection state change handler for faster SFU disconnect detection
  • 6db4eacfix(sfu): auto-start routes when web client connects
  • 4f51c01fix: restore network.camera.analyze handler from master
  • 08bac8cfix(modem): remove build constraint to enable simulated modem on Linux
  • 415a225refactor: clean up dead code and naming inconsistencies
  • 0c7bec9refactor(media): remove dead code duplicates from domain/media
  • 6f4fcd9refactor(rtsp): consolidate duplicate RTSP implementations
  • ab99997refactor(webrtc): consolidate duplicate WebRTC implementations
  • c2194b8refactor(session): decouple WebSession from WebRTC
  • 79d5218fix(webrtc): correct session ID field names in logs
  • 9bac615refactor(media): apply SOLID principles to media pipeline
  • 8236edefix(e2e): use namespaced keyring keys for auth token seeding
  • 1c3b24frefactor(media): eliminate MediaPipeline abstraction and fix goroutine leaks
  • 6bc2224fix(handlers): update ABR stats mock to use proper type
  • 01e1fa5chore: misc infrastructure and test improvements
  • e247f2ddocs: add protocol documentation for Betaflight MSP and SIYI SDK
  • 1debc14refactor(session): improve session and WebRTC handler management
  • 48113fbrefactor(providers): improve provider and service architecture
  • 3e4b0dafeat(webui): add RTSP camera management to web UI
  • 7e15223feat(auth): improve token refresh and auto-clear behavior
  • 2041bc6refactor(media): improve RTSP source and stream handling
  • eb698carefactor(abr): improve adaptive bitrate implementation
  • 4e7171arefactor(discovery): improve IP camera discovery architecture
  • c5bfe26refactor(events): replace broadcaster with event bus
  • e90a763feat(mavlink): add transport configuration support
  • 839901etest(services): add IPCameraScannerManagedService tests
  • 9ddcb3atest(providers): add MediaProvider registration tests
  • 381d58brefactor(discovery): add network abstractions for testability
  • 6e29367refactor(handlers): improve WebSocket handler testability
  • 33fa221Merge branch 'master' into develop
  • f43783eupdate styles
  • fd37413please use Ethernet for ip search
  • c75d6a6feat: add RTSP camera management to web UI
  • 5b98593refactor abr implementation
  • cf1e02bchore: add bin/ to gitignore
  • c56f600fix: only use RTT from nominated ICE candidate pair
  • 9ed77eefix: clean up stale stream sessions on browser refresh
  • 8dc9849feat: add IP camera auto-discovery with RTSP validation
  • ad87f3afix: local deploy IP auto-detection when LOCAL_IP not set
  • 8f97d1dchore: reduce log verbosity and remove emojis
  • db536a9refactor: extract Makefile logic into shell scripts
  • 645fbbbpush debug logs to loki too
  • 3aad1b5refactor: move Clock implementation to infrastructure with proper DI
  • c896f45Move Clock interface to domain/shared for proper decoupling
  • 068488dMerge ABR and camera network analysis from master
  • cff0286Merge branch 'master' into develop
  • 7716f08add PLI forwarding and automatic ICE restart for video recovery
  • 81e18a4add PLI forwarding and automatic ICE restart for video recovery
  • c131b7frefactor: decouple ABR from OpenIPC using Clean Architecture
  • 465c8adrefactor: decouple ABR from OpenIPC using Clean Architecture
  • 51193a7add GCC bandwidth estimation to ABR system
  • 89a5d50add GCC bandwidth estimation to ABR system
  • 0beb147add abr
  • ab7b831add abr
  • 55f5895add abr
  • 3529763add abr
  • 1ead764add NewTestKeyring helper for auth tests
  • de6486cadd NewTestKeyring helper for auth tests
  • c5dd2c5add tracing to remaining websocket handlers
  • 0ee5e18add tracing to remaining websocket handlers
  • f25fc0ffix my envs for tracing
  • 0d9a1f2fix my envs for tracing
  • 4419ee8add tracing to websocket handlers
  • c64a058add tracing to websocket handlers
  • 817fda7fix my envs for tracing
  • ed56501fix my envs for tracing
  • 117041ffix auth logout issues
  • 2598919fix auth logout issues
  • 272e336reformat websocket imports
  • 456c1b7reformat websocket imports
  • c638a4breformat mavlink imports
  • fe33b21reformat mavlink imports
  • 176eb35downgrade registerLifecycleHooks logs
  • e535098downgrade registerLifecycleHooks logs
  • 38d0482add clock testing package
  • 3b54436add clock testing package
  • 5bdd986fix http server boot sequence
  • 96c2bb2fix http server boot sequence
  • 4c6d0b4add DATABASE_PATH environment override
  • 5e99fc4add DATABASE_PATH environment override
  • 9c6561dfix oTEL tracing
  • ef67365fix oTEL tracing
  • b86a1c2add metrics
  • b93fb63add metrics
  • e96f8f5fix nil pointer panic in camera network service registration
  • 1143d76fix nil pointer panic in camera network service registration
  • 722d652extract camera network analysis to domain layer
  • 3eec318extract camera network analysis to domain layer
  • 28b9104fix cellular connection failing after modem re-enumeration
  • 422fa89fix cellular connection failing after modem re-enumeration
  • de212bffix clipboard copy for non-secure contexts (HTTP)
  • 2ad7ae2fix clipboard copy for non-secure contexts (HTTP)
  • 0a8a73bremove network dependencies from service file
  • 7e31c0fremove network dependencies from service file
  • 667ab4dfix release version detection to use stable tags only
  • 93c7ec5fix release version detection to use stable tags only
  • 1d8bb17fix hotspot creation with legacy addresses format
  • d925da0fix hotspot creation with legacy addresses format
  • ca0b787improve connectivity checker
  • 8b932a9improve connectivity checker
  • b26c6e5Merge branch 'master' into develop
  • e882281fix release.stage to strip existing prerelease suffixes
  • 723a41ffix release.stage to strip existing prerelease suffixes
  • 31c62c7rename version.* to release.* and remove confirmation prompts
  • 4f345c2rename version.* to release.* and remove confirmation prompts
  • 380de82add stage tag support to release workflow
  • e7043d1add stage tag support to release workflow
  • b5cc975add version.stage target
  • 4655389add version.stage target
  • e282e23fix version targets to push only specific tag
  • 67c0e0ffix version targets to push only specific tag
  • 9c1e011Replace ffprobe with native gortsplib for RTSP discovery
  • 4ec81a7add new webui interface
  • d7d185eadd new webui interface
  • 4718d1dimprove logs page with infinite scroll and mobile layout
  • f20a4b5improve logs page with infinite scroll and mobile layout
  • a56cb3bsimplify pi-gen trigger (remove VERSION file sync)
  • d65604bsimplify pi-gen trigger (remove VERSION file sync)
  • 0e46c39auto-update pi-gen VERSION file on release
  • 639622dauto-update pi-gen VERSION file on release
  • d510c88fix goreleaser env file mapping for stable/testing distributions
  • 45012bffix goreleaser env file mapping for stable/testing distributions
  • b5dbe7fsingle release workflow
  • 4f4462fadd staging tag support (v1.0.0-staging.1)
  • f6fc30eadd staging tag support (v1.0.0-staging.1)
  • c3f1999combine production and development workflows into single release.yml
  • 8857f1ccombine production and development workflows into single release.yml
  • 6802a37update pi-gen trigger to use build-development-image event
  • 8efa79cupdate pi-gen trigger to use build-development-image event
  • ec44fc2simplify Pi image trigger to use distribution only
  • cb4e8afsimplify Pi image trigger to use distribution only
  • 6feb224trigger Pi image builds for RC releases
  • 218165atrigger Pi image builds for RC releases
  • bd46f45add RC release support to production workflow
  • 6f967b7add RC release support to production workflow
  • 14b4f53refactor webui and fix pre-commit issues
  • 5d4438arefactor wifi scanning to non-blocking API
  • 7756e16refactor wifi scanning to non-blocking API
  • aa7a8a8add new webui interface
  • b7511beadd new webui interface
  • caf46e8fix hotspot reconfiguration
  • 1f27cedfix hotspot reconfiguration
  • 1275879add get typed container config
  • fcb4fc9add get typed container config
  • c0c6ae3fix lint issues in network provider and connection validator
  • 437557eMerge branch 'master' into develop
  • c938c4eadd ignore ipv6 routes
  • 182af91add ignore ipv6 routes
  • 2c8845bignore ipv6 to prevent reconnections
  • d0578b1ignore ipv6 to prevent reconnections
  • a75562dfix serial autoconnect
  • 85cc5dcfix serial autoconnect
  • 675455fMerge branch 'master' into develop
  • 655a201fix: update aircast-pi-gen repository to aircast-one organization
  • bc767b5fix: update aircast-pi-gen repository to aircast-one organization
  • 80afabbfix: set route-metric for ethernet and prevent hotspot default route
  • b2538b4fix: set route-metric for ethernet and prevent hotspot default route
  • 7aeaa91fix: update goreleaser owner from pavliha to aircast-one
  • 370c1d1fix: update goreleaser owner from pavliha to aircast-one
  • a4fee92refactor: event-driven NetworkManager route management with D-Bus signals
  • dfaf711refactor: event-driven NetworkManager route management with D-Bus signals
  • eeb44d5fix: validate route-metrics on device changes to handle boot race condition
  • 6a9109ffix: validate route-metrics on device changes to handle boot race condition
  • 5c033c7refactor: remove disabled RouteMetricManager code
  • 9055d5brefactor: remove disabled RouteMetricManager code
  • 78e9b74Merge branch 'master' into develop
  • f1c6be2fix fps count
  • 0ed7d48fix fps count
  • 8a72b82fix: prevent USB ethernet (cameras) from creating default routes
  • 039722dfix: prevent USB ethernet (cameras) from creating default routes
  • a388afefix: deduplicate MAVLink devices and add auto-baud rate detection
  • 243abb5fix: deduplicate MAVLink devices and add auto-baud rate detection
  • 65584fbfix route managment
  • cad2a04fix route managment
  • 7a70d6erefactor: reduce connectivity checker log noise
  • f4ec066refactor: reduce connectivity checker log noise
  • 83c5419fix: preserve existing network settings when updating route-metrics
  • 56cf3c4fix: preserve existing network settings when updating route-metrics
  • 3a08911fix: preserve all IPv4/IPv6 settings when updating route-metric
  • fee3a39Migrate CI/CD workflows to self-hosted runner
  • 86197c6Improve Network page UX and add USB tab
  • 309d87eSimplify cellular configuration form
  • 20ba8d5Add loading state and validation to cellular configuration
  • d633484Separate WiFi configuration from bind functionality
  • ef83b7cAdd tab-based navigation with separate pages for each section
  • a5bd609Fix WebUI dependency injection and refactor Router
  • 39980f5Consolidate templates into shadcn-like component library
  • 3219c84Refactor Router to use RouteRegistrar interface
  • 4c37168Use di.GetTyped helper in MAVLink and MediaRouting providers
  • 77d34d6Fix system provider tests to execute auth.complete hook
  • dd4f9bcRefactor router to pure DI and simplify WebUIProvider
  • 5ed1048add new get typed method
  • fcca8b4Refactor web UI handlers with comprehensive unit tests
  • c8c1f38Set Content-Type header for 404 page to text/html
  • ec99207Fix 404 page handling and improve user experience
  • f47ae21Optimize login and main page with async data loading
  • 39baf06Optimize web UI performance with async loading and background caching
  • ea52178Make WiFi manager optional for Kubernetes deployments
  • 07641d8feat(build): add make test.docker for Linux environment testing
  • d8122e3test(network): remove unnecessary sleep from DeviceChangeReaction test
  • 23a54b7perf(network): add D-Bus signals, retry logic, and configurable delays
  • 0db224ffix(network): add shutdown hook for RouteMetricManager and USBNetworkMonitor
  • 6326bd2refactor(network): improve RouteMetricManager architecture
  • f93f61fCommit built CSS file and simplify Docker build
  • 25aae41Use TARGETARCH for multi-arch Docker builds with tailwindcss
  • eb0812cFix tailwindcss architecture detection in Docker build
  • dd0d224Build WebUI assets in Docker for web access
  • 4f1c5b6Use nginx ingress class instead of traefik
  • b1a75e7Add Ingress support to Helm chart for external access
  • 0200059Add GitOps repository dispatch trigger for automated deployments
  • 1efdcbcImplement semantic versioning for Docker images
  • 1e16cf3Fix pre-existing test failures
  • dcc4b6dFix update checker initialization - resolve dependencies after managed services start
  • d227651Fix shouldConfigureInterface to include USB interfaces
  • a61097eForce Docker rebuild - update checker fix wasn't applied due to layer caching
  • 8b9cb6bFix linter warning: use switch instead of if-else chain
  • 3557bafFix test failures and linter errors
  • b3ee98cFix update checker to start after authentication
  • a2833adAdd comprehensive test coverage and Docker test runner
  • 9269de2Remove SKIP_MODEM_PROVIDER to test DBus fallback
  • 1684780Use PAT_TOKEN for GHCR authentication
  • 2abf6a4Build Docker image for amd64 only to speed up CI
  • 939ffb3Refactor route metric manager to use event-driven architecture
  • 037c35dRefactor route metric manager to use event-driven architecture
  • c01ab1bRefactor route metric manager to use event-driven architecture
  • 750753aSkip WebUI asset building in Docker - not needed for container deployment
  • 64e517fDownload correct Tailwind CSS binary for target architecture
  • 18b67bfCombine Tailwind CSS download and build in single RUN step
  • 7e27059Run tailwindcss and templ directly instead of via Make
  • 7e19838Fix route metric manager to use NetworkManager API for modem detection
  • 9a81290Fix route metric manager to use NetworkManager API for modem detection
  • f41213cInstall tailwindcss to /go/bin and remove unused test types
  • 927de18Remove Makefile from .dockerignore to enable WebUI builds
  • 1b35a8cFix Makefile target invocation in Dockerfile
  • 8db31baBuild WebUI assets in Dockerfile before Go build
  • 8d4b64cAdd Docker build workflow for GHCR
  • 1556b18Make .env file optional in Makefile
  • d0fd0cfAdd .env file creation before building WebUI assets in all test jobs
  • 44fd69aFix CI: Build WebUI assets before running tests
  • 66a7b20Remove modem_other.go to fix build conflicts
  • 987dc0dAdd shared simulated modem implementation
  • 90ab5f5Add fallback to simulated ModemManager when DBus unavailable
  • 6cf74bfAdd Helm chart files for Kubernetes deployment
  • 9b10265Add Kubernetes deployment with Helm chart
  • 031e2dfadd turn server config
  • 03aaa63fix open telemetry tracing
  • 084ff63Refactor USBNetworkMonitor for testability and add comprehensive tests
  • d2dcf70fix router.go format
  • f7bfd73add output.css to .gitignore
  • eb4405fadd missing sfu destination
  • fb1c49aAdd tests for CaptivePortalDNS and refactor for testability
  • 2cc4e9fAdd custom 404 page and automated captive portal DNS management
  • 40745e3Start hotspot when internet unavailable even if device is authenticated
  • 6b9c6d9Fix Loki cardinality issues
  • 5ba88f3Enable MAVLink heartbeats to prevent SITL from exiting
  • 2e32a63Fix MAVLink connection reopening every 30 seconds
  • bcff21cFix WebSocket SendMessage to check connection state
  • 30fc921refactor: migrate time operations to Clock interface across application
  • 810c099docs: add Clock interface migration tracking document
  • 0844b6ffeat: add MAVLink connection health monitoring and auto-recovery
  • 1e7f98cfix: implement WebRTC data channel setup
  • 5c3deffrefactor: migrate time-based operations to Clock interface
  • b03cc68refactor: move Clock interface to shared testing infrastructure
  • 8baf56bfix: prevent duplicate a=msid lines in WebRTC SDP for P2P mode
  • f4a672etest: improve auth package coverage from 3.8% to 31.2%
  • 5a93fcafix: use XDG paths in E2E tests instead of relative paths
  • f9a22a0debug: add comprehensive logging for XDG path resolution
  • 36919b1fix: call xdg.Reload() to pick up environment variables in E2E tests
  • 262cc6bdebug: output to stderr and show xdg.DataHome value
  • 7313dd9debug: add logging to show XDG_DATA_HOME and SecretsDir paths
  • 37c6912fix: set XDG_DATA_HOME environment variable for test instances
  • 7163205fix: seed keyring with mock auth tokens for e2e tests
  • 3f86253fix: release agent HTTP port listener before starting agent
  • a389f22fix: change agent output logging from debug to info level
  • 443e393fix: increase e2e timeouts to 2s for reliable CI execution
  • f1a7513fix: increase WebSocketConnectTimeout to 1000ms for CI reliability
  • fa8eb2afix: increase ClientWaitTimeout to 1000ms for CI reliability
  • 2835e7efix: increase ClientWaitTimeout for reliable agent startup in CI
  • 81cc3effix: properly shutdown AuthService in e2e tests to prevent zombie processes
  • 04e7945fix: resolve Mock API server port binding conflict causing CI timeouts
  • 0659261perf: optimize e2e tests to 6s with 30s timeout
  • 00d803brefactor: complete migration to event-driven e2e testing architecture
  • e3f8421add best practices README.md
  • d8f4e93feat: add DATABASE_PATH environment variable for test isolation
  • 944e0a9fix: handle missing messageClient dependency gracefully in SystemProvider
  • 9535bd5feat: implement dynamic port allocation for parallel e2e test execution
  • 78b3cf7test: eliminate all remaining time.Sleep from e2e tests (part 4)
  • ded1c6ctest: eliminate arbitrary delays from SFU and auth e2e tests (part 3)
  • c0fdf01test: eliminate arbitrary delays from RTSP and disconnection e2e tests (part 2)
  • c13222crefactor: eliminate arbitrary delays in e2e tests (part 1)
  • 71c7043fix: use SO_REUSEADDR to properly check port availability in e2e tests
  • a4a4cf0fix: replace sleep with active port release waiting in e2e tests
  • b83f70efix: increase mock API port release delay for CI reliability
  • e2f0e2afix: increase session stabilization delay and add port release delay
  • 6b59b3bFix UpdateChecker tests to skip when package not installed
  • da2897bFix race conditions in UpdateChecker
  • 03318ccImplement automatic update checking system for aircast-agent
  • fc67ebdfix: add session stabilization delay and increase timeouts in disconnection test
  • a20875ffix: improve e2e test reliability for CI/CD
  • 87afc66Fix gomavlib dependency for CI/CD pipeline
  • 8b4409aSync MAVLink WebSocket timeouts with API for stable connections
  • 8d0926crefactor: reduce MAVLink logging verbosity
  • d8f1c7dUse native gomavlib WebSocket endpoint to fix goroutine leak
  • ed6c894fix: auto-clear invalid tokens for remote devices
  • 011db4cFix RTSP destination streaming by adding runtime config transformation
  • 2a5d858Enable automatic MAVLink stream requests
  • 1c29141Upgrade aircast-sdk to include FromMemberID field support
  • d15c390Add retry logic for token refresh with network failure handling
  • dc4e0b2test: increase RTSP source ready timeout for CI stability
  • c1bddf5fix: resolve remaining linting issues in route metric manager
  • 2ea3729fix: correct RouteUpdate field access and restore error return
  • a8d09c0fix: resolve additional linting issues found in CI
  • cbbf2b8fix: resolve all linting issues
  • 8ec57faci: make linting failures block CI pipeline
  • 54a9ab0chore: remove obsolete +build tags
  • f4a9b2ffix: implement RTSP route auto-start and update SDK to v0.3.0-dev.3
  • 881d715chore: update aircast-sdk to v0.3.1-0.20251103142911-f6ae61001238
  • a9acaa9refactor: update media package
  • d1d44e5refactor: update media package
  • f499f20refactor: update media package
  • 75ee603refactor: update media package
  • 33547a5refactor: update media package
  • 83febfafeat: update output.css
  • 310f5adfix: make E2E tests fail CI properly and fix timing issue
  • d861abafix: resolve CI test workflow issues
  • 79ef820feat: add ci/cd test setup
  • 232c38cfeat: new rtsp functionality
  • b759d3arefactor: simplify WebRTC negotiation by removing conditional SFU mode
  • a27bd64perf: optimize E2E test suite performance (67% faster)
  • 0bfae4etest: improve tests
  • 0f98762fix: upgrade aircast-sdk
  • 02fabbbfix: update precommit hook
  • 65af9acfeat: bump patch version when creating dev release from stable version
  • 56d1e4cMerge branch 'master' into develop
  • 8b03786fix: automatic token refresh on startup prevents auth expiration after restarts
  • b9ad88bfix: automatic token refresh on startup prevents auth expiration after restarts
  • be8ff33Merge branch 'feature/automatic-route-managment'
  • 2df0acdMerge branch 'feature/automatic-route-managment'
  • 2edb0d6feat: add automatic route metric management for plug-and-play modem support
  • b2fb92dfeat: add automatic route metric management for plug-and-play modem support
  • ef99c65Merge branch 'master' into develop
  • 24a45e5fix: auto installation of rpi camera
  • 4205450fix: auto installation of rpi camera
  • 403e6dbfeat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • f7fead1feat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • 0347ad8refactor: add event broadcaster to media system and update deployment
  • 8d39f41refactor: add event broadcaster to media system and update deployment
  • 52d5705fix: resolve WebUI timeout errors and optimize page load performance
  • a1df47dfix: resolve WebUI timeout errors and optimize page load performance
  • 6a253cefeat: implement proper ONVIF library integration
  • d4775a5test: remove flaky TestDisconnectionDuringNegotiation E2E test
  • 521de54fix: make disconnection E2E test more resilient to ICE gathering timing
  • 67e0d8afix: update camera sources to use MediaSource interface and fix linting errors
  • d851285Merge branch 'feature/add-new-sfu' into develop
  • 771e636feat: implement WS-Discovery and subnet scanning for ONVIF camera detection
  • 484cc2etest: skip obsolete SFU tests that use removed media.stream.join
  • b4d12f3feat: add route_id to agent SFU messages for multi-room support
  • a53d105test: add E2E tests for media source keep-alive feature
  • 24c1af0feat: implement keep-alive for media sources
  • c391ecdfeat: implement keep-alive for media sources
  • 277f369fix: add ResponseMessage handling to enable SFU publisher answers
  • 319fabdrefactor: make SFU the only streaming mode and remove media.stream.join
  • 5ec34b4refactor: complete SDK field alignment across codebase
  • 1a3d4fafeat: add media.route.select handler for single-action route switching
  • ce13590chore: fix tests
  • 8efaed1fix: resolve E2E test failures and flakiness
  • 38795b9refactor: migrate to new aircast-sdk API
  • ffce8e7chore: cleanup code
  • c665b89Merge branch 'develop' into feature/add-new-sfu
  • e58e891add destination to types
  • 20a199bupdate go.mod
  • 86218deremove device id storage
  • 48f3663Merge branch 'develop'
  • 0a54266Merge branch 'develop'
  • 4e70e1bupdate sdk
  • 7ebbd11update sdk
  • d4ad18aupdate network fix command
  • 1b4653fupdate network fix command
  • 6e74649refactor: standardize logging field names for consistency
  • 374fd23refactor: standardize logging field names for consistency
  • cd6bb00feat: add comprehensive tracing and OTLP configuration for agent
  • 76309bbfeat: add comprehensive tracing and OTLP configuration for agent
  • 5876800fix source manager release bug
  • 8171f09fix source manager release bug
  • 86f0047fix: resolve E2E test failures by fixing message routing
  • 58ea2fffix: make SFU mode configurable via environment variable
  • 8550d3bfeat: add SFU publisher session close handler
  • 1283947fix: add destination parameter to SendEventToChannel interface
  • 595da84fix: implement graceful handling for SFU publisher offers
  • f183ec3fix: resolve shutdown panic and add linting fixes
  • a055923Merge pull request #15 from pavliha/develop
  • 076fdcfMerge pull request #15 from pavliha/develop
  • f9ee622fix: improve WebRTC stability and buffer monitoring
  • e1ff448fix: resolve linter issues and fix all failing tests
  • 8aa415efix: resolve source recovery test failures
  • f3d2726fix: resolve linter issues in SFU tests and handlers
  • 2a8216afix: recreate media sources when in error state
  • cb62b5badd WebRTC video track metrics for latency debugging
  • d9e8bbcadd WebRTC video track metrics for latency debugging
  • b15a83efix: resolve test deadlock in WebRTC session manager
  • 7e7f2dafix: resolve test deadlock in WebRTC session manager
  • 8da2361feat: add system.ping websocket action for health checks
  • 5878556feat: add system.ping websocket action for health checks
  • 74ec3f9fix: resolve WebRTC high latency issue caused by route removal
  • 83f49f4fix: resolve WebRTC high latency issue caused by route removal
  • 4690463feat: add NAT masquerading and IP forwarding for cellular connections
  • 4bd1af0feat: add NAT masquerading and IP forwarding for cellular connections
  • c666e08fix: resolve WebRTC test failures and lint issues
  • 7a241bbfix: resolve WebRTC test failures and lint issues
  • 469c22cchore: disable cyclop linter
  • ad92a7cchore: disable cyclop linter
  • 5418322fix: improve WebRTC session error messages and tracking
  • f2a0d29fix: improve WebRTC session error messages and tracking
  • 3a5a10cfix: prevent UDP socket leak in WebRTC sessions
  • 1507386fix: prevent UDP socket leak in WebRTC sessions
  • 62d7d53cleanup code
  • 49595f6cleanup code
  • f74a1eeupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 73877adupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 483e9bcupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 0b62991upgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 465525brefactor: simplify E2E test suite with sensible defaults
  • 2ad7f7erefactor: simplify E2E test suite with sensible defaults
  • 4c9f499fix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • f3bafcffix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • 1bb0f8afix: include WebRTC offer in session create response to eliminate timing issues
  • fc419effix: include WebRTC offer in session create response to eliminate timing issues
  • d660472fix: include WebRTC offer in session create response to eliminate timing issues
  • a38af6bfix: include WebRTC offer in session create response to eliminate timing issues
  • d4c45bffix: resolve UDP source race condition in connection handling
  • 8a5789dfix: resolve UDP source race condition in connection handling
  • 830cc67fix: resolve race condition in UDP source connection handling
  • d6a1156fix: resolve race condition in UDP source connection handling
  • 2746039fix: resolve all lint issues and improve code quality
  • e01e9b7fix: resolve all lint issues and improve code quality
  • fec846ffix: resolve type assertion and interface implementation issues
  • 1ee7f99fix: resolve type assertion and interface implementation issues
  • ffef8a4fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 38b57d0fix: use correct Aptly force-overwrite flag instead of invalid config property
  • 2fcdb91fix: allow overwriting existing files in Aptly S3 configuration
  • d5ec49afix: allow overwriting existing files in Aptly S3 configuration
  • 0a07b6bfix: use specific event type for production Pi image builds
  • 4a97e1bfix: use specific event type for production Pi image builds
  • f8b4521update: trigger Pi image build from main branch for production releases
  • 27322ddupdate: trigger Pi image build from main branch for production releases
  • a56e770update: align production workflow with development structure
  • d59a54bupdate: align production workflow with development structure
  • 06617d2Merge branch 'develop'
  • fa9a759Merge branch 'develop'
  • 6cf2b5cfix: always attempt token revocation on logout
  • 5e4d7edfix: always attempt token revocation on logout
  • c2b9cfdfix: handle missing refresh token properly to force re-authentication
  • 3596e18fix: handle missing refresh token properly to force re-authentication
  • b744b79fix: resolve WebRTC session race conditions with device.session.ready event
  • cc5e087fix: resolve WebRTC session race conditions with device.session.ready event
  • 77fe141refactor: update relay infrastructure and WebSocket handlers
  • b132620refactor: update relay infrastructure and WebSocket handlers
  • d5946cbchore: update to use any instead of interface{}
  • b08fe57chore: update to use any instead of interface{}
  • 0b0eda9fix: ensure WebSocket connects on startup for authenticated devices
  • a05197ffix: ensure WebSocket connects on startup for authenticated devices
  • df9db02fix: add automatic network route management and WebRTC session cleanup
  • e88959bfix: add automatic network route management and WebRTC session cleanup
  • 7e599eafix my turn server url
  • 206817cfix my turn server url
  • 76b3975feat: remove nginx dependency from Debian package
  • ce05d49feat: remove nginx dependency from Debian package
  • 52e0d33chore: update dependencies and build improvements
  • 322f497chore: update dependencies and build improvements
  • 828c809fix: resolve stream sharing conflicts and improve codec negotiation
  • 5892c1dfix: resolve stream sharing conflicts and improve codec negotiation
  • 46c1db2fix: improve RTSP and media processing debug logging
  • c9b8d2bfix: improve RTSP and media processing debug logging
  • 344f67afix: improve RTSP error reporting and remove redundant events
  • efa1c91fix: improve RTSP error reporting and remove redundant events
  • d8fa6d1fix: prevent udevadm process leaks in camera monitor
  • 5e968cdfix: prevent udevadm process leaks in camera monitor
  • cc7d436fix: update WiFi configuration text to reference drone capabilities
  • 4c41b41fix: update WiFi configuration text to reference drone capabilities
  • 2f0f817feat: add camera and MAVLink status display to home page
  • b3d3173feat: add camera and MAVLink status display to home page
  • c913c4efix: improve system logs page layout and handling
  • f156e86fix: improve system logs page layout and handling
  • e7bee2ffeat: implement in-memory log storage and fix PPP route parsing
  • 339815afeat: implement in-memory log storage and fix PPP route parsing
  • fd6e062add system logs page
  • a69de52add system logs page
  • fac7366feat: enhance cellular UI with real-time data and internet connectivity tracking
  • d57c380feat: enhance cellular UI with real-time data and internet connectivity tracking
  • db44ab2feat: add configurable HTTP port and HTTPS redirect support
  • 3f5b594feat: add configurable HTTP port and HTTPS redirect support
  • f488ffcfeat: implement udev-based camera monitoring to replace polling
  • 8ce473ffeat: implement udev-based camera monitoring to replace polling
  • b334e84add pi camera support
  • 5a57513add pi camera support
  • 83eaf07feat: add automatic Raspberry Pi camera detection and streaming
  • 5d2674ffeat: add automatic Raspberry Pi camera detection and streaming
  • 8e9ba43feat: add Raspberry Pi camera support
  • a000b8ffeat: add Raspberry Pi camera support
  • 1c88449feat: add UDP video source support
  • 3128899feat: add UDP video source support
  • 3cea006Merge branch 'refs/heads/feature/udp-video-source' into develop
  • 4b3a2b9Merge branch 'refs/heads/feature/udp-video-source' into develop
  • bfd298fadd permissions check
  • e540dccadd permissions check
  • 2a401e2Add USB hotplug monitoring for MAVLink devices
  • d6d6e33Add USB hotplug monitoring for MAVLink devices
  • c0b66e3Fix TURN server 400 errors and improve WebRTC ICE handling
  • 003a063Fix TURN server 400 errors and improve WebRTC ICE handling
  • afb314dfix connection issues
  • 0f86405fix connection issues
  • 806c3bbfeat: add UDP video source support
  • b1f99e9feat: add UDP video source support
  • 7277fa4update templ
  • 0fa8567update templ
  • 6d36f4aapply auth logout fixes
  • dbf8c1aapply auth logout fixes
  • 84e4211apply hotspot fixes
  • 977e781apply hotspot fixes
  • b0ccbfffix deprecation
  • 0a13de4fix deprecation
  • ad3760eadd rebuild trigger
  • 373178dadd rebuild trigger
  • 9755df4add cellular status indicator
  • 34dec55add cellular status indicator
  • d8a74d4downgrade logs
  • 8f09880downgrade logs
  • 31ad675add connectivity error handling
  • 7756bc9add connectivity error handling
  • e5aade0update login ui
  • 140ca03update login ui
  • 3b810fdupdate on device login flow
  • fd23995update on device login flow
  • 7a5f259fix auth token
  • 06a94acfix auth token
  • ce6dd4dadd terminal support
  • f6e5e7fadd terminal support
  • 4885481fix hotspot
  • 96ebda3fix hotspot
  • 528d992fix wifi service unavailable
  • 1f86d90fix wifi service unavailable
  • f1365adfix nginx service
  • c518bbefix nginx service
  • 592b9a1fix autoconnect service
  • 0a260fbfix autoconnect service
  • 0b5c4feuse dialect
  • a247a00use dialect
  • 14ef62bremove command sender
  • ae02be1remove command sender
  • f355bbffix auth expiration
  • 0c9eac5fix auth expiration
  • 539429cfix auth expiration
  • 7828964fix auth expiration
  • f8f4b30save mavlink
  • f97b717save mavlink
  • 54dcc24fix do reposition command
  • bd5bfa9fix do reposition command
  • e2507f8use new send command approach
  • 5f4ce5ause new send command approach
  • ec4fa20use new send command approach
  • 20f3787use new send command approach
  • aaf29adadd message throttle
  • 6baae24add message throttle
  • 01ac0ddsave telemetry messages refactor
  • 3631f4asave telemetry messages refactor
  • 22b38d8remove sitl
  • 2dffcb4remove sitl
  • 97fbd42fix webrtc signaling
  • a5d47c2fix webrtc signaling
  • b0c3c86fix turn servers
  • 4234acffix turn servers
  • 818abcfMerge remote-tracking branch 'origin/develop' into develop
  • e5af64cMerge remote-tracking branch 'origin/develop' into develop
  • 100a260remove usage of aircast sdk types
  • 0732749remove usage of aircast sdk types
  • 32db038refactor message handlers
  • 4dfbaccrefactor message handlers
  • 48049fafix hotspot ip address order
  • e44ee75fix hotspot ip address order
  • 3c2f105add more stun servers
  • 86676d2add more stun servers
  • 8a0b739fix ice candidate support
  • 81b217efix ice candidate support
  • 7f426a3update default ice servers
  • 84ad5c4update default ice servers
  • 81e88dcadd interfaces' cleanup
  • a3c97a9add interfaces' cleanup
  • 1e46147fix turn server
  • f6773e1fix turn server
  • ed65104remove update check
  • 7a056c7remove update check
  • 31268fbadd hotspot start
  • fb341d1add hotspot start
  • 33bb807add hotspot start
  • b183b5aadd hotspot start
  • 8ec1e99add hotspot start
  • 6e6de2dadd hotspot start
  • 04a099efix websocket reconnection
  • 48e466bfix websocket reconnection
  • 16d957dupdate .gitignore
  • 8173947update .gitignore
  • 476fb9bfix release
  • 235c3f2fix release
  • 48b49c2fix database migrations
  • 99b40a8fix database migrations
  • ddbcb6fupdate print config
  • 0e86221update print config
  • 0781004reduce logs verbosity
  • 4c0fd29reduce logs verbosity
  • d89c728add token refresh
  • 0923529add token refresh
  • 16ac247fix telemetry errors
  • bbc7695fix telemetry errors
  • 57b465bfix media pipeline errors
  • 381be2dfix media pipeline errors
  • 4847fc2resolve circular dependencies
  • 90ff565resolve circular dependencies
  • 5abf321intermediate save
  • f6c21ffintermediate save
  • de176f0refactor mavlink telemetry auto setup
  • c812784refactor mavlink telemetry auto setup
  • 11b6a47refactor mavlink
  • 9163ccfrefactor mavlink
  • a4b991bresolve warnings
  • 90bebf6resolve warnings
  • 0f1b61fadd system handlers
  • 0d9c4dbadd system handlers
  • 2a9350badd more network handlers
  • fa7f7c3add more network handlers
  • 3e9d618fix agent networking
  • 1b1291bfix agent networking
  • 05cc195add cleanup
  • b45f6d8add cleanup
  • 533b396consolidate mavlink component
  • 6c9c0fbconsolidate mavlink component
  • c0b1783add mavlink autoconnect
  • 3d861cdadd mavlink autoconnect
  • 2082fd2add cleanup functions
  • 4e262f6add cleanup functions
  • aa5e9aeadd auto webrtc destination fill in
  • e560613add auto webrtc destination fill in
  • fce1218add auto hostname fill
  • 9d7598eadd auto hostname fill
  • a44a035add auto token refresh
  • 73c32f4add auto token refresh
  • 28d8d46rename websocket route
  • e339fa2rename websocket route
  • 6011bb5fix exit states
  • 022782ffix exit states
  • 599c080remove app state
  • 5a40268remove app state
  • efe871ffix loki logging
  • 194d2b9fix loki logging
  • d74599bsimplify logging
  • bd8ca36simplify logging
  • 957d229Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 825b0b2Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 2b42d16[AIR-40] fix logout
  • 89d4d38[AIR-40] fix logout
  • 7123ba1[AIR-40] update service handlers
  • f0bf578[AIR-40] update service handlers
  • 60e8dd7[AIR-40] fix logging
  • a359d77[AIR-40] fix logging
  • 28b9597[AIR-40] fix websocket state management
  • af31dcd[AIR-40] fix websocket state management
  • fa8d480[AIR-40] fix auth lifecycle
  • e020c5e[AIR-40] fix auth lifecycle
  • 200f007[AIR-40] add token revocation
  • 728d641[AIR-40] add token revocation
  • 90beb04[AIR-40] fix device auth flow
  • c264ad1[AIR-40] fix device auth flow
  • f776272[AIR-40] update auth flow
  • f97a490[AIR-40] update auth flow
  • 58302f5[AIR-40] fix connection messages
  • aead670[AIR-40] fix connection messages
  • 6c9b256[AIR-40] update device sign in flow
  • 44f464d[AIR-40] update device sign in flow
  • 0a19a31fix sitl
  • 5556081fix sitl
  • c328a4drun systemd service as root
  • 42ab75frun systemd service as root
  • 2240376fix systemd service
  • 5f52b4ffix systemd service
  • f0bb1cefix active connections
  • cba5a3dfix active connections
  • 5cae012add handlers
  • fa7aa69add handlers
  • 0ea86a6rename copy in frame.go
  • 1773e4crename copy in frame.go
  • dda9ef5fix delete logic
  • a378baefix delete logic
  • 8f97faeadd mavlink feedback
  • 3ad9ec8add mavlink feedback
  • 7599040fix development build
  • f1c0da1fix development build
  • b818981fix development Makefile
  • 78d9736fix development Makefile
  • 444924bfix development ci
  • 1ef9b56fix development ci
  • bc804b6fix network manager
  • 3f9b5b1fix network manager
  • 396098cmake network manager cross platform
  • 216276bmake network manager cross platform
  • 7e48598save refactor for now
  • cf3771bsave refactor for now
  • 5078fe5fix sign in url
  • c03fd58fix sign in url
  • fb40601update permission
  • f5be9e3update permission
  • f2688ebfix loki setup
  • 487ffe4fix loki setup
  • d2843defix a database path
  • dbe3279fix a database path
  • f554cc1fix config and environments
  • 7ebf609fix config and environments
  • 625d688fix network provider
  • 218352ffix network provider
  • 6764c66fix environments loading
  • 1307046fix environments loading
  • a23c86dfix migrations
  • 69b03abfix migrations
  • 65ba2e9add gpg signin back
  • b07721fadd gpg signin back
  • 8b4a043fix ci build
  • 8bb6c50fix ci build
  • 61db5f9[Air-000] add modem manager (#11)
  • f881133[Air-000] add modem manager (#11)
  • 23efcecfix ci build
  • 46e1ea9fix ci build
  • 6c154b3fix ci build
  • 50745e3fix ci build
  • f863ce1fix ci build
  • 9da6dccfix ci build
  • 9b41087refactor application bind phase
  • 4cd942arefactor application bind phase
  • aa7b24cfix release as systemd
  • 4046c75fix release as systemd
  • e213b69[AIR-32] add private module support
  • eecf436[AIR-32] add private module support
  • 22f10a0[AIR-32] add private module support
  • 15ad5f8[AIR-32] add private module support
  • 3b71d8asave bind changes
  • 3943183save bind changes
  • f097094remove mdns
  • efd5b84remove mdns
  • c1960c4fix wifi bind mode
  • 2a00a1ffix wifi bind mode
  • 73f02c6[AIR-32] refactor setup
  • 1d3c608[AIR-32] refactor setup
  • f0048e0refactor wifi setup
  • 5edf4darefactor wifi setup
  • 228240d[AIR-32] update network manager
  • 4912f4c[AIR-32] update network manager
  • 14baa86save hotspot mode
  • 40f4218save hotspot mode
  • 01956a6[AIR-32] update webrtc session management
  • 04dccdd[AIR-32] update webrtc session management
  • f17eba3[AIR-32] add envs fallback
  • 4bbe8ad[AIR-32] add envs fallback
  • 735e120Add tailwindcss to .gitignore
  • 3d08368Add tailwindcss to .gitignore
  • 52245c0[AIR-32] fix tailwind installation
  • d695edf[AIR-32] fix tailwind installation
  • b3b7818[AIR-32] fix bind service
  • 359204f[AIR-32] fix bind service
  • 27021e2[AIR-32] add output.css
  • 09086e9[AIR-32] add output.css
  • e0afd75[AIR-32] fix bind mode for application
  • 4433c77[AIR-32] fix bind mode for application
  • 161b834[AIR-32] fix bind mode for application
  • 26caa9c[AIR-32] fix bind mode for application
  • 182cafe[AIR-32] add setup mode to application
  • 5bd2358[AIR-32] add setup mode to application
  • 7520c22[AIR-32] add setup mode for application
  • 5ee3887[AIR-32] add setup mode for application
  • 743bbe3[AIR-32] add hotspot setup
  • ddb0c5c[AIR-32] add hotspot setup
  • 3ee157a[AIR-12] silence loki if it is not available (#8)
  • cbe5aaa[AIR-00] fix sdk build
  • f160558[AIR-00] fix sdk build
  • 39b4226[AIR-28] add telemetry sender functionality
  • 9caf085[AIR-28] add telemetry sender functionality
  • 11659cd[AIR-28] add telemetry sender functionality
  • 3a33ba9[AIR-28] add telemetry sender functionality
  • b2cc8b1[AIR-28] fix telemetry connection
  • 91d3d2d[AIR-28] fix telemetry connection
  • 2c88abb[AIR-28] fix telemetry sending
  • e4a1e75[AIR-28] fix telemetry sending
  • d82aa18[AIR-28] fix telemetry requests
  • 22b80b9[AIR-28] fix telemetry requests
  • cc50c0c[AIR-28] update docker file
  • 411f312[AIR-28] update docker file
  • fc0c88b[AIR-28] add mavlink commands support
  • a31d733[AIR-28] add mavlink commands support
  • a2087bf[AIR-28] upgrade mavlink telemetry
  • e8a1b17[AIR-28] upgrade mavlink telemetry
  • 2b87157[AIR-28] fix mavlink telemetry
  • 1b7adc9[AIR-28] fix mavlink telemetry
  • 8c601f5[AIR-28] fix mavlink connection
  • 3e13f5a[AIR-28] fix mavlink connection
  • 2505220[AIR-28] add datachannel telemetry handler
  • 684fb40[AIR-28] add datachannel telemetry handler
  • fdbbe63[AIR-28] add datachannel mavlink connection
  • 8d22158[AIR-28] add datachannel mavlink connection
  • f924e1e[AIR-28] refactor mavlink connection
  • d37d56a[AIR-28] refactor mavlink connection
  • 7bad84d[AIR-28] fix session closure
  • 8f5e5e3[AIR-28] fix session closure
  • 74a5730[AIR-28] add mavlink telemetry over datachannel
  • 1cd16cd[AIR-28] add mavlink telemetry over datachannel
  • 9385921[AIR-28] add mavlink telemetry
  • d656d71[AIR-28] add mavlink telemetry
  • a325785[AIR-28] refactor mavlink connection
  • b837c41[AIR-28] refactor mavlink connection
  • c0bb321[AIR-28] extract to mavlink repository
  • a1c5629[AIR-28] extract to mavlink repository
  • 9043ba5[AIR-28] add mavlink handlers
  • 8f2bf79[AIR-28] add mavlink handlers
  • a81b275[AIR-28] add mavlink package
  • 2ae5a8b[AIR-28] add mavlink package
  • cc1b49e[AIR-28] cleanup
  • 0a4041a[AIR-28] cleanup
  • adde79f[AIR-28] refactor webrtc session
  • 0e4cb5c[AIR-28] refactor webrtc session
  • e793f08[AIR-28] refactor stream
  • a6966f1[AIR-28] refactor stream
  • 9de9c5d[AIR-28] refactor handlers
  • a14ec69[AIR-28] refactor handlers
  • 2354b0b[AIR-28] update webrtc handlers
  • c22cf94[AIR-28] update webrtc handlers
  • 49b11ca[AIR-28] refactor handlers
  • c44bd32[AIR-28] refactor handlers
  • fafb9d5[AIR-28] add answer handler
  • 9516119[AIR-28] add answer handler
  • 1b95842[AIR-28] fix webrtc error handling
  • 2eca9ae[AIR-28] fix webrtc error handling
  • 84ae223[AIR-28] fix rtsp client error handling
  • 15ac6ab[AIR-28] fix rtsp client error handling
  • efdf686[AIR-28] add templ dependency
  • 35f8637[AIR-28] add templ dependency
  • 64ffbff[AIR-28] refactor rtsp source
  • 7b7f9ff[AIR-28] refactor rtsp source
  • 1c93194[AIR-28] add better logging
  • a6d8cfc[AIR-28] add better logging
  • 6c68b1e[AIR-28] fix SIYI camera
  • 367fb8b[AIR-28] fix SIYI camera
  • 642460b[AIR-28] code cleanup
  • 2f565f4[AIR-28] code cleanup
  • f6d9f83[AIR-28] code cleanup
  • 7045313[AIR-28] code cleanup
  • 354d038[AIR-28] code cleanup
  • dcb0f8c[AIR-28] code cleanup
  • 433fa90[AIR-28] downgrade logs
  • 977d32c[AIR-28] downgrade logs
  • db8de90[AIR-28] update h264 decoder
  • 5881ebf[AIR-28] update h264 decoder
  • 01c3bfd[AIR-28] fix media stream
  • f823e61[AIR-28] fix media stream
  • 8c7cb29[AIR-28] save media package
  • 0ca806e[AIR-28] save media package
  • 55f3934[AIR-28] move unit inside stream
  • 9f5b267[AIR-28] move unit inside stream
  • eff7ff0[AIR-28] refactor stream package
  • 6eace51[AIR-28] refactor stream package
  • 75c70c0[AIR-28] fix warnings
  • 8eacd5a[AIR-28] fix warnings
  • fe7a6df[AIR-28] downgrade logs
  • 9e71072[AIR-28] downgrade logs
  • 948760d[AIR-28] add enhanced stream package
  • 1f144d6[...

v1.2.3-stage.11

May 3, 2026

v1.2.3-stage.11

Changelog

  • b755a32ci: prevent fleet notification curl errors from failing the release

v1.2.3-stage.10

May 3, 2026

v1.2.3-stage.10

Changelog

  • e1bf6f1ci: install aptly from Ubuntu repos instead of ancient aptly.info

v1.2.4-dev.83

May 1, 2026

v1.2.4-dev.83

Changelog

  • 6eb812bfix: handle GPG key rotation and aptly re-runs on self-hosted runner

v1.2.4-dev.82

April 26, 2026

v1.2.4-dev.82

Changelog

  • 7ea9616fix: non-blocking ICE server cache and increased relay acceptance delay
  • e679661fix: check all ethernet interfaces before activating failover
  • c88acbefeat: add force relay toggle for WebRTC connections
  • ad16218feat: automatic network failover and camera GOP optimization
  • 31c3cd2fix: detect SIM presence to distinguish USB glitch from real SIM issue
  • 91fd229fix: disconnect cellular after failed bounce to clear dead route
  • bc913d4fix: also clear cellular route on confirmed data plan or SIM issue
  • 40809ecfix: remove P2P bandwidth limiter and consumer restart cascade
  • bb8d735fix: reduce connectivity check interval from 30s to 10s for faster failover
  • 567f24ffix: clear dead cellular route when wwan0 loses IP to prevent DNS black hole
  • e71bb55fix: mode-aware ABR and fix GCC death spiral from triple TWCC registration
  • b725ff1feat: use RTP header extension marker for FEC packets
  • 644e46dfix: use camera ONVIF minimum (128kbps) as GCC floor
  • eb5bcb6fix: set GCC minimum bitrate to 500kbps to prevent death spiral
  • a3798f0feat: add FlexFEC-03 forward error correction for agent→SFU video
  • 96b9797fix: increase consumer buffer from 16 to 64 frames
  • af447d5fix: remove ICE_FORCE_RELAY from dev env to allow direct connections
  • d1819c7fix: reduce consumer buffer from 256 to 16 frames for low latency
  • 3302dc8refactor: simplify ABR bandwidth estimator
  • 4238424fix: detect one-way media zombie connections via RTCP feedback
  • c05d59afix: register stub auth in SFU provider tests
  • b55fe3ffix: pass device JWT token to SFU WebSocket for authenticated publishing
  • 0b49c15fix: ensure USB static IP configs from camera DB on boot

v1.2.4-dev.81

April 22, 2026

v1.2.4-dev.81

Changelog

  • d2c5e9ffix: persist USB static IP configs across agent restarts
  • 844919crefactor(network): consolidate package architecture and fix SOLID violations
  • 86c9fecfix: prevent SFU publisher zombie state on cellular reconnect
  • 9779deafix: recover cellular when modem is registered but has no data connection
  • 4fef63bfix: disable NDIS fast path, use NM GSM connection for cellular
  • 6137dcafix: don't restart ModemManager after NDIS activation

v1.2.4-dev.79

April 21, 2026

v1.2.4-dev.79

Changelog

  • fa80a6bfix: NDIS route creation and NM modem device lookup for cellular connection
  • 085ab12fix: use Pion fork with sender stats in GetStats()
  • a81716cfix: read outbound RTP stats from Pion stats interceptor
  • 54896d8fix: use RTCP FractionLost as fallback when Pion PacketsSent is 0

v1.2.4-dev.78

April 21, 2026

v1.2.4-dev.78

Changelog

  • fe456c7fix: unify ABR congestion model to always include publisher signals
  • 503c9d9feat: modem diagnosis pipeline, canonical logging, and industry-aligned recovery
  • 30d2bdefix: reset TURN permissions on refresh failure and skip relay on ethernet (#52)
  • 1f41540fix: upgrade pion/webrtc to fix TURN CreatePermission bug (#50)
  • e876762fix: prefer ethernet with gateway over gatewayless interface
  • 1a900cefix: only detect write stall when source is actively sending (#53)
  • b1cef4bfix: upgrade pion/webrtc to fix TURN CreatePermission bug (#51)
  • 627b99ffeat: detect data plan issues and suppress destructive recovery (#47)
  • a4d824brefactor: extract LogSearcher interface and JournalReader (#45)
  • a636ed4fix: configure NDIS data path via netlink instead of NetworkManager (#48)
  • a6fd88crefactor: replace hardcoded eth0 with dynamic camera interface resolution (#44)
  • 94b8e6aMerge pull request #49 from aircast-one/fix/cleanup-stale-scan-profiles
  • 8c0bda4fix: clean up stale NM profiles when camera scan finds no cameras
  • fa3f97dfix(ci): serialize release workflows to prevent aptly race condition

v1.2.4-dev.77

April 16, 2026

v1.2.4-dev.77

Changelog

  • 54fd9b9fix: add canonical logging for WebSocket Listen goroutine exits
  • dd6875efix: force HTTP/1.1 ALPN on device WebSocket to prevent frame corruption
  • 1e569d7Merge pull request #41 from aircast-one/feat/ndis-cellular-data-v5
  • c34dd57fix: ensure ip_camera_scanner starts before message_router
  • 612e685feat(cellular): NDIS data path with modem-agnostic architecture

v1.2.4-dev.76

April 15, 2026

v1.2.4-dev.76

Changelog

  • 54fd9b9fix: add canonical logging for WebSocket Listen goroutine exits
  • dd6875efix: force HTTP/1.1 ALPN on device WebSocket to prevent frame corruption
  • 1e569d7Merge pull request #41 from aircast-one/feat/ndis-cellular-data-v5
  • c34dd57fix: ensure ip_camera_scanner starts before message_router
  • 612e685feat(cellular): NDIS data path with modem-agnostic architecture

v1.2.4-dev.75

April 15, 2026

v1.2.4-dev.75

Changelog

  • 70b2291fix: eliminate flaky integration tests with dynamic port allocation
  • 42f2d74Merge pull request #29 from aircast-one/refactor/eliminate-di-container
  • 9f6efebfix: increase timeout for integration tests that trigger pipeline start
  • 6cfdf84refactor: decouple handlers from MessageRouter via EventSender interface
  • beace9frefactor: replace concrete struct pointer deps with narrow interfaces in handler structs
  • 609dfd7refactor: move preview management from MessageRouter to MediaPreviewHandler
  • dc847fcrefactor: add MustGetTyped, use consistent DI resolution style
  • 8eba5b9refactor: standardize handler names and remove container from buildPrioritySwitcher
  • 2210c4brefactor: introduce Handler interface so handlers register their own routes
  • 593c97cfix: set RTP marker bit in mock RTSP source to prevent NALU accumulation (#42)
  • f6887aaMerge pull request #33 from aircast-one/feature/hotspot-toggle
  • 459ca6bMerge pull request #32 from aircast-one/fix/logout-and-shutdown
  • df156f1fix: stop orphaning the device on CLI logout + slow graceful shutdown
  • 2175761feat(webui): add hotspot toggle with state machine as single source of truth
  • e551318Merge pull request #34 from aircast-one/fix/download-logs-terminal-viewer
  • b14e022Merge pull request #36 from aircast-one/fix/api-health-check-timeout
  • b529faafix(connectivity): increase API health check timeout from 3s to 5s
  • b3b576bfeat(webui): terminal-style log viewer with server-side search
  • 977eb5eMerge pull request #31 from aircast-one/refactor/sfu-graceful-boot
  • 706e0e8refactor: graceful SFU boot via auth.complete hook with retry-safe idempotency
  • 9cf58dffix: scale WebRTC lifecycle timeouts by speed multiplier in tests
  • ea4eed3ci: rename e2e tests to integration tests, bump timeout to 5m
  • e9b6650ci: fix e2e test setup port collision and wrong test path
  • 412629cfix: resolve data race in internet priority switcher tests
  • 154b160Merge pull request #30 from aircast-one/refactor/rename-e2e-to-integration
  • c5d2760refactor: rename e2e/ to tests/
  • 4b72d9aci: simplify test workflow from 7 jobs to 4
  • 55ca943fix: resolve lint errors in linux-only files
  • fff15f3fix: resolve all golangci-lint issues
  • 2eae57afix: prevent SFU publisher panic when device is unauthenticated

v1.2.3-stage.3

April 11, 2026

v1.2.3-stage.3

Changelog

  • 6c198a7fix: wire GCC bandwidth getter to SFU publisher instead of empty P2P registry

v1.2.4-dev.74

April 6, 2026

v1.2.4-dev.74

Changelog

  • a616059feat: add camera proxy handler and gitignore MAVLink logs
  • cefa539fix: protect RTSP client from nil pointer panic during concurrent Close and RTCP write

v1.2.4-dev.73

April 5, 2026

v1.2.4-dev.73

Changelog

  • 0e26363fix: mark SFU WS disconnected on write failure
  • 85e4ee3fix: cancel pending SFU requests on WebSocket disconnect
  • a7297e6fix: wire SFU subscriber feedback to ABR and add RTT-based congestion control
  • be37166fix: dispatch SFU event callbacks asynchronously to prevent read loop deadlock
  • 559acdafix: restore GCC for ABR with camera-minimum floor
  • 361426frefactor: decouple ABR from GCC, use SFU subscriber feedback
  • c4546e6fix: add GCC bandwidth floor in GetGCCBandwidth
  • c313d0dfix: add canonical event fields for websocket bridge restart and auth retry
  • 1b79e98fix: use GCC min bitrate floor instead of bandwidth limiter on SFU
  • b188a62fix: raise keyframe-only threshold to prevent GCC deadlock
  • 5fb01e8fix: use dual UDP/TCP TURN and enable SFU bandwidth limiter
  • 58f89dafix: resolve WebSocket reconnection loop caused by auth.complete hook re-firing
  • 861f72ffix: remove bandwidth limiter from SFU tracks to prevent GCC feedback loop

v1.2.4-dev.72

April 5, 2026

v1.2.4-dev.72

Changelog

  • 673a9fcfeat: add GCC bandwidth estimation and frame dropping to P2P sessions
  • 105e03cfix: stop P2P sessions from polluting SFU bandwidth estimation
  • 8ec02ccfix: replace LeakyBucketPacer with NoOpPacer and wire bandwidth limiter
  • 0238532Merge branch 'staging' into develop
  • 6c198a7fix: wire GCC bandwidth getter to SFU publisher instead of empty P2P registry
  • 9e9bf4bfix: use GCC as sole bandwidth source, drop unreliable ICE stats

v1.2.3-stage.1

April 4, 2026

v1.2.3-stage.1

Changelog

  • f7d8e84fix: prevent false zombie detection when Pion stats are limited
  • dfd3123feat: persist modem recovery state across agent restarts
  • c805921refactor: use forked go-onvif library directly for ONVIF bitrate control
  • e69e2d6test: remove time.Sleep from SwapStream test
  • aeafb38refactor: resolve code review issues for SwapStream
  • f6ca546fix: send clean ONVIF SetVideoEncoderConfiguration via direct HTTP with WS-Security
  • 87a5727fix: namespace-agnostic XML parsing for ONVIF GetVideoEncoderConfiguration
  • 48f78c7fix: add debug logging for GetVideoEncoderConfiguration fallback
  • 06de710fix: retry ONVIF verify on failure instead of permanent disable
  • 9a30202refactor: add canonical wide events to ONVIF camera controller
  • 4e97bd6fix: fetch full encoder config when GetProfiles returns empty fields
  • db7f142fix: use library's device connection for ONVIF SetVideoEncoderConfiguration
  • 248143afix: use exponential backoff for ONVIF bitrate control retries
  • b5d04ccfix: reduce ONVIF backoff from 5 minutes to 30 seconds for faster recovery
  • 2742d85fix: restart recovering pipelines in route monitor
  • 156cc5cfix: start camera at 4 Mbps instead of 1 Mbps — reduce on congestion, not ramp up
  • 6d57024fix: reduce ABR stability period from 30s to 10s for faster bitrate ramp-up
  • 29da0f6fix: harden SwapStream with status guard, nil check, and codec preservation
  • 884d045fix: disable HTTP keep-alive for ONVIF requests to prevent stale connections
  • a373b51fix: use minimal SOAP body for ONVIF SetVideoEncoderConfiguration
  • 27baaa6fix: hot-swap media stream on source reconnect without tearing down SFU
  • e1eaacffix: increase ONVIF timeout to 5s and retry on EOF
  • 9bfed05fix: allow deferred SFU reconnect when media stream is nil during pipeline recovery
  • eb9c44bfix: ABR stuck at 1 Mbps — allow increases without sessions, retry ONVIF
  • 717b08bfeat: add deep modem observability — USB, interface, and signal tracking
  • 9805b12feat: add modem_check event on every 10s poll for deep modem tracking
  • 00fe79dfeat: add detailed modem recovery tracking events
  • 6628369fix: increase maxRapidICERestarts from 3 to 10 for cellular resilience
  • 89f5963fix: raise SFU health monitor RTT thresholds for cellular networks
  • 9ba16e0fix: return stale ICE server cache instead of nil on API fetch failure
  • e0b64edfix: match consumers by media type string instead of pointer on reconnect
  • dc61fabfeat: add consumer_restart_pre_check diagnostic log
  • 9d783e1test: comprehensive test coverage for InternetPrioritySwitcher
  • b8f17a6feat: auto-rollback internet priority when selected network has no internet
  • 5628dc1fix: clean up stale buildx builders before CI builds
  • ab76b7cfeat: reliable internet priority switching with InternetPrioritySwitcher
  • a3ab595fix: close stale SFU WebSocket connections before reconnecting
  • 28a8068Revert "fix: wire GCC bandwidth estimate to SFU track bandwidth limiter"
  • 43a613bfix: wire GCC bandwidth estimate to SFU track bandwidth limiter
  • d63040afix: lower keyframe-only threshold from 5x to 2x for RTSP cameras
  • d7b22d2fix: remove autoStartDefaultRoutes from hook — route monitor handles it
  • 81acfb8fix: make autoStartDefaultRoutes concurrent and non-blocking
  • 6d86f64fix: cancel stall monitor goroutine on track re-setup to prevent leak
  • 6e3259dfeat: force TCP TURN on cellular to survive LTE NAT rebinding
  • e2c6245fix: address code review — periodic callback, clear on stop, fix comments
  • 93affb6fix: propagate SFU reconnect failures to pipeline for auto-recovery
  • 8322719fix: remove dead pipelines from registry so route monitor can restart them
  • ce111c4feat: report device features in session ready for opt-in SIYI UI
  • 5feda4bfix: start routes concurrently and reduce stream wait timeout
  • 4af656dfix: re-enable force relay (symmetric LTE NAT requires TURN)
  • 6478ac3fix: disable force relay on agent for stable LTE connections
  • 3359720fix: increase SFU request timeout from 10s to 30s for LTE networks
  • 717c680chore: pin Go 1.25.5 and update skip-duplicate-actions to v5
  • dff4832perf: optimize CI pipeline — merge build+release, reduce runner contention
  • 30e17d6feat: expose LTE signal metrics (RSRP, RSRQ, SNR) via modem API

v1.2.4-dev.71

April 2, 2026

v1.2.4-dev.71

Changelog

  • 8a7b844fix: switch to keyframe-only mode when severely overbudget (>5x)
  • 0460c93fix: resolve lint errors in WebRTC session cancellation
  • 2786717fix: prevent orphaned WebRTC sessions from blocking new connections
  • c283787fix: prevent SFU publisher from getting stuck on dead media stream after RTSP reconnect
  • 0b78cb6fix: suppress gosec G115 for safe int-to-uint32 netmask conversion
  • 1b48b03fix: treat unknown current version as needing update
  • 04a53bbrefactor: make USBNetworkMonitor sole owner of USB interface lifecycle

v1.2.4-dev.70

April 2, 2026

v1.2.4-dev.70

Changelog

  • 55e90a9fix: untrack generated output.css that was breaking GoReleaser
  • 6cc0653fix: auto-update gets permanently jammed after failed apt install
  • 6d802f8fix: data race in GetOrCreateSource reading refCount after unlock
  • 7ccc2adfix: resolve lint errors for unused param and unused func
  • b06e83ffix: use debian base for CSS builder stage (Tailwind needs glibc)
  • b613f24fix: use multi-stage Docker build for cross-platform Tailwind CSS
  • f7bd643fix: use TARGETARCH for Tailwind binary in Docker cross-compilation
  • 5b0aa96perf: optimize build times across local, CI, and Docker builds
  • 610474cfix: stop route-metric-validator from destabilizing cellular bearer
  • 65b4456fix: resolve code review issues across source manager, WebRTC, and routes
  • e16ad76fix: ensure SFU routes exist at boot before starting pipelines
  • 2723f7erefactor: simplify tailscale resume connection and reduce lock scope
  • 1432cf3feat: add update_in_progress field to package status response
  • 1a3b613refactor: remove unused ActionSessionInit and ValidateAndFixRouteMetrics
  • 4d02b6ffix: detect and recover from tailscale node-not-found errors
  • 92d3948feat: add internet priority switching to prefer WiFi over cellular
  • 5248be8fix: resolve source manager lock contention and WebRTC signaling races
  • 2991c5ffix: stop SFU publisher reconnecting with stale stream after source reconnect

v1.2.4-dev.69

April 1, 2026

v1.2.4-dev.69

Changelog

  • 5848807fix: deduplicate video tracks in dynamic attach to prevent duplicate a=msid SDP lines
  • a89434fci: optimize builds for self-hosted runner

v1.2.4-dev.68

April 1, 2026

v1.2.4-dev.68

Changelog

  • 8c8d7dbfix: increase timeout for speedtest handler to 120s
  • c572e71fix: defer QMI mode switch to after stable connectivity
  • 02c074afix: use timestamp in snapshot versions for correct APT sorting
  • 429e978feat: add network speed test functionality
  • 843e955feat: auto-switch SimTech modems from PPP to QMI mode at boot
Releases - AirCast Documentation | AirCast