muen-collective/muen-plugins--plugins-dsh-brand-swap0

@muen/dsh-brand-swap

White-label brand swap for DeepSeek Harness — replaces the DeepSeek mark in the sidebar and hero with a per-profile wordmark (row config) or uploaded transparent PNG logos for light and dark themes via a Settings → Brand page. Neutral defaults; every Brand OS configures its own identity.

包名
@muen/dsh-brand-swap
版本
0.1.1
最近更新
2026年9月11日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:muen-collective/muen-plugins#0b6fb6cc3f7036ddf1198558f4b8cfbff8c77d08&path:plugins/dsh-brand-swap

@muen/dsh-brand-swap

A white-label brand-swap plugin for DeepSeek Harness — it replaces the DeepSeek brand mark in the DSH sidebar and hero with a per-profile identity. Every Brand OS (mitsu, yammaman, vent, …) configures its own identity; the plugin itself ships neutral.

Two ways to set the identity (Settings → Brand page):

  1. Logo upload (v0.2) — transparent PNG logos for light and dark themes are uploaded in the Brand settings page, staged as a live preview, and applied with the Save brand button (Revert discards unsaved edits). Saved logos render in the sidebar brand seat and persist in the host settings doc across restarts.
  2. Wordmark config (v0.1)wordmark text + colors + font on the plugin row's config block (shown when no logo is uploaded).

Registers into three DSH slots:

  • sidebar.brand.mark — 24×24 square mark seat (kept neutral/empty by default)
  • sidebar.brand.name — 24 px-tall wordmark strip; a logo lockup renders here, height-capped (wide is fine, tall is not)
  • conversation.hero.brand.mark — 34×34 square next to the hero headline above the composer tagline; hidden by default (only a genuine 34 px square mark would fit — long lockups don't)

Logo upload (v0.2)

  • Settings → Brand (additive settings.section, own locale namespace in en/zh/ko/ja).
  • Two upload fields: Light theme and Dark theme (dark optional → falls back to light). Validation: image/png, ≤ 1 MB; live preview on a dark canvas (the seat these logos render on is dark, independent of the app theme); replace/remove per field.
  • Rendering: both logos are mounted in the name seat and switched with pure CSS on DSH's resolved theme attribute (body[data-ds-dark-theme]) — follows DSH's light/dark/system preference, no JS theme plumbing.
  • Saving: edits are staged locally and committed only by Save brand. Each save writes the four fields to the plugin's brand-swap settings namespace in the host settings doc (durable across restarts). The host half registers that namespace synchronously at boot (ctx.inject(['settings']) + the schemastery default export). If no host settings service is available the page keeps a localStorage mirror and visibly warns that the save is local-only — nothing edits the installed bundle.
  • Size guidance shown in the page: lockup artwork ≥ 48 px tall (2× of the 24 px render) with side padding; square marks ≥ 96 px; the render is height-capped at 24 px (sidebar) / 34 px (hero).

Neutral by default (value separation)

No client or Muen brand is baked in. Wordmark values come from the plugin row's cordis config block:

config keydefault
wordmark'' — empty means mark only (no word text)
textColorvar(--dsw-alias-label-primary)
dotColorvar(--dsw-alias-state-business-primary)
fontFamilyui-sans-serif, system-ui, sans-serif
fontSize18
fontWeight700
letterSpacing0.02em

Install

dsh plugin --profile demo add ./plugins/dsh-brand-swap

The client registers through the DSH slot registry and renders with inline styles + a small injected stylesheet, so no separate CSS pipeline is needed.

Legacy name

Before 2026-09-04 this package was authored as @muen/mitsu-brand. The app-bundled copy (installed in the Mitsumeru desktop under the old identity, row id mitsu-brand, service mitsu.brand) stays as-is until the next app release; new installs and the market artifact use @muen/dsh-brand-swap (row id brand-swap, service brand).

Do not co-install. @muen/dsh-brand-swap and the legacy @muen/mitsu-brand register the same three brand slots (sidebar.brand.mark, sidebar.brand.name, conversation.hero.brand.mark). Remounting the legacy copy while this plugin is installed double-mounts the sidebar brand seat. Mount exactly one — use @muen/dsh-brand-swap.