uluckystar/dsh-schedule-tasks ↗★ 1
dsh-schedule-tasks
定时任务插件:标准 cron 5 段式调度 + shell 命令/站内通知触发动作,Web 侧边栏面板管理(列表/新建/编辑/启停/删除/手动触发/日志),宿主持久化于 $DSH_HOME/storages
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:uluckystar/dsh-schedule-tasks说明文档
阅读完整 README ↗dsh-schedule-tasks 定时任务插件
为 DeepSeek Harness(DSH)Web GUI 提供标准 cron 调度 + 任务管理面板的外部插件:
- 调度:自研 5 段式 cron 解析(分 时 日 月 周)+
ctx.timer调度循环(base bundle 已装cordis-plugin-timer),本地时间语义。 - 触发动作(第一版):
shell:在宿主机器上执行一条 shell 命令(/bin/sh -c,可配超时与工作目录,输出截断记录)。notify:站内通知(记录一条通知型执行日志,面板可见)。
- 持久化:storage-domain 域
schedule_tasks(storage-json →$DSH_HOME/storages/,原子写,崩溃安全)。 - UI:Web 侧边栏底部(Settings 旁)
sidebar.footer.action槽按钮 + 浮层面板,支持任务列表(名称/cron/状态/下次触发/上次结果)、新建/编辑/启停/删除/手动触发/执行日志(每任务环形缓冲)。 - 通信:宿主
ScheduleTasksGateway extends TypertRemoteService(scheduleTasksRemote 命名空间);浏览器端手写 strict-codec 贡献经ctx.remote.$mount挂载;第一版 UI 轮询(面板打开时每 5s),不改仓库事件白名单。
目录结构
schedule-tasks/
├── package.json # dsh.bundle.patch + dsh.client(web) + exports[./client]
├── cordis.patch.yml # 组合层补丁:insert schedule-tasks 插件行(含部署配置)
├── tsconfig.json # host 编译(排除 src/client)
├── tsconfig.client.json # client 编译(jsx: react-jsx)
├── tsdown.config.ts # client bundle 构建(复刻仓库 tsdown.client.ts 协议)
├── src/
│ ├── index.ts # host 入口:默认导出 ScheduleTasksGateway 服务类
│ ├── gateway.ts # ScheduleTasksGateway:Remote + 调度循环 + shell/notify 执行器
│ ├── cron.ts # cron 解析与下次触发计算(纯函数、零依赖)
│ ├── spec.ts # storage-domain 域声明(zod schema)
│ ├── types.ts # 共享类型(host/client 双 program,零 import)
│ └── client/
│ ├── index.tsx # 浏览器入口:挂载 Remote 贡献 + 注册 sidebar.footer.action
│ ├── remote.ts # 手写 scheduleTasks Remote 贡献(strict zod codec + 类型化命名空间)
│ ├── store.ts # 任务列表快照源(single-flight 轮询读)
│ ├── face.ts # 槽注入面(hooks + on* 回调)
│ ├── ScheduleTasksPanel.tsx / .module.css # 面板组件(--dsw-* tokens)
│ └── locales.ts # 中英文案 + LocaleNamespaceMap 声明
└── scripts/
├── link-dsh.mjs # 开发期把 DSH checkout 包符号链接进 node_modules(类型解析)
└── verify.mjs # 离线冒烟验证(cron/schema/bundle/清单)
环境要求
- Node ≥ 22、pnpm ≥ 10。
@deepseek-ai/*包不发布到公共 registry(pre-release),开发期构建需要 DSH 源码 checkout(默认/Volumes/aigo/work/deepseek-harness,可用环境变量DSH_CHECKOUT覆盖)。构建工具链(tsdown/typescript/lightningcss/react/zod) 来自公共 registry。
构建命令
pnpm install # 安装工具链(.npmrc 关闭 peer 自动安装)
pnpm prepare:links # 符号链接 DSH checkout 包(或 DSH_CHECKOUT=/path pnpm prepare:links)
pnpm typecheck # 双 program 类型检查(host + client)
pnpm build # tsc host → tsc client → tsdown(产出 lib/client.js)
pnpm verify # 离线冒烟验证(无需 DSH 实例)