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

Fairy H.D.D 终端主题 AssassinVIX/fairy-zzz-plugin

DeepSeek Harnessv1.0.1
AssassinVIX5 天前有提交已提供中文文档扫描:含敏感能力

一个主题,把 DeepSeek Harness 的 Web 界面整体换成游戏《绝区零》里「Fairy」的 H.D.D 终端风格,还带开机动画。

36/100
综合分
9
GitHub 星标
1,553
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-fairy-zzz
npm 源 · dsh-fairy-zzz 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-fairy-zzz @ 1.0.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 20:44:03

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 34 处,展示前 19 条)
  • 读取本地文件
    index.js:46
    const hint = readFileSync(VOICE_HINT, 'utf8').trim()
  • 读取本地文件
    index.js:51
    if (existsSync(join(beside, 'fairy_server.py'))) return resolve(beside)
  • 读取本地文件
    index.js:58
    if (readFileSync(VOICE_HINT, 'utf8').trim()) return 'settings'
  • 读取本地文件
    index.js:61
    if (existsSync(join(HERE, '..', 'voice', 'fairy_server.py'))) return 'portable'
  • 读取本地文件
    index.js:82
    if (!existsSync(dir)) return { ...empty, home: dir, reason: '目录不存在:' + dir }
  • 读取本地文件
    index.js:84
    if (!existsSync(server)) return { ...empty, home: dir, reason: '目录里没有 fairy_server.py' }
  • 写入本地文件
    index.js:104
    writeFileSync(VOICE_HINT, clean + '\n', 'utf8')
  • 发起网络请求
    index.js:233
    const res = await fetch(`http://127.0.0.1:${TTS_PORT}/health`, { signal: AbortSignal.timeout(1500) })
  • 执行外部命令来自配置/变量
    index.js:265
    const child = spawn(TTS_PY, [TTS_SERVER, '--port', String(TTS_PORT)], {
  • 执行外部命令固定命令
    index.js:296
    spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { stdio: 'ignore', windowsHide: true })
  • 发起网络请求
    index.js:323
    const res = await fetch(`http://127.0.0.1:${TTS_PORT}/tts`, {
  • 删除本地文件
    index.js:737
    rmSync(VOICE_HINT, { force: true })
  • 写入本地文件
    index.js:807
    await mkdir(CACHE, { recursive: true })
  • 发起网络请求
    client.js:193
    const res = await fetch('/fairy-zzz/tts', {
  • 发起网络请求
    client.js:393
    const res = await fetch('/fairy-zzz/usage', { cache: 'no-store' })
  • 发起网络请求
    client.js:1266
    fetch('/fairy-zzz/health', { cache: 'no-store' })
  • 发起网络请求
    client.js:1322
    fetch('/fairy-zzz/voice-home', { cache: 'no-store' })
  • 发起网络请求
    client.js:1343
    fetch('/fairy-zzz/voice-home', {
  • 发起网络请求
    client.js:1367
    fetch('/fairy-zzz/engine?action=' + action, { cache: 'no-store' })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v1.0.32026-10-29
· 本次更新 Fairy 的用量气泡之前一直显示「峰」,晚上也显示「距换价 3 小时」。查下来不是算错,是规则过期:插件还用着 2025 年那套「每日 00:30–08:30 错峰」,而 DeepSeek 早在 2026-08-17 就换成了峰谷定价,旧规则已于 2025-09-05 取消。 · 修复 · 峰谷时段按现行规则判定:北京时间周一至周五 09:00–12:00、14:00–18:00 为高峰;其余时段——包括周末与中国法定节假日全天——都是空闲时段,价格是高峰的一半。内置 2026 年法定节假日表(元旦 / 春节 / 清明 / 劳动节 / 端午 / 中秋 / 国庆),节假日整天不计高峰;跨周末、跨长假的下次换价时间也一起算准了。 · 花费按每笔请求发生那一刻的价档结算:之前是拿「读取用量那一刻」的价档去套当天全部 token,导致白天高峰跑的用量被夜里的半价折算,今日花费偏低。现在按每条用量事件自己的时间戳取高峰/空闲价。 · 换价瞬间自动刷新:气泡里的倒计时归零时自动重新拉一次数据,峰谷标签、倒计时和花费立刻翻面,不用手点。 · 升级 git pull plugin_manager install_bundle target= 或重新装一遍 npm 包;index.js 在宿主侧,换完要重载插件或重启 DSH,只刷新页面不生效。 --- English TL;DR — The usage bubble used the retired 2025 off-peak window (00:30–08:30) instead of the current peak/off-peak schedule. Peak is now Mon–Fri 09:00–12:00 and 14:00–18:00 Beijing time; weekends and Chinese public holidays are off-peak all day at half price. Spend is now priced per request by the tier in effect at that request's own timestamp, and the bubble re-fetches itself when its countdown hits zero. Full changelog:
v1.0.22026-10-29
Fairy Ⅲ · H.D.D 皮肤的第三个正式版:眼徽挂上了用量气泡,主题跟着 DSH 的日夜切换走,新建对话页也换成了 H.D.D 的样子,顺带修掉了两处状态机问题;这一版还把大家回报的四条反馈过了一遍。 · 🆕 新增 · 用量气泡:单击眼徽弹出小卡片,显示 DeepSeek 余额、今日花费(缓存命中 / 未命中 / 输出三段拆分),以及当前是高峰还是空闲、距离换价还有多久(hh:mm:ss 倒计时)。每轮对话结束会自动弹一次,那次只报「本轮花费 + 峰谷」,18 秒后自己收起;拖动眼徽时气泡跟着走,靠到窗口右缘会自动翻到左侧。 · 浅色主题:跟随 DSH 的「设置 → 通用 → 外观」,切到浅色时换成浅底深字的同一套配色,侧栏字标、发光与描边都会跟着调;设置页右侧新增 外观(跟随 / 深色 / 浅色)可以手动压过宿主。 · 新建对话页换标:官方 hero 的鱼标走 conversation.hero.brand.mark 插槽,整只换成 Fairy 眼徽;标题改成「空洞深潜系统」、「预览版」徽章改成「H.D.D Ⅲ」,英文界面显示 HOLLOW DEEP DIVE SYSTEM / H.D.D III。 · 显示眼徽开关:设置里可以一键关掉眼徽,眼徽和用量气泡一起消失,屏幕上不留任何浮层。 · 🐛 修复 · 新建对话时眼睛一直停在思考动画:session/event 里连新建会话的记账类事件都会把运行态置成 running,眼徽于是卡在 thinking。现在只认真正的 step/start,运行态的收敛仍由 agent/status 与流式帧负责。 · 思考态偶尔没有眼睑:眨眼是眼睑收起 300ms 再弹回,如果这 300ms 内切进思考态,旧逻辑提前 return 却没收回眨眼,data-lid 会永久停在 blink(眼睑收起=看不见)。现在切换时立刻回睁眼,并让思考态的眼睑优先于眨眼。 · 插件列表里点名字打不开详情:皮肤的全屏层在开机 / 问好阶段接管指针、层级又高于宿主覆盖层,阶段没切到 dock 时整页点击都会被吞。现在只有开机阶段接收指针,问好与收起后整层放行。 · 浅色外观下设置页文字看不清:设置页配色原先写死成深底浅字,现在补了浅色配色(面板 / 输入框 / 开关 / 分段按钮);主题探测也加了背景亮度取样与 data-theme 兜底,宿主换主题时能跟着翻。 · 开机动画每页只放一次:插件重挂载也不再重播(设置里的「重播开机动画」照常可用)。 · 气泡不再遮住眼徽:先量好尺寸再定位;余额 RPC 的几种返回结构都能解析,读不到时会说明失败原因。 · 朗读只读当前一轮的最终回答,不会再连历史回答一起念。 · 去掉眼徽上的浏览器原生悬浮提示。 · 样式热更新:重新注入样式表,改 CSS 不用重启。 眼徽默认位置保持原样(会话区左缘);想挪开就拖,想彻底不挡内容就去设置里关掉「显示眼徽」。 · 📦 升级 cd git pull 或在 DSH 会话里重新跑一次: plugin_manager install_bundle target= 升级后请整页硬刷新(Ctrl+F5);index.js 是宿主侧代码,运行态相关的改动要重启 DSH(或重载插件)才生效。 Full changelog: v1.0.1...v1.0.2 --- TL;DR — v1.0.2 adds the usage bubble (balance, today's spend, peak/off-peak countdown), a light palette that follows DSH's appearance setting (plus a manual Appearance override), Fairy branding on the new-conversation hero and a show/hide switch for the badge; it also fixes the eye badge getting stuck in the thinking animation on a fresh conversation, the thinking eyelid occasionally disappearing mid-blink, the skin swallowing clicks over host panels, and unreadable text in the settings page under the light theme.
v1.0.12026-10-27
· Fairy Ⅲ · 绝区零 H.D.D 皮肤 v1.0.1 把 DSH Web 界面换成绝区零 H.D.D 终端:整屏开机动画 → 居中问好 → 眼徽常驻会话区左缘,可选本地 GPT-SoVITS 朗读。 · 本次更新 眼徽可拖拽 · 收起后的眼徽可以按住拖到屏幕任意位置,松手即记住坐标;窗口缩小时自动夹回可见区域 · 设置 → Fairy 新增开关「拖动眼徽」(默认开启),关掉即固定在会话区左缘中部 · 只点不拖不会钉住位置;单击会穿透给下层控件,不会挡住侧栏按钮 · 新增「眼标复位」按钮,一键回到默认锚点 开机动画有声了 · 换成带音效的 H.D.D 开机片段(1600×900、3.98 Mbps、H.264 + AAC、faststart) · 浏览器允许自动播放时直接有声;被拦截时画面照常播放,任意一次点击或按键后开始有声 Fairy 模式随插件安装 · cordis.patch.yml 内置 Fairy 模式预设的 insert:装好即出现「Fairy」预设,只带人格,不覆盖工具与其它配置 · 安装脚本不再拼接预设段落,重复安装不会产生重复条目 其它 · 图标重绘为 H.D.D 眼徽,并补齐 180×180 位图供市场与列表使用 · README 中英双语:安装、设置、语音引擎、HTTP 路由逐节对照 · 刷新截图:开机画面与设置页 · 安装 dsh plugin_manager install_bundle target= 或把 cordis.patch.yml 的 insert 段合并进 %USERPROFILE% 下的 .dsh/profiles//cordis.patch.yml,装好整页刷新。Windows 也可直接运行 install-windows.ps1。 · 说明 · 需要 DSH;插件只调用宿主的槽位与 webServer,不 import @deepseek-ai/* · 语音引擎(GPT-SoVITS)是可选项,仓库不含模型权重 --- · English H.D.D skin for the DSH Web UI: a voiced full-screen boot animation, an animated eye core (idle / thinking / done), a time-of-day greeting and optional local GPT-SoVITS voice. In this release · The docked eye core can now be dragged anywhere on screen; its position is remembered, clamped to the viewport, and can be reset from Settings → Fairy. The new "Drag the eye" toggle is on by default. · The boot clip is now voiced (1600×900, H.264 + AAC, faststart) and plays audible whenever the browser allows autoplay, staying muted only until the first click or key press. · The Fairy-mode agent preset is inserted by the plugin's own patch, so it installs together with the skin instead of requiring a manual merge. · New H.D.D eye icon (plus a 180×180 raster for marketplaces), bilingual README and refreshed screenshots.
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
Fairy Ⅲ · 绝区零 H.D.D 皮肤 中文 · English 把 DeepSeek Harness 的 Web 界面换成《绝区零》Fairy 的 H.D.D 终端:满屏开机动画 → 居中问好 → 收成会话区左侧的常驻眼徽,并可用本地 GPT-SoVITS 的 Fairy 音色把回复念出来。 开机动画居中问好 | 眼徽状态 | 设置面板 | | 眼徽 | 设置 | 特性 - 开机动画:整屏播放 H.D.D 启动片,视频按 object-fit: contain 完整显示,多余区域由同帧的模糊铺底填充,任何窗口比例都不会出现硬黑边。启动片自带音轨:页面允许自动播放时直接带声音放,被浏览器拦下就先静音播放,等你第一次点按/敲键再把声音打开。 - 居中问好:动画结束后淡入 H.D.D 眼徽(深蓝环 / 白盘 / 蓝瞳 / 高光点),背后是蓝光晕图,HOLLOW DEEP DIVE SYSTEM 标题带镜面倒影,下方按当前时段(凌晨/上午/中午/下午/傍晚/深夜)播一句问候并同步播放预录音频。 - 收成眼徽:问候结束约 1.9s 后眼徽飞到会话区左缘的中线(侧栏右侧的蓝色圈内)常驻,光晕图淡出。默认可以按住拖到屏幕任意位置,坐标写进 localStorage,刷新后仍在原位;不想要拖动就去 设置 → Fairy 关掉「拖动眼徽」,或用「眼标复位」回到会话区左缘。
展开完整文档(README 剩余 1 节)
Fairy Ⅲ · 绝区零 H.D.D 皮肤

中文 · English

把 DeepSeek Harness 的 Web 界面换成《绝区零》Fairy 的 H.D.D 终端:满屏开机动画 → 居中问好 → 收成会话区左侧的常驻眼徽,并可用本地 GPT-SoVITS 的 Fairy 音色把回复念出来。

开机动画居中问好

| 眼徽状态 | 设置面板 |
| 眼徽 | 设置 |

特性

- 开机动画:整屏播放 H.D.D 启动片,视频按 object-fit: contain 完整显示,多余区域由同帧的模糊铺底填充,任何窗口比例都不会出现硬黑边。启动片自带音轨:页面允许自动播放时直接带声音放,被浏览器拦下就先静音播放,等你第一次点按/敲键再把声音打开。
- 居中问好:动画结束后淡入 H.D.D 眼徽(深蓝环 / 白盘 / 蓝瞳 / 高光点),背后是蓝光晕图,HOLLOW DEEP DIVE SYSTEM 标题带镜面倒影,下方按当前时段(凌晨/上午/中午/下午/傍晚/深夜)播一句问候并同步播放预录音频。
- 收成眼徽:问候结束约 1.9s 后眼徽飞到会话区左缘的中线(侧栏右侧的蓝色圈内)常驻,光晕图淡出。默认可以按住拖到屏幕任意位置,坐标写进 localStorage,刷新后仍在原位;不想要拖动就去 设置 → Fairy 关掉「拖动眼徽」,或用「眼标复位」回到会话区左缘。
- 用量气泡:单击眼徽弹出一个小气泡,显示 DeepSeek 账户余额、今天的花费(按百万 token 折算,含缓存命中/未命中/输出三段拆分)和当前是高峰还是空闲时段(带倒计时,直接告诉你还有多久换价);再点一下收起。每轮对话跑完会自动弹一次,这时只报「本轮花费 + 峰谷」,不显示余额与今日合计,18 秒后自己消失。拖动眼徽时气泡跟着走,靠到窗口右缘会自动翻到眼徽左侧。峰谷按官方现行规则算:北京时间周一至周五 09:00–12:00、14:00–18:00 为高峰,其余时间(含周末与法定节假日全天)为空闲、价格减半;倒计时归零时气泡会自动重新拉一次数据。价格表在 index.js 的 PRICES,时段与节假日表在 peakState() / HOLIDAY_RANGES,跨年记得补一行假期。花费按每笔请求发生那一刻的价档结算,白天的高峰用量不会被夜里的半价「折算」掉。
- 状态动效(复刻参考实现 Fairy-DSH 的几何与时长):
- idle 呼吸 + 缓慢自转 + 扫描光带;
- thinking/working 上眼睑压到半闭并轻微呼吸;
- 待机随机眨眼(3.4–8.6s 一次,约 24% 概率连眨,眨眼后可能瞟一眼);
- 待机随机「花屏」:把整只眼切成 2–4 条横带横向错位;
- done 眼睑轻扫一下;
- 切进 thinking/working 的瞬间如果正眨到一半,会立刻收回眨眼回到睁眼,保证思考态的眼睑一定在。
- 品牌位替换:隐藏官方 SVG 字标,在原位置叠上 Fairy 眼徽 + 斜体 Fairy 字标,位置由量测官方元素得到,随窗口自适应。
- 新建对话页换标:官方 hero 的鱼标走 conversation.hero.brand.mark 插槽,整只换成 Fairy 眼徽;标题与「预览版」徽章没有插槽,皮肤按界面语言在 DOM 上改写成 空洞深潜系统 / HOLLOW DEEP DIVE SYSTEM 与 H.D.D Ⅲ 徽章。
- 主题:深蓝玻璃 + 青蓝霓虹 token、网格与扫描线壁纸、H.D.D 风滚动条与焦点光;跟随 DSH 的外观设置(设置 → 通用 → 外观),切到浅色时自动换成浅底深字的同一套配色。
- 语音:开场问候是预录 wav(不依赖引擎);后续回复可自动朗读或点按钮朗读,走本地 GPT-SoVITS(CPU 推理)。
- 设置面板:DSH 的「设置 → Fairy」里集中管理朗读开关、引擎状态、引擎目录、试听/重播/测试。

安装

需要 DeepSeek Harness(插件只在运行时调用宿主提供的槽位与 webServer,不直接 import @deepseek-ai/)。

方式一:让 agent 装(推荐)

git clone https://github.com/AssassinVIX/fairy-zzz-plugin.git

然后在 DSH 会话里:

plugin_manager install_bundle target=<克隆下来的目录>

方式二:手动合并 patch

把本仓库根目录 cordis.patch.yml 里的两个 insert 段一起合并进你的 profile patch(Windows 一般是 %USERPROFILE%\.dsh\profiles\<profile>\cordis.patch.yml):

- insert:
- id: fairy-zzz-skin
name: 'dsh-fairy-zzz'

- insert:
- id: preset-fairy
name: '@deepseek-ai/dsh-agent-preset'
config: { ... } # 完整内容见仓库里的 cordis.patch.yml

装好后整页刷新一次。皮肤只做「插入一行 + 宿主注册两条 HTTP 路由」,不修改宿主的任何文件。

方式三:Windows 一键脚本

powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 # 装 powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 -Uninstall # 卸

脚本会自己找 profile、把插件放进 node_modules\dsh-fairy-zzz、补 patch、把浅色主题改成深色。不放心脚本改文件的话用方式一/二。

从旧版升级:1.0.0 起包名从 @local/dsh-fairy-zzz 改成 dsh-fairy-zzz(为了能被收录与 npm 安装)。
老安装请把 profile patch 里的 name: '@local/dsh-fairy-zzz' 改成 name: 'dsh-fairy-zzz',并把插件目录从 node_modules\@local\dsh-fairy-zzz 换到 node_modules\dsh-fairy-zzz。

「Fairy 模式」预设(随插件安装)

插件自带的 cordis.patch.yml 里除了皮肤本体,还插入了 preset-fairy——只装人设的智能体预设:预设里只有 @deepseek-ai/dsh-persona 一项,不带任何工具、上下文或其它插件,工具集沿用你当前 DSH 的配置,预设只负责 Fairy 的语气与身份。装好插件、重启 DSH 后,新建会话的模式选择器里就会多出「Fairy 模式」。

presets/fairy-mode.patch.yml 是同一份内容的独立版,留给「只想用人设、不装皮肤」的人单独合并进 profile patch。

如果你以前手动往 profile patch 里追加过 preset-fairy,请把旧的那段删掉,否则会出现两份同名预设。
皮肤本体与这个预设互不依赖:不装预设也有皮肤,不装皮肤也能用预设。

设置(设置 → Fairy)

| 控件 | 说明 |
| 自动朗读回复 | 助手回答完成后自动念出来;关掉也可以单独点消息旁的朗读按钮 |
| 拖动眼徽 | 默认开启:眼标停在会话区左缘,按住可以拖到屏幕任意位置,位置记在浏览器里;关掉则锁回会话区左缘 |
| 显示眼徽 | 关掉后眼徽与用量气泡一起消失,屏幕上不再有任何浮层;随时可以在这一行重新打开 |
| 外观 | 跟随 DSH 的浅色 / 深色;也可以强制 深色 或 浅色,用来避开某个外观下看不清的字 |
| 语音引擎 | 引擎状态灯:绿=就绪,黄=启动中,灰=未运行 |
| 语音引擎目录 | 输入引擎目录 → 保存(写入 <插件目录>/voice-home.txt)、检测(只校验不保存)、清除(回到自动探测) |
| 启动引擎 / 停止引擎 | 由宿主进程托管引擎的启停 |
| 刷新状态 | 立即重新探测一次 |
| 试听问候 / 重播开机动画 | 重放最新问候音频 / 重新走一遍开机 → 问好 → 收成眼徽 |
| 眼标复位 | 忘掉拖动记下的坐标,把眼标放回会话区左缘的默认锚点 |
| 测试语音 / 停止 | 合成一句测试语音 / 停止当前播放 |

语音引擎(可选)

皮肤、开机动画、预录问候都不需要引擎;只有「把回复念出来」需要。

引擎目录里需要有:

<引擎目录>/ fairy_server.py # 引擎入口(--port 指定端口) GPT-SoVITS/ # 引擎本体 models/ # Fairy 的 .pth / .ckpt 与参考音频 py311/ # 可选:便携 Python

目录的查找顺序(用户指定的永远优先):

1. <插件目录>/voice-home.txt —— 在设置面板里保存的那个目录;
2. FAIRY_VOICE_HOME 环境变量;
3. 插件同级 voice/(免安装便携包);
4. 旧版 FAIRY_TTS_DIR 环境变量(兼容)。

都没找到时皮肤照常工作,设置面板会提示去指定目录。

其它环境变量:

| 变量 | 默认 | 说明 |
| FAIRY_TTS_PORT | 9800 | 引擎监听端口 |
| FAIRY_CACHE_DIR | <插件目录>/cache | 合成语音与磁盘缓存位置 |

引擎日志写在引擎目录下的 server.log。CPU 加载约 20s,加载完成前设置面板显示「启动中」。

路由

宿主半边只注册这些只读/本地路由(前缀 /fairy-zzz):

| 方法 | 路径 | 说明 |
| GET | /fairy-zzz/assets/<file> | boot.mp4 / poster.jpg / hero.png / voice/greet-.wav(支持 Range) |
| GET | /fairy-zzz/audio/<hash>.wav | 合成语音缓存(支持 Range) |
| POST | /fairy-zzz/tts | { text } → { url, cached, seconds },清 markdown/代码块后截 500 字 |
| GET | /fairy-zzz/health | { ok, engine, voice, speed, home } |
| GET | /fairy-zzz/mood | idle / thinking / working / done(驱动眼徽状态) |
| GET | /fairy-zzz/usage | { peak, today, turn }:今日与本轮的 token 用量、折算花费、当前峰谷时段(聚合本机会话日志) |
| GET | /fairy-zzz/voice-home | 当前引擎目录与来源 |
| POST | /fairy-zzz/voice-home | 保存 / 校验引擎目录 |
| GET | /fairy-zzz/engine | 引擎进程状态 |
| POST | /fairy-zzz/engine | { action: "start" \| "stop" } |

截图是怎么来的

screenshots/ 里的图不是外链:开机帧取自 assets/boot.mp4,其余是离线渲染(把 client.js 里的 CSS 与眼徽 SVG 抽出来,用同一套样式渲染)。仓库里没有运行期依赖,也没有构建产物。

已知限制

- 官方字标是内联 SVG,没有可替换的文本节点;sidebar.brand.mark/name 又是 single 槽位、宿主先注册者常驻,所以皮肤用「隐藏官方字标 + 在同一位置叠自己的字标」来实现,不是真正的槽位替换。官方的 DOM 结构一改就可能要跟着调选择器。
- 桌面壳的窗口标题、菜单、侧栏条目文案属于应用本身,插件改不了。
- 新建对话页的标题与徽章没有插槽可换,皮肤直接改写 DOM 文本,并用 900ms 的低频定时器兜底重刷;官方若把它们改成多节点或富文本结构,选择器要跟着调。
- 与其它抢占左下/右下角落的插件(鲸鱼挂件、桌宠)同时开时观感会打架。
- 语音只有仓库自带的一条问候;逐句朗读要自备 Fairy 语音包(见上面语音章节),引擎和权重都不在仓库里。
- 语音引擎是可选外部依赖,仓库不含权重与引擎本体。

排错

| 现象 | 处理 |
| 设置里引擎一直「未运行」 | 检查引擎目录是否含 fairy_server.py、GPT-SoVITS/、models/;看 <引擎目录>/server.log |
| 保存目录后仍显示旧路径 | 旧的宿主进程没有 voice-home 路由,重启一次 DSH |
| 回复不朗读但问候能播 | 问候是预录 wav,不走引擎;引擎没起来时只有朗读会静默失败 |
| 眼徽/字标没出现 | 确认 profile patch 里有 fairy-zzz-skin 这一行,并整页刷新 |

目录结构

cordis.patch.yml # 两个 insert:皮肤本体 + 「Fairy 模式」预设 client.js # 客户端:主题、开机/问好/眼徽、设置面板、语音动作 index.js # 宿主:静态资源、TTS 队列与缓存、心情、引擎托管 assets/ # boot.mp4 / poster.jpg / hero.png / voice/greet-.wav presets/ # 「Fairy 模式」预设的独立版(不装皮肤时单独用) screenshots/ # 列表用截图 install-windows.ps1 # Windows 安装/卸载脚本

致谢与许可

- 本仓库代码以 MIT 发布(见 LICENSE)。
- 眼徽 SVG、动画几何与时长、眼睑/眨眼实现参考了 Chengzhibense/Fairy-DSH(Apache-2.0,commit 见 NOTICE-fairy-dsh.md);对照视频为 BV1SD4C63EZz「可能是全网最还原的Fairy」。
- 开机视频素材与角色形象版权归 miHoYo / HoYoverse 所有,这里只做个人桌面的视觉改造,请勿用于商业用途。

· English

给 DeepSeek Harness 的 Fairy Ⅲ · 绝区零 H.D.D 皮肤。

它把 DSH 网页界面变成 Fairy 的 H.D.D 终端:先全屏播放开机动画,再居中显示问候,然后眼徽收进会话区左边缘,变成常驻的眼徽——回复还能用本地 GPT-SoVITS Fairy 语音朗读。

开机动画居中问候

| 眼徽状态 | 设置面板 |
| 眼徽 | 设置 |

功能

- 开机动画 —— H.D.D 启动片段用 object-fit: contain 铺满屏幕,剩余区域用同一帧的模糊副本填满,所以任何窗口比例下都不会出现生硬的黑边。片段自带音轨:页面允许自动播放时带声音播放,否则先静音,等你第一次点击或按键再取消静音。
- 居中问候 —— 片段结束后,H.D.D 眼徽(深蓝圆环 / 白色圆盘 / 蓝色虹膜 / 高光点)在蓝色光晕上淡入,同时出现镜像的 HOLLOW DEEP DIVE SYSTEM 标题和按时段变化的问候(凌晨 / 早上 / 中午 / 下午 / 晚上 / 深夜),并播放对应的预录音频。
- 眼徽交接 —— 问候约 1.9 秒后,眼徽飞到会话区左边缘正中(侧边栏旁的蓝色圆环内)并停在那里,光晕同时淡出。眼徽默认可拖动:按住它就能移到屏幕任意位置——位置存在 localStorage 里,刷新后仍在。在 设置 → Fairy* 里关掉「可拖动眼徽」,或用「重置眼徽」让它回到会话区左边缘。
- 用量气泡 — 点击徽标会弹出一张小卡片,显示你的 DeepSeek 余额、今日花费(按每百万 token 折算,拆分为缓存命中 / 缓存未命中 / 输出)以及当前处于高峰还是低谷时段,并附有距离下次价格切换的实时倒计时;再点一次即可关闭。每轮对话结束时它也会自动弹出,这一种只报告本轮花费和高峰 / 低谷状态——不显示余额,不显示当日总计——18 秒后消失。拖动徽标时卡片跟随移动,快要超出右边缘时会翻到左侧。高峰 / 低谷遵循当前官方规则:高峰为北京时间周一至周五 09:00–12:00 和 14:00–18:00;其余时间——包括周末和中国法定节假日——均为低谷,半价,倒计时归零时卡片会自动重新拉取数据。价格写在 PRICES 里;时段表和节假日表写在 index.js 的 peakState() / HOLIDAY_RANGES 里(下一年的节假日加在那里)。
- 状态动画(几何与时长复刻参考实现 Fairy-DSH):
- idle — 呼吸、缓慢旋转、一道扫过的扫描光;
- thinking / working — 上眼睑垂到半闭并轻微呼吸;
- 空闲时随机眨眼(每 3.4–8.6 秒一次,约 24% 概率连眨两下,有时随后瞥一眼);
- 空闲时随机「故障」——整只眼睛被切成 2–4 条水平带并横向错位;
- done — 一次快速的眼睑扫过。
- 品牌位替换 — 官方 SVG 字标被隐藏,Fairy 眼睛徽标加斜体 Fairy 字标叠放在同一位置,定位依据对官方元素的测量,因此能保持响应式。
- 主题 — 深蓝玻璃配青色霓虹 token、网格与扫描线壁纸、H.D.D 风格滚动条和聚焦光晕。跟随 DSH 外观设置(Settings → General → Appearance),选浅色时切换到浅底深字变体。
- 语音 — 开场问候是预录 wav,不需要引擎;后续回复可自动朗读,也可通过每条消息上的按钮朗读,走本地 GPT-SoVITS(CPU 推理)。
- 设置面板 — DSH 的 Settings → Fairy 管理朗读开关、引擎状态、引擎目录、采样、重放和测试。

安装

需要 DeepSeek Harness。插件只使用运行时传入的宿主槽位和 webServer,从不导入 @deepseek-ai/。

方式一 — 让智能体来装(推荐)

git clone https://github.com/AssassinVIX/fairy-zzz-plugin.git

然后在 DSH 会话里:

plugin_manager install_bundle target=<path to the cloned folder>

方式二 — 手动合并补丁

把 cordis.patch.yml 里的两个 insert 块都合并进你的配置档补丁(Windows 上通常是 %USERPROFILE%\.dsh\profiles\<profile>\cordis.patch.yml):

- insert:
- id: fairy-zzz-skin
name: 'dsh-fairy-zzz'
- insert:
- id: preset-fairy
name: '@deepseek-ai/dsh-agent-preset'
config: { ... } # full content lives in cordis.patch.yml

安装后刷新整个页面。皮肤只插入一行,并在宿主上注册两条 HTTP 路由;不会改动 DSH 自带的任何文件。

方案 3 —— Windows 一键脚本

powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 # install
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 -Uninstall # uninstall

脚本会找到你的配置档,把插件复制到 node_modules\dsh-fairy-zzz,加上补丁,并把浅色主题切换为深色。如果你不想让脚本改动文件,请用方案 1 或方案 2。

从旧版本升级:从 1.0.0 起,包名由 @local/dsh-fairy-zzz 改为 dsh-fairy-zzz(这样才能从 npm 列出并安装)。请把配置档补丁里的 name: '@local/dsh-fairy-zzz' 改成 name: 'dsh-fairy-zzz',并把插件目录从 node_modules\@local\dsh-fairy-zzz 移到 node_modules\dsh-fairy-zzz。

插件自带的 cordis.patch.yml 还会插入 preset-fairy,这是一个只含人设的「Fairy 模式」智能体预设(毒舌 AI 口吻,称呼你为「主人」)。它只提供人设——工具和上下文插件都来自你的 DSH 配置,所以能跨 DSH 版本继续使用。安装插件并重启 DSH 后,新建会话的模式选择器里会出现「Fairy 模式」。presets/fairy-mode.patch.yml 是独立副本,给只想要人设、不要皮肤的人用;如果你之前手动加过 preset-fairy,请删掉旧的那段,避免出现两个同名预设。

设置(设置 → Fairy)

| 控件 | 作用 |
| 朗读回复 | 每条助手回答结束时朗读出来;关闭后仍可使用消息旁的喇叭按钮 |
| 徽标可拖动 | 默认开启:徽标位于对话区左边缘,可拖到屏幕任意位置,位置会被记住。关闭后固定回该左边缘 |
| 显示徽标 | 关闭后徽标和用量气泡一起隐藏,屏幕上不留任何浮层;随时可在这里重新打开 |
| 外观 | Auto 跟随 DSH 的浅色/深色主题;如果其中一种主题下文字难读,可强制 Dark 或 Light |
| 语音引擎 | 引擎状态灯:绿色 = 就绪,黄色 = 启动中,灰色 = 未运行 |
| 引擎目录 | 输入目录 → Save(写入 <plugin dir>/voice-home.txt),Detect(只校验不保存),Clear(回到自动检测) |
| 启动 / 停止引擎 | 由宿主管理引擎的启动和停止 |
| 刷新状态 | 立即重新探测 |
| 播放问候语 / 重播启动 | 重播最近的问候语音 / 再次执行启动 → 问候 → 徽标流程 |
| 重置徽标 | 忘记记住的拖动位置,把徽标弹回对话区左边缘 |
| 测试语音 / 停止 | 合成一句测试语音 / 停止当前播放 |

语音引擎(可选)

皮肤、开机动画和预录问候语都不需要引擎——只有「朗读回复」需要。

引擎目录必须包含:

<engine dir>/
fairy_server.py # entry point (--port)
GPT-SoVITS/ # the engine itself
models/ # Fairy's .pth / .ckpt and reference audio
py311/ # optional: portable Python

查找顺序(用户指定的目录始终优先):

1. <plugin dir>/voice-home.txt —— 设置面板里保存的目录;
2. FAIRY_VOICE_HOME 环境变量;
3. 插件旁边的 voice/(便携包);
4. 旧版 FAIRY_TTS_DIR 环境变量(兼容用)。

以上都找不到时,皮肤照常工作,设置面板会提示你去填目录字段。

其他环境变量:

| 变量 | 默认值 | 说明 |
| FAIRY_TTS_PORT | 9800 | 引擎监听的端口 |
| FAIRY_CACHE_DIR | <plugin dir>/cache | 合成音频和磁盘缓存的存放位置 |

引擎日志写到引擎目录下的 server.log。在 CPU 上加载大约需要 20 秒;加载完成前,设置面板显示「启动中」。

HTTP 路由

宿主侧只注册这些只读/本地路由(前缀 /fairy-zzz):

| 方法 | 路径 | 说明 |
| GET | /fairy-zzz/assets/<file> | boot.mp4 / poster.jpg / hero.png / voice/greet-.wav(支持 Range) |
| GET | /fairy-zzz/audio/<hash>.wav | 合成音频缓存(支持 Range) |
| POST | /fairy-zzz/tts | { text } → { url, cached, seconds };会剥掉 markdown/代码块,并截断到 500 个字符 |
| GET | /fairy-zzz/health | { ok, engine, voice, speed, home } |
| GET | /fairy-zzz/mood | idle / thinking / working / done(驱动徽标) |
| GET | /fairy-zzz/usage | { peak, today, turn }:今天和当前轮次的 token 用量与折算费用,外加当前的高峰/低谷时段(从本地会话日志汇总) |
| GET | /fairy-zzz/voice-home | 当前引擎目录及其来源 |
| POST | /fairy-zzz/voice-home | 保存 / 校验引擎目录 |
| GET | /fairy-zzz/engine | 引擎进程状态 |
| POST | /fairy-zzz/engine | { action: "start" \| "stop" } |

截图是怎么做的

screenshots/ 里的图片不是远程链接:开机画面取自 assets/boot.mp4,其余图片都是离线渲染的——从 client.js 里抽出 CSS 和眼睛徽标的 SVG,再用同样的样式渲染出来。仓库没有运行时依赖,也没有构建产物。

已知限制

- 官方字标是内联 SVG,没有可替换的文本节点,而 sidebar.brand.mark/name 是 single 槽位,先注册者一直占着,所以皮肤的做法是隐藏官方字标,在同一位置叠上自己的字标,而不是真正替换槽位。如果官方 DOM 变了,选择器可能要跟着改。
- 桌面外壳的窗口标题、菜单和侧边栏标签属于应用本身,插件改不了。
- 其他插件也占左下角或右下角(鲸鱼挂件、桌面宠物),一起开启可能显得杂乱。
- 语音引擎是可选的外部依赖;仓库既不带权重,也不带引擎本身,只附带一段预录问候语——要让每条回复都发声,得自备 Fairy 语音包。

故障排查

| 现象 | 处理 |
| 设置里引擎一直显示「未运行」 | 检查引擎目录下是否有 fairy_server.py、GPT-SoVITS/ 和 models/;查看 <engine dir>/server.log |
| 保存后仍显示旧路径 | 旧的主机进程没有 voice-home 路由;重启一次 DSH |
| 回复不发声,但问候语能播 | 问候语是预录 wav,不走引擎;引擎没运行时,只有朗读会静默失败 |
| 徽章或字标不出现 | 检查配置档补丁里是否有 fairy-zzz-skin,然后整页刷新 |

仓库结构

cordis.patch.yml # two inserts: the skin itself + the "Fairy mode" preset
client.js # client: theme, boot/greeting/badge, settings panel, voice actions
index.js # host: static assets, TTS queue and cache, mood, engine supervision
assets/ # boot.mp4 / poster.jpg / hero.png / voice/greet-*.wav
presets/ # standalone copy of the "Fairy mode" preset (persona only, no skin)
screenshots/ # screenshots used above
install-windows.ps1 # Windows install/uninstall script

致谢与许可

- 本仓库代码以 MIT 许可发布(见 LICENSE)。
- 眼睛徽章 SVG、动画几何与时长、眼睑/眨眼实现参考 Chengzhibense/Fairy-DSH(Apache-2.0;提交记录见 NOTICE-fairy-dsh.md);对比视频为 BV1SD4C63EZz「可能是全网最还原的Fairy」。
- 开机视频素材与角色形象归 miHoYo / HoYoverse 所有。这只是个人桌面视觉换肤——请勿商用。

↑ 返回中文 / Back to Chinese
预览分享卡片长什么样 ↓AssassinVIX/fairy-zzz-plugin
分享 · DeepSeek Harness Hub
AssassinVIX/fairy-zzz-plugin

一个主题,把 DeepSeek Harness 的 Web 界面整体换成游戏《绝区零》里「Fairy」的 H.D.D 终端风格,还带开机动画。

这是你的仓库?认领条目

回到顶部