sakka6868/dsh-skin
DSH skin plugin: Alphacoders popular wallpapers as the DeepSeek Harness Web GUI background — gallery, search, local image upload, light/dark mask
이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.
dsh-skin-alphacoders
English | 中文
DSH 皮肤插件:把 Alphacoders 热门壁纸 设为 DeepSeek Harness Web GUI 的背景。符合 DSH 插件包规范的双半(Host + Client)Cordis 插件。


功能
- 壁纸库:设置面板新增「壁纸」分区,浏览 Alphacoders 热门壁纸(每页 15 张、可翻页、懒加载)。
- 搜索:按关键词搜索壁纸(走 Alphacoders 官方搜索页,单页最多 30 条);清除搜索恢复热门列表。
- 本地图片:点击「上传本地图片」选择 PNG/JPEG/WebP/GIF 文件即可设为壁纸;文件存于
$DSH_HOME/storages/skin-alphacoders/,重启后自动恢复;切换或移除壁纸时自动清理旧文件(磁盘上始终只保留一张本地壁纸)。 - 一键应用:点击缩略图即应用为背景;主表面(对话区、侧边栏)经主题 token 半透明化透出壁纸;设置面板与浮层(
--dsw-alias-bg-layer-2)保持不透明,设置窗口文字清晰可读。 - 浅深双主题壁纸(v2):浅色与深色主题各保存一张壁纸,切换明暗时自动跟随。
- 收藏(v2):画廊卡片右上角 ☆ 一键收藏,收藏持久化于
user-data.json,点击收藏卡即应用。 - 自动更换(v2):定时自动换壁纸——
随机(远程新鲜壁纸)/顺序(按收藏顺序轮换)/仅收藏(收藏中随机),另有「立即换一张」按钮;间隔 1~168 小时可调。 - 历史记录(v2):每张应用过的壁纸自动记录(最多 30 条),一键恢复旧壁纸。
- 显示控制:四种填充方式(铺满/完整/居中/拉伸)与 0~90% 遮罩强度,保证文字可读。
- 明暗联动:跟随 DSH 主题(
light/dark/system)自动切换遮罩色(浅色白雾、深色黑雾)。 - 持久化:偏好经 Host 的 settings 命名空间
ui-skin写入$DSH_HOME/settings.yaml,重启后自动恢复;收藏与历史存于$DSH_HOME/storages/skin-alphacoders/user-data.json。 - 性能:背景默认使用 1920px 变体(
thumb-1920-<id>),不为背景下载 5K/8K 原图;列表与搜索有内存 TTL 缓存。 - 干净卸载:移除插件行后 route、调度器、样式全部消失,GUI 恢复默认外观。
安装
方式一:npm 安装(推荐)
# 安装到 web profile(含构建产物,无需本地构建)
dsh plugin --profile web add dsh-skin-alphacoders
方式二:从源码构建安装
# 1. 构建本包(生成 lib/ 产物)
pnpm install && pnpm build # 或 npm install && npm run build
# 2. 安装进 web profile(从本包所在目录的上级执行)
dsh plugin --profile web add "file:<本包绝对路径>"
两种方式都需在 $DSH_HOME/profiles/web/cordis.patch.yml 中登记插件行:
# $DSH_HOME/profiles/web/cordis.patch.yml
- insert:
- id: skin-alphacoders
name: 'dsh-skin-alphacoders'
config:
cacheTtlMs: 3600000 # 可选:列表缓存 TTL(毫秒)
requestTimeoutMs: 20000 # 可选:抓取超时(毫秒)
重启 dsh web 生效;设置面板 → 「壁纸」分区即可使用。
提示:开发迭代时,可用目录联接把 profile 的
node_modules/dsh-skin-alphacoders指向源码目录(pnpm 的file:依赖默认硬链接复制,修改源码后需要重建联接或重新 add)。
架构
┌─ Host 半(node)─────────────────────────────────────────────┐
│ fetch + 解析 alphacoders popular-wallpapers?page=N │
│ (服务端渲染的 schema.org ImageObject,15 条/页) │
│ fetch + 解析 search/view?q=<关键词>(单页 ≤30 条) │
│ 内存 TTL 缓存(默认 1 小时) │
│ ctx.settings.register('ui-skin', SkinSettingsSchema) │
│ user-data.json(收藏 ≤200、历史 ≤30,原子写入) │
│ 自动更换调度器(setTimeout 链,按模式选池) │
│ HTTP route(经 ctx.webServer): │
│ GET /skin-alphacoders/wallpapers?page=N | ?query=Q │
│ GET /skin-alphacoders/settings │
│ POST /skin-alphacoders/settings (字段白名单 patch) │
│ GET /skin-alphacoders/user-data │
│ POST /skin-alphacoders/favorites(+ /favorites/remove) │
│ POST /skin-alphacoders/theme (当前主题上报) │
│ POST /skin-alphacoders/auto-change/now │
│ GET /skin-alphacoders/health │
└──────────────────────────────────────────────────────────────┘
同源 fetch(无 CORS 面)
┌─ Client 半(浏览器)─────────────────────────────────────────┐
│ skin-store:GET/POST settings route 的本地快照 + 订阅 │
│ user-data store:收藏/历史快照 │
│ 双主题镜像:theme/change 时把当前主题槽同步到扁平字段 │
│ (带 fromTheme 标记,不产生历史记录) │
│ background:body::before 壁纸层 + ::after 遮罩层 │
│ + ctx.theme.overrideTokens 表面半透明 │
│ (签名去重防 theme/change 重入风暴) │
│ settings.section「壁纸」:画廊 + 收藏 + 历史 + 自动换 + 主题 tab│
└──────────────────────────────────────────────────────────────┘
为什么不用 settingsScope 传输
api-proxy 的 settings 协议是 Host 白名单(locale、ui-theme 等),仓库外插件注册的 namespace 只会得到 settings-not-exposed。因此本插件在 Host 侧仍用 SettingsScope.update 持久化(owner seam 无白名单限制),浏览器侧改为经自己的 HTTP route 读写,持久化文档仍是 $DSH_HOME/settings.yaml 的 ui-skin 分节。
配置
| 字段 | 默认 | 说明 |
|---|---|---|
cacheTtlMs | 3600000 | 壁纸列表页内存缓存时长(毫秒) |
requestTimeoutMs | 20000 | 抓取 alphacoders.com 的超时(毫秒) |
版权与合规
- 壁纸版权归原作者与 Alphacoders 所有;本插件仅供个人使用,不批量下载或再分发壁纸。
- 请在网络策略允许访问
alphacoders.com与其图片 CDN(images*.alphacoders.com)的环境中使用。
验证
e2e/verify.mjs 是 Puppeteer(连接本机 Chrome)端到端验证:需先按上述步骤装好插件并启动 dsh --profile web --port 3090,再执行:
node e2e/verify.mjs
覆盖(39 项断言):画廊渲染、收藏往返、双主题独立壁纸、明暗联动、刷新持久化、历史恢复、自动更换(仅收藏模式)、搜索、本地上传与清理、收藏/历史持久化、无页面错误。
보안 및 설치 증거
이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.
공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.
저장소가 MIT 라이선스를 선언했습니다.
최근 180일 내 코드 업데이트가 있습니다.
재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.
검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.