前言¶
在 DSH 里想「到点再发一句话」,常见做法是依赖宿主自带的 schedule_*:到点投递的是 [SCHEDULE REMINDER] 提醒帧,会话里显示为自动化任务,模型收到的是提醒而不是用户原话。若你希望到点出现的就是一条普通用户发言——和自己在输入框敲回车一样——需要在客户端侧把草稿排进队列,并由宿主按绝对时间走 sessionController.prompt 投递。
下面介绍社区插件 dsh-scheduled-send(维护者 wangjiaxi,分类:客户端)。它在 Web 版输入框发送键旁增加飞书风格的分体按钮:选时间后由宿主到点投递真实用户消息;关标签页、切会话或重启宿主,已排条目仍按 epoch 时间执行。
这是什么¶
dsh-scheduled-send 不改发送键本身的即时发送逻辑,只把宿主蓝色发送圆钮左侧接上一段同色 ▾ 半段,拼成一颗胶囊控件:左半边打开「定时消息」,右半边照常发送。
- 到点由宿主投递,不是浏览器定时器在页面上「假发」
- 投递结果为
source.kind === 'user'的普通用户消息,与自带定时提醒路径不同 - 当前版本 0.2.2,许可证 MIT,依赖 DSH >=0.2.0-rc.1 <0.3.0(见 package.json)
目录页:skillhub.cn/plugins/wangjiaxi/dsh-scheduled-send
源码与说明:github.com/wangjiaxi/dsh-scheduled-send
核心功能¶
分体发送键与定时对话框¶
点 ▾ 打开日期、时间与正文预览;底部为「取消 / 定时发送」。预设包括:10 分钟后、30 分钟后、1 小时后、明天 9:00。发送箭头朝右,整颗胶囊同色;深色主题跟随宿主。有待发送条目时,▾ 上显示白点;同一对话框内可逐条撤销。
定时发送取的是点 ▾ 那一刻输入框草稿;确认后排进队列并清空输入框,正文仍可在待发送列表中查看。
与宿主自带「定时任务」的区别¶
| 能力 | DSH schedule_* |
本插件 |
|---|---|---|
| 到点内容 | [SCHEDULE REMINDER] 提醒帧 |
用户输入的正文 |
| 会话呈现 | 自动化任务 / 提醒 | 普通用户发言 |
| 典型用途 | 提醒模型 | 替用户在指定时刻发一句话 |
两者可并存:要提醒模型用 schedule_create;要「九点钟把这句话发进会话」用 ▾ 箭头。
持久队列与投递路径¶
待发送队列写在 $DSH_HOME/storages/dsh-scheduled-send/tasks.json(先写临时文件再 rename)。宿主每秒扫描队列,到点调用 ctx.sessionController.prompt({ mode: 'queue' }),会处理冷会话恢复、附件与模型能力校验(本插件创建时仅文本)。投递失败每 60 秒重试,最多 5 次后丢弃并记 warning。时间以 epoch 毫秒存储;换时区不会挪动已排条目。
HTTP 接口(同源)¶
前缀 /dsh-scheduled-send/api,走浏览器登录 cookie,无独立鉴权层(与宿主 Web 会话信任模型一致):
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /info |
{ ok, name, version, queued } |
| POST | /list |
body { sessionId } → { ok, items } |
| POST | /create |
{ sessionId, text, dueAt, timeZone? },dueAt 须晚于现在且一年内 |
| POST | /cancel |
{ id } |
| POST | /fire |
{ id },立即投递,便于自测 |
移动端与运行中 UI¶
窄屏(≤767px)或 dsh-web-mobile 环境下不拼胶囊,改为发送键左侧 28px 图标按钮。对话框在 ≤560px 时自底部升起;≤400px 时日期与时间上下排列。
主按钮变为「停止」方块且输入框为空时,▾ 半段自动收起,避免贴在停止键上。
安装与启用¶
插件声明了 dsh.bundle.patch,dsh plugin add 会自动写入 dsh.profile.bundles,无需手改 cordis.patch.yml。
从 GitHub 安装(README 原文):
dsh plugin --profile web add github:wangjiaxi/dsh-scheduled-send
本地开发(link,改文件即时生效):
dsh plugin --profile web add /path/to/dsh-scheduled-send
npm 发布渠道(README 注明「发布之后」可用):
dsh plugin --profile web add dsh-scheduled-send@latest
装完刷新页面,发送区应变为分体胶囊(桌面 Web)。插件在宿主进程权限下运行,安装前建议浏览源码与 MIT 许可证;勿将未加固的 dsh web 直接暴露公网。
典型用法¶
- 在输入框写好要发的内容(仅文本;有附件时会提示先去掉)。
- 点 ▾,选日期时间或点预设。
- 点 定时发送 → 输入框清空,▾ 上出现小白点。
- 到点后宿主把消息投进当前会话;会话空闲立即开新一轮,正忙则排在下一条。
想不等到点验证投递:对已有条目 POST /dsh-scheduled-send/api/fire,body { "id": "..." }。
适用场景与限制¶
适合:需要在固定时刻以用户消息形式触发一轮对话(例如晨间固定 prompt、延迟跟进同一会话);需要关页、重启后仍执行的排队发送。
限制(README 明确):
- 只发文本,定时发送不带附件。
- 依赖宿主
webServer与sessionController(Web / 桌面版标配)。 - UI 贴发送键依赖若干 CSS 锚点(
[data-composer-card]等);DSH 升级后外观可能略错位,功能仍可降级可用。
DeepSeek Harness 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-scheduled-send 把「定时发一句话」从模型提醒帧,换成宿主队列里的真实用户消息,并通过分体发送键和 tasks.json 持久化,覆盖关页与重启场景。进一步细节见仓库 README 中的架构示意与开发校验命令(node scripts/validate.mjs)。
- 目录页:https://www.skillhub.cn/plugins/wangjiaxi/dsh-scheduled-send
- GitHub:https://github.com/wangjiaxi/dsh-scheduled-send