zhouwei713/dsh-daily-kit--packages-scheduler ↗★ 0
dsh-daily-scheduler
Cron-style global task scheduler plugin for the DeepSeek Harness (developer preview)
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhouwei713/dsh-daily-kit#03d93caab5b846c990da8bb201d52881756ed483&path:packages/scheduler说明文档
阅读完整 README ↗安装与配置
# dsh 配置示例
- id: scheduler
name: dsh-daily-scheduler
config:
enabled: true
# timeZone: Asia/Shanghai # 任务未自带时区时的默认 IANA 时区;缺省用系统时区
# dataFile: scheduler-store.json # 任务与历史的 JSON 存储(相对路径基于 dsh 工作目录)
# tickSeconds: 30 # 调度循环 tick 周期(5-300)
# minIntervalSeconds: 60 # 同一任务两次触发的最小间隔(>=60)
# runTimeoutSeconds: 900 # 等待一次运行结束的上限
# catchUp: true # 启动时按 latest-only 补跑一次漏触发
# historyMaxEntries: 500 # 运行历史保留条数
# summaryMaxChars: 300 # 输出摘要截断长度
运行方式
- 隔离会话(默认):每次触发
ctx.agents.create()新建会话,followup投递任务 prompt(消息来源标记为plugin: dsh-daily-scheduler,不冒充人类),等待会话空闲后回收句柄;输出摘要取该次运行最后一条助手消息。 - 指定会话:会话在线则直接
followup;不在线则ctx.agents.resume()唤醒(唤醒后的 agent 保持注册,后续触发复用;插件不主动 dispose 用户会话)。 - 防重入:同一任务上一次未结束时本次跳过并记录
skipped;另有每任务最小间隔(默认 60s)兜底。 - 历史:除 JSON 存储外,运行结果会尽力写入目标会话事件日志(
scheduler/run自定义事件;失败仅告警,不影响主历史)。
权限透明
- 读写位置:仅
dataFile指定的 JSON 存储(默认scheduler-store.json,原子写:临时文件 + rename)。 - 网络域名:无(插件自身不发起任何网络请求;任务 prompt 触发后模型/工具的行为不在本插件边界内)。
- 凭证:不持有任何凭证。
- 确认点:无插件级 ask;任务在会话中执行的工具调用走 dsh 既有审批门。
- 日志内容:任务 prompt、运行状态与截断后的输出摘要写入
dataFile;不脱敏——请勿把秘密写进任务 prompt。
已知限制
- 进程存活才触发:dsh 不运行时无人触发——这是所有进程内调度的共同边界。重启后按 latest-only 补跑最近一次漏触发(
catchUp: false可关)。 - 精度分钟级:cron 粒度为分钟,实际触发另有最多一个 tick(默认 30s)的延迟。
- 隔离会话运行结束后即回收,其会话内容不保留(历史摘要见
schedule_history);需要留痕请用target=session。 - 唤醒的指定会话在插件存活期间保持加载,dsh 退出时随进程回收。
- DST 处理:不存在的本地时间(春季拨快空洞)跳过;重复时间(秋季拨回)取第一次。
- 启动瞬间的补跑若早于 agent 工厂就绪,可能记为一次
error(no factory registered之类),后续正常 tick 不受影响。
手动验证
本仓库的 CI 只覆盖类型检查与纯函数单测。接入真实 dsh 后请手动验证:
- 在 dsh 配置中启用本插件,确认启动日志出现
scheduler: loaded。 - 让模型调用
schedule_create,cron 填*/2 * * * *、prompt 填一个简单指令;确认返回未来 3 次触发时间。 - 等 2-3 分钟后调用
schedule_history,应看到一条ok记录(含耗时与输出摘要)。 - 调用
schedule_run_now手动触发一次,确认返回运行记录。 - 重启 dsh(制造停机窗口),确认启动时对漏掉的触发只补跑一次(
trigger=catchup)。 - 删除
dataFile后重启,确认插件以空存储正常加载(容错路径)。
许可
MIT