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

闲时任务队列 BXY-Create/dsh-plugin-nonurgent

DeepSeek Harness
BXY-Create73 天前有提交已提供中文文档扫描:含敏感能力

把非紧急任务缓存到 API 半价时段自动执行

31.8/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add BXY-Create/dsh-plugin-nonurgent
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-plugin-nonurgent(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 03:19:34

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

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

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 24 处,展示前 20 条)
  • 读取本地文件
    lib/index.js:55
    const st = statSync(p);
  • 读取本地文件
    lib/index.js:57
    let buf = readFileSync(p);
  • 读取密钥环境变量
    lib/index.js:372
    if (!key) key = process.env.DEEPSEEK_API_KEY ?? null;
  • 请求外部主机api.deepseek.com
    lib/index.js:375
    const res = await fetch("https://api.deepseek.com/chat/completions", {
  • 发起网络请求
    lib/index.js:375
    const res = await fetch("https://api.deepseek.com/chat/completions", {
  • 执行外部命令固定命令
    lib/index.js:552
    const res = spawnSync("git", ["-C", cwd, "stash", "create", "nonurgent-" + task.id.slice(0, 8)], {
  • 执行外部命令固定命令
    lib/index.js:559
    const head = spawnSync("git", ["-C", cwd, "rev-parse", "HEAD"], { encoding: "utf8", timeout: 15_000 });
  • 读取本地文件
    lib/index.js:960
    if (!existsSync(workspace)) return { kind: "error", text: "工作区不存在: " + workspace };
  • 读取本地文件
    lib/index.js:1133
    if (!existsSync(workspace)) { sendJson(res, 400, { ok: false, error: "工作区不存在: " + workspace }); return; }
  • 发起网络请求
    lib/client.js:171
    const res = await fetch(API + path, body === undefined
  • 读取本地文件
    lib/store.js:63
    const doc = parseContent(await readFile(path, "utf8"));
  • 读取本地文件
    lib/store.js:68
    const buf = await readFile(filePath).catch(() => null);
  • 写入本地文件
    lib/store.js:69
    if (buf !== null) await writeFile(filePath + ".corrupt-" + Date.now(), buf, "utf8");
  • 读取本地文件
    lib/store.js:77
    return { ...parseContent(readFileSync(path, "utf8")), source };
  • 读取本地文件
    lib/store.js:81
    const buf = readFileSync(filePath);
  • 写入本地文件
    lib/store.js:82
    if (buf !== null) writeFileSync(filePath + ".corrupt-" + Date.now(), buf, "utf8");
  • 写入本地文件
    lib/store.js:88
    await mkdir(dirname(filePath), { recursive: true });
  • 写入本地文件
    lib/store.js:91
    await writeFile(tmp, doc, "utf8");
  • 写入本地文件
    lib/store.js:92
    await rename(tmp, filePath);
  • 写入本地文件
    lib/store.js:94
    await copyFile(filePath, filePath + ".bak");
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:api.deepseek.com

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 缓存非紧急任务
  • 错峰时段自动执行
  • 自选工作区会话

DeepSeek Harness 插件:只在 DeepSeek API 错峰价时段跑非紧急任务,工作区/会话可自选

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-nonurgent DeepSeek Harness 插件:把非紧急任务安排在只在 DeepSeek API 空闲时段定价运行,工作区和会话都由你指定——就像正常使用 harness 一样,只是延后执行。 闲时任务插件:把非紧急任务缓存起来,只在 DeepSeek 官方 API 空闲时段(峰谷定价谷段,半价)自动开始执行,且在你指定的工作区、指定的会话中运行,就像正常使用 harness 一样。 它做什么 - 用 /nonurgent add <description> 发布任务。任务会被缓存,不会立即执行。 - 空闲时段一到,插件就把任务注入真实的 harness 会话——也就是你平时用的那套智能体机制(bash 工具、会话历史、工作区上下文、目标……)。 - 目标:默认 = 当前会话;--workspace /abs/path = 在该工作区新建会话(侧边栏可见,完成后保留);--session <id-prefix> = 某个已存在的会话(活跃:就地投递;已归档:自动恢复,完成后交还)。 - 空闲时段按 DeepSeek 官方峰谷定价(2026-08-17 生效):高峰 = 北京时间 09:00–12:00 和 14:00–18:00;其余时间都是空闲时段(半价)。高峰时段绝不发送任何请求。时段可配置。
展开完整文档(README 剩余 1 节)
dsh-plugin-nonurgent

DeepSeek Harness 插件:把非紧急任务安排在只在 DeepSeek API 空闲时段定价运行,工作区和会话都由你指定——就像正常使用 harness 一样,只是延后执行。

闲时任务插件:把非紧急任务缓存起来,只在 DeepSeek 官方 API 空闲时段(峰谷定价谷段,半价)自动开始执行,且在你指定的工作区、指定的会话中运行,就像正常使用 harness 一样。

它做什么

- 用 /nonurgent add <description> 发布任务。任务会被缓存,不会立即执行。
- 空闲时段一到,插件就把任务注入真实的 harness 会话——也就是你平时用的那套智能体机制(bash 工具、会话历史、工作区上下文、目标……)。
- 目标:默认 = 当前会话;--workspace /abs/path = 在该工作区新建会话(侧边栏可见,完成后保留);--session <id-prefix> = 某个已存在的会话(活跃:就地投递;已归档:自动恢复,完成后交还)。
- 空闲时段按 DeepSeek 官方峰谷定价(2026-08-17 生效):高峰 = 北京时间 09:00–12:00 和 14:00–18:00;其余时间都是空闲时段(半价)。高峰时段绝不发送任何请求。时段可配置。
- 时段结束前 10 分钟任务仍未完成 → 向会话注入结构化检查点提示词([CHECKPOINT]:已完成 / 进展 / 下一步 / 风险)。状态保存在会话历史里;任务挂起,在下一个空闲时段恢复,如此反复直到完成。
- 预期结果 + 子代理验收:用 --expected "..." 描述预期结果;会话收敛后,独立的子代理会话会对照预期审查执行记录,并在任务上记录通过/未通过的判定(acceptance)。验收提示词是对抗式的(独立审计员、必须给出证据、证据不足即判失败),判定失败会把任务标记为 failed,等待复查。模型独立性很重要:同模型的审计员会与执行者共享盲区,所以生产环境验收请把 acceptanceModel 设为与执行者不同的模型;不设置时,审计员跟随执行模型,但对抗式提示词依然生效。审计员也可以用自己的工具读取工作区文件,核实实际产物。
- 预期结果可以引用文件:在描述或预期结果里使用 [[文件:path]] / [[file:path]](相对路径按任务工作区解析)——例如 --expected "满足 [[文件:requirements.md]] 的全部要求"。被引用文件的内容会读取并内联到执行消息(执行者据此对照真实需求)和验收提示词(审计员据此逐条对照文件的实际要求判断)。最多 5 个文件,每个 64 KB;读不到的文件会在提示词里报告,而不是静默失败。
- 审批预览(可选):设置 requireApproval: true 后,新任务会进入 awaiting-approval 状态;add 命令会预览描述、目标、预期结果,只有执行 /nonurgent approve <id> 之后才会被调度。
- Git 快照回滚:执行前,如果目标工作区是 git 仓库,插件会运行 git stash create,并把 commit hash 存到任务上;出现异常后用 git -C <workspace> reset --hard <hash> 回滚。
- 模型选择:发布时挑选执行模型 —— --model provider/model(或使用 dock 下拉框,选项来自宿主模型目录,通过 ctx.llm 提供;modelList 可覆盖)。主对话模型在列表里标记为 (主agent模型,不推荐),因为用主模型执行延迟任务会把这些任务和你的交互会话绑在一起,而且当验收也用同一个模型时,会重新引入同模型确认偏差。
- 紧急度预分析(消耗少量 token):发布时插件会跑一次轻量 LLM 分析(maxTokens: 200,analysisModel 可配置),标记出需要实时跟进或有硬性时间依赖的任务 —— 返回结果会给出提示,说明这类任务不推荐放进延迟错峰流水线(改用 run-now,或立即处理)。
- 崩溃安全:任务元数据原子化持久化,并带 .bak 兜底;运行中的任务会自愈回到队列。

安装

1. 让包能从你的 DSH 配置档解析到:

corepack pnpm add "dsh-plugin-nonurgent@file:./vendor/dsh-plugin-nonurgent"

2. 在 cordis.patch.yml 里挂载它(非 bundle 插件;热应用,无需重启 DSH):

- insert:
- id: nonurgent
name: dsh-plugin-nonurgent

3. 硬刷新 Web UI。错峰任务 dock 会出现在输入框上方(todo/queue 旁边),显示窗口状态、倒计时,以及任务列表 / 添加表单。

用法

/nonurgent add <description> [--expected "expected result"] [--workspace <absolute path>] [--session <session-id-prefix>]
/nonurgent list
/nonurgent status [id]
/nonurgent run-now <id> # execute immediately, ignoring the window
/nonurgent pause <id>
/nonurgent resume <id>
/nonurgent approve <id> # authorize a task stuck in awaiting-approval (requireApproval mode)
/nonurgent cancel <id>
/nonurgent clear-done

配置

全部可选,通过 cordis.yml 里条目的 config 设置:

config:
model: null # null = follow the session default model
defaultWorkspace: null # cwd for new sessions when no workspace is given
peakWindows: # Beijing time HH:MM; adjust here if official pricing changes
- { start: "09:00", end: "12:00" }
- { start: "14:00", end: "18:00" }
checkpointLeadMin: 10 # state-saving prompt N minutes before the window ends
tickMs: 30000
maxConcurrent: 1
maxTotalRounds: 20 # per-task delivery cap (resumptions)
keepDone: 50yaml
requireApproval: false # true = 任务启动后先等待批准,直到 /nonurgent approve acceptanceModel: null # 验收模型;推荐:与执行者不同的模型,避免同模型确认偏差(null = 跟随执行模型) gitSnapshot: true # 在 git 工作区执行前运行 git stash create

--workspace / --session 的值可以用 "双引号" 或 '单引号' 包起来,以便包含空格(例如 --workspace "D:/Program Files/project")。--expected 同样支持引号。

工作原理(宿主侧)

插件调用的 API 与官方 dsh-schedule / api-proxy 相同:

- ctx.agents.get() / ctx.agents.resume() / ctx.agents.create({ meta: { cwd } }) 获取目标智能体;
- agent.followup() 把任务消息排入队列;agent.steer() 插入检查点提示词;agent.cancel({ kind: "hook" }, { keepInbox: true }) 在窗口边界挂起;agent.whenIdle() 检测收敛;
- 完成状态由 turn/end 事件确认——因错误收敛的轮次标记为 failed,绝不会标记为 done;
- 取消任务时先调用 agent.inbox.remove(messageId) 撤回仍在等待投递的消息,再用 cancel(..., { keepInbox: true }) 中止进行中的活动,从而保留无关的排队输入;
- 验收会启动一个用完即弃的 agents.create 会话,注入任务描述、预期结果、执行记录(以投递消息为锚点的任务轮次窗口:user/message → 助手回复 → 工具调用 → 真实输出,从窗口开头截取——尾部是流式分块事件),以及所有被引用的文件,解析结构化的 [FINAL-VERDICT] 判定,然后销毁会话;
- GET /plugins/nonurgent/state 返回每个任务的 log 详情(外加 logCount),Web 面板据此展示完整审计轨迹;GET /plugins/nonurgent/tasks/<id> 返回存储的轨迹 + 验收判定,加上 ?live=1 可获取运行中任务的实时轨迹(同样的锚定窗口,按需重新计算);
- Web 面板详情:点击任意任务行即可展开其子代理输出——状态/目标/会话/模型/轮次/时间戳/git 快照/最后错误、预期结果、验收判定、执行轨迹(按用户 / 助手 / 工具调用 / 工具输出着色),以及最近的日志尾部。运行中的任务每 5 秒刷新一次轨迹;已结束的任务会显示 Archive 按钮。

运行时依赖:@deepseek-ai/dsh-agent(用于 installModelSelection),外加 Node 内置模块。

开发 bash
node --test test/logic.test.js test/store.test.js # 纯逻辑 + 存储单元测试
node --test test/integration.test.js # 使用假智能体的完整编排测试(约 4 分钟)
集成测试与时间、平台无关:每个 harness 都使用相对当前时刻的峰值窗口(高峰时段不再出现 real-clock + 默认窗口导致的失败),所有文件路径都从 os.tmpdir() 推导(不再硬编码 /tmp)。测试还覆盖了含空格的 --workspace 路径、取消撤回、requireApproval/approve,以及子代理验收流程。

License

MIT

功能

- 在任意会话里用 /nonurgent add <描述> 发布任务,任务被缓存,不会立即执行;
- 空闲时段到来后,任务被投递进真实的 harness 会话执行(bash 工具、会话历史、工作区上下文等完整能力):默认 = 当前会话;--workspace /绝对路径 = 指定工作区新建会话(完成后保留可查看);--session <id前缀> = 指定已有会话(live 原地投递;历史会话自动 resume 恢复,完成后归还);
- 时间窗按官方峰谷定价(2026-08-17 生效):高峰 = 北京时间 09:00–12:00、14:00–18:00,其余为空闲时段(半价);高峰时段绝不发送任何请求;窗口可配置;
- 空闲段结束前 10 分钟仍未完成 → 向会话插入结构化「现场记录」指令([CHECKPOINT]:已完成/进度位置/下一步/风险与注意),现场保存在会话历史中,任务挂起并在下一空闲时段自动续跑,直至完成;
- 预期结果 + 子代理验收:发布时用 --expected "..." 描述预期结果;执行收敛后,插件创建独立子代理会话对照预期结果审查执行记录,在任务上记录 通过/不通过 结论(acceptance)。验收指令为对抗性审计(独立审计方、要求引用证据、证据不足即判不通过),验收不通过时任务标记为 failed 供复核。模型独立性很重要:同模型审计与执行方共享盲区,生产建议用 acceptanceModel 配置与执行不同的模型;未配置时跟随执行模型,但对抗性指令仍然生效;验收所用的模型记录在 acceptance.model 供追溯;验收方还可使用自己的工作区工具读取文件核对实际产物;
- 预期结果可引用文件:在任务描述或预期结果里写 [[文件:路径]] 或 [[file:路径]](相对路径按任务工作区解析),例如 --expected "满足 [[文件:requirements.md]] 的全部要求"。插件会读取文件内容并内联到两处:执行消息(执行方按真实要求干活)与验收指令(审计方以文件里的实际要求逐项对照)。最多 5 个文件、每个 64KB;读取失败会明确写进提示而不是静默跳过;
- 授权预览(可选):配置 requireApproval: true 后,新任务进入 awaiting-approval 状态,发布命令展示任务预览(描述/目标/预期结果),须 /nonurgent approve <id> 授权后才进入调度;
- git 快照回滚:执行前若目标工作区是 git 仓库,自动执行 git stash create 并把 commit 记在任务上,发现异常可用 git -C <工作区> reset --hard <hash> 回滚;
- 模型选择:发布任务时可指定执行模型(--model provider/model 或 dock 下拉,模型列表来自宿主 ctx.llm 目录,可用 modelList 配置覆盖);列表中主对话模型标注「(主agent模型,不推荐)」——用主模型跑闲时任务会与会话交互耦合,且同模型验收会重蹈确认偏误;
- 紧急性初步分析(少量 token):发布时用轻量分析(maxTokens: 200,模型可用 analysisModel 配置)判断任务是否需要实时跟进/对时间强依赖——若不适合延迟执行,响应会给出「不建议使用闲时任务」的提示(此时应改用 run-now 或立即处理);
- 崩溃/重启自愈:任务元数据原子持久化(.bak 回退),运行中任务自动回归队列。

安装

1. 让 DSH profile 能解析本包(file: 依赖):

bash
corepack pnpm add "dsh-plugin-nonurgent@file:./vendor/dsh-plugin-nonurgent"

2. 在 cordis.patch.yml 挂载(非 bundle 插件,热应用无需重启):

yaml
- insert:
- id: nonurgent
name: dsh-plugin-nonurgent

3. 硬刷新 Web 页面:输入框上方出现「闲时任务」横条(与 todo/队列并列),显示时段状态、倒计时与任务列表,可展开添加任务(「当前会话」或「新会话 + 工作区」);点击任意任务行可展开查看子代理输出与执行情况(状态/目标/会话/模型/投递次数/时间/快照/错误、预期结果、验收结论、执行轨迹(用户/助手/工具调用/工具输出 分色显示)、最近日志;执行中每 5 秒刷新实时轨迹;已终结任务提供「归档」按钮)。

使用 text /nonurgent add <描述> [--expected "预期结果"] [--workspace <绝对路径>] [--session <会话id前缀>] /nonurgent list /nonurgent status [id] /nonurgent run-now <id> # 立即执行(无视窗口) /nonurgent pause <id> /nonurgent resume <id> /nonurgent approve <id> # 授权待授权(awaiting-approval)任务进入调度 /nonurgent cancel <id> /nonurgent clear-done

配置与实现要点配置见上方英文节(新增 requireApproval/acceptanceModel/gitSnapshot)。--workspace/--session 支持用 "双引号" 或 '单引号' 包裹,以容纳含空格的路径。实现与官方 dsh-schedule/api-proxy 使用相同的会话驱动 API(followup/steer/cancel/whenIdle + turn/end 完成判定 + inbox.remove 撤回消息),运行时依赖仅 @deepseek-ai/dsh-agent 与 Node 内置模块。

开发与测试 bash
node --test test/logic.test.js test/store.test.js # 纯逻辑 + 存储单测
node --test test/integration.test.js # 假 agent 编排全链路(约 4 分钟)

集成测试已做到时间无关与平台无关:所有 harness 使用相对当前时刻的动态高峰窗口(高峰时段也能跑),全部路径基于 os.tmpdir()(Windows 直接可跑);并覆盖含空格工作区路径、cancel 撤回、requireApproval/approve 授权、子 agent 验收流程。

许可证

MIT
预览分享卡片长什么样 ↓BXY-Create/dsh-plugin-nonurgent
分享 · DeepSeek Harness Hub
BXY-Create/dsh-plugin-nonurgent

把非紧急任务缓存到 API 半价时段自动执行

回到顶部