dsh-offpeak-inbox:在 DeepSeek API 错峰时段执行收件箱任务

前言

用 DeepSeek Harness(DSH)跑智能体会话时,API 按时段计费:高峰价约为错峰价的两倍。若随时把想法、待办写成一条新会话立刻执行,容易在高峰时段多花一倍费用。常见做法是手动记笔记、等到便宜时段再开 session,但容易漏跑、也难批量排队。

下面介绍社区插件 dsh-offpeak-inbox(维护者 Tungpeng,分类:工作流):在 Web 侧栏提供「错峰收件箱」,先捕获标题与正文,由宿主在 DeepSeek API 处于错峰费率 时再创建真实 DSH 会话执行;也可把输入框内容延后投递到已有会话。目标很直接:不在高峰价烧额度,在便宜时段再干活。

这是什么

dsh-offpeak-inbox 是面向 DSH dsh web 的 Cordis 插件(package 名 dsh-offpeak-inbox,当前资料中版本 0.1.1,MIT 许可证,要求 Node >= 22)。它不改变 DSH「一切皆插件」的架构,只在 Web 进程内增加收件箱 UI、调度逻辑与本地持久化。

插件目录页:SkillHub — Tungpeng/dsh-offpeak-inbox(社区站点,与 DeepSeek / 幻方无官方从属关系)。源码与说明:GitHub — Tungpeng/dsh-offpeak-inbox。

核心功能

侧栏收件箱:捕获与自动开 session

  1. 侧栏入口打开面板,填写可选 title 与 body 捕获一条记录。
  2. 捕获瞬间会写入 earliest runnable time(最早可运行时间):
    - 在 错峰窗口内 捕获 → 进入当前窗口,稍后启动;
    - 在 高峰 或两档高峰之间的空档捕获 → 等到 下一个错峰窗口 再跑。
  3. 时间一到,宿主 新建 DSH 会话,把捕获文本交给该会话执行,结果留在会话里供事后查看。
  4. 列表可见状态:waiting / running / done / failed,并提供 立即运行、删除、失败后 重试。

长列表:折叠历史与搜索

  • 仍在推进 的行(waiting / running / failed)留在主列表;失败行不会被折叠掉,便于重试或删除。
  • 已结束 的行(done / cancelled)移到默认 折叠 的 History (N) 下;展开后先显示最近 20 条,「show earlier」每次再加载 20 条。折叠状态记在浏览器 localStorage 键 dsh.offpeak.historyOpen。
  • 数据不随折叠删除,完整记录在 $DSH_HOME/offpeak-inbox/inbox.json(未设置 $DSH_HOME 时为 ~/.dsh)。
  • 历史栏上方的 搜索框 检索全量记录(标题、prompt、失败信息、session id、状态、捕获日期、waiting 行的计划时间等);命中与折叠无关,结果过多时分页,每页 20 条。

投递到已有会话

若不想另开会话,可在输入框旁使用 Off-peak 按钮:

  • 高峰 点击:内容暂存,到 下一错峰窗口 自动送入 当前会话,不在高峰提前发出。
  • 已在错峰窗口 内点击:立即发送(面板会说明当前已便宜)。
  • 仅在你 点击时 捕获输入框已有内容;普通发送不受影响。
  • 投递成功后,收件箱显示「delivered to existing session \<session id>」,状态为 done;依据是宿主接受回执,而非该会话是否仍在运行。
  • 面板还支持 Send to 选择 任意已有会话(不含 subagent 会话),把条目定向到其他会话。

当前会话依赖浏览器持久化的 dsh.sessions.current(localStorage)。页面刚打开尚无会话或读不到该值时,会明确提示无法识别当前会话,而不是误投递。

错峰日历如何计算

插件按 DeepSeek 公布的定价日历(高峰约为错峰两倍)计算,默认以 UTC 评估 weekday 高峰段:

类型 时段(UTC)
高峰(贵) 周一至周五 01:00–04:00、06:00–10:00
错峰(约半价) 其余所有时间,含整个周末

