Back to home@Ricketts-Guo

dsh-off-peak-message

DSH 谷时发送插件:开启后消息排队至谷时窗口自动发送,谷时价仅为峰时 50%,省一半 API 费用。原生外观输入条、快捷键、跨重启持久化。

Stars
1
Language
JavaScript
Created
Aug 19, 2026
Updated
Aug 19, 2026
GitHub repo

Introduction

DSH 谷时发送插件(Off-Peak Send)

DeepSeek API 峰谷计价下的省钱调度插件:开启「谷时模式」后,输入框发送的消息进入谷时队列,由 Host 计时器在谷时窗口到点时自动注入会话并推进Agent.followup),无需熬夜等到点。Agent 忙碌时消息按原生收件箱语义排队,任务结束后自动接上。

针对 DeepSeek 官方 2026-08-17 起执行的峰谷计费(高峰最高涨幅 1100%,谷时为高峰价 50%)。窗口与价目均内置且可配置,以官方最新公告为准。

功能特性

  • 🌙 谷时开关:输入框左侧的「谷时模式」胶囊标签,按会话记忆(持久化,重开会话不丢)
  • 开关 ON:输入框发送(Enter / 发送按钮)→ 进入谷时队列;到点自动注入对话流并触发 Agent 回复
  • 开关 OFF:完全原生行为,输入框不做任何接管
  • 原生皮肤输入条:谷时模式下直接复用 DSH 原生输入条的样式类(SmaQRa_*),观感与原生一致,仅紫色细边框区分;隐藏 mirror 真实测高,多行/尾随换行无裁剪
  • 快捷键Enter 入队 · ⌘/Ctrl+Enter 立即发送 · Esc 退出谷时模式 · Shift+Enter 换行
  • 队列管理:待发条数 + 下个谷时倒计时;每条支持 [立即发送] / [取消](durable)
  • 跨窗口调度:消息排队到谷时起点(工作日 18:00 北京起 / 夜间 / 周末全天),重启后对账重排
  • 独立草稿:谷时输入条草稿与正常输入框互不干扰
  • 调试入口:输入条内「15 秒测试」(验证到点自动发送全链路);tool.view.cordis 调试面板
  • 持久化:队列/开关/配置落盘于 ~/.dsh/storages/offpeak.json

效果预览

谷时模式下的输入条(紫色细边框 + 原生外观,队列条显示待发数与倒计时):

谷时模式输入条

峰谷计价背景(2026-08-17 生效)

