Releases
Download the latest AirCast Raspberry Pi images and view version history.
v1.2.3-stage.9
Latest
May 3, 2026v1.2.3-stage.9
Changelog
- •35f176eci: add debug output for GPG key visibility in aptly step
v1.2.3-stage.7
May 3, 2026v1.2.3-stage.7
Changelog
v1.2.3-stage.6
May 3, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.2.3-stage.11
Changelog
- •b755a32ci: prevent fleet notification curl errors from failing the release
v1.2.3-stage.10
May 3, 2026v1.2.3-stage.10
Changelog
- •e1bf6f1ci: install aptly from Ubuntu repos instead of ancient aptly.info
v1.2.4-dev.83
May 1, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.2.4-dev.79
Changelog
v1.2.4-dev.78
April 21, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.2.4-dev.74
Changelog
v1.2.4-dev.73
April 5, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.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, 2026v1.2.4-dev.69
Changelog
v1.2.4-dev.68
April 1, 2026v1.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
On This Page