dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
一只住在 DeepSeek Harness 里的桌面宠物:待机呼吸、随机动作(打瞌睡、玩魔方、吃火锅……)、左右转向、屏幕漫游、点击 Q 弹、拖拽甩抛反弹、右键菜单点播——一百余个透明动画随时无缝衔接;还能跟随 DSH 会话事件切换工作状态动画、按档位播放余额动画 + 头顶气泡、碎碎念与对话聊天、窗口失焦时弹系统通知。可多开同屏,能脱离浏览器住上桌面(透明置顶小窗),也能自己添加全新宠物种类(pet pack)。
这不是一个普通插件,而是完整的三件套项目:
① 提示词(配方) → ② 素材生成链(引擎) → ③ 插件(成品)
AI 生成动画的配方 源视频 → 透明动画的管线 运行在 DSH 里的宠物任何人 clone 本仓库,都可以从零生成自己的桌面宠物——换角色、换动作、换风格,全流程可复现。
装法取决于你在用哪个 DSH:
直接在应用内「插件管理」页的安装框里填 dsh-pet,不用开终端;需要在终端里操作插件时,用桌面应用自带的那份 CLI。
dsh web以下命令都在你的命令行终端(PowerShell / CMD 等)中运行。前提是 DSH 环境已就绪:
# ① 前置要求:确认 Node.js 已安装
node -v
# ② 安装 DSH 启动器与 pnpm(已装可跳过;装完请重新打开终端)
npm install -g @deepseek-ai/dsh pnpm
dsh --version # 验证 dsh 命令可用
# ③ 安装本插件(web 模式用 --profile web)
dsh plugin --profile web add dsh-pet装完重开桌面应用(dsh web 用户则重启 dsh web)才生效——运行中的进程持有内存里的旧插件。宠物出现在界面右上角(默认配置角落,可在设置页修改)。
兼容性:本插件当前在 dsh `0.2.1-rc.2` 下开发并测试(dsh --version 可查看你的版本)。建议使用相同版本;其他版本如遇问题欢迎反馈。lib/ 构建产物不入库,clone 后需要先构建再安装:
# ① clone 本仓库,进入插件目录
git clone https://github.com/PC2005-cloud/dsh-pet.git
cd dsh-pet/dsh-pet
# ② 安装依赖
npm install
# ③ 构建(完整 lib:tsdown → lib + 桌面共享核心 + 类型声明)
npm run build # 必须手动跑一次(克隆后 npm install 不再自动构建)
# ④ 安装到 DSH(file: 指向**插件目录**——上面 cd 进去的那一层,用构建好的 lib)
# --profile 填实际在用的那个:dsh web → web;
# 桌面应用(Electron 版)改用应用内「插件管理」安装,见上方快速开始
dsh plugin --profile web add file:D:/path/to/dsh-pet/dsh-pet注:npm run build(即scripts/prepare.js)才产出完整可安装的 lib——除 tsdown 构建外还构建桌面共享核心(shared-core.js)、生成类型声明并收敛发布files清单;裸tsdown构建会缺桌面运行时与类型。发布与打包(npm publish/npm pack)时由prepack自动调用它,克隆仓库后需手动跑一次。
默认配置是 display: "both"(浏览器与桌面都显示),所以重开 DSH 之后会依次出现两处,不必手动开:
~/.dsh/electron,同一版本只下一次;默认走 npmmirror 镜像)。进度直接打在 DSH 的控制台里,形如:[dsh-pet] Electron not found, downloading to <用户目录>/.dsh/electron/electron.exe ...
[dsh-pet] Electron not found, downloading v43.3.0 (win32-x64) ...
[dsh-pet] downloading 42.3MB / 104.1MB
[dsh-pet] download complete (37.5s), extracting to <用户目录>/.dsh/electron ...这一步在后台进行,浏览器里的宠物照常可用;要等多久取决于网速(几十秒到几分钟),期间不用管它。
已经装过 Electron(或设了DSH_PET_ELECTRON_PATH指向现成可执行文件)时,第 2 步会跳过,桌面端几乎立刻出现。下载失败只影响桌面模式:控制台会给出提示,浏览器里的宠物不受影响;网络受限时可以设DSH_PET_ELECTRON_MIRROR换镜像、DSH_PET_ELECTRON_VERSION指定版本,重启后再试。
欢迎提 issue 与 PR——bug、体验问题随时反馈。新功能请先开 issue 说明使用场景,由维护者判断是否实现、以及放在插件本体还是作为第三方扩展,不要在确认前直接提交实现 PR。与桌宠本身关系不大、或实现特别复杂的功能,通常不会进本体,而是通过现有接口由第三方扩展实现。动手前也请先翻一眼 提交记录,确认不是已经修掉的同款问题(有些问题可能已经在 main 上修好了,只是还没发版)。
main 上已经修了」不等于「你装的这版已经包含」——latest 没更新时,以 main 的提交记录为准。dsh 版本、操作系统、复现步骤(有日志或截图更好)。config.jsonc 可调),首尾相接dsh-pet/src/shared/physics.ts)dsh://open 协议把桌面应用主窗口唤到前台(已运行则前置、未运行则拉起);宿主是 dsh web / 独立模式时,仍是系统默认浏览器打开站点pet/ 下建 种类名-config.json + 种类名-animation/ 即新增独立动画池与素材的全新种类,多实例共享素材(见「配置 → 方式四」)main-animation/webm/ 放 VP9-Alpha 的 .webm 即为新动画,优先于包内素材prefers-reduced-motion(减少动效时跳过 Q 弹挤压与淡入切换)桌宠不只自己玩,也对外开放两条调用通道,让别的插件或脚本能驱动它、读它的状态。
/dsh-pet-7340,只监听本机、无鉴权),跨进程、脚本可直接调。动作类接口只回 {ok},数据统一从 GET /state 读ctx.get('petApi7340') 直接取,零网络、零端口;只在该页面实例内有效,方法与返回见 CORDIS.md相关文件(HTTP 与 Cordis 各一套):
API.md —— HTTP 接口一览(每个接口一句话,功能预览)openapi.yaml —— 完整契约(OpenAPI 3.1,可直接导入 Swagger UI / Postman)CORDIS.md —— 对外 Cordis 服务(客户端半侧,页面内 ctx.get('petApi7340'),不走网络)tools/api-tester.html —— HTTP 侧示例:桌宠控制台,扮演第三方消费方,可直观试用(node tools/api-tester.cjs 启动)tools/cordis-probe —— Cordis 侧示例:扮演同页客户端插件,用 ctx.get() 消费服务electron.exe / Electron.app / linux 单文件),无需手动安装DISPLAY / WAYLAND_DISPLAY 时判定无显示、跳过桌面窗口,仅日志告警),浏览器 overlay 不受影响.mov 素材(GitHub Release assets-mov),下载放入即可(见「②.5 Safari/HEVC 兼容素材」)插件内建双模式:安装后默认会拉起独立透明置顶小窗——为每只桌面宠物各开一个局部窗口(跟随宠物移动,不铺满屏幕),与浏览器 overlay 严格同行为、功能完全对齐:
~/.dsh/electron/,也可 cd dsh-pet && npm run ensure:electron 手动触发);缺失时仅日志告警,不影响浏览器形态web = 仅浏览器 / desktop = 仅桌面 / both = 两者 / none = 都不显示;桌面模式渲染 display 含 desktop 的全部宠物(多开同屏,与浏览器一致),设置页「桌宠配置」编辑即时生效cd dsh-pet && npm run start:desktop -- http://127.0.0.1:3080/dsh-pet-7340/config(无宿主时自动回落 HTTP 路径)连 DSH 都不用开:插件的宿主半边跑在伪 ctx 上,由一个本机 HTTP 服务接管路由(路由表仍是插件那一份)。
npm install -g dsh-pet # 必须 npm 装;dsh plugin add 装进 profile,bin 不在 PATH 上
dsh-pet-standalone # http://127.0.0.1:3080/dsh-pet-7340/(占用则顺延)
dsh-pet-standalone --check # 只体检
dsh-pet-standalone --port 3100
npm run build && npm run standalone # 仓库里(先构建)reason 的结构化失败(见 API.md)。$DSH_HOME/dsh-pet/main-config.jsonc → 包内默认)。Ctrl+C 或 POST /shutdown 退出。%APPDATA%\dsh-pet-electron-helper,可能互相踩缓存(仅告警)。按 eventsRefreshSec.balance(秒)周期拉取当前服务商的余额/用量数据,每次刷新按档位触发一次余额动画,并在宠物头顶弹出联想气泡(随宠物大小等比缩放,10 秒自动消失):
余额 ¥8.79);余额按 ¥20 满额折算成已用百分比,分 6 档播放动画(钱袋满溢 → 金袋叮当 → 钱袋如常 → 数金皱眉 → 袋空如洗 → 分文不剩)周额度已用 88% / 2.5 天重置),同样按已用百分比分档/balance 或桌面右键「查看余额」则每次都会弹pets[i].balanceEnabled(必填布尔)控制该宠物是否触发余额动画/显示气泡deepseek-official → DEEPSEEK_API_KEY;opencode-go → OPENCODE_GO_API_KEY;commandcode → COMMANDCODE_API_KEY),在 DSH 凭据中配置后启用;未匹配的服务商不触发动画,改为弹上面的文字说明气泡pets[i].whisperEnabled 开启后,按 eventsRefreshSec.whisper(秒,默认 300)周期自动生成一句——每只宠物独立周期、独立文案;触发时随机抽 events.whisper 动画 + 头顶说话气泡(10 秒消失)。默认开启whisperEnabled 门控(该字段只关自动周期轮询)/chat 命令打开输入框,与宠物聊天——回复走碎碎念同款展示(说话动画 + 气泡);记忆持久化在 $DSH_HOME/dsh-pet/memory.json,浏览器与桌面共享同一份;多宠物时先用 /pet 选择对话目标pets[i].workStatusEnabled 开启后,宠物跟随 DSH 会话活动切「思考 / 工作 / 整理 / 等待 / 成功 / 出错」六档动画 + 头顶气泡:非终态动画循环播、气泡常驻;成功 / 出错播一遍、气泡 10 秒自动收起。
animations.events.workStatus 数组,索引即档位(勿在中间插入新档,只可追加末尾)workStatusTexts 每档可配多句随机,任务详情(todo)优先string | string[]——数组 = 档内随机抽 1,循环播放自动轮换、避免连播同一段(余额 / 碎碎念档位同样适用)桌宠的大小、位置、多开均可配置,两条途径:
💡 两条途径只是编辑入口不同,最终都是同一份用户配置——配置能力远不止设置页那几个选项:设置页可改大小/位置/边距/显示位置/余额开关/多开,但手动编写配置文件可以任意自由配置(动画池、播放权重、事件动画、刷新周期……),只要格式与包内默认配置 `config.jsonc` 一致即可,用户配置会整体覆盖对应字段的默认值。
DSH 设置 → 「桌宠配置」:
config.jsonc 的原文(含注释与全部高级字段)整份写入用户配置——既回到默认,又留下一份可直接编辑的完整配置插件包内 dsh-pet/assets/config.jsonc 的 pets 数组定义默认宠物:
"pets": [
{ "id": "main", "size": 462, "balanceEnabled": true, "display": "both", "position": { "corner": "top-right", "marginX": 24, "marginY": 100 } }
]id(标识)/ size(宽度 px)/ balanceEnabled(是否启用余额功能,必填布尔)/ display(web/desktop/both/none,必填,见上)/ position(corner 四角之一 + marginX/marginY 边距)eventsRefreshSec.balance(秒)——余额数据刷新与余额动画触发的间隔,启动时立即触发一次,之后按此周期循环(默认 1800)$DSH_HOME/dsh-pet/main-config.jsonc(完整宠物列表,覆盖包内默认);「同步」把包内 config.jsonc 原文整份写入该文件(等价于回落默认,但文件保留下来、可直接编辑)用户层配置文件位于 $DSH_HOME/dsh-pet/main-config.jsonc。它和包内默认配置是同一套格式——想改什么直接照着 assets/config.jsonc 的结构写即可,写错的字段/缺失的字段回落默认,无需(也无法)写完整份。设置页「同步」可直接生成这份完整文件(原文复制包内 config.jsonc,注释齐全):
字段 · 作用 · 格式与默认一致即可 pets · 宠物列表(大小/位置/多开/余额开关) · 数组,每项同 pets[] 结构 animations · 动画池:idle / turn / drag / clicks / moves / categories / events(余额等事件动画) · 同 animations 结构 animationWeights · 动画链播放权重(idle / turn / move) · 同 animationWeights 结构 eventsRefreshSec · 事件刷新周期(秒) · 同 eventsRefreshSec 结构 notificationsEnabled · 系统通知总开关(布尔) · 同 notificationsEnabled
覆盖语义:用户层给出即整体替换该字段(如写了 animations 就用你的整份动画池,替代默认),没写的字段回落包内默认。校验在插件加载时执行——格式错误会在 DSH 控制台显式报错,不会静默运行残缺配置。方式一~三都只调整默认宠物的实例(数量/大小/位置),动画池始终是全局一份。要添加全新种类的宠物(独立动画池 + 自己的素材),在用户数据根下建 pet/ 目录:
$DSH_HOME/dsh-pet/
├─ main-config.jsonc ← 主宠物配置(现有,不动)
├─ main-animation/webm/*.webm ← 主宠物素材(现有,只属于 main)
└─ pet/
├─ pig-config.json ← 额外宠物 pig 的配置(命名词干 = 种类名,实例 id 任意)
└─ pig-animation/*.webm ← pig 自己的动画素材(直接平铺,仿 main-animation)每只额外宠物 = 一个 -config.json + 一个 -animation/ 目录,同前缀配对;扫描 pet/ 自动发现,浏览器与桌面同时生效。一个 -config.json 定义一个「种类」(动画池 + 素材目录),pets 数组可放该种类的任意多只实例(共享动画池与素材):
// pet/pig-config.json —— 与 main-config.jsonc 同构的完整配置
{
"notificationsEnabled": true,
"pets": [
{
"id": "pig1", // 实例 id(可多只;不必等于文件名前缀)
"size": 420,
"balanceEnabled": true,
"display": "both", // web / desktop / both / none
"position": { "corner": "top-right", "marginX": 24, "marginY": 100 }
},
{ "id": "pig2", "size": 360, "balanceEnabled": false, "display": "web", "position": { "corner": "top-left", "marginX": 24, "marginY": 100 } }
],
"animations": {
"idle": ["待机"], "turn": [], "drag": [], "clicks": ["打滚"],
"moves": { "default": { "minDist": 80, "maxDist": 360, "margin": 20, "leadSec": 2, "tailSec": 2 }, "actions": [] },
"categories": [],
"events": { "balance": ["余额-钱袋满溢", "余额-金袋叮当", "余额-钱袋如常", "余额-数金皱眉", "余额-袋空如洗", "余额-分文不剩"] }
},
"animationWeights": { "idle": 80, "turn": 0, "move": 0 },
"eventsRefreshSec": { "balance": 1800 }
}规则(与主宠物严格隔离,绝不混用):
pet/pig-config.json → pet/pig-animation/),该种类所有实例共用;动画 URL /thumb//.webm,查不到即 404——绝不落到 main-animation 或包内素材animations / animationWeights 必须写全(缺失即配置错误)pets 每只字段完整合法、数组内 id 唯一、animations / animationWeights 结构校验同一套规则;notificationsEnabled / eventsRefreshSec 是全局属性,不归宠物文件管(写了忽略、不写不报错)-animation/ 目录 / 实例 id 与主宠物冲突 → 加载时显式报错并跳过(不影响其他宠物)main-config.jsonc)events.balance宠物实际运行在 DSH Web 界面中的样子:
全部动画(640×360,插件实际播放用的资源)——GIF 预览存放于仓库 dsh-pet/assets/preview/(raw 直链渲染,文件名采用拼音便于跨平台);完整透明视频见插件包 dsh-pet/assets/webm/(VP9-alpha,唯一发布格式):
待机 / 转向
移动