时段北京时间UTC
高峰每日 09:00–12:00、14:00–18:0001:00–04:00、06:00–10:00
谷时其余所有时间(含夜间、周末及节假日

谷时 = 高峰价 × 50%。内置价目表(元/百万 tokens,输入取缓存未命中档):

模型峰时输入/输出谷时输入/输出
deepseek-v4-flash3.0 / 9.01.5 / 4.5
deepseek-v4-pro9.0 / 27.04.5 / 13.5

注意:deepseek-chat / deepseek-reasoner 已于 2026-07-24 停用。节假日日历未建模(周末全谷已建模)。窗口与价格见 docs/官方价目核对.md

快速开始(部署到 DSH)

插件为标准 profile bundle 插件(与 dsh-shortcuts 同款机制):注册进活动 profile 后,随 DSH 每次启动自动加载,无需审批、无需手动注册,重启不丢

# 1. 安装到活动 profile(生成 .package-map.json,冷启动才能解析)
~/.dsh/bin/pnpm --dir ~/.dsh/profiles/web add --save-prod /path/to/dsh-offpeak-send

# 2. 在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 追加
#    "dsh-offpeak-send"(补丁层 cordis.patch.yml 由启动器自动应用,无需手改)

# 3. 完全退出并重新打开 DeepSeek Harness

数据持久化于 ~/.dsh/storages/offpeak.json,与代码分离:插件随启动加载,队列/开关/配置跨重启保留,关机期间到期的消息重启后自动对账重排。

使用指南

  • 开启:点输入框左下角「谷时模式」紫色胶囊 → 输入条切换为谷时模式(紫色细边框)
  • 入队:输入提示词后 Enter 或点右侧紫色圆形按钮;谷时内入队立即发送,峰时排队至下一谷时
  • 立即发送⌘/Ctrl+Enter 或「立即发送」按钮
  • 退出Esc 或「普通模式」按钮
  • 队列查看:待发条目显示在输入条上方(条数 + 倒计时 + 逐条操作)
  • 测试:「15 秒测试」按钮验证「入队 → 计时器 → 自动注入 → Agent 回复」全链路(会消耗极小 token)

架构

Host(Node.js,dsh-offpeak-send/lib/index.js)
├── storageDomain 域 offpeak:表 queue / sessions,global=配置
│   ("伪装 schema" {parse: v=>v},运行时仅调用 .parse 已验证安全)
├── 调度器:精确 timeout(最早到期项)+ 10s 兜底 interval;启动 reconcile 对账(D1)
├── 注入:agents.get → 无 live 则 agentLoop.resume → agent.followup(收件箱语义天然排队)
├── 窗口算法:谷时 = 峰时窗口补集 + 周末全天;nextValleyStart 跨午夜安全
└── RPC(loopback HTTP,webServer 注册 /dsh-offpeak-rpc):getState / setToggle /
    queue / cancel / flushNow / debugDelay / setConfig(sessionId 经 sessions.get 校验)

Client(浏览器,dsh-offpeak-send/lib/client.js,经 dsh.client 声明由 dsh-client-modules 加载)
├── conversation.input.left:谷时模式开关(紫色胶囊)
├── conversation.composer(链):开关 ON 时接管,渲染原生皮肤条(复用 SmaQRa_* 类)
│   └── mirror 真实测高(无估算无裁剪);Enter/⌘Enter/Esc 快捷键自控
├── conversation.input.dock:队列条(dock 空态不渲染)
└── tool.view.cordis(key:self):调试面板

已知限制

  • 纯文本消息(V1 不支持附件/图片)
  • SmaQRa 哈希类依赖:谷时输入条复用 DSH 内置 SmaQRa_* 样式类,DSH 版本升级后类名可能变化(届时输入条会退化为无样式,需按新类名更新)
  • 仅在 DSH 运行期间调度(决策 D1):关机期间到期的消息重启后按下一谷时窗口重排
  • 节假日日历未建模(官方口径周末+节假日全谷,当前实现周末全谷)
  • 发送拦截需要 composer 接管(客户端无提交拦截事件;Host 侧拦截会留下已落日志的"幽灵消息",故不采用)

跨重启持久化

插件为标准 profile bundle(dsh-offpeak-send 包,dsh.bundle.patch 补丁层 + dsh.client 免构建加载),随 DSH 启动自动装载,不依赖动态插件注册表(那是进程内存态,重启即失)。与 dsh-shortcuts 相同的成熟模式:

  • 宿主半 lib/index.js(ESM export function apply):ctx.inject 反应式挂载,注册 loopback HTTP 端点
  • 客户端半 lib/client.js(CJS factory):dsh.client 声明使 dsh-client-modules 免构建加载
  • 数据层独立:队列/开关/配置在 ~/.dsh/storages/offpeak.json,与代码解耦

历史:早期版本是会话内动态插件(cordis_define/cordis_run),重启后需重新注册,曾用 restore/offpeak-restore 补丁恢复器(每次重启需一次 GUI 审批)。v2.0 起整体迁移为标准 bundle 插件,无审批、无恢复器。

目录结构

├── dsh-offpeak-send/       # 标准插件包(pnpm add 安装到 profile)
│   ├── lib/index.js        # Host 半(持久化/调度/注入/RPC)
│   ├── lib/client.js       # Client 半(开关/原生皮肤输入条/队列条/调试面板)
│   ├── cordis.patch.yml    # 补丁层(启动器自动应用)
│   └── package.json        # dsh.bundle.patch + dsh.client 声明
├── plugin-host.js          # 历史:动态插件版 Host 半(v1.x,仅供回溯)
├── plugin-client.js        # 历史:动态插件版 Client 半(v1.x,仅供回溯)
├── docs/
│   ├── DSH谷时发送插件-项目计划书.md   # 项目计划书(需求/决策记录)
│   ├── 执行计划-M0M1.md               # 执行计划(已按官方窗口修正)
│   └── 官方价目核对.md                # 官方价目核对与证据链接
└── assets/                 # 截图(欢迎 PR 补充)

路线图

  • M0/M1 ✅:队列 + 计时注入 + 开关 + 队列条 + 快捷键(本仓库当前版本)
  • M2:子代理管控(llm/stream / tools/pre-execute 拦截)、模型切换联动计价
  • V2:设置页、官方价同步、省钱统计、桌面通知、节假日日历

许可证

MIT