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.tspreset;若并入官方仓库应改用该 preset 并补齐测试门禁。
Model Experience
None — 本插件只拥有客户端呈现,不贡献任何模型可见的 prompt / tool / event。
KV Cache effect
Independent — 不参与模型请求,不会使缓存复用失效。
License
MIT