Skip to content
dsh.fish
Bundle

coloured-favicon

为 DeepSeek Harness (DSH) 网页提供彩色渐变流动小鲸鱼 favicon,并把页面内鲸鱼图标、deepseek 文字、hero 标题与预览版徽章等品牌元素一并彩色化的 Cordis 客户端插件(静态 dual-face bundle 形态,可经 dsh plugin add + --patch 部署;同名仓库亦保留动态插件形态)

Source
Elipese568
stars
2 stars
License
MIT
Updated
Updated 11 days ago

Readme

# coloured-favicon 🐳🌈

> 为 [DeepSeek Harness (DSH)](https://github.com/deepseek-ai) 网页提供**彩色渐变持续流动的小鲸鱼 favicon**,并把页面内的鲸鱼图标、"deepseek" 文字、hero 标题与「预览版」徽章一并彩色化的 Cordis 客户端插件。

看到 DeepSeek 在官网 WebChat、OpenPlatform、Harness 三处用了不同颜色的小鲸鱼 favicon 后,萌生了「给 Harness 自己做一个彩色小鲸鱼」的想法。本插件把小鲸鱼轮廓 + 流动彩虹渐变渲染到浏览器标签页的 favicon 上。

本仓库提供**两种安装形态**:

| 形态 | 分支 | 分发方式 | 适用 |
| --- | --- | --- | --- |
| 动态插件 | `main` | 会话内 `cordis_define` + `cordis_run`(分享 `src/index.js`) | 只给自己 / 单会话用,带运行卡片控制面板 |
| 静态 bundle | `bundle`(当前分支) | `npx @deepseek-ai/dsh plugin ... add`,整个部署生效 | 分发给其他用户、一次装全部署 |

> 你正在看的是 `bundle` 分支:主产物是 dual-face npm 包;`src/index.js`(动态形态)与
> `src/client.js`(bundle 客户端)仍共用同一份小鲸鱼图形与参数。

## ✨ 特性

- 🌈 **彩色渐变流动**:7 段彩虹色相循环 + 渐变方向旋转,颜色在小鲸鱼身上持续「流动」。
- 🐳 **页面内彩色化**:导航栏与会话页的鲸鱼图标(`FishLogo`)、"deepseek" 文字(`BrandWordmark`)、hero 标题「探索未至之境」以及「预览版」徽章同样流动彩虹渐变。
- 🎨 **可配置**(动态形态):运行卡片内可在「渐变变色 / 整体变色」间切换页面内颜色的呈现方式。
- 🖥️ **作用于主页**:直接替换整个 DSH Web 页面的 `favicon`,无需刷新页面。
- 🎛️ **运行卡片控制**(动态形态):在 `cordis_run` 卡片内提供实时彩虹圆点、「暂停 / 恢复」按钮与变色模式配置。
- 🧹 **干净卸载**:停用 / 更新插件时自动恢复原始 favicon,不留残留。
- 🧱 **零依赖**:纯客户端 JS,无构建步骤、无运行时依赖。

## 📁 目录结构

```
coloured-favicon/
├── src/
│   ├── index.js          # 动态形态:可直接部署的客户端函数体(code.client)
│   ├── client.js         # bundle 客户端源码(占位符 __WHALE_PATH__)
│   └── node.js           # bundle node 半区源码(no-op 宿主挂载点)
├── lib/                  # 构建产物(已提交):lib/index.js + lib/client.js
├── scripts/
│   ├── check.mjs         # 校验动态形态 src/index.js 语法
│   └── build.mjs         # 构建 bundle:src/* → lib/* 并做语法校验
├── cordis.patch.yml      # bundle patch 层(insert 一行客户端插件条目)
├── docs/
│   ├── 快速开始.md        # 动态形态如何部署到 DSH
│   ├── 打包分发.md        # bundle 形态如何打包并分发给其他用户
│   ├── 架构设计.md        # 工作原理与设计取舍
│   └── 开发指南.md        # 本地开发、校验与版本迭代
├── README.md
├── CONTRIBUTING.md       # 贡献指南
├── CHANGELOG.md          # 变更日志
├── NOTICE.md             # 第三方素材声明(小鲸鱼图形版权)
├── LICENSE               # MIT
└── package.json
```

## 🚀 快速开始(动态形态)

> 完整步骤见 [`docs/快速开始.md`](docs/快速开始.md)。

1. 在 DSH 会话中加载 `cordis-plugin-development` 技能。
2. 调用 `cordis_define`,把 `src/index.js` 的内容作为 `code.client` 传入(纯客户端,无 Host 半区)。
3. 调用 `cordis_run` 激活返回的 `pluginId` / `packageId`。
4. 在运行卡片上批准授权,浏览器标签页的小鲸鱼 favicon 随即开始彩色流动。

## 📦 打包分发(bundle 形态)

把插件装进整个 DSH 部署,其他用户无需在会话里 define/run。DSH 没有独立可执行文件,以下
命令统一以 `npx @deepseek-ai/dsh` 前缀运行(全局安装 `npm i -g @deepseek-ai/dsh` 后
可直接敲 `dsh`):

```bash
npx @deepseek-ai/dsh plugin --profile web add ./coloured-favicon-2.0.0.tgz   # 装包;自动加入 profile bundles
npx @deepseek-ai/dsh web                                                     # 直接启动即可(勿再加 --patch,会重复 insert 报错)
```

> `npx @deepseek-ai/dsh plugin add` 检测到 `dsh.bundle` 清单会自动把包加入
> `dsh.profile.bundles`,启动时自动插入条目。`npx @deepseek-ai/dsh web --patch ./cordis.patch.yml`
> 只在包未进 bundles 时使用(叠加两次会报 `duplicate loader entry id: coloured-favicon`)。

完整说明(打包、三种安装方式、卸载、调参)见 [`docs/打包分发.md`](docs/打包分发.md)。

## ⚙️ 可调参数

`src/index.js` 顶部集中了三个参数,两种形态共用;动态形态改完重新部署, bundle 形态改完
`npm run build` 再重新打包:

| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| `SPEED` | `1.6` | 每帧色相前进的度数,越大流动越快 |
| `STOPS` | `7` | 彩虹渐变的分段数 |
| `INTERVAL_MS` | `100` | favicon 刷新间隔(毫秒),越小越流畅 |

## 🧠 工作原理

小鲸鱼轮廓用官方 SVG path 绘制;每帧按相位 `phase` 生成一段
`hsl` 彩虹线性渐变(色相循环 + 渐变方向旋转),拼成 SVG 后以
`data:image/svg+xml` 写入 `<link rel="icon">` 的 `href`。定时器在动态形态下使用
DSH 的 `timer` 服务(`ctx.interval`),bundle 形态下直接使用浏览器原生 `setInterval`;
所有副作用都挂在插件 Fiber 上,卸载时自动清理。
页面内的鲸鱼与 `deepseek` 文字则通过注入共享 `linearGradient` + CSS `fill` 覆盖实现,
与 favicon 共用同一相位。详见 [`docs/架构设计.md`](docs/架构设计.md)。

## 🤝 贡献

欢迎提交 Issue 与 Pull Request。请先阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md)。

## ⚖️ 版权与许可

- 插件代码、文档与脚本:遵循 [MIT License](LICENSE)。
- 小鲸鱼图形:版权归 **DeepSeek** 所有,本项目仅用于个人学习与界面美化,
  不构成官方授权。详见 [`NOTICE.md`](NOTICE.md)。

Install

dsh plugin --profile web add github:Elipese568/coloured-favicon

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source