dsh-plugin-cron
Verifieddsh-plugin-cron · v0.1.3 · MIT · Web UI
Cron scheduler for DeepSeek Harness: model-facing cron_add/cron_list/cron_remove/cron_run tools with durable job persistence and shell-command execution
Install
dsh plugin add dsh-plugin-cron Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-plugin-cron
Cron scheduler plugin for DeepSeek Harness (DSH). Model-facing cron_add / cron_list / cron_remove / cron_run tools, durable job persistence, shell-command execution, plus a browser sidebar entry and a full-page management UI.
定时任务插件:让 AI(以及浏览器端页面)直接管理 DSH 上的定时命令。同时包含服务端(调度 + HTTP 接口)和浏览器端(侧边栏入口 + 全屏管理页)两部分。
功能
服务端工具(面向模型)
| 工具 | 作用 |
|---|---|
cron_add |
新增或更新一个定时命令 |
cron_list |
列出任务、下次运行时间、上次结果 |
cron_remove |
按名称删除任务 |
cron_run |
立即手动运行一次(测试用) |
HTTP 接口(/cron-api)
| 接口 | 作用 |
|---|---|
GET /cron-api/jobs |
列出任务 |
POST /cron-api/jobs |
新增/更新任务(JSON 请求体) |
DELETE /cron-api/jobs/<名称> |
删除任务(连同执行记录) |
POST /cron-api/jobs/<名称>/run |
立即运行一次 |
POST /cron-api/jobs/<名称>/enabled |
启用/停用(body:{"enabled": true|false}) |
GET /cron-api/jobs/<名称>/runs |
查看执行记录(新的在前) |
浏览器端
- 侧边栏入口:「新会话」按钮下方的「定时任务」按钮,点击打开全屏管理页。
- 全屏管理页:任务表格(下次运行时间、上次状态)、新增表单、运行/启用/删除按钮,以及每个任务的执行记录(可展开查看每次的输出)。
安装
dsh plugin --profile web add dsh-plugin-cron
cordis.patch.yml(package.json 的 dsh.bundle.patch 声明)会自动把 dsh-plugin-cron 注册进 bundle 栈;也可以手动在 profile 的 package.json 里把 dsh-plugin-cron 加进 dependencies 和 bundles。
本包通过 peerDependencies 共享宿主的
@deepseek-ai/*实例,不要把@deepseek-ai/*物理装进本包,否则会出现双实例导致崩溃。
定时表达式
标准 5 段 cron:分钟 小时 日 月 星期
- 分钟 0-59、小时 0-23、日 1-31、月 1-12(或 JAN-DEC)、星期 0-7(SUN-SAT,0 和 7 都是周日)
- 每段支持:
*(所有值)、?(同*)、a-b(区间)、*/n/a/n(步进)、a,b,c(列表) - 别名:
@yearly@annually@monthly@weekly@daily@midnight@hourly - 日与星期同时限制时按「或」触发(Vixie cron 语义)
例子:0 9 * * 1-5(工作日 9 点)、*/15 * * * *(每 15 分钟)、0 0 1 * *(每月 1 号 0 点)。
行为说明
- 持久化:任务与执行记录存于 DSH 存储中心的
cron单元(jobs/runs表),重启服务不丢失。 - 执行方式:到点任务通过标准
ctx.shell执行器运行,与 dsh 进程同权限(不沙箱,请求 danger-full-access),请只安排可信命令。 - 不补跑:停机期间错过的任务不补跑,重启后从当前时间重新计算下次。
- 不重叠:同一任务上一次还没跑完时,下一次触发会被跳过。
- 扫描粒度:每 1 秒检查一次到点任务。
- 超时:每个任务可设
timeoutMs,默认 300 秒,上限 600 秒。 - 记录上限:每个任务保留最近 10 条执行记录;
lastOutput截断 4 KB,历史单条输出截断 8 KB。
目录结构
lib/cron.js 纯 5 段 cron 解析器(无依赖)
lib/index.js 服务端:工具 + 调度循环 + 持久化 + /cron-api 路由
lib/client.js 浏览器端:侧边栏 + 全屏管理页(window.__ModuleLoader__ bundle)
cordis.patch.yml bundle 补丁层(注册插件行)
test/ 测试
测试
node test\cron.test.mjs # cron 解析器断言
node test\plugin.test.mjs # fake-ctx 集成断言
node test\real-boot.test.mjs # 真实 Cordis + 真实存储断言
开发注意事项
lib/client.js的样式对象里,var(--...)主题 token 要先在样式对象之外解析成局部常量,再在对象内部引用,避免 TDZ 自引用(Cannot access 's' before initialization)。- 不要在本包内物理安装
@deepseek-ai/*,通过 peerDependencies 共享宿主实例,保证单实例。