dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
中文 | English
在 DSH 里给自己设提醒:用户自己设、当前对话收到、服务端驱动、跨设备——到点准时送达,即使你关掉了网页。
`/later` 延迟发送 —— 不开面板,在输入框敲一行就以你的身份稍后发出(演示:逐字输入 /later +5s / +3m / +1h20m,回车后进入倒计时;+5s 那条到点真实送达):
点输入框右侧的 「定时发送」 打开面板。面板以输入框内容作为提醒内容,选好时间后点 「加入 · HH:MM 发送」(未选时间时该按钮不可点)即可;输入框上方随即出现倒计时条。
能力 · 说明 快捷芯片 · 10分钟后 / 1小时后 / 工作时间 一键填充(智能时段可在设置里改) 自定义时间 · 「自定义…」展开日期 + 时间输入框 发送预览 · 确认前预览到点后收到的样子 任务列表 · 已设定任务,可单个删除 取消全部 · 芯片上的取消操作一键清空本会话所有提醒
以下写法都认(/schedule、/later 与面板自定义时间共用;标了「仅 /later /schedule」的写法面板不收):
类型 · 示例 相对时长 · +30m · +1h30m · +90s · +1w · 30分钟后 · 半小时后 当天时刻 · 15:32 · 9点 · 9点半 · 1532 相对日 + 时刻 · 明天9点 · 后天 10:00 日期 + 时刻 · 8月21日 15:32 · 2026-08-21 15:32 · 0821-1532 重复 · 等间隔(仅 /later /schedule) · +1h*3 喝水 · +30m×2 看构建 · 两小时后×3次 重复 · 链式序列(仅 /later /schedule) · +1h+1h+0.5h 盯发布 · +1h +30m 交周报 锚点序列(仅 /later /schedule) · 15:32+16:32+17:32 三会 · 9:00+1d+1d 打卡 · 明天9点+1h
上表三行加粗的都属于 高级语法(实验性),可在设置里一键关闭;其余写法不受开关影响。
只写时刻(如 1532)时,若今天已过会自动顺延到明天(最多 7 天);写了 明天/后天 则按字面理解,该时刻已过会提示改用具体日期;只写月日(如 8月21日)时,今年已过则顺延到明年。
多次写法的规则(首次落在第一个间隔之后):
写法 · 展开成 +1h*3 · t+1h、t+2h、t+3h +1h+1h+0.5h · t+1h、t+2h、t+2.5h(链式累加,用来写「提前 2h→1h→30m」这类梯度催办) 15:32+16:32+17:32 · 今天 15:32、16:32、17:32(三个挂钟时刻) 23:00+01:00 · 今天 23:00、次日 01:00(后一个时刻更早则自动顺延,规则同单条) 9:00+1d+1d · 连续三天都是 9:00
一次最多 10 条,多次写法的间隔不低于 60 秒(单条不受此限,/later +5s 照旧)。* × x 都认,可跟中文量词(*3次),次数后面要留空格。每条都是独立任务:可单独取消、编辑、插话发送(暂停见下表)。
序列里只允许「绝对时刻开头,往后累加」这一个方向:+1h+15:32 会明确报错,不会猜。
锚点序列与相对序列的一处差别(有意为之,不是 bug):
写法 · 落库类型 · 能暂停 · 跨夏令时 +1h*3 / +1h+30m(相对) · after · ✅ · —— 15:32+16:32 / 9:00+1d(锚点) · at · ❌(按钮置灰并说明原因) · ✅ 墙钟不变:9:00+1d 在回拨日相隔 25 小时仍是 9:00,按 86400 秒累加会漂成 8:00
9:00+1d 里的「一天」按日历日推进(不是 86400 秒),所以 +1d*3 与 9:00+1d+1d 在有夏令时的时区结果不同——前者按真实秒数、后者按墙钟。落到不存在的墙钟(前拨跳过的那一小时)会报错而不是悄悄挪时刻。绝对时刻(15:32、明天9点)不支持 *次数,会明确报错而不是悄悄变成一条。
命令 · 作用 /schedule · 创建一条定时提醒(到点出现在对话里) /later · 延迟发送:到点以你的身份发出该内容 /later * · 同上,展开成 N 条代发(+1h*3) /schedule + · 同上,链式序列展开成 N 条提醒(+1h+30m) /later + · 锚点序列:按挂钟时刻展开(15:32+16:32、9:00+1d+1d)
/schedule 明天9点 提交周报
/later 1532 提醒团队同步进度
/later +1h*3 起来喝水
/later +2h+1h+30m 催我交周报/later 可以带附件:先在输入框贴图或拖文件,再敲 /later +10m 看下这张图 回车。到点会连同附件以你的身份发出,消息形状和你手动发「文字 + 图」完全一致。
/schedule、面板、以及模型调用工具创建的提醒都不带——这是一条安全边界:附件块只能经「你亲手输入」这条可信通道进入代发内容,模型在工具参数里夹带 attachments 一律无效。+1h*3)把同一份附件逐条带到每条任务上,各条仍可单独取消/编辑/插话。GET /api/file 出图;发出之后两条通道都通。若这台宿主的附件后端不落盘,缩略图退化成「发送后可见 + 大小」的标记——那不代表附件丢了,到点照样随消息发出。+N;非图片附件显示成「文件名 + 大小」的 chip。模型也可以直接调用用户工具为你创建/查询/修改提醒(user_schedule_create / user_schedule_list / user_schedule_delete / user_schedule_edit)。无限周期提醒(每 1 小时一直发下去)只有这条路:让模型说「每小时提醒我喝水」,它会用 every_seconds 建一条周期任务;周期任务没有结束条件,需要你手动删。
输入框上方的倒计时条,每行行尾三个按钮:编辑提醒(就地改内容)、删除提醒(取消该条)、插话发送(立即推给 agent,不等倒计时)。
⚠️ 「插话发送」不是「确认」,点了会马上把提醒内容发给 agent 并唤醒模型;只想取消请点删除。
有活动提醒的会话,行内会出现像素时钟(与「进行中」orb 并存):
图标 · 含义 · 紫 · 有定时中提醒 · 琥珀 · 下次触发 ≤ 5 分钟 · 红 · 已到期(等待会话空闲派发)
鼠标悬停可见「下次 15:32 · 3 条任务」;已到期时显示「已到期 · 3 条任务(等待会话空闲发送)」。
定时面板 —— 快捷时段 / 自定义时间 / 已设定任务列表:
待发送 dock —— 输入框上方倒计时条(行内编辑 / 取消;下方即输入框):
到期真实触发 —— 到点后对话里出现「⏰ 定时提醒」消息(关网页也照常触发):
动图演示:
创建定时提醒(输入 → 面板 → 加入 → dock) · 到期触发(倒计时 → 收到消息) ·
`/later` 快捷命令 —— 不打面板,直接在输入框敲一行就以你的身份延迟发送:
动作 · 什么时候生效 · 谁发出 · 你看到 输入框 Enter 直接发 · 立即 · 你 · 普通用户气泡 定时面板 / /schedule · 到点 · 定时提醒 · 定时提醒 · HH:MM · 内容 提醒行 /later · 到点 · 以你的身份 · 普通用户气泡
`/schedule` 不是「延迟发送」:输入框里那行 /schedule … 一按回车就会立刻发出去(作为一条用户消息),被推迟的只是提醒本身。如果你想要的是「把我现在打的这句话,过会儿当作我亲口发的」,请用 `/later`。npm 安装(推荐,预构建产物,无需授权):
dsh plugin --profile web add dsh-later
# 重启 dsh web 后生效或者从源码构建后装入 DSH Web profile:
cd dsh-later
npm install
npm run build
dsh plugin --profile web add "file:/path/to/dsh-later"
# 重启 dsh web 后生效开发提示:npm run watch监听src/自动重建并跑形状回归测试。
注意它不再自动改 GUI 里跑的那份(issue #46:旧行为会把未合并代码静默部署到所有
profile,多 worktree 并发时还会互相覆盖)。要在界面上看到效果,二选一:
```sh
npm run deploy # 手动同步一次
DSH_LATER_RELINK=1 npm run watch # 恢复「每次改动即部署」的旧行为
`提醒内容默认上限 1000 字符。需要更长时,在 DSH 设置 → 插件 → Session Scheduler 开启 allowLongPrompts 并设置 maxPromptChars。
默认开箱即用。可在 DSH 设置 → 插件 → Session Scheduler 调整(保存即时生效,无需重启):
字段 · 说明 · 默认 显示定时按钮 · 输入框右侧是否显示定时按钮(隐藏不影响已创建的提醒触发与 dock 显示) · 显示 在分组徽标中显示定时任务 · 折叠分组徽标(dsh-group-status)里是否出现「定时任务」这一格;关闭 = 不向对端登记 facet,提醒本身照常触发 · 显示 单会话任务上限 · 一个会话内最多允许的提醒数 · 100 允许长文本 · 解除 1000 字符默认上限 · 关闭 自定义上限 · allowLongPrompts 开启时的字符上限 · 1000 工作时间 / 午休 / 晚间静默 · 智能时段 5 个 HH:mm 字段,决定快捷芯片与智能排期 · 见设置页 插话投递方式 · 「插话发送」进哪个队列:独立成一轮(默认,安全)/ 当前轮(更快,极端情况下会丢) · 独立成一轮 投递确认 / 未确认处理 · 是否核对提醒真的送达,以及未确认时保留还是丢弃 · 开 / 保留 时钟图标风格 · auto(按内核版本)/ modern / classic · auto 高级语法 实验性 · 多次写法总开关:+1h*3、+1h+1h+0.5h、15:32+16:32、9:00+1d。关闭后这些写法被明确拒绝并提示回设置开启 · 开启
「高级语法」标实验性的原因不是没测(43 个新单测覆盖),而是展开后的观感仍需观察:一次命令写 10 条会不会刷屏、60 秒地板与 10 条上限是否合适。
关闭它不会退回旧版的静默误解析(+1h*3 x建成一条内容为*3 x的任务)——那是 bug,不在可回退的功能面里;残片守卫与本开关无关,始终生效。
进阶:也可以用cordis.patch.yml在启动期覆盖默认值(如maxSchedules),见docs/与 schema。
dsh-later 把「全会话定时任务摘要」作为公共数据面暴露出来 (issue #17),其它客户端插件 (如 dsh-group-status)据此在分组/侧栏聚合显示定时状态,无需自己解析 userSchedules 投影,也不会与行内 badge 漂移。
消费方先在 package.json 声明外部模块:
{ "dsh": { "client": { "platform": "web", "external": ["dsh-later"] } } }然后在客户端 factory 里 require('dsh-later/client'):
const { getScheduleSummaryStore, summarizeScheduleGroup, useScheduleSummary } = require('dsh-later/client')
// 1) 直接读 store:会话 id → { count, pausedCount, nextAt, state }
const store = getScheduleSummaryStore() // dsh-later 未加载时为 undefined
const summary = store?.getSnapshot() ?? new Map()
// 2) 按分组聚合(折叠分组徽标直接用它)
const group = summarizeScheduleGroup(summary, groupSessionIds)
// → { sessions, count, pausedCount, nextAt?, state? }
// 3) React 组件内订阅(store 迟到也会自动重渲染)
const live = useScheduleSummary()字段 · 含义 count · 任务数(含暂停项) pausedCount · 暂停项数量(暂停项计入 count,但不参与 nextAt) nextAt · 最早触发时刻(epoch ms);全部暂停时为 undefined state · scheduled / urgent(≤5 分钟)/ overdue(已到期未派发),按快照时刻判定
契约要点:
sessionIds 查表即可。sessions.list 订阅、30s 状态 tick 与 60s session.list 读 RPC(仅页面可见时)。