Skip to content

dsh-brand-custom

Verified

@joyapple/dsh-brand-custom · v1.0.2 · MIT · Web UI

DSH 品牌定制插件:可配置的英雄区标语(hero.headline / hero.preview)与品牌 logo 替换。Brand customization plugin: configurable hero slogan and logo.

Install

dsh plugin add @joyapple/dsh-brand-custom

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Creators

Readme

dsh-brand-custom

DSH 品牌定制插件:可配置的英雄区标语(大标题 / 副标题)与品牌 logo(上传或替换)。 Brand customization plugin: configurable hero slogan and logo.

功能

  • Logo 替换:把 DSH 界面里的 FishLogo(鱼图标)和 BrandWordmark(品牌字标) 全部替换为你的 logo(优先设置页上传的图片,未上传时用插件自带 assets/logo.png)。
  • Logo 在线设置:在 DSH 设置页「品牌定制」区块直接上传 PNG / JPEG / WebP 图片(≤ 2MB),保存即生效,无需改文件;也可一键「恢复默认」。
  • 英雄区大标题:替换「您的AI工作伙伴」/「Into the Unknown」。
  • 英雄区副标题:替换「叮当莱斯 AI」/「DDLS AI」。
  • favicon:浏览器标签页图标跟随当前 logo(/brand/logo.png)。

工作原理

双面插件(host + client):

  • host 半区(lib/index.js)注册三条 HTTP 路由:
    • GET /brand/config → 返回当前品牌文案配置 JSON(headline / preview, 不含 logo —— logo 走下面的独立路由,避免每次页面加载都传几 MB base64)
    • GET /brand/logo.png → 返回当前 logo(设置里上传的优先,否则 assets/logo.png
    • POST /brand/api → 设置 RPC(settings.get / settings.update,请求体上限 4MB)
  • client 半区(client/client.js)在浏览器里做 CSS 覆盖: 找到 viewBox="0 0 23.16 17.04"(FishLogo)和 viewBox="0 0 182 24" (BrandWordmark)的 svg 后,不删除 svg 节点(删除 React 管理的节点会让 React 下次重渲染抛 NotFoundError、整个界面白屏),而是隐藏 svg 内部绘制、 把 logo 作为背景图画在 svg 元素自身上;React 重渲染只会重建这些 svg, 观察器会重新覆盖,界面保持稳定。文案替换同理,并加了防死循环与 请求帧合并(rAF)节流,避免每次 DOM 变化都全文档扫描。
  • 文案与 logo(base64 data URL)都存进 DSH 用户设置(dsh-settings), 重启不丢,并可在设置页编辑。

安装

把本目录放进 profile 的 node_modules 并加入 bundle 栈:

# 在 profile 目录里(例如 ~/.dsh/profiles/web)
cd ~/.dsh/profiles/web
npm install --install-links /Users/joyapple/Desktop/ddagent/dsh-brand-custom

注意:请使用 --install-links(安装为真实拷贝而不是符号链接), 否则插件内部依赖(@deepseek-ai/schemastery 等)无法解析,DSH 启动会失败。

故障排查:如果重启 DSH 时启动直接崩溃,报 Cannot find package '@deepseek-ai/schemastery' imported from <插件目录>/lib/index.js,说明插件被装成了符号链接(常见于直接 npm install <文件夹路径> 而未加 --install-links,或 npm 把本地路径 解析成链接)。解决:从 profile 的 node_modules 删除 dsh-brand-custom 条目,再重新 npm install --install-links /Users/joyapple/Desktop/ddagent/dsh-brand-custom。 验证方法:ls -la <profile>/node_modules/ | grep brand,应显示为普通目录 而不是 -> 符号链接。

然后在 profile 的 package.json 里把 dsh-brand-custom 加进 dsh.profile.bundles(或在 cordis.patch.yml 里手动 insert):

{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-brand-custom"
      ]
    }
  }
}

重启 DSH 后生效。

在设置页配置(推荐)

重启后在 DSH 设置页找到「品牌定制」区块:

  • 英雄区大标题 / 副标题:留空 = 保持 DSH 默认文案
  • Logo 图片:点击「上传图片」选择 PNG / JPEG / WebP(≤ 2MB), 保存后界面 logo 与浏览器标签页图标都会切换;「恢复默认」回到插件自带 logo
  • 点「保存」后稍等片刻生效(页面刷新更稳妥)

配置文案(可选,作为默认值)

在 profile 的 cordis.yml / cordis.patch.yml 里给插件写配置:

- id: dsh-brand-custom
  config:
    headline: "你的品牌大标题"
    preview: "你的品牌副标题"

用户未在设置页覆盖时使用这些默认值。

更换自带 logo(兜底方案)

直接替换 assets/logo.png(保持同名),重新安装(npm install --install-links ...) 并重启 DSH 即可;未在设置页上传图片时使用它。

开发说明

  • client 包格式与官方 client 插件一致:window.__ModuleLoader__.load({ id, factory })
  • 如需重新构建 client,参考 dshmarket 的 tsdown 构建方式;本插件 client 为手写零依赖。