dsh-automation

69Star5Fork2Issue0Watching

为 DeepSeek Harness 引入"独立会话的定时任务":在全新 Agent + Session 中按计划执行自包含任务,提供 Web 控制台与 Agent 工具双入口。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
automationcoding-agentcordisdeepseek-harnessdshdsh-bundledsh-pluginscheduled-tasks

安装

$ dsh plugin --profile web add github:titanwings/dsh-automation

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 titanwings/dsh-automation:先查看仓库 https://github.com/titanwings/dsh-automation.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

dsh-automation 给 DeepSeek Harness 增加"独立运行的定时任务"能力。每当到点,它会在全新 root Agent + 新 Session 中执行一条自包含的 prompt,并把每次执行结果作为可审计记录留下来。和 DSH Core Schedule 那种"十分钟后回来这个会话"不同,它每次都是独立的新会话。

核心能力

  • 支持四种调度:一次性、固定间隔(≥5 分钟)、每日、每周(按 IANA 时区),日常/周程会规范成 RFC 5545 RRULE 持久化
  • 每次触发在全新 root Agent + 新 Session 中执行,prompt 显式标记 source.kind = "automation",便于审计
  • 提供 Web 端"自动化"标签页,可在浏览器中创建、暂停/恢复、立即执行、删除、查看历史
  • 提供 6 个 Agent 工具(automation_create / list / update / run_now / runs / delete),工具作用域绑定到当前工作区,不能跨工作区
  • 每次执行都留下完整记录(定义版本、prompt 快照、目标快照、调度时间、结果 Session ID、摘要、结构化错误),状态含 queued / running / succeeded / failed / skipped / cancelled
  • 安全护栏:只接受 read-only / workspace-write 两种权限;审批策略固定为 never;后台进程被拒;工具白名单在执行器层强校验

技术实现

  • 语言: TypeScript(ESM,主入口编译到 lib/)
  • 关键依赖: luxon(时区与 DST 计算)、zod(领域表与调度的模式校验)、@deepseek-ai/cordis(宿主插件运行时)
  • 架构模式: 单 Cordis 插件,分两条线——Host 侧(src/index.ts / service.ts)持有唯一权威服务,Client 侧(src/client/index.ts)通过 conversation.view 槽位注入 Web 标签页;Agent 工具通过 agent/created 事件动态挂到每个 root Agent 上
  • 入口文件: src/index.ts(Host 入口),src/client/index.ts(Web 客户端入口,由 package.json#dsh.client 暴露)

适用场景

适合需要让 DSH 在指定时间或间隔"独立地"完成一段编码/巡检/回归类工作的人,比如工作日 9:30 自动跑回归分诊、每周生成仓库健康报告、给一个不稳定的失败做延迟复测。任务必须写得自包含、能被独立验证,不适合依赖对话上下文的"接着上次聊"或"什么都修一下"。

前置依赖与兼容性

依赖最低版本说明
Node.js^22.19.0
React(可选)^18.2.0peerDependencies,可选;仅在 Web 客户端需要
平台跨平台未声明 os/cpu 限制,纯 TypeScript/Node 实现
原生模块不依赖 node-pty、node:sqlite 等原生模块

安装方式

dsh plugin --profile web add github:titanwings/dsh-automation

配置项

配置类型说明默认值
maxConcurrentRuns整数 1-32同一时刻允许同时执行的 run 总数;每个自动化内部仍互斥2
runTimeoutMinutes整数 1-1440单次 run 允许运行的最长分钟数,超时会被取消并记为 failed60
misfireGraceMinutes整数 0-10080Host 恢复后允许"补跑"最近 due 项的最大延迟分钟数;超过则记为 misfire 跳过15
historyLimit整数 1-5000每个自动化保留的已结束 run 记录最大条数;正在运行或排队的永不裁剪200
archiveRunSessions布尔是否把已结束的 run Session 从普通会话列表归档;当前 DSH 主机没有 unarchive API,归档后无法直接打开false

常见问题

Q: 这个插件是不是给 DSH 加个 cron?

A: 比 cron 更严格也更安全。每次触发都会在全新 root Agent + 新 Session 中执行自包含 prompt,权限仅限 read-only 或 workspace-write,不接受 danger-full-access,也不会执行任意 shell。

Q: 自动化任务能继承当前会话的上下文、收件箱或历史审批吗?

A: 不能。每个 run 拿不到源会话历史、收件箱或历史授权;任务以 source.kind = "automation" 显式投递,行为可追溯。

Q: 主机宕机错过了执行时间,会重跑吗?

A: 不会。默认 15 分钟容错窗口内只补跑最近一个 due 项,更早的会被记为 misfire 跳过;可能产生副作用的 run 不会被悄悄补做。

Q: 执行超时或运行中崩溃会怎样?

A: 单次 run 默认 60 分钟后被取消并记为 failed;Host 重启时会把残留的 queued/running 记录统一标为 failed(host_interrupted),不会偷偷重做。

Q: 能在 Web 和 Agent 两个地方管理吗?

A: 能。Web 端有"自动化"标签页(创建、暂停/恢复、立即执行、删除、查看历史),任何 root Agent 可调用 6 个工具:automation_create / list / update / run_now / runs / delete。工具作用域绑定到调用者当前工作区,不能指向其他工作区。

Q: 删除任务会把历史记录也删掉吗?

A: 不会。删除只是把定义删掉,已结束的 run 记录会保留用于审计;只有最旧的已结束记录会被 historyLimit(默认 200 条/任务)裁剪,正在运行或排队的永不裁剪。

上手难度

进阶 — 需要理解 DSH 的工作区、Agent 预设、权限预设和会话模型,并写出"自包含、可独立验证"的 prompt;调度语法和时区/DST 规则也需要花点时间。

已知问题与限制

  • 不提供同会话心跳式提醒,需要的话请用 DSH Core Schedule
  • 不支持原始 cron 表达式或任意 shell 命令
  • 不接受 unattended 模式下的 danger-full-access
  • 对可能产生副作用的 run 不做自动重试
  • 不提供 Git worktree 的创建或清理
  • 不支持多工作区目标、DAG 依赖、跨 run 隐藏记忆
  • 没有邮件、短信、推送等外部通知通道
  • 不保证"恰好一次"的外部副作用,只承诺"至多一次"分发
  • 仅本地执行,不支持多 Host 共享同一存储目录(README.md:230 明确说明)
  • 0.1 版不实现操作系统级守护进程
  • 工具白名单中 bash/pwsh 拒绝 run_in_background=true(src/executor.ts:33-42)
  • 启用 archiveRunSessions 后,归档的 Session 在当前 Harness 版本无法重新打开

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/titanwings/dsh-automation)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录