Saltar al contenido principal
W

dsh-plugins (dsh-appearance-gallery)

wsxwj123/dsh-plugins/packages/dsh-appearance-gallery

Quince familias de temas seleccionados y nueve réplicas completas de skins de dsh-web-ui en un solo plugin detrás de una única entrada de configuración, con JSON de tema personalizado solo CSS, importación controlada de paquetes de skins personalizados mediante selector de carpetas, vista previa, aplicar, eliminar y restaurar valores predeterminados.

Instalar

dsh plugin --profile web add github:wsxwj123/dsh-plugins

Este plugin se encuentra en el subdirectorio packages/dsh-appearance-gallery del repositorio.

README

dsh-plugins 中文说明

这是一个用于 DeepSeek Harness 的插件集合仓库。仓库采用 monorepo 结构,每个插件放在 packages/ 下的独立目录里,互不影响。

English: README.en.md

当前插件

插件功能
dsh-appearance-gallery外观画廊:15 个主题家族 + 9 个完整 dsh-web-ui 皮肤复刻,合并为单一插件、设置页单一入口,支持自定义主题 JSON 与自定义皮肤包导入。
dsh-turn-scrubber在对话右侧显示回合刻度,悬停展开,点击跳转到对应用户回合。
dsh-pet-bridge桌面宠物状态桥:把 dsh 会话状态(思考中 / 读取文件 / 运行命令 / 完成)实时推送到 cc-pet 桌面宠物气泡。
dsh-session-manager会话删除(5 秒可撤销 + 回收站式硬删)与归档视图(查看/取消归档)。
dsh-composer-tools输入体验增强:方向键输入历史(首/末行门槛)+ 指令查看/编辑面板(全局+项目 AGENTS.md/CLAUDE.md)+ 提示词库(780 条,发送到输入框/复制)。

所有插件在 macOS 与 Windows 上均可使用。

界面预览

外观画廊(主题 + 皮肤)

外观画廊

会话管理(归档 + 回收站)

会话管理归档视图

输入体验增强(指令面板 + 提示词库)

指令与提示词面板

对话回合刻度

对话回合刻度

从旧版本升级(装过主题画廊 / 皮肤画廊的看这里)

dsh-theme-gallerydsh-skin-gallerydsh-skin-runtime 三个插件已合并为 dsh-appearance-gallery,原目录不再存在。已安装旧插件的用户需要卸旧装新,否则 dsh web 启动时会因插件目录消失而报 loader 错误。

macOS / Linux:

dsh plugin --profile web remove dsh-theme-gallery dsh-skin-gallery dsh-skin-runtime
dsh plugin --profile web add "link:$PWD/packages/dsh-appearance-gallery"

Windows(PowerShell):

dsh plugin --profile web remove dsh-theme-gallery dsh-skin-gallery dsh-skin-runtime
dsh plugin --profile web add "link:$PWD\packages\dsh-appearance-gallery"

换装后重启 dsh web 并刷新页面。你的外观设置不会丢:主题与皮肤的状态键完全沿用旧键,已应用的主题/皮肤、已导入的自定义主题与自定义皮肤在升级后原样保留,无需重新导入。

安装插件

先克隆仓库:

git clone https://github.com/wsxwj123/dsh-plugins
cd dsh-plugins

然后按需要安装某个插件(把目录名换成上表里的插件名即可):

dsh plugin --profile web add "link:$PWD/packages/dsh-appearance-gallery"

Windows(PowerShell)下把路径分隔符换成反斜杠:

dsh plugin --profile web add "link:$PWD\packages\dsh-appearance-gallery"

其余插件同理:

dsh plugin --profile web add "link:$PWD/packages/dsh-turn-scrubber"
dsh plugin --profile web add "link:$PWD/packages/dsh-session-manager"
dsh plugin --profile web add "link:$PWD/packages/dsh-composer-tools"

安装 dsh-pet-bridge 前需先安装 cc-pet 桌面宠物(它监听 127.0.0.1:7779 接收状态推送,pet 端代码无需修改):

dsh plugin --profile web add "link:$PWD/packages/dsh-pet-bridge"

dsh-composer-tools 需要先在包目录内 pnpm install && pnpm buildlib/ 不入库)。

安装完成后,重启当前 dsh web 进程,并刷新已有页面地址。不要另起第二个 Web 服务。

安装后请检查 ~/.dsh/profiles/web/node_modules/@deepseek-ai 是否被创建成真实目录。正常情况下它不应存在——出现真实目录意味着 profile 里多了一份框架副本,会导致 Cordis / Tool Symbol 分裂(工具调用报 Cannot read properties of undefined)。相关背景见 deepseek-harness discussion #783。本仓库所有插件已把框架包声明为 peerDependencies: "*",正是为了避免包管理器自动补装第二份副本。

仓库结构

packages/
  dsh-appearance-gallery/  # 外观画廊(主题 + 皮肤,含 9 套皮肤资源)
  dsh-turn-scrubber/       # 对话回合刻度
  dsh-pet-bridge/          # 桌面宠物状态桥(配合 cc-pet 使用)
  dsh-session-manager/     # 会话删除 + 归档视图
  dsh-composer-tools/      # 输入体验增强(方向键历史/指令面板/提示词库)

每个插件都有自己的源码、构建产物、package.jsoncordis.patch.yml、README 和更新日志。新增插件时在 packages/ 下新建独立目录,不把不同插件混在一个包里。

本地构建

pnpm build
pnpm check

