dsh-peak-hours: Display Beijing peak hours badge in DSH session top bar.

前言

DeepSeek Harness(DSH)的理念是「一切皆插件」,会话界面里的每个角落理论上都能由插件扩展。但实际写一个顶栏插件要处理几件事:往会话顶栏工具行注册自己的组件、适配浅色/深色主题、把用户设置持久化——其中最后一步在第三方插件这里还有额外限制。

dsh-peak-hours 是一个把这些问题都走通一遍的小插件:它在会话顶栏显示一个「高峰时段」状态徽章,按北京时间判断当前是否处于 09:00–12:00 或 14:00–18:00,并附带当前北京时间。打开会话就能看到状态,不需要切出去核对时间。

下面按功能、原理、安装、使用的顺序介绍。

这是什么

dsh-peak-hours 是一个 DeepSeek Harness 插件,作者 lco117,MIT 许可证(© 2026 lco117),当前版本 0.1.0。社区目录将其归入「趣味换装」类(该分类来自目录页标注)。

它解决一个具体问题:在 dsh web 会话顶栏常驻显示当前北京时间是否处于高峰时段。判断逻辑始终以北京时间为准——把绝对时间戳平移 UTC+8(无夏令时),不受机器所在时区影响。

核心功能

  • 会话顶栏徽章:显示在对话区域顶部工具行,位于「会话日志下载」左边。
  • 始终北京时间:按 UTC+8 平移判断,无论机器在哪个时区,状态都正确。
  • 两个高峰区间09:00–12:0014:00–18:00,半开区间——12:00:00 与 18:00:00 属于非高峰。
  • 每 15 秒自动刷新:到达区间边界后最多 15 秒内状态翻转,无需刷新页面。
  • 语言可配置:在「设置 → 通用 → 徽章语言」选择中文或 English,选择持久化,重启后保持。
  • 跟随主题:使用外壳语义色 token(--dsw-alias-*),浅色/深色主题下都协调。
  • 零延迟:纯客户端时间计算,没有网络请求,也没有额外模型调用。

显示规则:高峰期间显示「🔴 高峰时段」加当前北京时间,其余时间显示「🟢 非高峰时段」,鼠标悬停可查看完整区间说明。

工作原理

插件分两个半:

  • client.js(浏览器半):挂载时及每 15 秒读取 new Date(),转换为北京时间的钟面分钟,对照两个半开高峰区间判断;把徽章注册进 conversation.session.header.utilities(排在会话日志工具左边),并把「徽章语言」选择行注册进 settings.general.item
  • index.js(Host 半):注册 peak-hours 设置命名空间(language 字段,默认 zh),以及一个宿主进程内私有 loopback RPC 通道 /peak-hoursget/set),供浏览器半读写语言设置。

有两处设计决策值得说清楚:

为什么语言设置走私有 RPC 通道而不是 settings RPC? dsh-host-apiproxy 只对显式白名单(WEB_SETTINGS_NAMESPACES / PRODUCT_SETTINGS_NAMESPACES)内的命名空间开放 settings 读写,第三方插件注册的命名空间会收到 settings-not-exposed,选择无法持久化。因此浏览器半走宿主进程内私有通道(ctx.connection.rpc.handle),宿主内对 ctx.settings 的读写不受该白名单限制,持久化保持不变。

为什么高峰判断放在客户端? 需求是「当前系统时间转为北京时间」。浏览器时钟就是系统时间,UTC+8 平移是常量,本地计算即可——没有 Host RPC 往返,也没有额外失败点。

安装与启用

要求已安装 dsh CLI 并初始化过 profile(dsh plugin --profile <name> add 会自动初始化)。

从 GitHub 直装:

dsh plugin --profile web add github:lco117/dsh-peak-hours

纯 JS 包,没有构建脚本,运行时依赖只有 @deepseek-ai/schemastery ^3.18.1,不需要 pnpm ≥10 的 allowBuilds 许可,直装即用。官方文档建议固定提交安装:

dsh plugin --profile web add github:lco117/dsh-peak-hours#<commit-sha>

开发时从本地目录安装:

dsh plugin --profile web add ./dsh-peak-hours

验证安装:

dsh --profile web --dump-config

输出中应出现 "# == dsh-peak-hours" 层。

典型用法

1、启动 dsh web
2、打开任意会话——徽章出现在会话顶栏工具行的最左侧(「会话日志下载」按钮的左边)。
3、阅读状态:09:00–12:00 / 14:00–18:00 期间显示「🔴 高峰时段」+ 北京时间,其余时间显示「🟢 非高峰时段」;悬停可查看完整区间说明。
4、可选:打开「设置 → 通用」,在「徽章语言」中选择中文或 English,选择会持久化,重启后保持。

自定义

两处常见调整都在源码里:

  • 高峰区间与刷新间隔是 client.js 顶部的常量,改 PEAK_WINDOWS / REFRESH_MS 即可。
  • 徽章文案在 client.jsLANGUAGES,设置 schema 在 index.js。新增徽章语言时需要同步这两处。

适用场景与注意

适合在 dsh web 里工作、想随时看到北京时间是否处于高峰时段的用户,也适合作为「如何在会话顶栏注册一个自定义工具项、如何绕开 settings 白名单做持久化」的最小参考实现。

几点注意:

  • 首次运行的空白欢迎页会隐藏整个会话顶栏,此时徽章不可见,打开正式会话即可看到。
  • 插件以当前 dsh 进程权限运行,GitHub 直装等于拉取并执行第三方代码。安装前建议检查仓库源码与许可证(MIT © 2026 lco117),并按官方建议固定到具体 commit。

结尾

dsh-peak-hours 体量很小,但把 DSH 插件开发里的几个实际问题——顶栏注册、主题适配、设置持久化的白名单限制——都给出了可运行的答案。装上即可用,拆开即可学。

  • 社区目录页:https://www.skillhub.cn/plugins/lco117/dsh-peak-hours
  • GitHub 仓库:https://github.com/lco117/dsh-peak-hours
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye