把对话任务排到谷时再跑,省下峰时开销
28.1/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ganningniang/dsh-offpeak-job该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 44 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 39 处,展示前 33 条)
- 读取本地文件lib/index.js:22
if (!existsSync(next) && existsSync(legacy)) { - 写入本地文件lib/index.js:23
mkdirSync(dirname(next), { recursive: true }); - 写入本地文件lib/index.js:25
renameSync(legacy, next); - 读取本地文件lib/index.js:113
if (!existsSync(this.path)) { - 读取本地文件lib/index.js:118
const raw = JSON.parse(readFileSync(this.path, "utf8")); - 写入本地文件lib/index.js:129
mkdirSync(dirname(this.path), { recursive: true }); - 写入本地文件lib/index.js:132
writeFileSync(tmp, JSON.stringify(body, null, 2), "utf8"); - 写入本地文件lib/index.js:133
renameSync(tmp, this.path); - 读取本地文件lib/index.js:452
if (!existsSync2(this.path)) { - 读取本地文件lib/index.js:457
const raw = JSON.parse(readFileSync2(this.path, "utf8")); - 写入本地文件lib/index.js:468
mkdirSync2(dirname2(this.path), { recursive: true }); - 读取本地文件lib/index.js:824
if (!existsSync3(this.path)) return; - 发起网络请求lib/client.js:724
const res = await fetch(path, { - 发起网络请求lib/client.js:1517
const res = await fetch(path, { - 发起网络请求lib/client.js:2158
const res = await fetch(path, { - 读取本地文件lib/provider-store-test-entry.js:243
if (!existsSync(this.path)) { - 读取本地文件lib/provider-store-test-entry.js:248
const raw = JSON.parse(readFileSync(this.path, "utf8")); - 写入本地文件lib/provider-store-test-entry.js:259
mkdirSync(dirname(this.path), { recursive: true }); - 写入本地文件lib/provider-store-test-entry.js:262
writeFileSync(tmp, JSON.stringify(body, null, 2), "utf8"); - 写入本地文件lib/provider-store-test-entry.js:263
renameSync(tmp, this.path); - 读取本地文件lib/session-store-test-entry.js:18
if (!existsSync(next) && existsSync(legacy)) { - 写入本地文件lib/session-store-test-entry.js:19
mkdirSync(dirname(next), { recursive: true }); - 写入本地文件lib/session-store-test-entry.js:21
renameSync(legacy, next); - 读取本地文件lib/session-store-test-entry.js:109
if (!existsSync(this.path)) { - 读取本地文件lib/session-store-test-entry.js:114
const raw = JSON.parse(readFileSync(this.path, "utf8")); - 写入本地文件lib/session-store-test-entry.js:125
mkdirSync(dirname(this.path), { recursive: true }); - 写入本地文件lib/session-store-test-entry.js:128
writeFileSync(tmp, JSON.stringify(body, null, 2), "utf8"); - 写入本地文件lib/session-store-test-entry.js:129
renameSync(tmp, this.path); - 读取本地文件lib/wait-state-test-entry.js:349
if (!existsSync(this.path)) return; - 读取本地文件lib/wait-state-test-entry.js:351
const raw = JSON.parse(readFileSync(this.path, "utf8")); - 写入本地文件lib/wait-state-test-entry.js:389
mkdirSync(dirname(this.path), { recursive: true }); - 写入本地文件lib/wait-state-test-entry.js:432
writeFileSync(tmp, JSON.stringify(body, null, 2), "utf8"); - 写入本地文件lib/wait-state-test-entry.js:433
renameSync(tmp, this.path);
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings-models@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 任务排至谷时运行
- 节省峰时开销
DeepSeek Harness 的谷时调度插件——把任务留到谷时再运行。
README
由 DeepSeek 最新模型翻译生成dsh-offpeak-job 🌙
English · 简体中文
DeepSeek Harness 的谷时调度插件——把对话留到更便宜的时段再跑,峰时可选先停,侧栏里还能一眼看到还在等的任务。
📸 截图
| | ⚙️ 峰谷设置 —— 按提供方配置:自定义谷时、峰时到了怎么办、夜里挂机时提权怎么处理 |
✨ 功能导览
⚙️ 按提供方配置峰谷
- 入口在 设置 → 模型 的每个提供方卡片里
- DeepSeek 可用官方峰谷;也可自建多段谷时(每天 / 工作日 / 周末),支持跨夜(如 18:00–09:00)
- 不需要等待时,可整段关掉峰谷
- 可选:进入峰时暂停,下一段谷时继续——或让已开跑的任务穿过峰时跑完
- 可选:谷时提权策略——拒绝后继续 / 等你来批 / 自动同意(仅「谷时运行」会话)
💬 按会话选择运行时机
- 输入栏控件:谷时运行 / 立即运行(样式同访问模式;可在提供方峰谷设置里隐藏)
- 不在谷时窗口里时,消息先排着,会话保持空闲,不会一直转圈
- 等待条上的 现在开始 会立刻放出排队任务,但不会把会话改回「立即运行」
- 待发与待续在 Host 重启后仍会保留
📋 谷时总览
- 侧栏 Settings 上方的入口(全部提供方都关掉峰谷时会隐藏)
- 跨会话看板:等待谷时、暂停待续、需要你处理、会话不可用
展开完整文档(README 剩余 1 节)
dsh-offpeak-job 🌙 English · 简体中文 DeepSeek Harness 的谷时调度插件——把对话留到更便宜的时段再跑,峰时可选先停,侧栏里还能一眼看到还在等的任务。 📸 截图 | | ⚙️ 峰谷设置 —— 按提供方配置:自定义谷时、峰时到了怎么办、夜里挂机时提权怎么处理 | ✨ 功能导览 ⚙️ 按提供方配置峰谷 - 入口在 设置 → 模型 的每个提供方卡片里 - DeepSeek 可用官方峰谷;也可自建多段谷时(每天 / 工作日 / 周末),支持跨夜(如 18:00–09:00) - 不需要等待时,可整段关掉峰谷 - 可选:进入峰时暂停,下一段谷时继续——或让已开跑的任务穿过峰时跑完 - 可选:谷时提权策略——拒绝后继续 / 等你来批 / 自动同意(仅「谷时运行」会话) 💬 按会话选择运行时机 - 输入栏控件:谷时运行 / 立即运行(样式同访问模式;可在提供方峰谷设置里隐藏) - 不在谷时窗口里时,消息先排着,会话保持空闲,不会一直转圈 - 等待条上的 现在开始 会立刻放出排队任务,但不会把会话改回「立即运行」 - 待发与待续在 Host 重启后仍会保留 📋 谷时总览 - 侧栏 Settings 上方的入口(全部提供方都关掉峰谷时会隐藏) - 跨会话看板:等待谷时、暂停待续、需要你处理、会话不可用 - 有人在等窗口时,可在这里统一 现在开始 或放弃 一览 | 🧩 插件类型 | Cordis 插件——服务端路由 + Web 客户端,纯增量(不替换任何官方插件) | | 🌙 管什么 | 「谷时运行」会话的发送准入;可选在窗口结束时暂停 | | 💬 对话体验 | 会话内等待条;输入栏运行时机控件 | | 📡 状态看板 | 侧栏谷时总览,角标标出需要留意的项 | | 💾 状态存储 | $DSH_HOME/offpeak-job/(提供方时段、会话开关、待发/待续队列) | | 🎨 界面 | TypeScript + React(宿主 external)+ CSS,跟宿主观感一致 | 快速开始 1. 安装(二选一): A · 一行命令(推荐) —— 直接安装 GitHub Release 的安装包,无需 Git: dsh plugin --profile web add "https://github.com/ganningniang/dsh-offpeak-job/releases/latest/download/dsh-offpeak-job.tgz" B · 本地克隆(想改源码用) —— link: 只接受本地绝对路径(路径不要带空格): git clone https://github.com/ganningniang/dsh-offpeak-job.git cd dsh-offpeak-job npm install && npm run build dsh plugin --profile web add "link:<克隆出来的 dsh-offpeak-job 仓库目录的绝对路径>" 例:克隆到 D:\tools 后 → dsh plugin --profile web add "link:D:/tools/dsh-offpeak-job" 两种方式 add 都会把 dsh-offpeak-job 注册进 profile 的 bundle 列表(写入 ~/.dsh,可能需要授权确认);若提示找不到 dsh 命令,用 npx @deepseek-ai/dsh 代替。 2. 重启 DSH web 进程并刷新界面 3. 配置提供方:设置 → 模型 → 编辑某提供方 → 峰谷设置 → 选时段 / 结束策略 / 提权策略 → 保存 4. 在会话里用:输入栏选 谷时运行,正常发送即可——到下一段谷时再跑(等不及就点 现在开始) 架构 一个包同时包含宿主 Cordis 插件与 Web 客户端: - 宿主:/api/offpeak-job/* 路由——健康检查、提供方/会话配置、总览、放出 / 放弃 / 续跑冲突处理;在发送路径上拦住「谷时运行」任务,使其可以排队等待而不开成忙碌回合 - 客户端:注入模型页的峰谷面板、输入栏运行时机、会话等待条、侧栏总览 - 持久化:时段与排队写在 $DSH_HOME/offpeak-job/;Host 重启后恢复队列,并在会话 agent 再次可用时重新挂上到点放出 开发与测试 cd dsh-offpeak-job npm install npm run build # lib/index.js + lib/client.js npm run check npm run test:offpeak - 请在本包目录内构建——产物是与 cordis.patch.yml 同级的 lib/ - 测试覆盖时段计算、等待落盘、提权策略、总览与文案冻结 常见问题 Q:想重装 / 升到最新版? 重跑安装命令(永远装最新 Release),装完重启 dsh web 并刷新: dsh plugin --profile web add "https://github.com/ganningniang/dsh-offpeak-job/releases/latest/download/dsh-offpeak-job.tgz" 排队与峰谷配置在 $DSH_HOME/offpeak-job/,重装插件一般不会清掉它们。 Q:运行时机控件是灰的 / 不见了? 这个提供方关掉了峰谷(或选了「不限制」),或峰谷面板里关了「会话显示运行时机」。打开峰谷并保存;需要输入栏控件时再打开显示开关。 Q:到了谷时,任务怎么没跑? 电脑和 DeepSeek Harness 还得开着。合盖休眠、关掉 web 进程,排队不会自己醒来。重启之后,会话可用时,等待条 / 总览里一般还能看到原来的排队。 Q:峰时暂停之后,长工具会从断点精确接着吗? 不会。续跑是下一段谷时「继续这个任务」,不是把工具做到一半的现场完整冻住。你自己点了 停止,也不会自动续跑。 已知限制 - 谷时要真正跑起来,Host 必须还在线 - 暂停再继续是跟进续跑,不是 mid-tool 断点快照 - 默认提权是 拒绝后继续(可按提供方改成等你审批或自动同意) - 只有 谷时运行 会话守日历与谷时提权策略;立即运行 走平时流程 - 有待续时又发新消息,会先问你:先完成待续,还是丢掉待续 - 独立插件:不改 DeepSeek Harness 本体;宿主扩展点不够时,在插件内绕过或写明缺口 隐私 无遥测。配置与排队只落在本机 $DSH_HOME/offpeak-job/。除 DeepSeek Harness 本身的模型调用外,本插件不向外部上报。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ganningniang/dsh-offpeak-job
把对话任务排到谷时再跑,省下峰时开销
相关插件 · 模型接入
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