henrygd
9a54d844ba
dev: remove noisy biome checks from package.json scripts
2026-08-16 14:26:59 -04:00
henrygd
87405c5f10
feat: add multi-battery monitoring
...
- Report battery data for individual devices
- Select a representative battery for legacy fields and alerts
- Average named battery data independently
- Display multiple batteries in system charts
- Add cross-platform coverage and transport tests
2026-08-16 13:52:29 -04:00
Miłosz Kolber and GitHub
bfa6a1e361
feat(agent): monitor Intel Arc (xe) GPUs via nvtop ( #2223 )
...
intel_gpu_top does not support the xe driver, so skip it for xe devices
and let the existing nvtop last-resort collector handle them. nvtop leaves
device_name unset on xe, so name the GPU from its PCI device id ("Intel GPU
(<id>)"). Adds nvtop to the Intel agent image (gputop already ships with
igt-gpu-tools).
2026-08-16 11:41:28 -04:00
T.J. Tarazevits and GitHub
3688b2d033
Add Intel sysfs GPU power collector (Xe/i915 hwmon energy counters) ( #2020 )
2026-08-16 11:20:43 -04:00
mhlas7 and GitHub
b4e1f3fafe
fix(install): detect rc.conf.d override that blocks FreeBSD service start and restart ( #2219 )
...
* fix(install): detect rc.conf.d override that blocks FreeBSD service start
* fix log file removal
2026-08-15 16:16:33 -04:00
eebcd56462
feat: fan RPM monitoring ( #2032 )
...
Adds fan RPM monitoring as a peer to the existing temperature collection, addressing #1918 .
---------
Co-authored-by: henrygd <hank@henrygd.me >
2026-08-15 15:59:07 -04:00
eb5dd230cf
fix(hub): remove stale smart_devices records when a drive is no longer reported ( #2178 )
...
* Fix duplicate /dev/sdg-style entries
* only prune devices after complete refreshes
---------
Co-authored-by: henrygd <hank@henrygd.me >
2026-08-15 13:40:30 -04:00
henrygd
3337dff64b
ui: possible fix for android bitwarden autofill ( #1011 )
2026-08-15 12:18:26 -04:00
b68acea5a8
fix(agent): show all IP:port mappings for containers bound to multiple IPs ( #1993 )
...
* feat: support multiple docker ips
* deduplicate wildcard docker bindings
---------
Co-authored-by: henrygd <hank@henrygd.me >
2026-08-15 11:50:20 -04:00
henrygd
66ac62a125
vulncheck: update actions/setup-go to use go-version: stable
...
https://github.com/actions/setup-go/blob/main/docs/advanced-usage.md#using-the-go-version-input
2026-08-14 19:44:11 -04:00
henrygd
e2a18ec636
deps: update go version to fix vulncheck workflow
2026-08-14 19:37:08 -04:00
henrygd
ffd4fc2c45
test(ghupdate): align missing checksum digest error expectation
2026-08-14 19:34:42 -04:00
henrygd
052489cada
ghupdate: add checksum verification and extraction path containment guard
2026-08-14 19:23:08 -04:00
Yvan Wang and GitHub
d50c09176f
fix(agent): honor explicit SMART_DEVICES type hint instead of scan-detected type ( #2102 )
...
When SMART_DEVICES specifies an explicit type (e.g. /dev/sda:scsi), the
agent resolved the device type correctly but smartctlArgs dropped the -d
flag for scsi/ata (the #1345 scan-misdetection workaround), so smartctl
re-detected the wrong type (sat) and collection failed on USB drives
whose bridge does not support SAT passthrough.
Mark types that come from an explicit SMART_DEVICES hint and always pass
them through via -d, while still letting scan-detected scsi/ata
auto-detect as before. Adds regression tests for the arg building, the
full parse -> merge -> args path, and flag preservation across rescans.
Fixes #2072
2026-08-14 14:13:33 -04:00
mhlas7 and GitHub
fe84cfa16d
Implement OPNsense boot hook for Beszel Agent ( #2089 )
...
Add OPNsense boot hook for Beszel Agent startup
2026-08-14 13:21:15 -04:00
Lars Lehtonen and GitHub
6d0b83f6de
fix(cron): log CreateLongerRecords errors ( #1926 )
...
chore(cron): comment cron tasks with pocketbase warning
2026-08-14 10:40:28 -04:00
Vito Cappello and GitHub
cf90249519
Clamp Linux battery capacity percentage ( #1957 )
2026-08-14 10:17:38 -04:00
Sven van Ginkel and GitHub
6607d4c0d6
fix(hub): check X-Real-IP header to resolve agent's real source IP ( #1973 )
2026-08-14 10:13:26 -04:00
henrygd
bc55e249c4
ui: visually truncate public key on tokens settings page
2026-08-14 10:06:24 -04:00
Sven van Ginkel and GitHub
977826e8f3
feat(hub): show public key in universal token settings ( #2028 )
2026-08-14 10:04:40 -04:00
henrygd
8450b40e0c
fix: tests that were not compatible w/ new pocketbase version
2026-08-14 00:20:45 -04:00
henrygd
ac4436bea3
fix(tests): align error message after merging #2011
2026-08-13 19:27:33 -04:00
Sven van Ginkel and GitHub
fa5cda83c2
fix(agent): validate HUB_URL host to prevent misleading "lookup api" DNS error ( #2011 )
2026-08-13 19:25:12 -04:00
Sven van Ginkel and GitHub
35af36fbd2
bug: fix docker memory chart ( #2027 )
2026-08-13 19:21:40 -04:00
Sven van Ginkel and GitHub
e380ab6917
fix(ui): prevent usage bars from overflowing card border in grid view ( #2064 )
2026-08-13 19:18:43 -04:00
TowyTowy and GitHub
c3a432101b
fix(hub): re-dial SSH-pull agents when a connection silently dies ( #2126 )
...
The per-system updater reused an SSH client across ticks and ran the data
exchange with no deadline. If a connection went half-open (dead peer that
never sends RST/FIN) or an agent accepted the session but never wrote a
response, the read in fetchDataViaSSH blocked forever. Because
StartUpdater calls update() synchronously on its ticker, a blocked read
froze the whole per-system goroutine: the ticker's subsequent ticks were
dropped, no error was returned so the system stayed "up", and the agent
was never re-dialed until the hub process restarted.
Bound each SSH data exchange with sshOperationTimeout via runWithTimeout:
on timeout the connection is torn down (unwinding the blocked read) and a
retryable error is returned, so the next tick re-dials. Also enable TCP
keep-alive on dialed connections as a backstop for genuine network death.
Fixes #2041
2026-08-13 19:04:38 -04:00
98e86b4c9c
fix(agent): treat a backwards container CPU counter as a new baseline ( #2205 )
...
CalculateCpuPercentLinux subtracted the stored previous counters from the
current ones without checking direction. When a stats response is processed
after a newer one for the same container, or an accounting counter resets,
the current total reads lower and the unsigned subtraction wraps to ~2^64
instead of going negative.
On the container counter that surfaces as the reported error, and the sample
is discarded along with the container's network stats:
cpu pct greater than 100: 1.15292150348562e+13
On the system counter it is quieter and worse: the wrapped value inflates the
divisor, so the percentage collapses toward zero and is stored as a healthy
sample rather than rejected. A synthetic rollback measures 2.7e-12 percent.
Both directions are now treated as a new baseline (0% for one sample), which
matches how the function already handles the first-run case.
CalculateCpuPercentWindows had the same unguarded subtraction and is fixed
the same way.
Fixes #2149
Co-authored-by: Ryan Chou <ryanchou1994@users.noreply.github.com >
2026-08-13 18:14:30 -04:00
henrygd and Sven van Ginkel
d40372842b
fix(agent): guard against unsigned underflow in memory calculations ( closes #1978 )
...
Extract host memory derivation into calculateHostMemoryUsage and use
saturating subtraction to prevent uint64 underflow caused by race
conditions when reading /proc/meminfo. Also ensure UsedPercent guards
against division by zero.
Co-authored-by: Sven van Ginkel <svenvanginkel@icloud.com >
2026-08-13 17:06:10 -04:00
Rajkumar and GitHub
c9b6279e61
feat(agent): add arm64 to beszel-agent-nvidia platform matrix ( #2207 )
2026-08-11 18:10:36 -04:00
Sven van Ginkel and GitHub
9887b662ad
fix(hub): refresh system details on agent reconnect ssh ( #2086 )
2026-08-11 18:08:18 -04:00
Kobi Hikri and GitHub
71bc6f9b9f
ci: attach provenance and SBOM attestations to the published images ( #2159 )
...
* ci: attach provenance and SBOM attestations to the published images
* ci: restore trailing newline at end of file
2026-08-11 18:04:39 -04:00
87468965dc
chore(deps): bump docker/metadata-action from 5 to 6 ( #2201 )
...
Bumps [docker/metadata-action](https://github.com/docker/metadata-action ) from 5 to 6.
- [Release notes](https://github.com/docker/metadata-action/releases )
- [Commits](https://github.com/docker/metadata-action/compare/v5...v6 )
---
updated-dependencies:
- dependency-name: docker/metadata-action
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 17:56:29 -04:00
db0da58ac8
chore(deps): bump docker/login-action from 3 to 4 ( #2202 )
...
Bumps [docker/login-action](https://github.com/docker/login-action ) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases )
- [Commits](https://github.com/docker/login-action/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: docker/login-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 17:49:49 -04:00
b9b3a23063
chore(deps): bump actions/setup-dotnet from 4 to 6 ( #2203 )
...
Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet ) from 4 to 6.
- [Release notes](https://github.com/actions/setup-dotnet/releases )
- [Commits](https://github.com/actions/setup-dotnet/compare/v4...v6 )
---
updated-dependencies:
- dependency-name: actions/setup-dotnet
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 17:49:28 -04:00
ac34e58113
chore(deps): bump actions/checkout from 4 to 7 ( #2200 )
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v4...v7 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 17:48:24 -04:00
3c8703d1c0
chore(deps): bump actions/stale from 10 to 11 ( #2199 )
...
Bumps [actions/stale](https://github.com/actions/stale ) from 10 to 11.
- [Release notes](https://github.com/actions/stale/releases )
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/stale/compare/v10...v11 )
---
updated-dependencies:
- dependency-name: actions/stale
dependency-version: '11'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 17:48:11 -04:00
Sven van Ginkel and GitHub
01efba50a5
fix(agent): remove unsynchronized hubVersions cache causing concurrent map write panic ( #2153 )
2026-08-11 17:14:59 -04:00
henrygd
d0453f1ca6
update go version and packages
2026-08-11 16:53:23 -04:00
Quadrubo and GitHub
7ffc6e81ce
fix(agent): prevent a malformed Docker response from permanently breaking container stats ( #2066 )
...
decode() reused a single json.Decoder across responses. Once a decode errored on a truncated or malformed body (e.g. a container removed mid-request), the decoder stayed desynced and every subsequent decode failed, silently stopping all container stats until the agent was restarted. Decode the buffered bytes with json.Unmarshal instead, which keeps the reusable read buffer but holds no cross-call state.
Regression from d67d638 .
2026-08-11 16:40:24 -04:00
Pavel Artsishevsky and GitHub
1aa9fcd31d
Fixes redirect-based OAuth login when OAUTH_DISABLE_POPUP=true is set ( #2171 )
...
Switch to localStorage, which is shared across all tabs/windows of the
same origin. Also clean up the stored entry and strip the callback URL
on both success and failure paths.
2026-08-11 16:33:05 -04:00
Vito Cappello and GitHub
bd52134558
fix(agent): don't warn on mdraid consistency checks ( #2067 )
2026-08-11 15:50:58 -04:00
Anikesh Thakur and GitHub
3fac02f0c0
fix: start agent after pfSense reboot ( #2214 )
2026-08-11 15:44:27 -04:00
e4c0522cae
chore(deps): bump github.com/ebitengine/purego from 0.10.0 to 0.10.2 ( #2191 )
...
Bumps [github.com/ebitengine/purego](https://github.com/ebitengine/purego ) from 0.10.0 to 0.10.2.
- [Release notes](https://github.com/ebitengine/purego/releases )
- [Commits](https://github.com/ebitengine/purego/compare/v0.10.0...v0.10.2 )
---
updated-dependencies:
- dependency-name: github.com/ebitengine/purego
dependency-version: 0.10.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:30:38 -04:00
f2ccaacecb
chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.3 to 4.26.7 ( #2189 )
...
Bumps [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil ) from 4.26.3 to 4.26.7.
- [Release notes](https://github.com/shirou/gopsutil/releases )
- [Commits](https://github.com/shirou/gopsutil/compare/v4.26.3...v4.26.7 )
---
updated-dependencies:
- dependency-name: github.com/shirou/gopsutil/v4
dependency-version: 4.26.7
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:30:29 -04:00
a81ce14046
chore(deps): bump docker/setup-qemu-action from 3 to 4 ( #2188 )
...
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action ) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases )
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:29:47 -04:00
6e4a2c8a3d
chore(deps): bump docker/build-push-action from 5 to 7 ( #2190 )
...
Bumps [docker/build-push-action](https://github.com/docker/build-push-action ) from 5 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases )
- [Commits](https://github.com/docker/build-push-action/compare/v5...v7 )
---
updated-dependencies:
- dependency-name: docker/build-push-action
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:29:36 -04:00
8cf39be6ef
chore(deps): bump github.com/lxzan/gws from 1.9.1 to 1.10.1 ( #2193 )
...
Bumps [github.com/lxzan/gws](https://github.com/lxzan/gws ) from 1.9.1 to 1.10.1.
- [Release notes](https://github.com/lxzan/gws/releases )
- [Commits](https://github.com/lxzan/gws/compare/v1.9.1...v1.10.1 )
---
updated-dependencies:
- dependency-name: github.com/lxzan/gws
dependency-version: 1.10.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:28:56 -04:00
146ca4284c
chore(deps): bump actions/setup-go from 5 to 7 ( #2192 )
...
Bumps [actions/setup-go](https://github.com/actions/setup-go ) from 5 to 7.
- [Release notes](https://github.com/actions/setup-go/releases )
- [Commits](https://github.com/actions/setup-go/compare/v5...v7 )
---
updated-dependencies:
- dependency-name: actions/setup-go
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:28:35 -04:00
6eae195d9c
chore(deps): bump klaasnicolaas/action-inactivity-lock ( #2194 )
...
Bumps [klaasnicolaas/action-inactivity-lock](https://github.com/klaasnicolaas/action-inactivity-lock ) from 1.1.3 to 2.0.1.
- [Release notes](https://github.com/klaasnicolaas/action-inactivity-lock/releases )
- [Commits](https://github.com/klaasnicolaas/action-inactivity-lock/compare/v1.1.3...v2.0.1 )
---
updated-dependencies:
- dependency-name: klaasnicolaas/action-inactivity-lock
dependency-version: 2.0.1
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:28:22 -04:00
30bf65991b
chore(deps): bump github.com/fxamacker/cbor/v2 from 2.9.0 to 2.9.2 ( #2195 )
...
Bumps [github.com/fxamacker/cbor/v2](https://github.com/fxamacker/cbor ) from 2.9.0 to 2.9.2.
- [Release notes](https://github.com/fxamacker/cbor/releases )
- [Commits](https://github.com/fxamacker/cbor/compare/v2.9.0...v2.9.2 )
---
updated-dependencies:
- dependency-name: github.com/fxamacker/cbor/v2
dependency-version: 2.9.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 18:28:14 -04:00