dsh-four-seasons-theme

August 14, 2026 · View on GitHub

为 DeepSeek Harness Web GUI 打造的四季主题插件:季节配色、动态天气粒子、昼夜模式、月相、流星与可收放的夜灯。

特性

  • 四季配色:春(绿+粉)/ 夏(蓝+绿)/ 秋(橙+棕)/ 冬(蓝灰),每季各有浅色、深色两套,自动适配系统明暗。
  • 季节飘落粒子:花瓣 🌸 / 雪糕 🍦 / 落叶 🍂 / 雪花 ❄,受风速影响偏移与摆动。
  • 天气特效:太阳 / 月亮 / 云 / 雨 / 雷(闪电)/ 风 / 流星。
  • 两个正交维度:主题来源(季节 / 现实时间 / 本地天气)× 昼夜(自动 / 白天 / 夜晚)。
  • 现实时间模式:早=季节色,12–14 点=暖色午间,18–6 点=深蓝夜空。
  • 本地天气:输入地址,浏览器端直连 Open-Meteo 获取实时天气,自动映射为「季节 + 天气 + 昼夜」组合。
  • 月亮:随实际时间盈亏,越接近午夜越满(不复刻天文月相,纯按时钟)。
  • 夜灯:夜间左上角悬挂灯泡,可点击开关、可收起/放下。
  • 持久化:所有设置写入 DSH 用户设置文档,刷新页面不丢失。

安装

# 从 GitHub(社区插件标准方式)
dsh plugin --profile web add github:czj527/dsh-four-seasons-theme

# 或从 npm
dsh plugin --profile web add dsh-four-seasons-theme

dsh web

首次安装 Git 托管插件时,pnpm ≥10 会因 prepare 构建脚本要求 allowBuilds:首次 add 会失败并提示应修改该 profile 的 pnpm-workspace.yaml,把输出的键复制进去后重跑即可。安装 npm 包则无此要求。

使用

侧栏底部「设置」→「四季主题」:

分组选项说明
主题来源季节 / 现实时间 / 本地天气决定配色、天气、自然昼夜从哪来
昼夜自动 / 白天 ☀️ / 夜晚 🌙覆写昼夜;「夜晚」即一键夜间模式
季节自动 / 春 / 夏 / 秋 / 冬仅来源=季节时显示
天气晴 / 多云 / 阴 / 雨 / 雷仅来源≠本地天气时显示
地址输入城市 →「获取天气」仅来源=本地天气时显示
粒子密度0–100% 滑块实时联动季节/雨/风粒子数量
风速无风 / 微风 / 大风控制粒子偏移与雨斜角
夜灯收起 ⬆/放下 ⬇ + 开/关 💡仅夜晚时显示
粒子效果开 / 关总开关

架构

双端插件包,一个包同时提供 Host 与 Client 半区:

  • Host 半区 src/index.ts:用 ctx.settings.register 注册 four-seasons-theme 设置命名空间(zod schema + 默认值),由 settings 提供方(settings-file)落盘到用户设置文档。
  • Client 半区 src/client/index.tsx
    • ctx.settingsScope.bind({ namespace }) 读取/写入设置(getSnapshot() 读、set(field, value) 写)。
    • shell.overlay 渲染全屏粒子与天空;settings.section 渲染设置页。
    • 白天用 theme.overrideTokens 叠加季节色(自动适配浅/深);夜晚用 theme.register({ colorScheme: 'dark' }) + theme.setTheme 切到真实深色 colorScheme,避免浅色原生控件与深色背景冲突。
  • 纯逻辑 src/client/theme.ts:调色板、场景解析、月相、粒子数量、天气码映射,无 React 依赖。

依赖版本说明(重要)

本包把 @deepseek-ai/dsh-* 依赖精确锁定在 0.1.0-rc.6(DSH 的 next 版本线),并把 @deepseek-ai/cordis 锁到 ^4.0.1@deepseek-ai/schemastery 锁到 ^3.18.1

原因:DSH 的 npm latest dist-tag 目前是陈旧的——指向 0.0.1-rc.1,其依赖图引用了已改名、未发布的 @deepseek-ai/dsh-compact,用 * / latest 解析会 404。请勿把版本范围放宽回 *

构建(开发者)

pnpm install
pnpm run build   # tsdown 产出 lib/{index,invariant,client}.js 与 d.ts

发布

# npm
npm publish

# GitHub(推送到本仓库即可,社区用户用 github: 安装)
git push

Known Limitations

  • 天气请求在浏览器端直连 Open-Meteo(免密钥、CORS 开放),未走 Host web 服务 / Typert Remote;若部署要求网络请求必须走 Host,需把该逻辑移到 Host 半区并注册 Remote 方法。
  • 仅持久化地址,天气结果不落盘;切换来源或重开面板后需重新点「获取天气」。
  • tsdown 配置为最简版,未复用 DSH monorepo 的 packages/client/tsdown.client.ts preset;若并入官方仓库应改用该 preset 并补齐测试门禁。

Model Experience

None — 本插件只拥有客户端呈现,不贡献任何模型可见的 prompt / tool / event。

KV Cache effect

Independent — 不参与模型请求,不会使缓存复用失效。

License

MIT