dsh-peak-guard
给 DeepSeek Harness 的「峰谷价自动停启」插件:高峰计价前提醒、到点停掉你勾选的会话、低谷回来自动接着干。
English · 安装 · 快速上手 · 配置 · 工作原理
背景
DeepSeek 按峰谷价计费(官方价目见 https://api-docs.deepseek.com/quick_start/pricing):
| 时段(北京时间) | 计费 |
|---|---|
| 工作日 09:00–12:00、14:00–18:00 | 高峰价(约为低谷价 2 倍) |
| 工作日 12:00–14:00、18:00–次日 09:00 | 低谷价 |
| 周末、法定节假日全天 | 低谷价 |
原生规则是 UTC 01:00–04:00 与 06:00–10:00,周一至周五,且排除中国法定节假日。
Agent 常常一口气跑几个小时,很容易在高峰时段持续烧钱。本插件把「什么时候提醒、什么时候停、停哪些会话、什么时候继续」做成一套可配置的状态机,并且只作用于你勾选过的会话——不是所有任务都该被自动停/启。
功能
- ⏰ 高峰前预告:默认提前 30 分钟,给勾选的会话发一条提示(可关闭)
- ⛔ 高峰开始时停止:先发停止提示(要求把进度写进
NEXT.md并收尾),宽限期(默认 3 分钟)后仍未结束就强制中断回合 - ▶️ 低谷开始时恢复:给勾选的会话发恢复提示,读完
NEXT.md接着做 - ✅ 按会话授权:每个会话两个独立开关——「高峰停止」「低谷恢复」,可只勾其一
- 🗂 工作区树 + 批量选择:会话按工作区分组折叠;停止与恢复各自独立开/关——工作区行内「停止开/停止关/恢复开/恢复关」,顶部「高峰停止:全部开/全部关」+「低谷恢复:全部开/全部关」
- 🔀 多种排序:工作区顺序(跟随侧边栏)、最近运行、会话数量、会话名称;选择会被记住,展开/折叠全部一键切换
- 🔢 只看有意义的选择数:未选时显示会话数,全选时显示「已全选」,部分选中才显示「已选 P / N」
- 🪶 更紧凑的布局:总开关与时间并排卡片,提示语与节假日覆盖收进「高级设置」,设置页不再被长表单撑满
- 📅 节假日与调休:内置
chinese-days日历,法定节假日不算高峰;支持手动覆盖某一天(2026-10-01=holiday/2026-10-11=workday) - 🧪 手动测试:设置页三个按钮可立即触发一次预告/停止/恢复,不必等到时间点
- 🧩 Super Agent 项目一并可见:Super Agent 托管仓库的工作区会话带「Super Agent」标签,可和其他会话一样勾选停止/恢复
- 🌐 全程本地:只读本地配置与会话索引,不联网、不上报
环境要求
- DeepSeek Harness(桌面客户端或带宿主服务的 web 部署)>= 0.2.1-rc.2
- Node.js
^22.19.0 || >=24.0.0 - 宿主进程必须保持运行(插件跑在宿主里)
安装
从 GitHub 安装(推荐)
# 用 DSH 自带 CLI(桌面客户端自带的那个)
cd "/d/Program Files/DeepSeek Harness/resources/runtime/cli/bin"
./dsh.cmd plugin --profile desktop add "git+https://github.com/Aily-DSH/dsh-peak-guard.git"
dsh 已在 PATH 时等价写法:
dsh plugin --profile desktop add "git+https://github.com/Aily-DSH/dsh-peak-guard.git"
本地开发安装
dsh plugin --profile desktop add "file:/D:/path/to/dsh-peak-guard"
安装会写入 profile 的 package.json(dependencies + dsh.profile.bundles),并把文件复制进 node_modules。
首次启用需要重启
装完必须重启一次 DeepSeek Harness 客户端:宿主半(lib/index.js)只在启动时挂载,客户端半的注入清单也只在启动时计算。重启后打开 设置 → 峰谷价自动停启 即可看到面板。
之后修改插件源码同样需要重启(cordis 已挂载的行不会热重载)。若改了源码,先把文件同步到
~/.dsh/profiles/desktop/node_modules/dsh-peak-guard/lib/,再重启。
快速上手
- 打开 设置 → 峰谷价自动停启,确认顶部状态徽章(高峰价时段 / 即将进入高峰 / 低谷价时段)
- 在「会话」列表里,为要托管的任务勾上 高峰停止、低谷恢复
- 速选:顶部两组按钮(高峰停止:全部开 / 全部关;低谷恢复:全部开 / 全部关),每个工作区行内四个小按钮(停止开 / 停止关 / 恢复开 / 恢复关)——勾选与取消勾选分开,互不影响
- 排序:「工作区顺序」跟随侧边栏;「最近运行」把刚干过活的会话排前面;还可按会话数量、名称排序
- 点 测试:发预告 看一眼效果(会给勾选会话发一条消息)
- 就绪:下一次进入高峰会自动预告并停止,回到低谷自动恢复
配置
配置文件:~/.dsh/dsh-peak-guard/config.json(首次启动自动生成,也可在设置页改)。
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关;关闭后只显示状态、不执行任何动作 |
warnMinutes |
30 |
高峰前多少分钟发预告;0 表示不预告 |
graceMinutes |
3 |
停止提示发出后,宽限多少分钟再强制中断回合 |
notifyOnWarn |
true |
是否发送高峰预告消息 |
stopPrompt |
中文提示 | 高峰开始时发给会话的内容(要求写 NEXT.md 并收尾) |
warnPrompt |
中文提示 | 预告内容,支持 {minutes} 占位符 |
resumePrompt |
中文提示 | 低谷恢复时发给会话的内容(读 NEXT.md 续做) |
sessions |
{} |
{ "<sessionId>": { "autoStop": true, "autoResume": true } } |
days |
{} |
日期覆盖:{ "2026-10-01": "holiday", "2026-10-11": "workday" } |
宿主只监听回环地址,路由:
| 路由 | 用途 |
|---|---|
GET /api/dsh-peak-guard/state |
当前阶段、日历信息、下次切换时间、配置与会话列表 |
POST /api/dsh-peak-guard/config |
增量更新配置(sessions 里传 null 删除该条) |
POST /api/dsh-peak-guard/action |
手动触发:kind=warn|stop|resume|cancel-now |
工作原理
每 20 秒 tick
├─ evaluate(now): 高峰? 预告窗口? 低谷? + 北京时间日期是否工作日(chinese-days)
├─ 阶段变化时 runTransition()
│ warn → 给 autoStop 会话发预告
│ peak → 发停止提示;graceMinutes 后对仍未结束的会话强制中断
│ offpeak → 给 autoResume 会话发恢复提示
└─ 状态写入内存,供 /state 与设置页读取
- 投递消息用宿主
schedule.create(sessionId, { prompt, after_seconds: 1 })——它会创建一条source.kind = "schedule"的用户消息并followup,因此能唤醒冷会话 - 中断回合用宿主
agents.get(sessionId)?.cancel({ kind: "user" }, { keepInbox: true }),与 GUI 上的「停止」按钮同一条路径 - 会话列表来自
~/.dsh/storages/session_projcache/sessions/*.json(标题取投影缓存,缺省回退首条用户消息),并隐藏内部子 Agent 会话(orchestrator-*与.dsh/state/下的会话) - 节假日:优先读配置
days覆盖,其次chinese-days工作日判定,再次退化为「周一至周五」
注意事项与已知限制
- 「停止」是两段式:先发消息请它收尾,宽限期后才
cancel。若会话正卡在长工具调用里,消息要等到下一个步边界才会被读到 - 插件只在宿主运行时生效:DSH 关掉就不会停/启
- 恢复会消耗 token:低谷恢复本身也要跑一轮,请只勾选值得继续的任务
- Super Agent 的会话位于
~/.dsh/state/superagent-<name>/repos/<repo>,插件按「克隆目录」判定为项目并显示;orchestrator 会话与状态目录里的空会话仍会隐藏 - 状态机按北京时间的日期判断节假日,跨时区部署请自行确认
- 手动改
package.json里的会话开关不会立即生效,需通过设置页或/config写入
卸载
dsh plugin --profile desktop remove dsh-peak-guard
再删除配置目录 ~/.dsh/dsh-peak-guard/(可选)。
目录结构
lib/index.js 宿主半:状态机、节假日判定、HTTP 路由
lib/client.js 客户端半:设置页(状态徽章、会话树、批量开关、测试按钮)
cordis.patch.yml 把插件行插入 profile 的 cordis 配置
赞赏
如果这个插件帮你省了钱,欢迎扫码请作者喝一杯 ☕(纯属自愿,不影响使用和更新)
生态与收录
- GitHub topic:dsh-plugin——DSH 社区约定的插件标记,本仓库已加上
dsh/dsh-plugin/deepseek-harness/plugin等 topics。 - 社区目录:已向 cccakeee/awesome-dsh-plugins 提交收录 PR; 收录后可在 deepseekharnessplugins.com 与 awesome-dsh-plugin.com 搜到。
- 客户端插件市场:DSH 的「设置 → 插件市场」只读配置里的索引 URL(不搜 npm)。索引格式 1 的示例见
Aily-DSH/dsh-plugin-index,把它的 jsDelivr 地址加进
dsh.profile.indexes即可在客户端内直接看到 dsh-peak-guard。 - 查不到时:npm / GitHub 搜索有索引延迟,新包一般 1–3 天;先用
dsh plugin --profile desktop add git+https://github.com/Aily-DSH/dsh-peak-guard.git直接装。
English
dsh-peak-guard is a DeepSeek Harness plugin that cuts spend on peak-priced hours. DeepSeek bills weekday 09:00–12:00 and 14:00–18:00 (Asia/Shanghai) at roughly double the off-peak rate, and everything else — lunch break, nights, weekends, Chinese public holidays — at half price.
The plugin warns the sessions you hand-pick 30 minutes before peak starts, asks them to wrap up (writing NEXT.md), cancels any turn still running after a grace period, and resumes those sessions when off-peak returns. Sessions are grouped by workspace and can be toggled in bulk. Holiday and make-up-workday handling comes from chinese-days; any day can be overridden.
dsh plugin --profile desktop add "git+https://github.com/Aily-DSH/dsh-peak-guard.git"
# restart the DeepSeek Harness client, then open Settings → 峰谷价自动停启
Requires DeepSeek Harness >= 0.2.1-rc.2 and Node ^22.19.0 || >=24.0.0.
Sponsor: if this plugin saved you money, you can buy the author a coffee — scan assets/reward-qr.png.
No comments yet. Be the first to write one.