dsh-offpeak:DSH 宿主插件,用于自动管理高峰期会话与请求

在 DeepSeek Harness (DSH) 生态中,插件化是核心。当处于高峰期时,API 限流会直接导致请求失败。dsh-offpeak 插件旨在解决这个问题:在高峰请求真正发出之前进行拦截,只拦截目标为官方源或显式列出的模型的请求,其余照常运行,并支持给单个会话排一段时间「畅跑」豁免。

这是一个 DSH 宿主插件,插件 id 为 dsh-offpeak。作者为 lizilong1993。配置文件位于 config/offpeak.json。

核心功能

可配置峰谷策略
峰窗口、时区、每窗口的星期与周末规则全部来自 config/offpeak.json(环境变量 $DSH_HOME/config、当前目录 config、包内默认依次生效)。配置文件写坏绝不静默让守卫失效:错误被收集并暴露,对应键保留默认值。

回合门控
入峰时对 running 会话走回合级暂停(当前轮跑完再拦),退峰自动放行。自动放行不碰手动 /pause。

请求级守卫
agent/request 每个请求都过,所以入峰后才启动的会话、会话中途切到官方源的情况都能兜住。hold(默认)静默挂起,error 抛可识别的 PEAK_DEFERRED。

目标判定
优先级:显式 officialProviders → 模型名(精确匹配、大小写不敏感) → 实时 baseURL → catalog 默认端点 → 内置 id(deepseek-official)→ unknown。只有判为官方才拦。

高峰拦截列表
在面板里勾选模型(或直接写 officialModelPatterns):条目是模型名精确匹配 —— 勾了 ocg/deepseek-flash 就只拦这一个模型,无论它跑在哪条路由上;不勾不拦。面板顶部有关键词过滤、全选/取消全选、刷新与热重载。

畅跑
给单个会话排一段或多段绝对时间窗口,窗口内该会话在入峰、请求挂起两处都豁免;支持逐段暂停/恢复、合并上限 8 条、持久化。面板里与拦截列表同处一个展开区(最上方)。

可编辑高峰谷时
面板最底部「当前高峰谷时」:按配置预填每段 开始 – 结束(可增删行)+「周末默认谷时」复选框,保存即写入 config/offpeak.json 并立即生效(其它键与每行的星期限制原样保留)。

显示时区
可另选任一 IANA 时区(默认策略时区):畅跑时间、峰谷时段与 hover 卡片按它换算展示;配置文件里的时间值不动。

徽标
输入区一个可点徽标:高峰 / 高峰 · 拦截中 / 高峰 · 畅跑中 / 谷时 / 周末;拦截态红、放行态绿。

自动重试
可选的后端重试(默认关),且永远给门控让路。

兼容性

DSH 宿主版本
package.json 的 engines.dsh = >=0.1.5-rc.2 <0.1.6-0 \|\| >=0.1.7-rc.1 <0.1.8-0 \|\| >=0.2.0-rc.1 <0.2.1-0(三段)。稳定接口:/session-guard/* 路由前缀(与既有工具兼容)。

Node 版本
engines.node >= 20。

与 input-traffic 关系
优先读 window.__DSH_OFFPEAK_BRIDGE__,兼容旧桥接名 window.__DSH_SESSION_GUARD_BRIDGE__。

已知限制
不识别法定节假日;畅跑按配置时区解释墙钟;高峰拦截列表是精确模型名匹配(不做关键字/正则的批量覆盖)。

安装

三条通道任选:npm 包 / GitHub 仓库 / 本地目录或 Release 里的 tgz。

# npm(推荐)
dsh plugin --profile desktop add dsh-offpeak

# GitHub
dsh plugin --profile desktop add github:lizilong1993/dsh-offpeak

# 本地目录 / Release 资产
dsh plugin --profile desktop add ./dsh-offpeak
dsh plugin --profile desktop add ./dsh-offpeak-<version>.tgz

从源码构建(开发用):

git clone https://github.com/lizilong1993/dsh-offpeak.git
cd dsh-offpeak
npm install
npm run build

配置

config/offpeak.json(默认层;设置表单里的值优先),常用键:

{
  "timezone": "Asia/Shanghai",
  "peakPolicy": { 
    "peakWindows": [{ 
      "name": "morning", 
      "start": "09:00", 
      "end": "12:00", 
      "days": ["mon","tue","wed","thu","fri"] 
    }] 
  },
  "weekendPolicy": { "enabled": true, "days": ["sat","sun"], "mode": "offPeak" },
  "providerGuard": true,
  "officialProviders": [],            // 追加官方 provider id(精确匹配,最高优先级)
  "officialModelPatterns": [],        // 高峰拦截的模型名(精确匹配、大小写不敏感)
  "officialBaseURLs": ["api.deepseek.com"],
  "deferredMode": "hold",             // 'hold' | 'error'
  "deferredResume": true
}

可用 DSH_OFFPEAK_CONFIG 显式指定配置文件。

HTTP / 服务面

GET /session-guard/status · /state?session= · /settings · /diag · POST /session-guard/rpc(动作包括 setModelPatterns、setPeakPolicy、freeRunAdd、reloadConfig 等),以及进程内的 sessionGuard 服务端口。

典型用法

  1. 安装:执行 dsh plugin --profile desktop add dsh-offpeak。
  2. 配置:编辑 config/offpeak.json,设置时区、峰窗口和周末策略。
  3. 管理:通过 /session-guard/settings 面板管理拦截列表与畅跑,或通过 POST /session-guard/rpc 设置模型模式并热重载。
  4. 环境变量:使用 DSH_OFFPEAK_CONFIG 显式指定配置文件路径。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