前言¶
在 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 已验证):
- 侧边栏打开 Plugins(插件)
- 点 Add plugin(添加插件)
- 解压发行 ZIP,输入解压出来的
dsh-clock-tools目录的绝对路径(选目录,不是 ZIP) - 安装 → Enable now(立即启用)
- 完全退出 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