前言¶
用 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¶
- 侧栏入口打开面板,填写可选 title 与 body 捕获一条记录。
- 捕获瞬间会写入 earliest runnable time(最早可运行时间):
- 在 错峰窗口内 捕获 → 进入当前窗口,稍后启动;
- 在 高峰 或两档高峰之间的空档捕获 → 等到 下一个错峰窗口 再跑。 - 时间一到,宿主 新建 DSH 会话,把捕获文本交给该会话执行,结果留在会话里供事后查看。
- 列表可见状态:
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 |
执行长时间不结束则标记失败并指向会话 |
典型用法¶
- 排队便宜跑:高峰想到一个调研或脚本任务,在侧栏收件箱写 title + prompt,状态为
waiting;到错峰窗口自动running并开新 session,完成后在History或原 session 里看结果。 - 不新开 thread:正在某会话里打字,但不想高峰发出去,点 Off-peak;窗口打开后内容进 当前会话(或面板里 Send to 指定其他 session)。
- 失败与积压:某条
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