autodsh
已验证@juuuw/autodsh · v0.1.2 · MIT · Web 界面
autodsh —— 基于 DeepSeek Harness 的自动化任务插件:触发器 + 自动化内容 + 结果通知,由任务面板统一管理。An automation-task plugin for DeepSeek Harness: triggers + automation content + result notification, managed from a task panel.
安装
dsh plugin add @juuuw/autodsh 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
autodsh —— DeepSeek Harness 自动化任务插件
⚠️ AI 开发声明:本项目由 AI(DeepSeek Harness 编码智能体)辅助开发, 源码、注释与文档包含 AI 生成内容,并经过人工与多轮自动审查。发布者对本项目 的最终内容负责。
autodsh 是一款运行在 DeepSeek Harness 上的自动化任务插件。用户通过对话即可创建自动化任务;每个任务由 触发器 + 自动化内容 + 结果通知 三段式架构构成,统一由任务面板管理。
功能一览
| 能力 | 说明 |
|---|---|
| 持久化 | 任务与运行历史持久化到 $DSH_HOME/storages/autodsh.json(官方 storage-domain + JSON 后端,原子写) |
| 生命周期 | 插件随 DSH 启停;启用的任务随插件启动自动恢复调度 |
| 触发器 | 固定间隔循环(interval)、cron 定时(schedule)、条件触发(condition)、父子级触发(parent) |
| 执行隔离 | 每个任务独立 agent 会话 + 独立工作目录;父子任务默认继承父任务工作目录与运行上下文 |
| 运行统计 | 运行次数、总耗时、总 token、上次运行时间/耗时/状态/结果、调用过的插件与 skill |
| 结果通知 | record(通知日志)/ email(SMTP 邮件,支持附件)/ session(DSH-IM 社交软件桥接) |
| 权限管理 | 每任务权限预设:workspace-write(默认)或 danger-full-access(长期授权:全权限且免审批,无人值守稳定) |
| 对话控制 | 9 个 autodsh_* 模型工具:创建/修改/删除/列表/详情/运行/停止/历史/设置 |
| 自动学习 | 安装后注册 autodsh-control skill,模型自动掌握本插件的控制知识 |
| 任务面板 | Web 设置页内置任务面板(列表/详情/启停/运行/删除/历史 + 完整配置表单) |
架构
┌────────────────────────────────────────────┐
对话/用户 ──▶│ autodsh(Host 半区,随 DSH 常驻) │
│ │
│ autodsh_* 工具 ←→ 任务存储(storage-domain) │
│ │ ▲ │
│ ▼ │ 变更事件 │
│ 触发器引擎 ──▶ 任务执行器 │
│ (interval/ (独立 agent 会话 + │
│ cron/ 工作目录、统计收集) │
│ condition/ │
│ parent) │ │
│ ▼ │
│ 结果通知器(日志/邮件/IM) │
│ │ │
│ autodsh-control skill(模型自动学习) │
└───────┼────────────────────────────────────┘
│ /autodsh/api(webServer 路由)
┌───────▼────────────────────────────────────┐
│ 任务面板(Client 半区,Web 设置页) │
└────────────────────────────────────────────┘
安装
方式一:本地开发安装(推荐先本地验证)
# 1. 在项目根目录构建
pnpm install
pnpm run build
# 2. 一键安装到目标 profile(自动复制产物 + 追加挂载行,自动备份 patch)
node scripts/install-local.mjs desktop
# 或 node scripts/install-local.mjs web
# 3. 重启 DSH 生效
手动方式(不适用安装脚本时):
dsh plugin --profile web add link:<本仓库绝对路径>
# 在目标 profile 的 cordis.patch.yml 中加入挂载行
- insert:
- id: autodsh
name: 'autodsh'
重启 DSH 后生效。数据落在 $DSH_HOME/storages/autodsh.json。
方式二:npm 官方源安装(已发布 npmjs.com)
包已发布到 npm 官方源,包名 @juuuw/autodsh:
# 1. 从默认 npm 源安装
npm install @juuuw/autodsh
# 2. 在 profile 的 cordis.patch.yml 中加入挂载行:
# - insert:
# - id: autodsh
# name: '@juuuw/autodsh'
备选源:
@juuwaii/autodsh亦发布在 GitHub Packages registry(需配置@juuwaii:registry https://npm.pkg.github.com/与 PAT 认证)。
快速开始(对话)
安装并重启后,直接在对话中说:
- “创建一个自动化任务,每天早上 9 点检查我的项目依赖并总结”
- “每 2 小时抓取一次新闻摘要,发邮件给我”
- “当我的巡检任务失败时,自动重试一次”
- “列出所有任务”“停用任务 xxx”“立即运行任务 xxx”
模型会自动加载 autodsh-control 技能并使用 autodsh_* 工具完成操作。
也可以在 设置 → Autodsh 任务面板 中管理任务。
任务字段(任务面板可查看/修改的主要内容)
任务名、描述、启用开关、触发器(类型与参数)、任务内容(prompt)、关键参数 (含敏感参数打码)、工作目录、agent preset、权限预设、单次运行超时、 通知渠道与时机、邮件收件人、父任务关系、运行统计(上次运行时间/耗时/状态/结果、 总运行次数/总耗时/总 token、调用过的插件与 skill)、运行历史。
面板 "编辑配置" 表单支持:
- 任务名 / 描述 / 任务内容
- 触发器切换(interval 间隔毫秒,或 cron 表达式)
- 通知渠道勾选(record / email / session)与通知时机、邮件收件人
- 权限预设(跟随默认 /
workspace-write/danger-full-access)
权限管理(长期授权)
每个任务可通过 permission 字段声明权限预设(面板与 autodsh_task_create/update
工具均可配置):
| 预设 | 沙箱 | 审批 | 适用场景 |
|---|---|---|---|
workspace-write |
工作区 + 允许的临时目录 | ask(更宽操作需审批) | 默认;一般任务 |
danger-full-access |
全文件访问 | never(免审批) | 无人值守长期任务:全权限执行、不弹审批 |
权限在任务 agent 创建后通过 permissionPresets.set 应用(同时设置沙箱模式与
审批策略)。未知预设名仅警告、不阻断任务。
结果通知说明
- record:写入
<数据根>/notifications.log(JSONL),始终可用; - email:SMTP 邮件。在
autodsh_task_settings工具或设置中配置smtp.host/port/secure/user/password/from,任务上配置emailTo; 内置极简 SMTP 客户端(node:net/tls,零依赖),支持 465 直连 TLS 与 587/25 STARTTLS、AUTH LOGIN/PLAIN、UTF-8 base64 正文,以及结果文件附件 (multipart/mixed;单文件 10MB 以内自动附加,超限/不可读跳过); - session:把结果注入创建任务的会话。若该会话由 DSH-IM(@xmanrui/dsh-im) 绑定在社交软件 上,结果随用户下一次互动送达(DSH-IM 推送为消息驱动:仅入站消息回合的 回复会被推送,无主动文本推送 API;QQ 渠道未实现文件消息)。需要主动即时 通知时请使用 email 渠道。
触发器说明
interval:固定间隔(毫秒),可选随机抖动;schedule:5 字段 cron(分 时 日 月 周,本地时区;日与周按标准 cron 语义 组合——一方为通配时以另一方为准);condition:上次运行状态 / 上次耗时比较 / 时间窗口(每窗口触发一次);parent:父任务一次运行结束后,按success | failure | completion | always触发子任务(可延迟),并把父任务本次结果注入子任务提示词。
开发与测试
pnpm install
pnpm run build # 构建 Host(tsc)与 Client(tsc + rollup)
pnpm test # 运行单元测试(node --test)
- 测试覆盖:cron 解析、文件存储(含原子更新/容量控制/历史清理)、触发器引擎 (四类触发器)、通知器、SMTP 客户端(本地假服务器,含 multipart 附件)、 任务执行器全链路编排、面板 API(含通知/权限字段)——共 45 个测试;
- 代码注释丰富(项目要求);相对导入遵循 NodeNext
.js后缀约定。
需求对照(项目原始需求)
| 需求 | 实现 |
|---|---|
| 1 核心持久化 | storage-domain + JSON 后端,原子写;运行历史容量控制 |
| 2 随 DSH 启停 | Cordis 插件生命周期:apply 启动引擎、卸载清理全部资源 |
| 3 自动启动 | enabled=true 的任务随插件启动恢复调度(interval 以上次运行为基准) |
| 4 独立环境/父子继承 | 每任务独立会话 + 工作目录;子任务默认继承父任务工作目录与上下文 |
| 5 安装后自动学习 | autodsh-control skill(运行时注册,模型初始目录可见) |
| 6 任务面板信息 | 任务名/触发器/内容/关键参数/通知/权限/统计/插件与 skill/父子关系全部可查可改(工具 + 面板完整配置表单) |
| 7 多类型触发器 | interval / schedule(cron)/ condition / parent 四类 |
| 8 结果通知 | DSH-IM 桥接(session 通道,随互动送达)+ SMTP 邮件(含附件)+ 通知日志 |
| 9 AI 声明 | 本 README 与 LICENSE 顶部声明 |
| 10 保留开源信息 | 见 THIRD_PARTY_NOTICES.md 与 docs/OFFICIAL-REFERENCES.md |
隐私与安全
- 提交到本仓库的代码不含任何个人信息、密钥、token 或本机路径;
本地测试数据位于
$DSH_HOME与.gitignore忽略的目录; - 任务关键参数支持
secret标记:在面板与模型工具展示时打码为******; - SMTP 密码等敏感配置保存在
$DSH_HOME/settings.yaml(DSH 默认 0600 权限), 读取接口一律打码; - 插件数据为本地明文存储,请勿存放高敏凭据;发布/分享任务配置前请自行清除。