* fix: show built-in plugins as official with complete details
* fix: prevent fallback icon flashes when opening plugins
* fix: preserve command palette icons after renderer migration
* fix(plugins): correct vendor logos and remove generic blue icon tiles
Use official square artwork where available, match fallback dark plates to the
OpenClaw lobster, and remove Slack’s inset app-tile padding. Record all source
assets and the complete 159-icon audit.
Co-authored-by: Patrick-Erichsen <20157849+Patrick-Erichsen@users.noreply.github.com>
* improve(plugins): use white tiles and consistent logo insets
Normalize all 159 bundled identity icons against main 208132c299. Use standalone colored or dark artwork on opaque white, including the native mascot family. Record per-icon provenance and adaptations.
Co-authored-by: Patrick-Erichsen <20157849+Patrick-Erichsen@users.noreply.github.com>
* fix(plugins): correct requested product marks and colors
Use verified first-party assets for the requested eight branding groups, keeping the Bedrock Mantle sibling consistent. Preserve white tiles and all unrelated icon bytes. Reef shares the native lobster by request.
Co-authored-by: Patrick-Erichsen <20157849+Patrick-Erichsen@users.noreply.github.com>
---------
Co-authored-by: Patrick-Erichsen <20157849+Patrick-Erichsen@users.noreply.github.com>
## What Problem This Solves
Fixes broken characters at the end of long GitHub descriptions, comments, and file diffs in the Control UI reader when a truncation limit splits a UTF-16 surrogate pair.
## User Impact
Bounded reader text now ends on a complete character. Existing size limits and incomplete-content notices remain intact. Explicitly empty patches remain complete rather than acquiring false shortened/incomplete warnings; omitted patches remain marked unavailable. No configuration or migration is required.
## Why This Change Was Made
The GitHub detail owner now uses the existing SDK truncation helper for text and patches. An explicit undefined check preserves the distinction between empty and unavailable patches. No second renderer, cache policy, transport setting, or new helper was introduced.
## Evidence
[Inspected before/after screenshots of the actual reader](https://github.com/openclaw/openclaw/pull/153344#issuecomment-5747664285).
- Reproduced the broken body and patch characters through the registered `github.detail` Gateway RPC and real source Control UI. Corrected RPC payloads and rendered DOM contain no split surrogate at those boundaries.
- Exercised descriptions, discussion/review text and context, commit text, exact-fit and ASCII controls, aggregate patch-budget boundaries, and empty versus omitted patches. Public-only rejection and anonymous request headers stayed intact.
- Real-time cache checks preserved the complete empty-patch cache while omitted patches refreshed after the partial-cache deadline.
- 52 focused tests passed. The Unicode regression fails on original main; the explicit-empty regression fails on the original PR proposal. Scoped lint, formatting, and whitespace checks passed.
Proof used main `48bcfda392` plus the exact two-file repair, with changed-file hashes matched to this branch and actual Gateway-loaded plugin bytes captured. Only upstream GitHub was simulated through a loopback HTTP fixture: this is not live GitHub or TLS proof. Screenshot crops remove unrelated host/account UI, not reader content.
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Keep public GitHub issues, pull requests, commits, comments, images, and diffs readable beside chat in a resizable, tabbed reader. Preserve external navigation for modified clicks and explicit links.
Move GitHub transport and document mapping into the bundled plugin, and expose the passive reader through the shared plugin contract. Preserve operator plugin controls, managed-preview credential authority, anonymous detail reads, and existing host read-library behavior.
Bind responses to their requested resource, retain rapid reader opens in FIFO order, and cancel stale batches on close or session replacement. Add regression coverage and synchronize heartbeat and attachment tests with their actual completion boundaries.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>