把非紧急任务缓存到 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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.comlib/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预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
BXY-Create/dsh-plugin-nonurgent
把非紧急任务缓存到 API 半价时段自动执行
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1