Peter Steinberger
d05c8eb912
refactor: unify SSRF hostname/ip precheck and add policy regression
2026-02-19 10:25:31 +01:00
Peter Steinberger
b4792c7362
style: format fs-safe and web media
2026-02-19 09:25:12 +00:00
Peter Steinberger
bf3f8ec428
refactor(media): unify safe local file reads
2026-02-19 10:21:20 +01:00
Peter Steinberger
b4dbe03298
refactor: unify restart gating and update availability sync
2026-02-19 10:00:41 +01:00
Peter Steinberger
d51929ecb5
fix: block ISATAP SSRF bypass via shared host/ip guard
2026-02-19 09:59:47 +01:00
orlyjamie
2ddc13cdb7
feat(ui): add update warning banner to control dashboard
...
SecurityScorecard's STRIKE research recently identified over 40,000
exposed OpenClaw gateway instances, with 35.4% running known-vulnerable
versions. The gateway already performs an npm update check on startup
and compares against the registry every 24 hours — but the result is
only logged to the server console. The control UI has zero visibility
into whether the running version is outdated, which means operators
have no idea they're exposed unless they happen to read server logs.
OpenClaw's user base is broadening well beyond developers who live in
terminals. Self-hosters, small teams, and non-technical operators are
deploying gateways and relying on the control dashboard as their
primary management interface. For these users, security has to be
surfaced where they already are — not hidden behind CLI output they
will never see. Making version awareness frictionless and actionable
is a prerequisite for reducing that 35.4% number.
This PR adds a sticky red warning banner to the top of the control UI
content area whenever the gateway detects it is running behind the
latest published version. The banner includes an "Update now" button
wired to the existing update.run RPC (the same mechanism the config
page already uses), so operators can act immediately without switching
to a terminal.
Server side:
- Cache the update check result in a module-level variable with a
typed UpdateAvailable shape (currentVersion, latestVersion, channel)
- Export a getUpdateAvailable() getter for the rest of the process
- Add an optional updateAvailable field to SnapshotSchema (backward
compatible — old clients ignore it, old servers simply omit it)
- Include the cached update status in buildGatewaySnapshot() so it
is delivered to every UI client on connect and reconnect
UI side:
- Add updateAvailable to GatewayHost, AppViewState, and the app's
reactive state so it flows through the standard snapshot pipeline
- Extract updateAvailable from the hello snapshot in applySnapshot()
- Render a .update-banner.callout.danger element with role="alert"
as the first child of <main>, before the content header
- Wire the "Update now" button to runUpdate(state), the same
controller function used by the config tab
- Use position:sticky and negative margins to pin the banner
edge-to-edge at the top of the scrollable content area
2026-02-19 09:43:45 +01:00
Peter Steinberger
ab924eb522
test(infra): dedupe outbound recovery test scaffolding
2026-02-19 08:25:12 +00:00
Peter Steinberger
4e5cffe4c9
test: fix flaky run-node spawn side-effects
2026-02-19 08:24:55 +00:00
Peter Steinberger
18d4ad6aab
test: trim duplicate cross-context policy cases
2026-02-19 07:50:38 +00:00
Peter Steinberger
ca71b5cc51
test(shell-env): dedupe repeated login-shell path lookups
2026-02-19 07:50:10 +00:00
Peter Steinberger
8d7df30ee0
test: remove duplicate target-resolution cases from outbound suite
2026-02-19 07:47:17 +00:00
Peter Steinberger
192366e0e8
test: dedupe shell env coverage from infra runtime suite
2026-02-19 07:21:26 +00:00
Peter Steinberger
c37cf02f29
test: make shell env path cache tests platform deterministic
2026-02-19 07:02:33 +00:00
vikpos
f855d0be4f
fix: skip heartbeat when HEARTBEAT.md does not exist ( #20461 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: f6e5f8172a334e2455ace5e93037e31567247271
Co-authored-by: vikpos <24960005+vikpos@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-02-19 01:09:33 -05:00
Peter Steinberger
a376605812
refactor(infra): dedupe APNs send context setup
2026-02-18 23:48:32 +00:00
Peter Steinberger
281e9110cc
test: table-drive format-time timestamp assertions
2026-02-18 23:30:31 +00:00
Peter Steinberger
6cbd00a3c6
test: simplify invalid-input fallback assertions in format-time
2026-02-18 22:51:01 +00:00
Peter Steinberger
3128bd2854
test: dedupe non-matching unhandled rejection cases
2026-02-18 22:42:39 +00:00
Peter Steinberger
b4cba304e2
refactor(outbound): reuse required channel/plugin resolution
2026-02-18 22:40:26 +00:00
Peter Steinberger
a117e9fed6
refactor(outbound): share plugin send/poll dispatch path
2026-02-18 22:40:25 +00:00
Peter Steinberger
6dd868f07e
perf(test): trim bonjour watchdog post-stop timer advance
2026-02-18 22:26:27 +00:00
Peter Steinberger
48b0b55fa4
test: make shell-env cache assertions windows-safe
2026-02-18 21:51:08 +00:00
Mariano
e67da1538c
iOS/Gateway: wake disconnected iOS nodes via APNs before invoke ( #20332 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 7751f9c5311484ce05ab9529b450b7937646c68f
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-02-18 21:00:17 +00:00
Mariano
99d099aa84
Gateway: add APNs push test pipeline ( #20307 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 6a1c4422079b075fb7900890fa09819f41aee8b1
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-02-18 19:32:42 +00:00
Peter Steinberger
b73a2de9f6
refactor(infra): reuse shared home prefix expansion
2026-02-18 17:48:02 +00:00
Peter Steinberger
0a78331536
refactor(infra): share shell env timeout normalization
2026-02-18 17:23:44 +00:00
Peter Steinberger
0d25b6a317
perf(test): remove fixed sleeps in async test flows
2026-02-18 17:20:35 +00:00
Peter Steinberger
f05395ae00
refactor(test): share internal hook and npm pack assertions
2026-02-18 17:01:22 +00:00
Peter Steinberger
72a4d83334
perf(test): use microtask wait in fetch rejection test
2026-02-18 16:50:05 +00:00
Peter Steinberger
2b8f1bade0
refactor(archive): share archive path safety helpers
2026-02-18 16:48:35 +00:00
Peter Steinberger
d77dcebcb1
perf(test): replace timeout ticks with microtask waits
2026-02-18 16:23:55 +00:00
Peter Steinberger
7648f6bb00
perf(test): fake abort timer and dedupe slack thread cases
2026-02-18 16:14:07 +00:00
Mariano
1437ed76a0
Gateway/CLI: add paired-device remove and clear flows ( #20057 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 26523f8a38148073412cf24590176be9a6ab1237
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-02-18 13:27:31 +00:00
Peter Steinberger
3c886ee98b
test(infra): dedupe update-runner fixture setup
2026-02-18 12:04:32 +00:00
Taras Lukavyi
d833dcd731
fix(telegram): cron and heartbeat messages land in wrong chat instead of target topic ( #19367 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: bf02bbf9cec2aacbc909905fad90450cc7d921ec
Co-authored-by: Lukavyi <1013690+Lukavyi@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
2026-02-18 15:31:01 +05:30
Gustavo Madeira Santana
7ea7b7e7af
Infra: unify git root discovery
2026-02-18 00:45:43 -05:00
Peter Steinberger
112f8250fc
test: dedupe registry/session tests and add install source coverage
2026-02-18 05:05:04 +00:00
Gustavo Madeira Santana
07fdceb5fd
refactor: centralize presence routing and version precedence coverage ( #19609 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 10d9df5263f5e14712fa4f9f62b7a686dc55e6ae
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-02-18 00:02:51 -05:00
Peter Steinberger
a69e7682c1
refactor(test): dedupe channel and monitor action suites
2026-02-18 04:49:22 +00:00
Peter Steinberger
31f83c86b2
refactor(test): dedupe agent harnesses and routing fixtures
2026-02-18 04:49:22 +00:00
Peter Steinberger
8a9fddedc9
refactor: extract shared install and embedding utilities
2026-02-18 04:49:22 +00:00
Gustavo Madeira Santana
4d3403b7ac
chore: fix CI errors
2026-02-17 23:46:40 -05:00
Peter Steinberger
adac9cb67f
refactor: dedupe gateway and scheduler test scaffolding
2026-02-18 04:04:14 +00:00
Peter Steinberger
ac0db68235
refactor(security): extract safeBins trust resolver
2026-02-18 05:01:31 +01:00
Peter Steinberger
e8154c12e6
refactor(net): table-drive embedded IPv6 decoding and SSRF tests
2026-02-18 04:57:08 +01:00
Peter Steinberger
28bac46c92
fix(security): harden safeBins path trust
2026-02-18 04:55:31 +01:00
Peter Steinberger
442fdbf3d8
fix(security): block SSRF IPv6 transition bypasses
2026-02-18 04:53:09 +01:00
Peter Steinberger
b8b43175c5
style: align formatting with oxfmt 0.33
2026-02-18 01:34:35 +00:00
Peter Steinberger
31f9be126c
style: run oxfmt and fix gate failures
2026-02-18 01:29:02 +00:00
Peter Steinberger
6dcc052bb4
fix: stabilize model catalog and pi discovery auth storage compatibility
2026-02-18 02:09:40 +01:00