面板头部会显示当前是 peak 还是 off-peak、当前窗口边界、下一窗口何时开始,无需手算时区。

安装与启用

任意安装方式都会写入 profile;改完后需重启 dsh web,宿主启动时才会读到插件。

预构建 tarball(安装期无构建,无需授权 build):

dsh plugin --profile web add https://github.com/Tungpeng/dsh-offpeak-inbox/releases/latest/download/dsh-offpeak-inbox.tgz

直接从 GitHub 仓库(会跑 prepare 构建;pnpm 10 首次可能因 build 脚本被拒,按提示把包名写入 profile 的 pnpm-workspace.yaml 的 allowBuilds 后再执行一次;可按 commit 固定 github:Tungpeng/dsh-offpeak-inbox#<sha>):

dsh plugin --profile web add github:Tungpeng/dsh-offpeak-inbox

npm(资料注明尚未发布,目前用上两种方式之一):

dsh plugin --profile web add dsh-offpeak-inbox

本地开发挂载(需先 npm install 或 npm run build 生成 lib/,否则加载插件时 dsh web 可能失败或表现为挂起):

dsh plugin --profile web add link:<path to this repository>

配置

在 cordis.patch.yml 中可调整(节选资料原文):

Key 默认值 含义
enabled true 总开关;关闭后仍捕获但不启动
timeZone UTC 评估高峰段的 IANA 时区
ranges 01:00–04:00, 06:00–10:00 工作日高峰段,可改成你的计费框架
announceToAgent true 是否通过 system-prompt 段向 agent 宣告插件
launchIntervalSeconds 10 启动尝试间隔(秒,下限 2);每轮 最多启动一个 会话,控制 backlog 消化速度(旧名 tickSeconds 仍接受)
executionTimeoutSeconds 14400 执行长时间不结束则标记失败并指向会话

典型用法

  1. 排队便宜跑:高峰想到一个调研或脚本任务,在侧栏收件箱写 title + prompt,状态为 waiting;到错峰窗口自动 running 并开新 session,完成后在 History 或原 session 里看结果。
  2. 不新开 thread:正在某会话里打字,但不想高峰发出去,点 Off-peak;窗口打开后内容进 当前会话(或面板里 Send to 指定其他 session)。
  3. 失败与积压:某条 failed 用 retry;多条 waiting 时靠 launchIntervalSeconds 逐条启动,避免同一瞬间多起会话。

适用场景与边界

适合谁: 长期用 DSH Web、在意 DeepSeek API 峰谷价差、希望「先记后跑」或「延后投递到已有会话」的开发者。

务必知晓:

  • 宿主必须在跑。 插件运行在 dsh web 进程内;进程停则 nothing 调度。
  • 错过的窗口不会补播;但每条记录的最早运行时间在捕获时已固定,不会丢条目,只是等下一窗口。
  • 不会唤醒休眠机器;到点电脑睡着则不会执行。
  • 执行仍消耗真实 API 额度,与正常会话相同;节省的是 费率差(错峰约高峰一半),不是零成本。
  • 插件以 当前 dsh web 进程权限 运行;安装前请自行审阅 源码与许可证,社区目录页星标在资料中为 0,不代表质量结论,仅作生态索引。

结尾

dsh-offpeak-inbox 把「捕获想法 / 待办」和「只在错峰价开 session 或投递」绑在一起,侧栏、搜索、历史折叠和 composer 上的 Off-peak 按钮覆盖排队新会话与续写已有会话两类路径。若你在 DSH 工作流里想控 API 时段成本,可从预构建 tarball 安装、重启 dsh web 后在侧栏试捕一条任务。

  • 目录页:https://www.skillhub.cn/plugins/Tungpeng/dsh-offpeak-inbox
  • GitHub:https://github.com/Tungpeng/dsh-offpeak-inbox
羽毛球分组比赛记分
小程序二维码

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

Xiaoye