dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
Signalight/codex-to-dsh-pet
Convert Codex desktop pets (spritesheet atlases) into DeepSeek Harness (DSH) web-GUI pets — zero-dependency renderer, drag/wave/jump interactions, live activity poses & progress bubbles. 把 Codex 桌宠移植为 DSH 网页桌宠的通用框架
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Signalight/codex-to-dsh-pet
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
🌐 中文 · English

把 Codex 桌宠(spritesheet 图集)移植为 DeepSeek Harness(DSH)网页 GUI 桌宠的通用框架 / 适配器。 本项目系通过DSH编写,有问题和报错还请指正,我们会不断调试。
⚠️ 本框架(构建脚本)不内置第三方桌宠素材。随附的运行时插件内置一只 示例桌宠
nastya(娜斯佳,原创角色,CC BY-NC 4.0),仅用于演示,详见 LEGAL.md。
packages/dsh-codex-pet 是一个运行时插件——装一次,之后在 DSH 设置里点按钮导入
.webp 图集即可,不用再跑命令行。支持换宠、大小、位置、气泡颜色/透明度,并内置
一只示例桌宠 nastya(娜斯佳,原创角色,CC BY-NC)。
安装(仅一次):
codex-to-dsh-pet 文件夹里打开 PowerShell(空白处 Shift + 右键 → 在此处打开 PowerShell);.\install-runtime.ps1
dsh web,浏览器硬刷新 http://127.0.0.1:3080(Ctrl+Shift+R)。之后加桌宠(全图形界面): 打开 设置 → 桌宠,点 导入桌宠,选一张 .webp
图集即可(可输入中文名,宠物 id 自动取自文件名)。详见
packages/dsh-codex-pet/README.md。
📢 给早期用户:如果你之前用下面「旧方法」给每只桌宠单独装过插件,它们仍然 有效,不会失效。想换到新方式:先跑一次上面的
install-runtime.ps1装上运行时 插件,之后新桌宠都用「设置 → 桌宠 → 导入」添加;旧的每宠插件可保留,也可先用.\select-pet.ps1停用,再手动删除profiles\node_modules\<宠物名>及补丁里的对应行。
开始前需要两样:① 电脑装了 Node.js(运行 node 用);② 已经装好、能跑起来的 DeepSeek Harness(DSH)。
第 1 步:拿到代码
codex-to-dsh-pet 文件夹;git clone https://github.com/Signalight/codex-to-dsh-pet.git第 2 步:打开 PowerShell(位置要对)
codex-to-dsh-pet 文件夹;窗口里光标前面显示着 ...\codex-to-dsh-pet,就说明位置对了。
第 3 步:放图集
把桌宠图集(.webp 图片)改名成你想叫的宠物名(如 nastya.webp),拖进 codex-to-dsh-pet 文件夹。
第 4 步:运行两条命令
在 PowerShell 窗口里依次输入下面两条,每条输完按 Enter:
node build.js
.\install-to-dsh.ps1
看到 Done. 就成功了。
第 5 步:重启并刷新
重启 dsh web,然后在浏览器硬刷新 http://127.0.0.1:3080(Ctrl+Shift+R),桌宠就出现在右下角了 🎉
常见报错:
- 出现「禁止运行脚本」→ 先输入
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned回车(选Y),再重跑第 4 步。- 出现「
node不是内部或外部命令」→ 还没装 Node.js,去 nodejs.org 装一下。- 装了多个桌宠后想切换,用
.\select-pet.ps1(见下文)。
把一张 Codex 桌宠的 spritesheet 命名成你的宠物名(如 fluffy.webp)放进本目录。
插件名会自动取自这个文件名——一张图集 = 一个插件。
name / label 不用填(自动从图集文件名推导)。只有需要改尺寸、归一化、
气泡文案等时才建 config.json:
Copy-Item config.example.json config.json
config.json 字段(name/label 可省略,缺省取图集文件名):
| 字段 | 说明 | 默认 |
|---|---|---|
name |
插件名(也是 node_modules 目录名 / 注册名) | 图集文件名 |
label |
悬浮层里显示的标签 | 图集文件名 |
spritesheetPath |
图集相对路径 | 自动检测 |
spriteVersionNumber |
图集版本:1(8×9)或 2(8×11,含注视帧) |
自动检测(按图集尺寸 1872/2288) |
size |
显示宽度 px | 120 |
pin |
初始位置(bottom-right / bottom-left / …) |
bottom-right |
normalize |
可选:逐行尺寸归一化 [null, …, { s, cx, cy }, …] |
无 |
look.enabled |
是否开启「眼睛跟随鼠标」;旧版桌宠(无注视帧)设为 false |
true |
look.deadzone |
注视死区(px,指针距桌宠中心小于该值不触发) | 28 |
bubble.enabled |
是否显示进度气泡 | true |
bubble.maxChars |
流式文本截取长度 | 140 |
bubble.runningText |
工具运行时文案({tool} 会被替换成工具名) |
运行中:{tool}… |
bubble.workingText |
工作但无工具名时的文案 | 工作中… |
bubble.thinkingText |
思考时的文案 | 思考中… |
💡 版本自动识别:build.js 会按图集尺寸自动判断 v1/v2——高 1872px = v1 (9 行,无注视帧,自动关闭鼠标追踪),高 2288px = v2(11 行,含 16 方向注视帧, 自动开启鼠标追踪)。所以一般不需要手动设
spriteVersionNumber;只有当你的图集 不是标准尺寸时,才需要在config.json里显式指定。
node build.js
会自动检测图集、从文件名推导宠物名,生成自包含的 lib/client.js 和
config.effective.json。
只想构建指定的一张图集时,可以用一步命令(写 config.json + 跑 build.js):
.\build-pet.ps1 nastya # 名字与图集文件名一致
.\build-pet.ps1 nastya -NodePath C:\path\to\node.exe # 指定 node 路径(一般不用)
构建后可以运行冒烟测试验证产物:
node verify-bundle.cjs
.\install-to-dsh.ps1
脚本会自动定位 DSH home,复制插件到 <DSH home>/profiles/node_modules/<name>,
并注册到 <DSH home>/profiles/web/cordis.patch.yml(幂等、自动备份)。
DSH home 定位(
install-to-dsh.ps1/select-pet.ps1通用,按序探测):
$env:DSH_HOME(若已设置则优先);~/.dsh(命令行版 dsh 的常规位置,存在才用);%APPDATA%\io.github.hairyf.deepseek-harness-desktop\data\dsh(DeepSeek Harness 桌面应用的数据目录)。命令行版用户通常在
~/.dsh;桌面应用版用户通常在%APPDATA%\...\data\dsh。 注意:桌面应用不会把DSH_HOME导出到你的终端,脚本靠上面的探测自动找到。 探测逻辑统一放在dsh-home.ps1(install / select 脚本共用),想自定义改它即可。
dsh web
然后在浏览器硬刷新 http://127.0.0.1:3080(Ctrl+Shift+R),桌宠就出现在右下角了。
安装了多个桌宠后,用 select-pet.ps1 切换激活状态:
.\select-pet.ps1 # 交互菜单:输入序号切换,q 保存退出
.\select-pet.ps1 -List # 只查看当前状态,不修改
它会扫描 node_modules 里所有桌宠插件(dsh.client 包),列出激活状态,并把你的
选择写回 cordis.patch.yml(自动备份)。改完重启 dsh web + 硬刷新即可生效。
Codex 桌宠图集是固定布局的精灵图:
| 项 | 值 |
|---|---|
| 帧尺寸 | 192 × 208 px |
| 列数 | 8 |
| v1 行数 | 9(1536 × 1872) |
| v2 行数 | 11(1536 × 2288,第 9、10 行是 16 方向注视帧) |
逐行动画(帧间隔 ms):
| 行 | 动画 | 帧数 | 间隔 |
|---|---|---|---|
| 0 | idle 待机 | 6 | 160 |
| 1 | runningRight 向右跑 | 8 | 120 |
| 2 | runningLeft 向左跑 | 8 | 120 |
| 3 | waving 挥手 | 4 | 140 |
| 4 | jumping 跳跃 | 5 | 140 |
| 5 | failed 失败 | 8 | 140 |
| 6 | waiting / sleeping 等待·睡觉 | 6 | 150 |
| 7 | running 奔跑 | 6 | 120 |
| 8 | review 审阅 | 6 | 150 |
| 9–10 | look(16 方向注视) | 16 | — |
.
├── config.example.json # 示例配置
├── build.js # 内联图集 + 配置 → lib/client.js(名字取自图集文件名)
├── verify-bundle.cjs # 构建产物冒烟测试
├── build-pet.ps1 # 一条命令构建指定桌宠(可选 -NodePath)
├── dsh-home.ps1 # 共享的 DSH home 探测(install / select 共用)
├── install-to-dsh.ps1 # 一键安装
├── select-pet.ps1 # 选择激活哪个桌宠
├── README.md # 中文说明
├── README.en.md # English README
├── lib/
│ ├── index.js # 宿主(Node)半身
│ ├── client.template.js # 浏览器半身源码模板
│ └── client.js # 构建产物(build.js 生成,已 gitignore)
├── LEGAL.md # 版权与许可说明
└── LICENSE
# 复用与安装脚本相同的 DSH home 探测(dsh-home.ps1)
. .\dsh-home.ps1
$profileDir = Join-Path (Get-DshHome) 'profiles\web'
$nodeModules = Join-Path (Split-Path -Parent $profileDir) 'node_modules'
Remove-Item -Recurse -Force (Join-Path $nodeModules '<name>')
Copy-Item "$profileDir\cordis.patch.yml.bak" "$profileDir\cordis.patch.yml" -Force
# 然后重启 dsh web
packages/dsh-codex-pet:装一次即可,图形界面导入桌宠(webp/png/gif)、换宠 / 大小 / 位置 / 气泡颜色与透明度;示例桌宠改用原创角色 nastya(娜斯佳),按 CC BY-NC 4.0 授权(详见 LEGAL.md)。README.en.md),README 顶部增加中/英切换链接;并给 GitHub 仓库添加了简介(description)与标签(topics,含 dsh-plugin)。anaxa,改用原创角色 nastya。dsh-home.ps1(install / select 脚本与 README 回滚代码统一引用);build-pet.ps1 新增 -NodePath 参数,不再依赖作者本机路径;select-pet.ps1 保存时保留注释位置与非桌宠补丁条目,与 install-to-dsh.ps1 行为一致。build.js 自动检测忽略仓库自带的 banner.png(此前必报「多张图集」);install-to-dsh.ps1 / select-pet.ps1 支持 DSH_HOME 三级探测($env:DSH_HOME → ~/.dsh → 桌面应用 %APPDATA%\...\data\dsh);install-to-dsh.ps1 写补丁时丢弃 [] 占位符,修复生成的 cordis.patch.yml 为非法 YAML 的问题。const 用 IIFE 包裹),现在可同时开启多个桌宠。build.js 按图集尺寸自动识别 v1/v2(高 1872px=v1、2288px=v2),v2 自动开启鼠标追踪,无需手填 spriteVersionNumber。spritesheetPath 过期时自动回退;新增 select-pet.ps1 切换激活。look 配置(旧版 v1 桌宠可关闭注视);README 增加「极简安装方法」。nastya(娜斯佳)为原创角色,其图集按 CC BY-NC 4.0(署名-非商业性使用)授权。感谢@tuskinekinase 提供灵感和鼓励~
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: desktop-pet、pet、web-ui。