🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

蓝色大肥鱼 qaz040619/dsh-bluefatfish

DeepSeek Harness
qaz04061936 天前有提交已提供中文文档扫描:含敏感能力

大肥鱼

29.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/8 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add qaz040619/dsh-bluefatfish
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 9 处,展示前 8 条)
  • 读取本地文件
    build.mjs:31
    if (existsSync(join(repoTheme, 'skin.css'))) {
  • 读取本地文件
    build.mjs:35
    if (existsSync(join(devTheme, 'skin.css'))) {
  • 读取本地文件
    build.mjs:54
    if (!existsSync(path)) throw new Error('缺少输入文件:' + path)
  • 读取本地文件
    build.mjs:55
    return readFileSync(path)
  • 读取本地文件
    build.mjs:116
    if (!existsSync(OUT)) {
  • 读取本地文件
    build.mjs:121
    const current = readFileSync(OUT, 'utf8')
  • 写入本地文件
    build.mjs:129
    mkdirSync(dirname(OUT), { recursive: true })
  • 写入本地文件
    build.mjs:130
    writeFileSync(OUT, out, 'utf8')
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
蓝色大肥鱼 · DSH 深海皮肤 DeepSeek Harness Web 界面的一整套深海皮肤:主题令牌层 + 背景两层 + 侧栏大字标开关 + 运行状态文案轮播。 它是一个常驻客户端插件(不是动态插件):刷新页面、重启 DSH 之后皮肤都还在。 总览 装 方式一:直接从 GitHub 装(推荐) dsh plugin --profile web add github:qaz040619/dsh-bluefatfish 方式二:下载 Release 里的 tgz 再装 dsh plugin --profile web add "/你的路径/dsh-blue-fat-fish-1.0.1.tgz" 装完 重启 DSH。左上角会出现鲸鱼娘贴纸 + 渐变「蓝色大肥鱼」大字标,背景换成海面。 卸载:dsh plugin --profile web remove dsh-blue-fat-fish,再重启。 桌面端(Electron)卸载时多做一步:桌面 profile 的 cordis.patch.yml 里可能有一条 - id: locale / config: preference: zh-whale(动态插件时代留下的语言偏好)。这门语言由本插件提供,插件卸了它就成了指向不存在语言的偏好 —— 记得把那条一起删掉。
展开完整文档(README 剩余 1 节)
蓝色大肥鱼 · DSH 深海皮肤

DeepSeek Harness Web 界面的一整套深海皮肤:主题令牌层 + 背景两层 + 侧栏大字标开关 + 运行状态文案轮播。
它是一个常驻客户端插件(不是动态插件):刷新页面、重启 DSH 之后皮肤都还在。

总览

装

方式一:直接从 GitHub 装(推荐)
dsh plugin --profile web add github:qaz040619/dsh-bluefatfish

方式二:下载 Release 里的 tgz 再装
dsh plugin --profile web add "/你的路径/dsh-blue-fat-fish-1.0.1.tgz"

装完 重启 DSH。左上角会出现鲸鱼娘贴纸 + 渐变「蓝色大肥鱼」大字标,背景换成海面。
卸载:dsh plugin --profile web remove dsh-blue-fat-fish,再重启。

桌面端(Electron)卸载时多做一步:桌面 profile 的 cordis.patch.yml 里可能有一条
- id: locale / config: preference: zh-whale(动态插件时代留下的语言偏好)。这门语言由本插件提供,插件卸了它就成了指向不存在语言的偏好 —— 记得把那条一起删掉。

profile 名按你自己的填(多数人是 web,桌面端是 desktop);dsh plugin 只是个 pnpm 转发器,它会自己把本包加进 dsh.profile.bundles,不需要手改配置。

它做了什么

| 层 | 做法 |
| 色彩 | theme.overrideTokens 压一层 80 条 --dsw- 令牌,明暗各一套(「晴海白昼」/「深海夜」) |
| 背景 | body::before 铺图(带饱和度/对比增益),body::after 压一层海水纱;浓度由 --bff-vis 控制 |
| 侧栏 | --dsw-specific-sidebar-fill 喂渐变(一整块有颜色的面板,不是半透明糊一层)+ 中下部鲸鱼娘水印 |
| 入口 | 左上角大字标占 sidebar.brand.name 座位,同时就是皮肤总开关 |
| 氛围 | shell.overlay 里一层气泡 + 鲸影(aria-hidden,纯装饰) |
| 组件 | 按钮、输入框、卡片边框、代码块、引用、滚动条、选中色、气泡、toast、tooltip、三态提示 |
| 状态文案 | 一轮对话运行时那行「深度求索中...」换成本包的 10 条台词,每 6 秒轮播一条 |

图标全部是手写 SVG(React.createElement 逐个拼),没有任何图标库、没有 emoji。

开关

点左上角「蓝色大肥鱼」即可开关:

- 关掉:只有背景那两层撤走(靠 --bff-on 归零),组件样式保留 —— 所以关掉之后不会出现没样式的裸按钮;
- 开关状态是页面内的,刷新即回到开启(皮肤默认开)。

运行中的状态文案

一轮对话进行中,输入框上方那行状态文案会被替换并轮播:

状态文案

产品那句话取自 chat 命名空间的 chat.deepDiving 键。思考那一行的标题(message.think,默认「思考」)不动,保持产品原样。

实现走的是官方口子 locale.addLanguage:注册一门回退中文的新语言(zh-whale「鲸鱼语 · 蓝色大肥鱼」),在它下面只写 chat.deepDiving 一个键,其余文案沿回退链落到中文 —— 所以它只动那一行,坏不了别的。
(locale.register 的键是字面字符串、不加命名空间前缀,所以「注册到 chat 命名空间 + 键写 chat.deepDiving」才对得上。)

皮肤关闭或插件停止时自动切回你原来的语言;你自己手动换了语言,它不会再抢回来。

关掉皮肤的样子

关闭

改样式

改 theme/ 与 src/ 下的源码,然后:

node build.mjs # 把源码 + 图 + CSS 打成 lib/client.js
node build.mjs --check # 只看产物是不是旧的(比对源指纹)
node test/smoke.mjs # 冒烟测试(29 项,不用浏览器)

改完不用重启也不用刷新:DSH 自带的 client HMR 每 500 ms 轮询一次 bundle,发现 lib/client.js 变了就把新版换进浏览器(约半秒生效)。

连续热换几次之后,页面侧那条热换链偶尔会卡住(表现为"改了没反应",但宿主其实已经发了新版)。
按一次 Ctrl+R 重载页面即可,不用重启应用 —— 实测桌面端连换三版后会卡,重载后立刻跟上。

| 想改什么 | 动哪 |
| 配色、边框、背景两层、组件样式 | theme/skin.css |
| 明暗两套颜色令牌 | theme/theme.json |
| 状态文案与轮播间隔 | src/client-body.js 顶部 DIVE_LINES / DIVE_INTERVAL_MS |
| 图标、气泡、鲸影、开关行为 | src/client-body.js |

build.mjs 会把源文件的 sha256 前 16 位写进产物头部,随时能看出产物是不是旧的。
它同时支持两种目录布局:仓库布局(theme/ 在包内)与开发布局(主题文件在上一级 src/)。

目录

package.json 包清单:dsh.bundle.patch + dsh.client + exports["./client"] cordis.patch.yml bundle 层:把本包那一行插进 profile 组合 lib/index.js 宿主半侧(只负责"占一行",让 client-modules 扫到 dsh.client) lib/client.js 浏览器半侧 —— 构建产物,必须提交(见下) src/client-body.js 浏览器半侧源码 theme/ 皮肤源码:skin.css + theme.json assets/ 背景图与两张贴纸 build.mjs 构建脚本(素材内联进 bundle) test/smoke.mjs 冒烟测试 tools/ 辅助脚本(截图打码)

为什么 lib/client.js 必须提交进仓库

DSH 的浏览器插件走三段链路:dsh.profile.bundles 里的一行 → 该包 dsh.bundle.patch 声明的 patch 层把行插进组合 → client-modules 扫描这行、读包里的 dsh.client 声明,把 exports["./client"] 那份 bundle 发给浏览器。

而 pnpm 安装 git 依赖时不会跑构建脚本(pnpm ≥10 默认拦 prepare),所以仓库里没有构建产物就装不起来。
lib/client.js 因此是提交进仓库的产物,本仓库的 .gitattributes 也把它标成二进制,保证跨平台 clone 后字节不变。

bundle 用的是客户端模块系统的 lazy-CJS 格式(不是 ESM): js
window.__ModuleLoader__.load({
id: 'dsh-blue-fat-fish', // 必须等于包名
factory: (require) => { / 模块体在浏览器首次需要时才跑 / },
})

能 require 的只有外壳播种的冻结模块表:react · react/jsx-runtime · react-dom · react-dom/client · @deepseek-ai/cordis · @deepseek-ai/dsh-client-store · @deepseek-ai/dsh-client-ui-slots · @deepseek-ai/dsh-client-ui-primitives · @deepseek-ai/dsh-client-ui-dockkit。
本皮肤只用 react,不声明任何 dsh.client.external。

兼容性

两个版本上都实测通过:

| DSH | 环境 | 结果 |
| 0.1.5-rc.2 | 命令行 web profile | 通过 |
| 0.2.0-rc.1 | 桌面端(Electron) | 通过(下面两条 0.2.0 的适配) |

皮肤依赖四样随 DSH 版本走的东西:

- 客户端基座模块表(react);
- 四个 slot 座位:sidebar.brand.mark、sidebar.brand.name、shell.overlay、conversation.hero.brand.mark;
- chat 命名空间的两条状态文案键:chat.deepDiving 与 chat.deepDivingFor;
- theme.overrideTokens。

版本差太远可能部分失效(最坏情况:背景与配色还在,大字标或状态文案没了)。

0.2.0 带来的两处差异(都已适配,写在这里免得别人重踩):

1. 状态文案拆成了两条键:起始阶段用 chat.deepDiving(「深度求索中...」),一旦这一轮有了开始时间就换成 chat.deepDivingFor(「深度求索中,用时 {duration}...」)。
只覆写前者的话,实际看到的几乎永远是后者 —— 症状就是"文案没换"。
2. 桌面端多了两层整窗底色。Electron 外壳给 Windows 标题栏加了这两条规则:
html[data-windows-titlebar] .ZTP-Xa_frame(整窗底板)和它的 ::before(顶部那条拖动区,
高 --dsh-windows-titlebar-height),两者都用 background: var(--dsw-specific-sidebar-fill) —— 也就是拿"侧栏那条渐变"铺满窗口顶。任何把 --dsw-specific-sidebar-fill 设成不透明颜色的皮肤,
在桌面端都会看到"图被这层盖住"(我们的背景图在 body::before,z-index -2,正好在它下面):
整窗一片蓝,顶部那栏还会因为渐变是半透明的而"透"出背景图,变成发花的水洗色。

我们的处理是把底板还原成 --dsw-alias-bg-base、把顶部拖动区改成透明,让海图从标题栏到内容连成一片。
选择器不写产品哈希类名(ZTP-Xa 每版都会变),用结构兜底:
html[data-windows-titlebar] :has(> [class="_sidebarCol"])。

给其它插件作者的两个坑(都是移植时踩出来的):

1. sidebar.brand.mark / sidebar.brand.name 是 single 槽:同一个优先级只允许一个登记,撞了直接抛 single slot "…" already has a registration at priority 0,而且渲染优先级最低的那个。
产品自带的 dsh-client-ui-brand-official 登记在 0,所以想盖住它必须显式写 priority: -1 (动态插件不用管,动态运行时会自动分配更低的优先级;常驻包没有这层代劳)。
2. 大字标那个开关必须用原生捕获阶段监听(node.addEventListener('click', fn, true)):整行是产品的一个 (无障碍名「新建会话」),React onClick 拦不住它。
另外别把「点一下之后会话被切走」当成这个 bug —— DSH 自己在页面加载后几秒就会恢复上一个会话,验证穿透要看事件有没有冒泡到根容器,不是看会话变没变。

素材与许可

- 三张图(背景 / 贴纸 / 头部特写)由本仓库作者提供,一并放在 assets/;贴纸是从纯白底原图抠出来的(从画面四边洪水填充,只抠"与外部连通的白",避免掏空发箍内部高光)。
- docs/screenshots/ 里的效果图已把侧栏会话列表、右下角挂件区域打码(脚本见 tools/make-screenshots.py)。
- 本仓库未附许可证文件:默认保留所有权利。若需 MIT / Apache-2.0 等授权,请先与作者确认。

给 DeepSeek Harness Web GUI 的深海皮肤:一层 80-token 主题层(浅色/深色)、两层背景、带鲸鱼贴纸的渐变侧边栏,还有一条会轮换的状态行。它是常规的常驻客户端插件——页面刷新、DSH 重启后都还在。
bash
dsh plugin --profile web add github:qaz040619/dsh-bluefatfish

then restart DSH

点侧边栏顶部的「蓝色大肥鱼」字标即可切换皮肤。基于 dsh 0.1.5-rc.2 构建并测试。未附许可证文件(保留所有权利)——复用前请先问作者。
预览分享卡片长什么样 ↓qaz040619/dsh-bluefatfish
分享 · DeepSeek Harness Hub
qaz040619/dsh-bluefatfish

大肥鱼

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部