From d81e5e703ed162ff6335900984f8a6fbe5000781 Mon Sep 17 00:00:00 2001 From: Arvin Xu Date: Wed, 3 Jun 2026 23:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(remote-device):=20add=20client?= =?UTF-8?q?=20renders=20for=20device=20tool=20results=20(#15437)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ feat(remote-device): add client renders for listOnlineDevices and activateDevice Co-Authored-By: Claude Opus 4.8 (1M context) * πŸ› fix(utils): make SVG event-handler stripping engine-independent DOMPurify's FORBID_ATTR / SVG-profile allowlist path relies on the underlying DOM's attribute + namespace handling, which differs across engines (jsdom vs happy-dom) and DOMPurify versions β€” in some CI environments on* handlers on SVG-namespaced nodes slipped through. Add a scoped uponSanitizeAttribute hook to drop every on* attribute deterministically, and assert by security property instead of exact serialization to drop whitespace brittleness. Co-Authored-By: Claude Opus 4.8 (1M context) * πŸ› fix(remote-device): render activation failure content when no device state activateDevice returns success:false with explanatory content but no error and no state when the target is offline/unknown. The tool detail view only skips custom rendering when result.error is set, so the custom renderer's `return null` rendered a blank result. Fall back to the failure content so the user/model still sees the message. Co-Authored-By: Claude Opus 4.8 (1M context) * πŸ› fix(utils): deterministically scrub SVG on* handlers via post-pass The DOMPurify uponSanitizeAttribute hook still failed in CI: