dsh-scheduled-send:在 DSH 输入框里定时发送用户消息

前言

在 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 直接暴露公网。

典型用法

  1. 在输入框写好要发的内容(仅文本;有附件时会提示先去掉)。
  2. 点 ▾,选日期时间或点预设。
  3. 点 定时发送 → 输入框清空,▾ 上出现小白点。
  4. 到点后宿主把消息投进当前会话;会话空闲立即开新一轮,正忙则排在下一条。

想不等到点验证投递:对已有条目 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
羽毛球分组比赛记分
小程序二维码

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

小夜