前言¶
在 DSH Web 里写好消息后,如果希望「到点再发」而不是立刻占用模型上下文,常见做法是记闹钟、切回浏览器手动回车,或在外部脚本里调 API。这些做法要么依赖浏览器一直开着,要么和你在聊天框里起草的正文脱节。@zlqd123/dsh-timed-send 是社区维护的工作流类插件:在输入框上方增加「定时发送」,选定时间后只登记待发任务,到点由 Host 进程按与用户回车相同的路径真正发出;任务落盘,关浏览器或重启 DSH 后仍可补发到期项。下文按安装、界面行为、会话绑定规则与 DeepSeek 峰谷选时说明用法与限制。
这是什么¶
维护者 zlqd123,包名 @zlqd123/dsh-timed-send,当前资料中版本 0.5.1,许可证 MIT。插件分 Host 半件(存储、定时引擎、HTTP 路由、真实发送)与浏览器半件(按钮、时间面板、待发列表),面向 DSH Web profile(dsh 引擎要求 >=0.2.0 <0.3.0,Node >=22)。
一句话定位:给 Web 聊天输入区加定时发送——点确认时不立刻发送,到点由 Host 调用与会话控制器相同的 prompt 路径投递;支持在同一对话内排队多条,也支持在新会话界面为每条任务各建独立会话。
核心功能¶
界面与交互¶
「⏱ 定时发送」按钮在输入框卡片上方、框外、右对齐,正对原生发送按钮上侧;角标显示待发数量。点开面板只选时间(正文仍在下方原始输入框里编辑,面板内无正文预览框)。默认时刻为「当前时间 + 2 分钟」,并向上取整到整分,保证实际间隔不短于 2 分钟。
同一行下方是本会话半宽、右对齐的待发列表:每条气泡前有时间徽章(峰值橙 / 谷时绿),气泡内为正文,可操作「编辑 / 立即发送 / 取消」;失败项显示错误原因,并提供「编辑 / 重试 / 取消」。面板为不透明实色底,不会透出下方对话正文。输入框为空时确认按钮禁用。
点确认后的顺序:读取输入框当前文本 → 按所在位置绑定目标会话 → 写入定时任务 → 清空输入框草稿(避免误发第二遍)。
会话绑定:对话内 vs 新会话界面¶
默认在已有对话内发送:在哪个对话里点定时发送,任务就绑到当前对话,不新建、不跳转。只有不在「正常对话」语境下时(例如首屏空态)才走预创建逻辑。
创建新会话界面(首屏空态,或当前会话是定时发送自动创建且仍被 Host 标记为相应状态):每条定时任务各建一个独立新会话并跳转过去。判断依据是 Host 侧的 autoCreated 与会话 blank 状态,而非单纯 sessionId 有无。
预创建空会话后,插件会发一条极短占位消息并马上取消,使会话脱离 blank,避免 DSH「新会话」按钮复用第一个 blank: true 的空壳。历史里可能留下 (定时发送占位) 消息;若需要干净历史,应在已有对话内排定时任务而不走预创建。
同一对话可排多条任务,按时间先后依次发出。任务绑定的是会话,到点以新的 user 消息追加进该会话。
Host 侧持久化与投递¶
定时器运行在 Host 进程,任务写入:
~/.dsh/data/scheduled-send/tasks.json
浏览器关闭不影响执行;DSH 重启后会补发停机期间已到期的任务。投递失败标记为 failed 并保留错误文本,不自动重试;需在面板上手动「重试」。单次投递超时 120 秒;引擎定时器最长睡 60 秒后醒来重算,便于纠正系统时钟或休眠唤醒。已结束任务保留 7 天;active 任务一直保留直至完成或取消。
Host 提供 POST /dsh-timed-send/api,动作包括 health、create、list、cancel、reschedule、sendNow、retry;仅接受本机同源 POST(拒绝跨站与 Origin 不一致等)。浏览器端日志与报错前缀为 [scheduled-send]。
DeepSeek 峰谷时段与「最近的谷时」¶
时间框上方有「最近的谷时」一键按钮:
- 当前已在谷时 → 设为当前时间 + 2 分钟(整分向上取整,与默认一致)。
- 当前在高峰 → 设为本段高峰结束时刻(最近谷时段起点,如 12:00 或 18:00)。
时间框下方两行实时提示:当前时段状态与倒计时,以及所选发送时刻落在高峰还是谷时。口径来自 DeepSeek 官方定价页:北京时间工作日 09:00–12:00、14:00–18:00 为高峰,其余与周末全天为空闲(资料中表述为谷时、5 折)。插件内置 2026 年法定节假日与调休上班日(来源为国办通知链接,README 中已列具体日期);2027 年安排未公布时按普通星期判定,面板说明中注明覆盖年份。
若面板打开超过 2 分钟导致默认时刻已过,点确认会自动顺延到新的 +2 分钟并提示「已顺延,请再确认一次」;手动改过的时间若已过期则直接报错,不会自动改。
编辑与限制¶
点待发条目的「编辑」会打开定时面板,正文回到原始输入框、时间预填原设定;面板按钮变为「保存」,可只改时间、只改正文或两者都改。点「保存」后按新时间执行;「放弃」清空输入框并退出编辑。
已知限制(来自 README):
- 仅支持纯文本;附件、图片不参与定时;输入框中的
/xxx按普通文本发出,不会当斜杠命令执行。 - 登记内容以点确认(或保存)那一刻输入框文本为准。
- 到点时若会话被删除或归档,投递失败并在列表显示原因。
- 待发列表约每 30 秒轮询,倒计时不做秒级刷新。
安装与启用¶
npm 发布后可用:
dsh plugin --profile web add @zlqd123/dsh-timed-send
从本地源码目录安装:
cd <插件所在目录>
dsh plugin --profile web add ./dsh-timed-send
改完依赖或 bundle 后需重启 dsh web,浏览器 Ctrl+Shift+R 硬刷新。
若仅需快速停用 Host 条目,可在 ~/.dsh/profiles/web/cordis.patch.yml 末尾追加:
- id: scheduled-send
disabled: true
保存后重启 dsh web。彻底移除需从 package.json 的 dsh.profile.bundles 与 dependencies 中删掉该包并清理 node_modules 链接。可选删除 ~/.dsh/data/scheduled-send 以丢弃全部定时任务;坏 JSON 会被插件改名为 tasks.json.broken-<时间戳> 后从空表继续。
插件以当前 dsh 进程权限运行,安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证。
典型用法¶
- 在目标对话里写好输入框正文,点「⏱ 定时发送」,调整时间(或点「最近的谷时」),确认。消息不会立刻发出,待发列表出现一条记录。
- 需要多个独立会话各自定时:先进入「新会话」界面(或空态),每条任务各排一次,每条会建会话并跳转(接受占位消息代价,或改在已有对话内排多条)。
- 到点前可「编辑」改时间或正文,「立即发送」提前投递,「取消」丢弃任务;失败项查看原因后「重试」。
维护者在仓库中提供纯逻辑单测:
node --test test/engine.test.mjs
资料记载为 22 个用例,覆盖存储、定时引擎、请求守卫、谷时段与节假日等。
适用场景与注意¶
适合:希望在 DSH Web 内起草长 prompt、在谷时或固定时刻自动发出、同一对话排队多条 follow-up、不依赖浏览器常开完成定时投递的场景。
不适合或需注意:依赖斜杠命令、附件、图片的定时发送;要求预创建会话历史完全无占位消息时,应优先在已有对话内排程。
DeepSeek Harness 生态是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
@zlqd123/dsh-timed-send 把「选好时刻、到点真发」收进 DSH Web 输入区:任务在 Host 落盘,默认绑当前对话,新会话界面可一条一会话,并内置 DeepSeek 峰谷与 2026 年节假日调休的一键选时。进一步了解可查阅目录页与源码仓库:
- 目录:https://www.skillhub.cn/plugins/zlqd123/dsh-timed-send
- GitHub:https://github.com/zlqd123/dsh-timed-send