dsh-clock-tools:由宿主测量的 DSH 任务计时

前言

在 DSH 本地 Agent 里,模型能读懂「预计 20 分钟」「已经超时」这类表述,却不等于它知道墙钟上真正过去了多久。常见情况是:任务两分钟就做完了,Agent 仍把「预计 20 分钟」说成「已经过了 20 分钟」。根因在于预计耗时是预测,不是测量;消息间隔也不等于任务执行时间;跨 turn 之后若没有可查询的记录,模型只能凭印象补时间。

DeepSeek Harness 自带的时间上下文能给出当前时刻,但任务级「从开始到结束」的耗时需要另一套机制。dsh-clock-tools(维护者 ALittleLov,SkillHub 分类:工作流)的做法是:宿主程序负责计时,Agent 在合适时机调用 task_clock 并解释返回文本。插件在 Profile 层注册,不修改 preset;当前 GitHub 发行版本为 0.1.8(MIT),README 写明仅在 DSH 0.2.1-rc.2 上完成实测。

这是什么

一句话定位:为 DSH 本地 AI Agent 提供可核实的任务计时——把预计耗时、实际耗时和任务状态分开管理,并通过本地文件持久化。

插件暴露的核心工具是 task_clock。返回值是一段人类可读的 text,不是结构化 JSON;精确核对应查看 ~/.dsh/clock-context/tasks.json 中的毫秒字段,不要从格式化文本反推。

核心功能

task_clock 的五个动作

操作 用途
start 创建任务计时,记录预计耗时与单调时钟起点
check 查询当前实际耗时、预计耗时与剩余时间
finish 结束计时,记录实际耗时、偏差与状态
list 查询已保存的任务记录
now 查询当前本地时间与时区(不创建任务;需要报时刻时用,不要推算)

主要参数(完整定义以包内 index.js 为准):

参数 必填 说明
action 是 start / check / finish / list / now
taskId 否 指定任务;check / finish 默认当前 session 的 running 任务
plannedSeconds 否 预计耗时,单位秒(start)
label 否 任务标签(start)
outcome 否 completed / aborted,默认 completed(finish)
limit 否 list 条数,默认 10,最大 50
allSessions 否 list 是否包含其他 session 的记录

单调时钟与预计/实际分离

同一进程内,实际耗时用 performance.now() 的差值计算;墙钟(Date.now())用于显示开始/结束时间,以及跨进程续算时的空档。普通系统调时不应直接改写连续运行段的测量结果。

记录中分开保存 plannedMs 与 actualMs,状态可为 running / completed / aborted / uncertain。偏差为 Variance = actualMs - plannedMs(负值表示比预计早完成)。显示时长按整秒向下取整。

持久化与跨 turn / 跨重启

任务写入 ~/.dsh/clock-context/tasks.json(JSON 数组,原子替换)。跨 turn 后 list 仍可查到;默认 list 仅当前 session,设 allSessions: true 可看同文件内全部记录。

DSH 重启会丢失单调时钟起点。0.1.4 起支持续算,running 任务约每 10 秒本地检查点写入 accumulatedMs;跨重启空档在部分场景只能估算,结果会标注 continuity(如 continuous、resumed、resumed-gap 等)。Actual 表示从 start 到 finish 的总经过时间,包含 DSH 关闭与系统睡眠,不是 Agent「纯干活」时间。

时间规则注入(0.1.8 起,默认开启)

插件通过 ctx.systemPrompt.context() 向每次模型请求注入三条固定规则,不产生 user 消息。默认开启;关闭需在 Profile patch 或 ~/.dsh/clock-context/config.json 中设 injectTimeRules: false,改后须完全退出并重启 DSH。

preset 与验证口径

README 在 DSH 0.2.1-rc.2 下验证:start / check / finish / list 在 Standard、Cordis、Minimal、PTC 四种 preset 均完成真实会话验证;0.1.1 新增的 now 目前仅在 Standard 会话实测通过。插件不依赖 preset,但不代表所有 DSH 版本与平台均已验证。

安装与启用

安装范围为 Profile 级(同一 Profile 下 preset 共享;其他 Profile 需分别安装)。安装后须完全退出 DSH 再启动。

GUI(README 已验证):

  1. 侧边栏打开 Plugins(插件)
  2. 点 Add plugin(添加插件)
  3. 解压发行 ZIP,输入解压出来的 dsh-clock-tools 目录的绝对路径(选目录,不是 ZIP)
  4. 安装 → Enable now(立即启用)
  5. 完全退出 DSH,再启动

装好后工具列表应出现 task_clock。若关闭时间规则注入,或 DSH 不支持 systemPrompt.context(),可在 AGENTS.md 中补充「报时间前先查、禁止推算」等规则;0.1.8 默认注入时通常不必重复抄写。

CLI(README 注明本包未实测):

dsh plugin --profile <你的 Profile> add "<本地目录绝对路径>"

升级:发行包未提供专用升级命令,建议卸载后重装(未实测)。卸载 GUI 为插件页 Remove;CLI 为 dsh plugin --profile <你的 Profile> remove dsh-clock-tools(未实测)。卸载不会删除 ~/.dsh/clock-context/ 下的任务记录。

典型用法

Agent 需主动调用;没有 start 就没有有效起点,任务结束后不能凭回忆补造耗时。

task_clock start   plannedSeconds=1200  label="写报告"
task_clock check
task_clock finish  outcome=completed
task_clock list
task_clock now

now 返回示例格式:

Now: 2026-10-23T20:33:01+08:00[Asia/Shanghai]

运行中任务 check 示例格式(数字仅说明输出形态):

Task t-abc123 (写报告): running
Started: 2026-10-23T18:29:00+08:00[Asia/Shanghai]
Elapsed: 1m 58s (monotonic, host-measured)
Planned: 20m 0s; remaining: 18m 2s

完成后 finish 示例格式:

Task t-abc123 (写报告): completed
Started: 2026-10-23T18:29:00+08:00[Asia/Shanghai]
Ended: 2026-10-23T18:30:58+08:00[Asia/Shanghai]
Actual: 1m 58s (monotonic, host-measured)
Planned: 20m 0s
Variance: -18m 2s

适用场景与注意

适合谁: 需要在长任务、多 turn 会话里让 Agent 依据宿主测量结果报耗时、报时刻,而不是把「预计时间」当成「已经过时间」的 DSH 开发者。

行为边界: 插件不会自动给所有任务计时,也没有自动超时中止;是否在合适时机调用是 Agent 行为问题。没有网络请求(仅 Node 内置模块与 Intl),任务数据落在本机 ~/.dsh/clock-context/。

开销: 工具 Schema 会进入每个模型请求的工具列表;README 实测 schema 约 1,927 字符(约 480 tokens/请求,按 4 字符/token 估算)。默认时间规则注入约 110 字符/请求,可关闭。

安装前: 插件以当前 DSH 进程权限运行,安装前应自行查看 GitHub 源码 与 MIT 许可证。DeepSeek Harness 社区插件目录(如 SkillHub 条目)为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-clock-tools 把任务计时的测量交给宿主,把调用与解释交给 Agent,并用本地文件保留预计、实际与连续性标注。若你在 DSH 0.2.1-rc.2 上需要可核实的 task_clock,可从 SkillHub 目录页或 GitHub Releases 取发行包,按 Profile 安装并重启后再在会话里验证 start / check / finish 是否符合预期。

  • 目录页:https://www.skillhub.cn/plugins/ALittleLov/dsh-clock-tools
  • 仓库:https://github.com/ALittleLov/dsh-clock-tools
羽毛球分组比赛记分
小程序二维码

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

小夜