Linux-System-0/peaklow
@pi/peaklow 是一个运行在 DeepSeek Harness 宿主根作用域的 Cordis 插件,为 web profile 提供「高峰自动停止、低峰自动开始」的会话级自动调度,并在浏览器端会话页 头部显示一张可交互的 peaklow 状态卡。
catalog 简介 / catalog descriptioncatalog description:DeepSeek Harness (Cordis) 高峰/低峰自动调度插件:宿主 + 浏览器端 client 状态卡。dsh-plugin
项目介绍Project Overview
@pi/peaklow 是 DeepSeek Harness 的 Cordis 插件,按用户脚本轮询判定高峰/低峰:退出码 100 挂起用户步骤,101 放行并注入脚本输出,其它记为错误仍放行以避免误挂;转回低峰时自动重排队被挂起消息。适用于 web profile 下需要成本/资源敏感的会话级自动调度,会话页头部提供可交互状态卡、开关、判峰脚本与轮询间隔热更新。需注意:修改宿主 peaklow.mjs 后必须重启 dsh web 才会生效,而 client bundle 改动实时生效;判定与挂起强依赖用户脚本正确返回 100/101。
@pi/peaklow is a Cordis plugin for DeepSeek Harness that runs a user script on a polling interval to mark peak or off-peak. Exit code 100 rejects the user step, 101 allows it (and injects stdout into context), any other code logs an error and still allows the step. When conditions shift back to off-peak, suspended steps are automatically requeued. It targets web-profile sessions needing cost- or resource-aware scheduling, exposing an interactive header card with toggle, script, interval, and notes that hot-reload each cycle. Caveat: host peaklow.mjs changes require restarting dsh web, while the client bundle is read live from disk.
请帮我了解并安装插件:【peaklow】【https://github.com/Linux-System-0/peaklow】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:Linux-System-0/peaklow
把 Linux-System-0/peaklow 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
高峰/低峰自动调度插件(Cordis / DeepSeek Harness)
@pi/peaklow 是一个运行在 DeepSeek Harness 宿主根作用域的 Cordis 插件,为 web
profile 提供「高峰自动停止、低峰自动开始」的会话级自动调度,并在浏览器端会话页
头部显示一张可交互的 peaklow 状态卡。
本包是一个【宿主 + client】双面包:宿主负责判定与调度,client 负责在浏览器里展示 和控制。
行为
自动启动(无弹窗):新会话开始时,插件不再询问任何是/否,直接用配置自动启用:
- 若该 workspace 已保存过配置(
$DSH_HOME/peaklow/<key>.json),用保存的script/intervalMs/notes启用。 - 若从未配置过,使用默认脚本
bash -c 'exit 101'兜底(始终判定为低峰/放行), 保证插件先能跑、任务不会被误挂起,并提示在配置里改脚本。
高峰/低峰判定:按轮询间隔运行用户脚本。
- 退出码
100= 高峰 →agent/pre-step返回{ kind: 'reject' }挂起用户步骤。 - 退出码
101= 低峰 → 放行;若脚本有输出,一并注入上下文。 - 其它退出码 = 错误 → 记录
lastError并放行(避免误挂起,保证低峰期能正常进行)。
挂起判定:仅当明确判为高峰(
mode === 'peak')且自动调度开启时才挂起;低峰、 未知、错误一律放行——确保「低峰自动开始」不被误挂。
全程自动(无需手动):高峰挂起的步骤会暂存,一旦判定转回低峰,插件自动把
被挂起的消息重新入队并唤醒该 agent 恢复执行(agent/steer + inject)。整个
「高峰自动停止 → 低峰自动开始」闭环无需你手动干预。
状态刷新与开关解耦:无论「自动调度」开/关,轮询都会持续运行并刷新状态 (mode / 上次判定 / 输出)。开关只影响「高峰是否挂起」:关掉后高峰不再挂起,但 状态卡仍会定时刷新。
配置热更新:每个轮询周期都会重新载入 $DSH_HOME/peaklow/<key>.json。即使直接
改了磁盘上的配置文件,下一个周期就会用上新脚本/间隔,避免「脚本是高峰但 mode
仍为低峰、挂起失效」。
启用后,插件向系统提示注入「已启用调度、执行阶段不要向用户提问」及当前判定/脚本/ 输出等上下文。
浏览器端状态卡(可交互)
client 插件把一张状态卡注册进会话 slot conversation.session.header.actions,通过
sessionId(宿主侧 agent.id === session.id,dsh-agent 强制相等)访问对应会话。
卡片包含:
- 状态点:高峰橙、低峰绿、错误红、判定中灰。
- 开关按钮:
自动调度·开(绿色)/自动调度·关(灰色)——点击即启用/停用 自动调度(高峰挂起、低峰运行)。 - 「编辑」按钮:展开统一表单,可一次改 判峰脚本、轮询间隔(秒,数字 填写而非下拉选择)、注释/备注,点「保存」即时生效并持久化。
- 每 1.5 秒自动轮询刷新;默认折叠为一行,点击卡头展开详情(模式/间隔/上次判定/ 脚本/备注/输出/错误)。
宿主 → 浏览器通道
宿主自己注册两个同源 HTTP 端点(最简单,不动框架与前端产物):
| 端点 | 方法 | 用途 |
|---|---|---|
/peaklow/state?session=<id> |
GET | 读取当前会话的快照(mode/script/intervalMs/notes/lastStdout/lastError/lastCheckedAt/attempts/enabled),供前端轮询 |
/peaklow/control |
POST | 接收 { session, enabled?, intervalMs?, script?, notes? },开/关、改间隔、改脚本/注释,并即时生效 + 持久化到 $DSH_HOME/peaklow/<key>.json |
说明:
@deepseek-ai/dsh-host-plugin-inventory只暴露「插件是否加载」这类通用 Loader 状态,不含 peaklow 的逐 agent 运行状态,故需自行用上述端点作为通道。若需授权围栏, 可改用ctx.connection.rpc.handle+ client 侧client-request/client-response。
文件
| 文件 | 说明 |
|---|---|
peaklow.mjs |
宿主插件源码(根作用域,inject: ['timer','webServer']),含 /peaklow/state 与 /peaklow/control 端点、自动启动与判峰逻辑 |
client.js |
浏览器端 client bundle(手写 window.__ModuleLoader__.load(...),零构建,用 React.createElement) |
client/index.tsx |
同功能的 TSX 源码(可选,供 esbuild 构建) |
build-client.mjs |
用 esbuild 把 TSX 打成 load({id,factory}) 格式的脚本 |
package.json |
@pi/peaklow 包元信息 + dsh.host / dsh.client 声明 |
install.sh |
安装宿主 + client 插件进 web profile,并以包名注册 |
verify.sh |
语法 + 配置树校验 |
安装
./install.sh
它会:
- 把
@pi/peaklow软链进$DSH_HOME/profiles/web/node_modules/@pi/peaklow。 - 把
cordis.patch.yml里 peaklow 的入口由相对路径改为包名@pi/peaklow。 ——这很关键:dsh-client-modules只扫描已加载的加载器入口并按entry.options.name解析dsh.client。若仍写./peaklow.mjs,则无法解析到dsh.client,client 插件不会被下发到浏览器。
安装后重启 dsh web(无需重建前端)即可:宿主侧会把 @pi/peaklow 加入
window.__DSH_BOOT__ 并从 /plugins/@pi/peaklow/client.js 提供 bundle,打开任一会话页
头部即可看到并操作状态卡。
前端产物不需要重建。但请注意 client bundle 与宿主的加载方式不同:
/plugins/@pi/peaklow/client.js是从磁盘实时读取的(改动即生效),而宿主peaklow.mjs仅在dsh web启动时加载一次。因此改动宿主逻辑(如新增端点)后 必须重启dsh web才生效。
改用 esbuild 从 TSX 构建(可选)
pnpm add -D esbuild # 或 npm i -D esbuild(一次性)
node build-client.mjs # 生成 client.js
bowenliang123/dsh-context
omdsh-dev/dsh-genui
anysearch-team/anysearch-dsh
liustack/modsearch
csyangwen/dsh-memory-evolve
Nagi-ovo/dsh-find-plugins
cocofhu/anime-find
e2mcc/dsh-popout-sidebar