仓库中的 DSH 运行时包被声明为可选 peer dependency,避免把第二份 DSH/Cordis 打进插件包。

dsh-appearance-gallerylib/client.jsbuild.mjs 生成,不可手工编辑:DSH 要求 bundle 执行后自行调用 window.__ModuleLoader__.load(...) 注册,这层注册壳只存在于构建产物中。node build.mjs --check 会校验产物的注册壳、体积上限与皮肤资源完整性,是只读检查,可放进 CI。

外观画廊

主题

提供 15 个主题家族:翠玉、陶土、余烬、星夜、蔷薇雾、紫晶、琥珀旧梦、墨川、苔境、日蚀、天际、晴蓝、黑白界、粉霞、紫雾。

插件只负责选择主题家族,浅色 / 深色 / 跟随系统仍由 DSH 自带的"外观"设置控制,两者不会互相覆盖。

皮肤

内置 9 款完整 dsh-web-ui 皮肤复刻(QQ2008 怀旧版、Windows XP、Minecraft、初音未来、蓝色幻想、龙的传人、同花顺、交易终端、鲸吟),每款支持试穿与应用。

自定义主题(CSS-only JSON 导入)

自定义主题只做 CSS 变量注入,不执行任何 JS。JSON 形状:

{
  "id": "my-jade-tweak",
  "label": "我的主题",
  "tokens": {
    "--dsw-alias-bg-base": { "light": "#fff", "dark": "#111" },
    "--dsw-alias-brand-primary": { "light": "#07c160", "dark": "#07c160" }
  }
}

必须含 idlabel、非空 tokens;每个 token 名必须以 --dsw- 开头,值是 { "light": 字符串, "dark": 字符串 }。导入后支持试穿 / 应用 / 删除 / 恢复默认。非法导入一律不改当前外观,并抛出带 code 的错误(见下文错误表)。

自定义皮肤(三文件受控导入)

my-skin/
├── skin.json      # 元数据(必含 id / name / author / license)
├── client.js      # 契约:注册 __ModuleLoader__.load 并导出 apply(ctx)
└── a11y.css       # 可选;缺失则降级(皮肤仍可用,仅无对比修正)
  • skin.jsonid / name / author / license 任一拒绝(author 与 license 必填,尊重 BSD-3 保留要求);声明 bodyAttr 时必须匹配 /^data-[a-z0-9-]{1,64}$/
  • client.js 必须 window.__ModuleLoader__.load({ id, factory })、factory 导出 apply(ctx),且 apply 只消费 ctx.effect / ctx.get
  • 高危能力拒绝:含 eval(new Function(import(、非内联 require(<script src=fetch(XMLHttpRequest(WebSocket(localStorage/sessionStorage 直读写、document.cookiechrome.runtime 任一的包拒绝导入。
  • a11y.css 只允许 data: 与相对路径的 url()http / // / file: / ftp / ws 一律拒绝(防止皮肤包向外部发起请求)。
  • 单包(skin.json + client.js)UTF-8 安全的 base64 后 ≤ 256KB;自定义皮肤总数 ≤ 8 个。

状态机与主题↔皮肤互斥

主题与皮肤各维护独立状态机(内置 + 自定义轨共用):

none ──import──▶ registry(未选) ──preview──▶ preview ──apply──▶ applied
  ▲                  │                                               │
  └───restore_default┴──delete(registry 移出;若为 applied 回默认)───┘
  • preview:仅运行时生效,刷新即丢,不写 applied 键。
  • applied:写入 applied 键,页面加载时按轨恢复。
  • 两轨经共享键 dsh-appearance-track-v1 软互斥('theme' | 'skin' | ''):同一时刻至多一个轨激活外观。

错误码

导入/操作失败统一抛 { code, message },且不改当前外观、不写任何 storage 键

code说明
ERR_IMPORT_INVALID_JSON主题 / 皮肤 JSON 解析失败
ERR_THEME_MISSING_FIELD主题缺 id/label/tokens 之一,或格式非法
ERR_THEME_BAD_TOKENtoken 名非 --dsw- 前缀,或值非 {light,dark} 字符串
ERR_THEME_ID_CONFLICT与内置主题 id 冲突
ERR_SKIN_MISSING_FILE缺 skin.json / client.js
ERR_SKIN_BAD_METAskin.json 缺 id/name/author/license,或 bodyAttr 格式非法
ERR_SKIN_CONTRACTclient.js 不满足 ModuleLoader/apply/ctx.effect 契约
ERR_SKIN_DANGEROUSclient.js 含高危能力(eval/fetch/…),或 a11y.css 含外部 url()
ERR_SKIN_SIZE单包 base64 后超 256KB
ERR_SKIN_COUNT自定义皮肤超 8 个
ERR_UNKNOWN_ID试穿/应用不存在的自定义 id
ERR_A11Y_MISSINGa11y.css 缺失(非致命,仅日志,皮肤仍可用)

提交到 DSH Plugins 目录

dshplugins.com 是独立的社区插件目录,不是 DeepSeek 官方站点。仓库必须公开,提交后进入人工审核队列,审核者会检查名称、摘要、安装类型、目标 profile、README 和安装命令。收录不等于安全背书,用户仍应阅读源码后安装。

本仓库适合按"Local checkout"类型提交,目标 profile 为 web。分别提交多个插件时,使用各自独立 README 的安装路径说明,避免用户把整个 monorepo 误当成单个插件。

许可证

MIT

Plugins relacionados