Features
-
dgw,agent: agent self update and scheduled updates (#1726) (541abfeed2) (ARC-447) (DGW-371)
- Devolutions Agent self-update using shim executable.
- Scheduled updates.
/jet/updateendpoint improvements (moved params to request body, deprecated query param).- New
/jet/update/scheduleendpoint for controlling on-machine update scheduling. - New GET endpoints for both
/jet/updateand/jet/update/schedule. Agent now provides newupdate_status.jsonfor querying product update and schedule status.
Bug Fixes
-
jetsocat:
--log-termwas logging to stdout instead of stderr (48242abb7e)The
--log-termflag was routing log output through stdout, polluting the MCP stdio JSON-RPC channel and any other stdout-based protocol. Fixed to use stderr, which is the correct descriptor for diagnostic output. -
jetsocat: always send JSON-RPC message on MCP proxy backend disconnect (5a124c6c4b)
When the backend MCP process disconnects, the proxy now always sends a protocol-level message to the client before exiting, instead of silently closing the stdio channel:
SendError::Fatal(write to broken backend): JSON-RPC error response (-32099) with the pending request id.ReadError::Fatalwith a pending request: JSON-RPC error response (-32099) so the client can correlate it with the outstanding request.ReadError::Fatalwith no pending request: a$/proxy/serverDisconnectednotification so the client is informed even without an active request.
-
jetsocat: properly JSON-escape error details in MCP proxy JSON-RPC error responses (e4052b2709)
-
dgw: report disk space when recording dir does not exist yet (#1746) (10c9cd0d77) (DGW-372)
When the recording folder has not been created yet,
GetDiskFreeSpaceExW/statvfsfailed with OS error 3 because the path did not exist, causingrecording_storage_total_spaceandrecording_storage_available_spaceto be absent from the heartbeat response. Fix by walking up to the nearest existing ancestor before querying disk space. -
dgw: add warn logs to shadow recording error paths (#1749) (773104086f) (DGW-373)
Added
warn!logs to all 4InternalError(close code 4002) branches in theshadow_recordinghandler. Previously, these error paths silently closed the WebSocket with no diagnostic output, making production debugging nearly impossible. -
dgw: resolve WER APIs dynamically to support Windows Server 2016 (#1751) (7fe1038225) (DGW-368)
WerRegisterExcludedMemoryBlockis absent fromwer.dllon Windows Server 2016 RTM (NT 10.0.14393). The static import introduced in v2026.1.1 caused the Windows loader to refuse startingDevolutionsGateway.exeon those hosts. Replaced with runtime resolution viaGetModuleHandleW/GetProcAddress, cached in aOnceLock. The binary now starts on any Windows 10/Server 2016 build and silently skips WER dump exclusion when the API is unavailable. -
agent: configure features correctly during silent install by passing feature states via CustomActionData (108d2efdfb) (DGW-374)
-
agent: propagate registry open errors during agent install detection (14295159) (DGW-375)
-
dgw: overhaul Linux RPM/DEB packaging (#1747) (a18e6b92d2) (DGW-366)
RPM: bundle the systemd unit file directly (eliminating the
service registercall), ship a systemd preset file so the service is enabled on fresh RHEL/Rocky install, usesystemd-rpm-macrosfor correct lifecycle semantics, fixprerm/postrmscripts, harden config directory permissions to 750. DEB: mirror RPM service lifecycle semantics (enable on fresh install but do not start; try-restart on upgrade), harden config directory permissions to 750, addDescription=to unit file. Both packages print a post-install message directing the admin to configure and start the service.