🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

定时任务 MichengAI/dsh-automation

DeepSeek Harnessv1.0.13
MichengAI5 天前有提交已提供中文文档扫描:含敏感能力

DSH Automation — 在独立 DSH Session 中按计划执行和管理编码任务 · Schedule…

49.4/100
综合分
36
GitHub 星标
88,253
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @michengai/dsh-automation
npm 源 · @michengai/dsh-automation 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@michengai/dsh-automation @ 1.0.13
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 00:25:33

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 33 处,展示前 25 条)
  • 读取本地文件
    lib/index.js:22939
    if (!existsSync(root)) continue;
  • 读取本地文件
    lib/index.js:22942
    entries = readdirSync(root, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:22967
    if (!existsSync(file2)) return void 0;
  • 读取本地文件
    lib/index.js:22969
    const text = readFileSync(file2, "utf8");
  • 读取本地文件
    lib/index.js:23580
    if (isDshCliEntry(entry, JSON.parse(readFileSync2(manifestPath, "utf8")), directory)) return entry;
  • 请求外部主机registry.npmjs.org
    lib/index.js:23698
    const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`, { signal: AbortSignal.timeout(8e3) });
  • 发起网络请求
    lib/index.js:23698
    const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`, { signal: AbortSignal.timeout(8e3) });
  • 读取本地文件
    lib/index.js:23709
    const value = JSON.parse(await readFile(manifestUrl, "utf8"));
  • 写入本地文件
    lib/index.js:23849
    await writeFile(tmp, next, "utf8");
  • 写入本地文件
    lib/index.js:23851
    await rename(tmp, file2);
  • 删除本地文件
    lib/index.js:23856
    await unlink(tmp).catch(() => void 0);
  • 删除本地文件
    lib/index.js:23860
    await unlink(backup).catch(() => void 0);
  • 写入本地文件
    lib/index.js:23861
    await rename(file2, backup);
  • 写入本地文件
    lib/index.js:23863
    await rename(tmp, file2);
  • 写入本地文件
    lib/index.js:23865
    await rename(backup, file2).catch(() => void 0);
  • 删除本地文件
    lib/index.js:23866
    await unlink(tmp).catch(() => void 0);
  • 删除本地文件
    lib/index.js:23869
    await unlink(backup).catch(() => void 0);
  • 执行外部命令来自配置/变量
    lib/index.js:23880
    const child = spawn(process.execPath, [target.cliEntry, "plugin", "--profile", target.profileName, "add", "--config.minimumReleaseAge=0", packageSpec,
  • 执行外部命令来自配置/变量
    lib/index.js:23920
    const child = spawn(manager.command, [...manager.args, "add", "--config.minimumReleaseAge=0", packageSpec, "--registry=https://registry.npmjs.org/"],
  • 写入本地文件
    lib/index.js:24097
    mkdirSync(dir, { recursive: true });
  • 发起网络请求
    lib/client.js:188
    `,Xr={check:"\u68C0\u67E5\u66F4\u65B0",update:"\u66F4\u65B0",close:"\u5173\u95ED",recheck:"\u91CD\u65B0\u68C0\u67E5",auto:"\u81EA\u52A8\u66F4\u65B0",u
  • 写入剪贴板
    lib/client.js:188
    `,Xr={check:"\u68C0\u67E5\u66F4\u65B0",update:"\u66F4\u65B0",close:"\u5173\u95ED",recheck:"\u91CD\u65B0\u68C0\u67E5",auto:"\u81EA\u52A8\u66F4\u65B0",u
  • 请求外部主机www.w3.org
    lib/client.js:193
    `;function Ls(){if(typeof localStorage>"u")return!0;try{if(localStorage.getItem(It)==="false")return!1}catch{}return!0}function ia(){if(typeof localSt
  • 请求外部主机www.w3.org
    lib/client.js:193
    `;function Ls(){if(typeof localStorage>"u")return!0;try{if(localStorage.getItem(It)==="false")return!1}catch{}return!0}function ia(){if(typeof localSt
  • 发起网络请求
    lib/client.js:193
    `;function Ls(){if(typeof localStorage>"u")return!0;try{if(localStorage.getItem(It)==="false")return!1}catch{}return!0}function ia(){if(typeof localSt
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:registry.npmjs.org、www.w3.org

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-preset-registry@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 按计划执行编码任务
  • 独立会话隔离
  • 任务调度管理

DSH Automation — 在独立的 DSH 会话中按计划执行和管理编码任务 · 在隔离的 DSH 会话中安排和管理编码任务

v1.0.132026-10-29
· 中文说明 · 通过对话创建定时任务反馈修复:解决在侧边栏独立主面板(main 视图)中点击「通过对话创建」无任何视觉反馈与交互响应的问题(Issue #25)。 - 为侧栏主面板入口注入退出回调:在缺少 ownerProps.close 时自动回退调用宿主布局服务 layout.selectPanel(null),退出主面板并切回会话视图; - 增强会话输入框预填适配:同时支持 DSH Lexical/Slate 富文本编辑器([contenteditable="true"])与通用 textarea; - 增加梯次时序重试:在面板退出与会话挂载时提供 30ms、120ms、300ms、600ms 梯次预填与光标聚焦重试,避免因页面切换渲染延迟导致提示词填入落空。 --- · English · Fix "Create in Chat" Feedback from Main Panel: Resolves an issue where clicking "Create in chat" inside the sidebar main panel produced no visual feedback or navigation (Issue #25). - Injects a graceful exit callback for the sidebar main panel, falling back to layout.selectPanel(null) when ownerProps.close is omitted to close the panel and return to the active chat session; - Enhances DOM prefill compatibility to support modern DSH Lexical/Slate rich-text composer fields ([contenteditable="true"]) alongside standard textarea inputs; - Adds tiered timing retries (30ms, 120ms, 300ms, 600ms) to ensure draft prefill and editor focus succeed as the chat view mounts.
v1.0.122026-10-27
· 中文说明 · 跨工作区定时任务操作与工作空间迁移:解决多工作区环境下无法跨工程管理自动化规则的痛点(Issue #24)。 - automation_update 支持通过 workspace 参数(支持工作区名称、ID、绝对路径或末级目录名)将已有定时任务平滑迁移到指定工作区,底层自动对齐绑定的物理路径与工作区 ID; - automation_create 支持通过可选 workspace 参数直接将新任务创建到指定工作区,无需预先切换会话工作区; - automation_list 新增 all_workspaces: true 参数,支持跨工作区统一检索全量自动化规则,并在返回结果中展示所属工作区标题(workspaceTitle); - 双向安全防提权门控:为防范提示词注入与静默跨沙盒逃逸,跨工作区操作(包括迁移归属、修改别区任务、别区任务立即执行 run_now 或删除 delete,以及跨区新建)在未声明时会受到严格拦截并返回包含目标工作区信息的中文引导;需显式声明 cross_workspace: true 方可放行; - 智能解析与歧义防御:修复宿主非全限定路径抛错隐患,按名称选择时若匹配到多个同名工作区主动抛错引导,杜绝误迁移。 --- · English · Cross-Workspace Automation Operations & Workspace Migration: Resolves limitations in managing scheduled tasks across multiple workspaces (Issue #24). - automation_update accepts an optional workspace parameter (matching by workspace title, ID, absolute path, or directory basename) to migrate existing automations between workspaces with automatic path reconciliation; - automation_create accepts an optional workspace parameter to create tasks directly in target workspaces without requiring the session to switch directories; - automation_list adds all_workspaces: true flag to discover automations across all registered workspaces with human-friendly workspaceTitle metadata; - Bidirectional Cross-Workspace Security Guard: To safeguard against prompt injection and silent sandbox escapes, cross-workspace operations (including task migration, mutations to foreign tasks, run_now, delete, and cross-workspace creation) are rejected by default with actionable guidance unless cross_workspace: true is explicitly provided; - Resilient Resolution & Ambiguity Protection: Bypasses host TypeError on unqualified path identifiers and detects duplicate workspace names with clear guidance.
v1.0.112026-10-27
· 中文说明 · 在任务树显示定时会话开关 (taskTreeSessions):在插件扩展配置卡片中新增「在任务树显示定时会话」开关,默认关闭。关闭时自动在官方工作区任务树中隐藏定时任务运行历史会话,避免高频任务的历史会话刷满日常开发工作区;关闭仅作用于主任务树,在「定时 → 记录」面板中依然完整保留并可随时打开复盘全部运行历史;基于 NativeTabRegistry.sessionFilters 标准协议实现,无需深度劫持宿主,切换即时生效,与 IM Connect 等第三方插件多过滤器完全兼容(Issue #19 / #23)。 · IM 会话 ID 双模兼容支持:前瞻性支持 @michengai/dsh-im-connect 即将重构的 Windows 路径安全会话 ID(dsh-im-session-*),同时平滑兼容存量以 im: 开头的旧版会话,确保跨插件侧栏页签归属与会话打开逻辑无缝衔接。 --- · English · Show Automation Sessions in Task Tree Switch (taskTreeSessions): Adds a new configuration toggle under the plugin bundle configuration card, disabled by default. When disabled, scheduled task run sessions are automatically filtered out from the primary workspace task tree, keeping daily development workspaces uncluttered while leaving all runs fully accessible for audit and replay under "Schedule → Records". Powered by the standard NativeTabRegistry.sessionFilters contract without invasive host interception, coexisting smoothly with third-party filters such as IM Connect (Issues #19, #23). · Dual-Mode IM Session ID Compatibility: Adds forward-compatible dual-mode detection for IM Connect's path-safe session IDs (dsh-im-session-*) while maintaining seamless backwards compatibility with legacy im: prefixes for sidebar tab mapping and session activation.
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH Automation 在独立 DSH Session 中按计划执行编码任务 English · 更新日志 · Apache-2.0 DSH Automation 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。 功能概览 把需要按时重复的工作交给 DSH。你可以在设置页安排任务,也可以在对话中说明执行时间和要求,再回看每次运行的结果。 - 安排一次或重复执行:支持间隔、每小时、每天、每周、每月和自定义间隔天数。 - 选择工作环境:设置工作目录、模型、技能和权限。 - 随时调整安排:创建、暂停、恢复、立即运行或删除任务。 - 查看执行结果:在侧栏「定时」中按任务和执行时间回看会话,在设置页筛选运行记录。 - 每次独立运行:使用已保存的任务说明,不继承创建任务时的整段对话。 界面预览 工作区左侧「任务 / 频道 / 定时」分列。定时会话会同时出现在「任务」的官方工作区树和「定时」页签;空闲的定时会话在「任务」里带官方时钟图标。「定时 → 记录」默认按任务分组,可切换按工作区、工作区树或平铺;按工作区模式保留工作区,只把会话过滤为定时会话;头部「+」直接打开新建定时任务。
展开完整文档(README 剩余 1 节)
DSH Automation

在独立 DSH Session 中按计划执行编码任务

English · 更新日志 · Apache-2.0

DSH Automation 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。

功能概览

把需要按时重复的工作交给 DSH。你可以在设置页安排任务,也可以在对话中说明执行时间和要求,再回看每次运行的结果。

- 安排一次或重复执行:支持间隔、每小时、每天、每周、每月和自定义间隔天数。
- 选择工作环境:设置工作目录、模型、技能和权限。
- 随时调整安排:创建、暂停、恢复、立即运行或删除任务。
- 查看执行结果:在侧栏「定时」中按任务和执行时间回看会话,在设置页筛选运行记录。
- 每次独立运行:使用已保存的任务说明,不继承创建任务时的整段对话。

界面预览

工作区左侧「任务 / 频道 / 定时」分列。定时会话会同时出现在「任务」的官方工作区树和「定时」页签;空闲的定时会话在「任务」里带官方时钟图标。「定时 → 记录」默认按任务分组,可切换按工作区、工作区树或平铺;按工作区模式保留工作区,只把会话过滤为定时会话;头部「+」直接打开新建定时任务。分组不可新增、重命名或删除:

工作区定时侧栏

打开「设置 → 定时任务」可搜索、新建、暂停和查看规则:

定时任务设置页

在对话里描述任务。DSH 会按所选权限模式处理授权:

通过对话创建定时任务

创建定时任务的官方授权

确认后规则会保存,并在对话里汇总:

定时任务创建成功

执行记录留在设置页,可按天、周、月、任务或状态筛选:

执行记录

DSH 产品生态

想使用桌面工作台,可下载 DSH Codex Desktop;已有 DeepSeek Harness 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。

| 插件 | 你可以用它做什么 |
| Codex UI | 整理项目与会话、搜索任务、跳转对话轮次 |
| Agency Agents | 按任务选择并召唤专业角色 |
| Skills Manager | 统一查找、启停、创建和导入本机技能 |
| Archive Manager | 搜索、恢复或清理已归档会话 |
| IM Connect | 从消息平台下任务、收回复 |
| Automation | 按计划执行任务,查看每次运行的结果 |
| BTW | 在当前上下文中临时旁问,不打断主任务 |
| Simplify | 用 /simplify 整理 Git 改动范围内的代码 |
| PUA | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
| Code Review | 用 /review 发起独立 Agent 代码审查,在当前会话接收报告 |
| Codex Pet | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |

前置条件

- 宿主支持范围:DeepSeek Harness 0.2.x 全系列(>=0.2.0-rc.1 <0.3.0-0),已验证兼容 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3,并自动支持后续日常小版本、alpha 与 RC,同代宿主升级无需重复等待发版。仍停在 0.1.x 的宿主请继续使用插件 0.1.66。升级宿主前备份 Profile 中的自动化存储和会话目录。0.2.0 写入 V4 会话,V4 会话不支持降级读取。
- 官方 DSH peerDependencies 放宽至代际范围 >=0.2.0-rc.1 <0.3.0-0。开发依赖统一对齐固定为 0.2.1-rc.3。早期版本与 0.3.0 代际破坏性更新由版本门拦截。同一宿主中的官方包应使用一致版本。
- 其他版本不在声明兼容范围内;安装器可能提示 peer 警告,启用严格 peer 校验时会失败。支持新 rc 前需扩展版本矩阵并通过验证。
- 自动化 bundle 不覆盖官方 Connection 条目,各版宿主保留自己的启动依赖、可信地址表达式和自定义配置;自动化在自身插件作用域注册 RPC 路由。
- 已可正常运行 DeepSeek Harness Web,且可在 PowerShell 中使用 dsh。
- 以下示例使用 web profile;请替换为实际目标 profile。
- 从源码安装或二次开发需要 Node.js 22.19+;仅从 npm 安装无需在任意目录执行 npm install。

安装

以下安装命令使用官方 npm 源。

让 Agent 帮你安装(推荐)

把下面这段话发给任意能够执行本机终端命令的 Agent。将 web 替换为实际使用的 profile;安装完成后,在 DSH 中使用本插件。

请将 DSH 插件 @michengai/dsh-automation 安装到本机 web profile,执行:dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/。安装后执行 dsh --profile web --dump-config,确认配置包含 dsh-automation,并告诉我如何重新加载 DSH 和开始使用。

从 npm 安装

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/
dsh --profile web --dump-config

安装后重启 DSH Web,并在浏览器硬刷新。需要钉死某一版时,把 @latest 换成 @0.1.5。
- 反向代理部署:支持将 DSH 部署在带路径前缀的反向代理后面(如 /app/dsh/),插件 API 与更新检查端点统一自动按页面基址(document.baseURI)相对解析,避免丢失代理路径前缀导致 404。

插件配置与可选开关

插件遵循 DSH 官方扩展配置规范,配置项位于:主界面侧边栏「插件」→ 点击 @michengai/dsh-automation 详情页(对应宿主 plugins.bundle.config 槽位)。

此处提供四个原生扁平行开关:

1. 侧边栏入口 (sidebarEntry)

- 默认状态:开启(true)/ 新装默认平替接管
- 功能说明:在宿主左侧主活动栏常驻 「定时任务」 图标入口。
- 生效效果:
- 960px 居中版心:开启后,在侧边栏点击即可直达定时任务中心,并在主工作区以 960px 居中版心(对齐官方插件管理与市场规范)展开完整大面板,彻底告别在设置弹窗狭窄视口内滚动的局限,便于集中管理长任务指令、定时计划与执行记录;
- 安全平滑收退:关闭后安全注销侧栏槽位;若当前正停留在定时任务面板,会自动安全切回默认视图,防止悬空和白屏;
- 双入口数据同步:无论是否开启侧栏入口,DSH 原有的「设置 → 定时任务」弹窗以及会话侧栏内的「任务与定时」页签均始终保留,两处界面数据与状态 100% 实时同步。

2. 在线更新 (onlineUpdate / updater)

- 默认状态:开启(true)
- 功能说明:控制是否允许在线检查并安装定时任务插件的新版本。
- 生效效果:
- 界面联动:关闭开关后,定时任务设置标题旁的「检查更新」按钮与版本提示将即时隐藏,无需刷新页面;开启后自动恢复展示;
- 接口安全拦截:关闭后,服务端的更新路由对任何版本检查和安装请求均返回 HTTP 403 禁用状态,彻底杜绝在插件内安装未审核版本;
- 宿主/平台级锁定:面向精选插件索引(如 VibeDev)或企业安全合规环境,支持直接在 Cordis 配置文件(bundle patch)中声明,无需进入界面手动配置: updater: false # 或 onlineUpdate: false

配置生效后,更新器在启动时即被完全禁用,且更新入口默认保持隐藏,前端 Switch 显示为锁定置灰状态;
- 更新模式:发现新版后,只有检测到 DSH CLI 或 Desktop 更新服务时才可使用“自动更新”;其他环境会在弹窗中提供可复制、与当前 Profile 对应的手工更新命令。

3. 屏蔽官方自动化入口 (hideOfficialSchedule)

- 默认状态:开启(true,与侧栏入口协同平替)
- 功能说明:控制是否隐藏宿主自带的「自动化任务」(ui-schedule)活动栏入口,避免与本插件功能冲突。
- 生效效果:
- 默认清爽与平滑平替:安装本插件后,宿主自带的自动化任务活动栏按钮默认隐藏,由本插件侧栏入口自动点亮接管,避免界面出现两个相似入口;
- 活动区智能复位:隐藏生效时,若主工作区正处于官方自动化页面,系统自动将其安全切回默认会话,杜绝页面孤立悬空;
- 本地持久化防闪烁:前端支持本地缓存优先读取,弱网或离线环境下首帧绝不出现图标闪烁跳变;
- 无损自愈与卸载复原:关闭开关或通过标准命令卸载本插件后,官方自带的自动化入口将自动完好无损地复现,绝无残留修改;
- 老用户升级防死区保护:若升级前曾手动关闭侧栏入口,新版本将智能继承关闭状态,不隐藏官方入口,杜绝出现活动栏两头皆空的死区。

4. 在任务树显示定时会话 (taskTreeSessions)

- 默认状态:关闭(false,默认在任务树隐藏定时会话,保持日常工作区清爽)
- 功能说明:控制是否在官方工作区任务树中显示定时任务运行历史会话。
- 生效效果:
- 降噪隔离:关闭后,定时生成的历史会话(以 dsh-automation-session- 开头或属于当前定时任务运行记录的会话)自动从左侧官方工作区树中过滤,避免高频任务的历史会话刷满日常开发工作区;
- 无损复盘:关闭仅作用于主任务树,在「定时 → 记录」面板中依然完整保留并可随时打开复盘全部运行历史;
- 轻量管道协同:基于 NativeTabRegistry.sessionFilters 标准协作协议实现,无需深度劫持宿主组件,切换即时生效,与 IM 插件及归档管理等第三方插件完全兼容。未支持该协议的外壳会自动安全降级并提示。

5. 存储与宿主参数配置 (cordis.patch.yml)

支持在 Profile 的 cordis.patch.yml 中定制以下参数:
- id: dsh-automation
name: '@michengai/dsh-automation'
config:
stateDir: D:/Data/dsh-automation # 可选:自定义设置文件 settings.json 存储路径,默认当前 Profile 目录 runTimeoutMinutes: 60 # 可选:单次任务超时时间(分钟),默认 60,上限 1440 misfireGraceMinutes: 15 # 可选:错过执行时间的宽限期(分钟),默认 15,上限 10080 historyLimit: 200 # 可选:历史运行记录保留上限,默认 200,上限 5000 updater: false # 可选:企业级锁定更新(同 onlineUpdate: false)

在线更新

设置标题会显示当前版本和“检查更新”按钮。发现新版后,只有检测到 DSH CLI 或 Desktop 更新服务时才可使用“自动更新”;其他环境会在弹窗中提供可复制、与当前 Profile 对应的手工更新命令。

使用

打开「设置 → 定时任务」,再按下表操作:

| 目标 | 操作 | 范围 |
| 创建规则 | 点击「新建定时任务」,填写名称、计划、任务说明、工作目录、模型、技能和权限。 | 当前 Host |
| 通过对话创建 | 在任意对话描述定时任务,或点击「通过对话创建」。 | 当前对话 |
| 暂停或恢复 | 使用任务卡片上的开关。 | 单条规则 |
| 立即运行 | 打开卡片菜单,选择「立即执行」。 | 单条规则 |
| 删除 | 打开卡片菜单,选择「删除任务」。运行历史会保留。 | 仅定义 |
| 查看记录 | 打开「执行记录」,再按天、周、月、任务或状态筛选。 | 当前 Host |

每次派发都使用保存的任务说明、工作区、模型和权限边界,不会复用来源对话中的批准。

automation_create 和 automation_update 支持与设置页相同的模型参数:provider、model、reasoning_effort。提供方和模型使用 ID,推理等级使用该模型公布的 reasoningEfforts 值。创建时省略 provider/model 会继承当前会话的完整配对;会话配对不完整时整对回退全局,不会把两边拼在一起。两边都没有完整配对时拒绝创建,而不是写成跟随全局。保存时去掉 ID 首尾空白。省略推理等级使用模型默认。更新时省略字段保持原值。将 provider 和 model 都设为 null,任务就会在每次运行时跟随当时的全局选择;reasoning_effort=null 清除固定推理等级,恢复模型默认。创建、更新和 automation_list 的返回定义包含保存的目标字段(返回中的推理等级字段为 reasoningEffort)。

指定或修改模型时,必须成对传入非空的 provider 和 model ID,或两项都设为 null,不完整配对会被拒绝。先查询 automation_list:models 包含可选 ID 和 reasoning.efforts,defaultModel 是全局选择,modelFailures 提示目录加载失败。切换保存的模型配对时,若没有显式传入 reasoning_effort,会清除旧等级;重复提交相同配对则保留。保存时不会依据目录校验模型 ID 和推理等级;Agent 可通过目录查询选择宿主公布的选项。

权限与安全边界

| 项目 | 行为 |
| 权限 | 列表和默认值直接来自 Host 官方 permissionPresets 服务;支持 Host 注册的自定义预设。 |
| 工具调用 | 遵循 Host 的工具可用性、权限和审批检查,不额外维护固定工具白名单或禁止后台 shell;后台进程由 Host 管理。 |
| 完全访问 | 选择官方 danger-full-access 时显示与 Chat 一致的风险确认和橙色提示。 |
| 审批 | 对话创建跟随当前会话策略。Full access(never)直接创建;Workspace Write / Read Only(ask)走官方授权卡。无人值守运行仍是 fail-closed 的 never。 |
| 重试 | 已经开始的运行不会自动重试。 |
| Host 重启 | 遗留的 queued / running 会变成 failed(host_interrupted)。 |
| 并发 | 不同自动化任务不设插件级全局并发上限,同一目录下也可同时运行。旧插件级全局并发配置(插件 config 中的 maxConcurrentRuns)不再生效,与下方任务级字段不同。 |
| 最短间隔 | 自 0.1.40 起,间隔计划支持最短 1 分钟,仅接受整数分钟。恢复时仅处理补跑窗口内最近的到期点,不逐次补齐漏掉的触发。 |
| 单任务并发 | 自 0.1.40 起支持。在任务的新建/编辑页设置“并发数量”(正整数,默认 1)。同一任务的排队及运行记录共用此上限;满额时定时触发记为 skipped(overlap),手动运行返回上限提示。调低上限不取消已有运行。Agent 创建/更新工具使用 max_concurrent_runs,Web RPC 使用 maxConcurrentRuns;旧任务默认 1。 |
| 工作区边界 | 默认绑定来源会话工作区。支持 Agent 工具通过 workspace 参数指定或迁移到其他工作区(支持名称、ID、路径及末级目录名);跨工作区操作(update / run_now / delete)需显式声明 cross_workspace: true 以防止非预期跨区越权;automation_list 支持通过 all_workspaces: true 跨区检索。 |

计划只表达未来意图,不是缓存下来的授权。

二次开发

从源码安装

适用于调试或使用未发布改动。克隆后的目录会直接作为插件安装路径:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
Set-Location D:\Repository\deepseek-harness-plugin
git clone https://github.com/MichengAI/dsh-automation.git
Set-Location .\dsh-automation
pnpm install
pnpm test
pnpm build
dsh plugin --profile web add .
dsh --profile web --dump-config

完成后重启 DSH Web 并硬刷新浏览器。dsh plugin ... add . 会自动读取并应用 cordis.patch.yml;不要手工复制 lib 文件。

当前源码在 src,构建产物在 lib:

- src\index.ts:Host 插件、工具和 RPC。
- src\service.ts:持久化定义、时钟和运行准入。
- src\client\index.ts:设置页和对话预填。
- tests\*.test.ts:领域、周期、服务、客户端和包契约测试。

修改后运行测试、重新构建,并以本地目录安装验证:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
pnpm check
dsh plugin --profile web add .

修改执行逻辑时必须保留 at-most-once 派发、Agent 工具的默认工作区作用域与跨区显式确认(cross_workspace / all_workspaces),以及无人值守 fail-closed 审批。

验证

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
pnpm test
pnpm build

pnpm check 会连续执行类型检查、单元测试、真实宿主兼容测试和构建。pnpm test:host 不加载宿主运行时桩,使用官方 AgentLoop、Session V3 和权限服务,模型响应由本地固定适配器提供,不调用外部模型。浏览器交互和真实模型调用需另行验收。

跨插件侧栏回归可运行 pnpm test:composition <dsh-im-connect 检出目录>。请先构建 IM 检出目录,脚本读取其中的 lib/client.js。它执行两仓库的接入逻辑和页签注册表,覆盖归档、IM、定时及 Codex UI 的注册顺序、延迟通知与卸载接管;插槽和计时器使用模拟环境,不替代 Desktop 渲染验收,也不安装插件。该检查需要外部检出目录,独立于 pnpm check;请固定 IM revision,以便复现结果。

pnpm test:matrix 先构建发布包,再联网为上述已声明版本分别建立临时 npm 环境,执行严格 peer 安装、整棵官方依赖树版本检查、发布入口加载、真实 AgentLoop 执行和服务回归。各声明版本均通过;服务回归中的持久化枚举使用内存夹具,覆盖新旧冷会话格式,不等同于真实 Profile 的磁盘迁移验收。脚本输出证据目录,保留各版安装锁文件、测试日志和 results.json。矩阵不修改开发依赖,也不连接用户 Profile。

许可证

补充说明见 NOTICE。

本项目采用 Apache License 2.0。
预览分享卡片长什么样 ↓MichengAI/dsh-automation
分享 · DeepSeek Harness Hub
MichengAI/dsh-automation

DSH Automation — 在独立 DSH Session 中按计划执行和管理编码任务 · Schedule…

回到顶部