DeepSeek Harness Plugin

jediliu005/dsh-fairy-zzz-for-jediliu

Stars ★ 0 Category UI Enhancements Added 2026-11-02

Fairy III (Zenless Zone Zero) H.D.D skin for DeepSeek Harness: boot video, an eye-core dock that can be dragged vertically so it never covers text, and time-of-day greeting voices written by a model every day (5 lines, each <= 20 characters) and synthesized locally with GPT-SoVITS, with a fallback chain of today -> latest -> bundled audio so there is always something to hear. Replies can be spoken: a trailing marker line takes priority over length heuristics, and long replies can be compressed into one sentence first. The reader hashes the utterance it just played (MD5) so each reply is voiced exactly once, and switching sessions stays silent. Personal fork of dsh-fairy-zzz with its own package, route and storage namespace, plus a rate-limited summarize endpoint, POST-only engine control and bounded TTS and greeting caches. Two diagnostic logs (client revision, decision trace) are written next to the plugin and stay on the local machine. A personal fork of AssassinVIX/fairy-zzz-plugin (upstream package dsh-fairy-zzz): install this fork or the upstream, not both - both mount the full-screen skin on the same DSH surfaces. Dynamic greetings and spoken summaries need a DeepSeek-compatible API key in ~/.dsh/fairy-tts.json (or DEEPSEEK_API_KEY); without it only the bundled greeting audio plays.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:jediliu005/dsh-fairy-zzz-for-jediliu

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

This plugin publishes its README in Chinese only.

Fairy Ⅲ · 《绝区零》H.D.D 皮肤 —— 个人定制分支

派生自 dsh-fairy-zzz(MIT,作者 AssassinVIX),在其上做了独立的改造与收敛。


一、这是什么

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

本仓库是个人定制版:包名、路由、存储键、slot 命名空间全部独立,可与上游插件并存而不冲突。

二、血缘与上游

项 值
上游仓库 https://github.com/AssassinVIX/fairy-zzz-plugin
上游包名 dsh-fairy-zzz
本分支包名 dsh-fairy-zzz-for-jediliu
许可证 MIT(继承上游)
眼徽 SVG Apache-2.0,改编自 Fairy-DSH(详见 NOTICE-fairy-dsh.md)

上游原版说明保留在 docs/upstream-README.md,便于对照。

三、本分支改了什么

1. 彻底改名,可与上游共存

改名不是改一个字段,而是一条链。本分支同步了全部标识点:

package.json name         dsh-fairy-zzz  →  dsh-fairy-zzz-for-jediliu
cordis.patch.yml 条目 id  fairy-zzz-skin →  dsh-fairy-zzz-for-jediliu-skin
服务端插件 name            fairy-zzz      →  dsh-fairy-zzz-for-jediliu
客户端注册 id              dsh-fairy-zzz  →  dsh-fairy-zzz-for-jediliu
HTTP 路由前缀              /fairy-zzz/*   →  /dsh-fairy-zzz-for-jediliu/*
localStorage 键            fairy.zzz.*    →  dsh-fairy-zzz-for-jediliu.*

漏掉任何一处,启动时会报 duplicate factory registration 并连带停用整个插件组合——这是本分支踩过并且修好的坑。

2. 动态问候语音(每天 17:00)

  • 插件装载后与每 30 分钟检查一次:17:00 之后若当日台词不存在,就用模型生成 5 个时段(morning/noon/afternoon/evening/night)的短句,每句 ≤ 20 字,并避开前一天的句子。
  • 台词写入 greet-gen/<YYYY-MM-DD>/<slot>.wav 与 texts.json。
  • 前端取用顺序:今日文件 → 最近一份 → 内置 assets/voice/。整条回落链保证「生成失败也有声音」。

3. 朗读摘要(长文本压缩)

POST /dsh-fairy-zzz-for-jediliu/summarize 把长回复压成一句中文结论(≤40 字)再朗读;短文本直接读全文。摘要使用自己的 API Key,与主对话互不影响。

4. 标记化朗读(推荐用法)

回复最后一行写:

【读·摘要】技术类回复的一句话结论
【读·吐槽】日常闲聊的一句话吐槽

插件优先朗读这一行,不受字数上限与技术词限制;没有标记时才回落到「≤80 字 + 非技术词」的启发式判断。这样朗读内容由回复作者显式控制,不必猜。

5. 自动朗读(观察式)

宿主不向消息组件传递文本,因此本分支改为观察 DOM 中最新一条回复:

  • 启动时先记录基线,刷新页面不会把历史消息重读一遍;
  • 文本连续稳定 3 次(约 4.5 秒) 才朗读,避开流式输出中途;
  • 同一条回复在流式里变长时不重复朗读(防回声);
  • 批量挂载超过 3 条时不触发(防页面刷新时连读)。

6. 眼徽可纵向拖动

Dock 相的眼徽支持上下拖动(X 轴锁死),用于避开正文;偏移存 localStorage,并夹在 ±40vh 内。

7. 安全与资源收敛

项 处理
POST /summarize 内存级限流 20 次/分钟,超限 429(防本机脚本刷爆额度)
POST /engine 启停引擎改为 POST(原 GET 可被跨站简单请求触发)
静态文件 resolve + startsWith 守卫,../ 与 %5c 均无法逃出 assets/
TTS 缓存 超 100MB 或 200 条时按最旧清理
问候语音 只保留最近 7 天
独立 agent 预设 已删除:本皮肤只负责视觉与语音,不替换宿主工具集

8. 语音播放统一管理

问候音与朗读音统一由 stopSpeech() 控制:朗读开始会先停掉问候音,避免两路音频叠放产生回声。

四、安装

# 以本地 link 方式安装到指定 profile
dsh plugin --profile desktop add "link:/path/to/dsh-fairy-zzz-for-jediliu"

或把它放进 profile 的 node_modules,并在 package.json 的 dsh.profile.bundles 中加入 dsh-fairy-zzz-for-jediliu。

安装后重启 DSH;皮肤会在整页刷新时加载。

五、配置

语音引擎目录

在插件目录下放置 voice-home.txt,内容为本地 GPT-SoVITS 引擎目录(一个包含 fairy_server.py、python\python.exe、GPT-SoVITS 的文件夹):

/path/to/your/tts

也可以在 DSH 的「设置 → Fairy」里填写,插件会自动写入同一文件。未配置引擎时皮肤照常工作,只是不朗读。

朗读摘要的模型

~/.dsh/fairy-tts.json:

{ "apiKey": "sk-...", "baseUrl": "https://api.deepseek.com", "model": "deepseek-chat" }

不配置则摘要不可用,朗读回落到「直接读原文/标记行」。

六、隐私与网络

  • 唯一的出网请求:/summarize 与动态问候生成时调用 baseUrl 指定的模型接口(默认 DeepSeek);其余网络请求全部指向 127.0.0.1。
  • 密钥只从本地配置文件读取,不写日志、不回传、不写进仓库。
  • 语音合成在本机完成,音频只落在插件目录的 cache/ 与 greet-gen/。
  • 仓库内不含任何机器相关路径、账号信息或预生成音频。

七、致谢与许可

  • 上游:AssassinVIX/fairy-zzz-plugin(MIT)
  • 眼徽几何与动效:Fairy-DSH(Apache-2.0,见 NOTICE-fairy-dsh.md)
  • 本分支代码同样以 MIT 发布,见 LICENSE

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.