dsh-schedule-send:在 Composer 里写好消息,按时以用户身份投递到同一会话

前言

在 DeepSeek Harness(DSH)里和智能体对话时,常见需求是「现在写好一句话,几小时后再发出去,让模型按正常用户消息接话」。DSH 自带的 Schedule 子系统更偏向提醒:会以 [SCHEDULE REMINDER] 等形式让模型把内容「呈现」给用户,而不是把这段文字当成用户指令开启一轮对话。

dsh-schedule-send 由维护者 Zhiyi-Zhao 发布,分类为客户端插件。它在输入框旁提供定时发送控件,把草稿在指定时刻投递到同一会话,且投递结果是 source.kind = 'user' 的普通用户消息,智能体会像当时按下 Send 一样继续线程。

这是什么

一句话:在 Composer 里输入纯文本、选时间,到期后由 Host 侧通过公开 API 把内容写进目标会话,并触发智能体回复。

包名 dsh-schedule-send,当前 release 版本 0.1.0(MIT)。插件分 Host 半(index.js:队列、命令、投递)与浏览器半(client.js:控件与卡片),无需构建步骤,除页面共享的 react / react-dom 外无额外运行时依赖。

核心功能

下面介绍 README 中已列出的能力,均可在仓库说明中核对。

  • Composer 控件:发送按钮左侧的时钟按钮;支持快捷时间(30 分钟、1 小时、3 小时、明天 09:00)或本地精确日期时间。
  • 队列与卡片:确认后草稿立即清空;会话内出现持久化的「Scheduled send」卡片,记录排队内容与发送时间,到期前可 Cancel。
  • 持久队列:队列落在工作区外的 $DSH_HOME/schedule-send/queue.json;应用关闭期间到期的任务在下次启动时 catch-up 投递。
  • 投递语义:通过 ctx.sessionController.prompt(...) 投递;发送 id 同时作为 requestId,配合指数退避重试,崩溃后不会重复投递。
  • 与内置 Schedule 的差异:内置提醒走「提醒呈现」语义;本插件自建队列,语义是「用户消息 + 开启一轮」。

安装与启用

安装命令以 GitHub README 为准。桌面 profile 名称为 desktop;dsh web 部署将下文中的 --profile desktop 换成 --profile web(或你的 profile 名)。

推荐:Release 压缩包

从 Releases 下载 dsh-schedule-send-0.1.0.tgz,再执行:

dsh plugin --profile desktop add ./dsh-schedule-send-0.1.0.tgz

从 GitHub 安装

dsh plugin --profile desktop add github:Zhiyi-Zhao/dsh-schedule-send

Web profile 示例:

dsh plugin --profile web add github:Zhiyi-Zhao/dsh-schedule-send

也可在侧边栏 Plugins 页面粘贴上述 spec(github:Zhiyi-Zhao/dsh-schedule-send、tarball URL 或绝对路径);从运行中的应用安装需要 danger-full-access 权限或审批。

安装进 desktop profile 后通常可通过 HMR 生效;若未出现,重启 DeepSeek Harness。卸载:

dsh plugin --profile desktop remove dsh-schedule-send

插件以当前 DSH 进程的权限运行;安装前请自行查看源码与 MIT 许可证。

典型用法

  1. 在任意会话的 Composer 中输入消息(纯文本)。
  2. 点击 Send 左侧的时钟按钮。
  3. 选择快捷时间,或设置本地日期与时间。
  4. 点击 Schedule 确认。草稿清空,会话中出现定时发送卡片。
  5. 到点后消息作为普通用户消息进入该会话,智能体在此回复;卡片在取消前可 Cancel。投递后 Cancel 会提示消息已离开队列。

包内还注册了内部会话命令 schedule-send、schedule-send-cancel(斜杠菜单可见),日常操作以时钟控件为准,无需手输命令。

工作机制(简要)

步骤 位置 行为
创建 浏览器 控件经 ctx.remote.commands.execute('/schedule-send <json>') 提交消息、目标时间戳、id 与浏览器 IANA 时区
持久化 Host 校验后原子写入 $DSH_HOME/schedule-send/queue.json
扫描 Host 约每 5 秒扫描到期项,调用 ctx.sessionController.prompt({ requestId, sessionId, mode: 'queue', content, clientTimeZone })
投递 Host 必要时恢复会话并提交用户消息
反馈 浏览器 通过 conversation.chat.commandview 渲染持久卡片

README 中记载过一次实测投递(欧洲/哥本哈根本地时间):目标 12:24:00,约 12:24:03 送达,延迟约 3.2 秒,落在 5 秒扫描间隔内。

适用场景与注意

适合:需要在固定时刻让智能体处理某条指令,且希望线程里留下真实用户消息(例如下班前写好「明天九点帮我汇总」、会议结束后延迟追问)。

限制与风险(摘自官方说明):

  • 到期时应用须在运行。DSH 无系统级后台调度;关闭期间到期的任务在下次启动后补发,关闭状态下无法发送。
  • 仅纯文本;带附件的草稿无法定时,控件会禁用。
  • 投递会恢复目标会话并跑一轮,即使该会话未打开,可能消耗 token、调用工具;审批仍遵循该会话策略。
  • 时间精度大约 ±5 秒(扫描间隔)。
  • 单次定时,无周期任务,不能在卡片上改时间;需取消后重新预约。
  • 会话不存在或无可路由模型时会退避重试(最多 60 次),随后标记 failed 并写 Host 日志。
  • 队列文件损坏会被挪为 queue.json.corrupt-<timestamp>,插件以空队列启动。

兼容性:README 写明在桌面应用上针对 DeepSeek Harness 0.2.1-rc.2 验证;Host 仅使用公开服务。若缺少 ctx.sessionController,任务会留在队列并打警告,而不会拖垮 profile。

Node 引擎要求见 package.json:^22.19 || >=24。

结尾

若你需要的是「到时让模型执行我写好的话」,而不是「到时提醒我自己看」,dsh-schedule-send 用独立队列和 sessionController.prompt 补齐了 Composer 侧的定时发送能力。

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,选用前请按自身环境评估权限与行为。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye