openclaw/docs
Peter Steinberger 75bcc5cebe
fix(ui): keep Control UI device identity working on plain-HTTP origins (#124724)
* fix(ui): keep Control UI device identity working on plain-HTTP origins

@noble/ed25519 defaults its SHA-512 provider to crypto.subtle, which
browsers gate to secure contexts, so device identity silently vanished
on http:// LAN dashboards and connects fell back to shared-credential
auth with no pairing. Wire a lazy pure-JS @noble/hashes fallback for
SHA-512 and the fingerprint SHA-256, and drop the isSecureContext gate
in the connect path. Secure contexts keep the platform digests and pay
no startup bytes: the fallback loads as its own lazy chunk, kept out of
the gateway-runtime startup chunk on purpose.

* test(ui): cover device identity minting and signing without crypto.subtle

New jsdom regression suite fails on pre-fix code (subtle-less crypto stub
with getRandomValues, which real insecure contexts keep). Rewrites the
gateway connect tests that previously asserted the device-less insecure
fallback: an insecure context now attaches a device identity.

* docs(web): plain-HTTP dashboards now pair with a device identity

The signing key never crosses the wire, so HTTP+pairing is strictly
stronger than the old HTTP token-only fallback; HTTPS (Tailscale Serve)
stays the recommendation for transport privacy.

* fix(ui): drop unnecessary boolean literal compare in secure-context timing meta

* test(ui): declare device.id on the connect-frame test shape

* test(ui): split the subtle-less scope-upgrade e2e into the two real invariants

Without crypto.subtle the browser can now sign, so the banner offers the
explicit admin upgrade; manual-only guidance is reserved for browsers that
cannot mint an identity at all (no WebCrypto RNG). Also corrects the
connect-path comment: blocked storage yields an ephemeral identity, only a
failed mint degrades device-less.

* fix(ui): address review findings on the HTTP device-identity path

- Storage-blocked pages keep one stable in-memory identity per page
  lifetime instead of minting a fresh unpaired key on every reconnect,
  and a write-rejecting store no longer fails the mint (regression tests
  bite pre-fix).
- Connect timing now reports the real browser secure-context fact via a
  shared browserSecureContext() helper instead of inferring it from
  device-identity presence.
- Docs state the accepted trusted-proxy contract: browsers attach a
  device identity on every origin, so first connects follow the standard
  pairing flow (deviceAutoApprove or a one-time approval); device-less
  admission remains only for browsers that cannot mint an identity.

* refactor(ui): trim the connect-path additions under the max-lines cap
2026-08-16 12:20:00 -07:00
..
.generated feat(slack): make presence event guidance configurable (#123875) 2026-08-15 12:02:19 -07:00
.i18n feat: portals — expose agent-run dev servers to the operator (#122536) 2026-08-13 00:46:11 -07:00
announcements
assets
automation fix: keep always within OS compatibility (#123731) 2026-08-14 17:54:42 +01:00
channels feat(slack): make presence event guidance configurable (#123875) 2026-08-15 12:02:19 -07:00
clawhub
cli fix(cli): allow hook toggles to select an agent (#124761) 2026-08-16 12:11:44 -07:00
concepts refactor(config): consolidate context budget to one per-model knob (#124665) 2026-08-16 10:05:01 -07:00
debug
diagnostics
gateway fix(ui): keep Control UI device identity working on plain-HTTP origins (#124724) 2026-08-16 12:20:00 -07:00
help feat(security): require acknowledgement for policy warnings (#116489) 2026-08-15 03:58:45 +10:00
images
install improve(plugins): compile externalized plugins in source builds (#124639) 2026-08-16 08:21:17 -07:00
maturity
nodes feat(nodes): expose installed worker bundle status (#124640) 2026-08-16 10:04:46 -07:00
plan feat(nodes): expose installed worker bundle status (#124640) 2026-08-16 10:04:46 -07:00
platforms Start new sessions with folder group defaults (#123276) 2026-08-15 15:24:13 +10:00
plugins feat(codex): show sessions from additional homes (#124660) 2026-08-16 12:14:10 -07:00
providers refactor(config): consolidate context budget to one per-model knob (#124665) 2026-08-16 10:05:01 -07:00
refactor refactor(plugin-sdk): replace API baselines with diffs (#123036) 2026-08-13 03:45:36 -07:00
reference fix: preserve Claude CLI prompt cache reuse across turns (#124300) 2026-08-15 18:17:17 -07:00
releases docs: repair spellcheck and anchor drift (#122960) 2026-08-12 20:50:56 -07:00
security
snippets/plugin-publish
specs
start fix(onboard): stop failing intentionally unstarted gateway (#123857) 2026-08-14 14:59:54 -07:00
tools docs: explain OpenRouter image route compatibility (#101367) 2026-08-15 20:41:41 +01:00
web fix(ui): keep Control UI device identity working on plain-HTTP origins (#124724) 2026-08-16 12:20:00 -07:00
agent-runtime-architecture.md
AGENTS.md
auth-credential-semantics.md feat(doctor): relocate shared auth store into state DB (#123349) 2026-08-13 17:44:02 -07:00
brave-search.md
ci.md fix(ci): prevent QA maturity scorecard timeouts (#124612) 2026-08-16 11:17:21 -07:00
CLAUDE.md
date-time.md
docs.json fix(delivery): keep failed queue rows payload-free (#123642) 2026-08-14 06:22:51 -07:00
docs_map.md
index.md
logging.md
nav-tabs-underline.js
network.md
openclaw-agent-runtime.md
perplexity.md
prose.md
style.css
tts.md
vps.md
whatsapp-openclaw.jpg