zhouwei713/dsh-daily-kit--packages-scheduler0

dsh-daily-scheduler

Cron-style global task scheduler plugin for the DeepSeek Harness (developer preview)

包名
dsh-daily-scheduler
版本
0.1.0
许可证
MIT
最近更新
2026年8月16日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhouwei713/dsh-daily-kit#03d93caab5b846c990da8bb201d52881756ed483&path:packages/scheduler

安装与配置


# 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 工厂就绪,可能记为一次 errorno factory registered 之类),后续正常 tick 不受影响。

手动验证

本仓库的 CI 只覆盖类型检查与纯函数单测。接入真实 dsh 后请手动验证:

  1. 在 dsh 配置中启用本插件,确认启动日志出现 scheduler: loaded
  2. 让模型调用 schedule_create,cron 填 */2 * * * *、prompt 填一个简单指令;确认返回未来 3 次触发时间。
  3. 等 2-3 分钟后调用 schedule_history,应看到一条 ok 记录(含耗时与输出摘要)。
  4. 调用 schedule_run_now 手动触发一次,确认返回运行记录。
  5. 重启 dsh(制造停机窗口),确认启动时对漏掉的触发只补跑一次(trigger=catchup)。
  6. 删除 dataFile 后重启,确认插件以空存储正常加载(容错路径)。

许可

MIT