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

峰谷守门 CNyaotian-Lunar/dsh-peak-gate

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

高峰时段自动限制 token 花销,可一键放行

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CNyaotian-Lunar/dsh-peak-gate
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 读取本地文件
    lib/holidays.mjs:388
    readFile: (path) => readFile(path, 'utf8'),
  • 写入本地文件
    lib/holidays.mjs:389
    writeFile: (path, data) => writeFile(path, data, 'utf8'),
  • 写入本地文件
    lib/holidays.mjs:390
    mkdir: (path) => mkdir(path, { recursive: true }),
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 拦大任务
  • 一键放行口令

DSH 插件:按 DeepSeek 峰谷分时计价,在高峰时段给 token 花销踩刹车(拦大任务 / 压缩输出上限 / 让模型少说废话),并提供一键放行口令

README

由 DeepSeek 最新模型翻译生成
dsh-peak-gate · 峰谷守门 / Peak-Gate 按 DeepSeek 的峰谷分时计价,在高峰时段给 token 花销踩刹车:大任务拦下、输出上限压缩、并让模型少说废话,还提供一键放行口令。 English: Based on DeepSeek's peak / off-peak time-of-day pricing, it puts the brakes on token spend during peak hours: big tasks get blocked, output limits get compressed, and the model is told to stop waffling — plus it ships a one-word force-pass token. ⚠️ 非官方插件:与 DeepSeek / DeepSeek Harness 官方无关,是社区自研插件。 通过 web profile 的 link: 依赖挂载(见下方「安装」),不是从插件市场装的。
展开完整文档(README 剩余 1 节)
dsh-peak-gate · 峰谷守门 / Peak-Gate

按 DeepSeek 的峰谷分时计价,在高峰时段给 token 花销踩刹车:大任务拦下、输出上限压缩、并让模型少说废话,还提供一键放行口令。

English: Based on DeepSeek's peak / off-peak time-of-day pricing, it puts the brakes on token spend during peak hours: big tasks get blocked, output limits get compressed, and the model is told to stop waffling — plus it ships a one-word force-pass token.

⚠️ 非官方插件:与 DeepSeek / DeepSeek Harness 官方无关,是社区自研插件。
通过 web profile 的 link: 依赖挂载(见下方「安装」),不是从插件市场装的。

⚠️ English: Unofficial plugin: unaffiliated with DeepSeek / DeepSeek Harness; built by the community. It is mounted through a web-profile link: dependency (see "安装 / Installation" below) and is not installed from a plugin marketplace.

安装 / Installation

这是 DSH(DeepSeek Harness)host 插件(Node half,跑在宿主侧)—— 通过 web profile 的依赖 + bundle patch 挂载: English: This is a DSH (DeepSeek Harness) host plugin (Node half, running on the host side) — mounted through a web-profile dependency + bundle patch:

1. 把源码放到 profile 的 vendor 目录:/profiles/web/vendor/dsh-peak-gate-src English: Put the source into the profile's vendor directory: /profiles/web/vendor/dsh-peak-gate-src
2. 在 profiles/web/package.json 里加两处:dependencies 填 "dsh-peak-gate": "link:vendor/dsh-peak-gate-src"; dsh.profile.bundles 列表里加上 dsh-peak-gate English: Add two things in profiles/web/package.json: set dependencies to "dsh-peak-gate": "link:vendor/dsh-peak-gate-src"; and add dsh-peak-gate to the dsh.profile.bundles list
3. pnpm install(或按你的 DSH 版本用等价的挂载方式),然后重启 dsh web English: pnpm install (or the equivalent mounting method for your DSH version), then restart dsh web
4. 配置命名空间 peak-gate;DSH 0.1.7+ 写在 profiles/web/cordis.patch.yml 的 peak-gate: 段,热改即时生效,无需重启 English: The config namespace is peak-gate; on DSH 0.1.7+ write it under the peak-gate: section of profiles/web/cordis.patch.yml — hot edits take effect immediately, no restart needed

运行时依赖 DSH 自带的 schemastery 与 @deepseek-ai/dsh-llm,没有其它第三方包。

English: At runtime it depends on DSH's own schemastery and @deepseek-ai/dsh-llm; there are no other third-party packages.

官方峰谷口径 / The Official Peak/Off-Peak Rules

来自 DeepSeek 官方定价页(核对于 2026-09-11) + 官方峰谷时间说明(2026-09-19 补充): English: Taken from the official DeepSeek pricing page (verified 2026-09-11) plus the official peak/off-peak time note (added 2026-09-19):

| 时段(北京时间) | 价格 |
| 周一至周五 09:00–12:00、14:00–18:00 | 高峰 ×2 |
| 其余时间、周末全天、中国法定节假日全天 | 空闲 ×1 |

English:

| Window (Beijing time) | Price |
| Mon–Fri 09:00–12:00, 14:00–18:00 | peak ×2 |
| 其他所有时间、整个周末、所有中国法定节假日 | 空闲 ×1 |

- 空闲价 = 高峰价的一半(flash 输出:谷 $0.6/M vs 峰 $1.2/M)中文: 空闲价 = 高峰价的一半(flash 输出:谷 $0.6/M vs 峰 $1.2/M)
- 判定走「UTC+8 位移后读 UTC 字段」,不依赖本机时区(本机时区/夏令时不可信)中文: 判定走「UTC+8 位移后读 UTC 字段」,不依赖本机时区(本机时区/夏令时不可信)
- 🗓️ 调休上班的周末也按空闲计费(官方 2026-09-19 明确)⇒ 只看星期几,没有“补班日恢复高峰”的反向逻辑中文: 🗓️ 调休上班的周末也按空闲计费(官方 2026-09-19 明确)⇒ 只看星期几,没有“补班日恢复高峰”的反向逻辑

🗓️ 法定节假日日历(2026-09-25 新增)/ 🗓️ 法定节假日日历(2026-09-25 新增)

| 层 | 说明 |
| ① 联网 | NateScarlet/holiday-cn(按国务院公告生成,含 isOffDay),三源按序:jsDelivr → raw.githubusercontent → gh-proxy;只拉当年,超时 8s,单份响应上限 1 MB |
| ② 磁盘缓存 | /data/peak-gate/holidays-cn.json,默认 30 天内不重复拉;联网失败仍用旧缓存(并告警) |
| ③ 内置兜底 | 代码里的 DEFAULT_HOLIDAYS(2026 全年),离线/首启可用 |
| ④ 自检 | 日级:当年落在日历里的放假日 /data/peak-gate/holidays-cn.json,默认 30 天内不重复拉;联网失败仍用旧缓存(并告警) |
| ③ 内置兜底 | 代码里的 DEFAULT_HOLIDAYS(2026 全年),离线/首启可用 |
| ④ 自检 | 日级:当年落在日历里的放假日 0(真正有新输入)时进行,绝不把工具循环当用户输入拦;
续跑步骤只走第 2 条的工具预算,走的是一条独立的、可一键关掉(peakMaxSteps: 0)的规则。
英文: ⚠️ 硬性规则: pre-step 在每一步都会运行,而工具循环中间某一步的 messages.length === 0。“这是不是重活儿?”的判断只在 messages.length > 0(确实有新的输入)时才做;工具循环绝不会被误判为用户输入而被拦截。续接步骤只经过杠杆 2 的工具预算——这是一条独立规则,可以通过单个设置(peakMaxSteps: 0)关闭。

v2 的三层判定(2026-09-11 新增)/ v2 的三层判定(2026-09-11 新增)

需求:「峰时只能解一些数学题等短的东西,或者只是问一下天气,写程序太伤了」 → 所以峰时按「这活儿重不重」决定拦不拦,而不是只看输入大小。

英文: 需求是:“在高峰时它只能处理数学题之类的短东西,或者只是问一下天气,写程序太伤了” → 所以在高峰时,是否拦截由“这活儿有多重”决定,而不是仅仅看输入有多大。

| 层 | 做什么 | 成本 | 兜底 |
| 1. 白名单直通 | 命中 lightKeywords 且输入不长 → 直接放行 | 0 | —— |
| 2. 模型分类 | 白名单没命中、输入够长 → 花一次极短调用问「heavy 还是 light」 | ~几十 token | 超时/报错/认不出 → 按 light 放行 |
| 3. 工具预算 | 峰时单轮 step > peakMaxSteps → 就地停下 | 0(不发模型请求) | 任何异常 → 放行保平安 |

英文:

| 层 | 做什么 | 成本 | 兜底 |
| 1. 白名单直通 | 命中 lightKeywords 且输入不长 → 直接放行 | 0 | —— |
| 2. 模型分类 | 白名单没命中、输入够长 → 花一次极短调用问「heavy 还是 light」 | ~几十 token | 超时/报错/认不出 → 按 light 放行 |
| 3. 工具预算 | 峰时单轮 step > peakMaxSteps → 就地停下 | 0(不发模型请求) | 任何异常 → 放行保平安 |

第 1 层刻意只判「轻」、不设黑名单:不靠词表猜「这像不像写程序」,「重不重」交给第 2 层的模型判断,词表只用来省掉那些明显不用分类的短问句。

英文: 第 1 层刻意只识别“轻”、不设黑名单:它不靠词表猜“这像不像写程序”;“重不重”交给第 2 层的模型判断,词表只用来省掉那些明显不用分类的短问句。

第 2 层怎么调用的:走 ctx.get('llm').prepareCall()(官方公开路径且完全绕开 llm/stream 这个 waterfall),所以既不会把自己再拦一次、也不污染主请求链路。
调用时只带 provider / model / 一条 user 消息 / maxTokens: 6,并用 AbortSignal.timeout 限时;识别 a(light)/ b(heavy)两个字母,认不出就放行。

英文: 第 2 层怎么调用:它走 ctx.get('llm').prepareCall()(官方公开路径,并且完全绕开 llm/stream 这个 waterfall),所以既不会把自己再拦一次,也不污染主请求链路。调用时只带 provider / model / 一条 user 消息 / maxTokens: 6,并用 AbortSignal.timeout 限时;它识别 a(light)/ b(heavy)两个字母,认不出就放行。

⚠️ 分类调用必须关掉推理(classifierReasoningEffort: 'off',默认值):会话默认 reasoningEffort: high 会开思考,思考 token 会把 maxTokens: 6 吃光 —— 答案一个字母都吐不出来,于是每次都走「分类未定 → 放行」,看起来像分类器根本没生效

英文: ⚠️ 分类调用必须关掉推理(classifierReasoningEffort: 'off',默认值):会话默认的 reasoningEffort: high 会开启思考,思考 token 会把 maxTokens: 6 吃光——答案一个字母都吐不出来,于是每次都走“分类未定 → 放行”,看起来像分类器根本没生效(2026-09-11 真机实测踩到)。若某路由不支持 off,插件会自动退回默认档、并把上限放大到 32 token 重试一次。

English: ⚠️ 分类调用必须关闭推理(classifierReasoningEffort: 'off',即默认值):会话默认的 reasoningEffort: high 会启用思考,而思考 token 会吃光全部 maxTokens: 6 —— 答案连一个字母都出不来,于是每次尝试都落到“分类未决 → 放行”,看起来就像分类器完全没工作(2026-09-11 真机实测踩到)。若某路由不支持 off,插件会自动退回默认档、并把上限放大到 32 token 重试一次。

第 3 层停下时长什么样:不发任何模型请求,直接把一条提示写进会话
(session.append('user/message', …),与 agent loop 自己落消息同款),界面立刻可见;
然后返回 {kind:'reject'} 结束本轮。

English: 第 3 层停下时长什么样:它完全不发模型请求;它把一条提示直接写进会话(session.append('user/message', …),与 agent loop 自己记录消息用的是同一个调用),因此界面立刻可见;然后它返回 {kind:'reject'} 结束本轮。

🩸 曾经以为「返回空 messages 就能让本轮自然收尾」—— 真机实测是错的。
dsh-agent-loop 的闸门是 if (turnEnds && decision.messages.length === 0) break,
而工具循环里 turnEnds 始终是 null ⇒ 空 messages 被忽略,照样发一次满历史请求、模型继续干活(会话记录里可见:提示之后又跑了 22 次工具调用)。
宿主里唯一能真正结束本轮的就是 reject(turnEnds = {kind:'blocked'} + return false)。
代价:本轮不会有 turn/end,界面上本轮也没有模型收尾(提示已把原因写在会话里)。

English: 🩸 曾经以为「返回空 messages 就能让本轮自然收尾」—— 真机实测是错的。dsh-agent-loop 的闸门是 if (turnEnds && decision.messages.length === 0) break,而工具循环里 turnEnds 始终是 null ⇒ 空 messages 被忽略,照样发一次满历史请求、模型继续干活(会话记录里可见:提示之后又跑了 22 次工具调用)。宿主里唯一能真正结束本轮的就是 reject(turnEnds = {kind:'blocked'} + return false)。代价:本轮不会有 turn/end,界面上本轮也没有模型收尾(提示已把原因写在会话里)。

生死线不是 messages.length > 0:宿主会把 source.kind === 'plugin' 的内容注入进 messages(默认启用的 dsh-repeat-tool-reminder 就会这么干),所以判据是
hasUserInput()(只要有「非插件来源」的消息才算用户的新输入),否则工具提醒会被
误当成用户请求去分类、甚至被拦截提示顶替掉。

English: 生死线不是 messages.length > 0:宿主会把 source.kind === 'plugin' 的内容注入进 messages(默认启用的 dsh-repeat-tool-reminder 就会这么干),所以真正的判据是 hasUserInput()(只要有「非插件来源」的消息才算用户的新输入),否则工具提醒会被误当成用户请求去分类、甚至被拦截提示顶替掉。

拦截方式(onBlock)/ How It Blocks (onBlock)

| 值 | 行为 | 成本 | 体验 |
| replace(默认) | 用一条短提示顶替掉这次大请求 | 省 95%+ | 用户能立刻看到「被拦了 + 怎么放行」 |
| reject | 该轮直接 blocked,一个 token 都不发 | 零 | 界面静默,原因只进日志 |

英文:

| 取值 | 行为 | 成本 | 体验 |
| replace(默认) | 用一条短提示顶替掉这次大请求 | 省 95%+ | 用户能立刻看到「被拦了 + 怎么放行」 |
| reject | 该轮直接 blocked,一个 token 都不发 | 零 | 界面静默,原因只进日志 |

一键放行 / One-Word Force Pass

消息里带 !force(可配 forceToken)即无条件放行 —— 急事不用改配置。
注意:!force 整轮生效 —— 既放行这次请求,也关掉本轮的工具预算(这样长任务才跑得完)。
peakMaxSteps: 0 是彻底关掉第 3 层的开关。

英文: 在消息里放 !force(可通过 forceToken 配置)即无条件放行 —— 急事不用改配置。
注意:!force 整轮生效 —— 既放行这次请求,也关掉本轮的工具预算(这样长任务才跑得完)。
peakMaxSteps: 0 是彻底关掉第 3 层的开关。

配置 / Configuration

命名空间 peak-gate,写在 ~/.dsh/profiles/web/cordis.patch.yml,热改即时生效,无需重启:英文: 命名空间是 peak-gate,写在 ~/.dsh/profiles/web/cordis.patch.yml;热改即时生效,无需重启:

peak-gate:
enabled: true
mode: block # block 真拦 | notify 只提醒 | off 关闭
peakWindows: ['09:00-12:00', '14:00-18:00'] # 北京时间
beijingOffsetMinutes: 480 # UTC+8
weekendOffPeak: true
officialProviders: [] # 空 = 所有 provider 都管;填 ['deepseek-official'] 则只管网关外的官方路由
brevitySection: true # 峰时注入「精简输出」提示段 bigTaskTokens: 6000 # 本次新输入估算超过它 = 大任务(只算新输入,不算会话历史) bigTaskChars: 20000 # 字符数兜底 sessionPressureTokens: 0 # >0 时:会话上下文压力超它也算大任务(默认关)

—— 第 1 层:白名单直通(只判轻,没有黑名单) ——
lightKeywords: [算一下, 计算, 求解, 解方程, 数学, 证明, 天气, 几点, 是什么, 为什么, 解释一下, 翻译, …]
lightKeywordMaxChars: 120 # 输入超过这么多字符就不认白名单

—— 第 2 层:模型分类 —— useModelClassifier: true # 关掉就退回「只看输入大小」 classifierProvider: '' # 留空 = 用本会话上一次请求的 provider classifierModel: '' # 留空 = 用本会话上一次请求的 model classifierTimeoutMs: 3000 # 超时按轻活放行 classifierMaxTokens: 6 # 只够吐一个字母 classifierReasoningEffort: off # 必须关推理:否则思考会吃光上面那 6 个 token,答案吐不出来 classifierMinChars: 20 # 短于它就不花这次调用 classifierMinTokens: 15

—— 第 3 层:工具预算 —— peakMaxSteps: 12 # 峰时单轮工具步数预算;0 = 关掉这条

forceToken: '!force'
peakMaxTokens: 32768 # 峰时主 agent 输出上限,0 = 不限 subagentMaxTokens: 16384 manageSubagents: true # 是否管子代理(输出上限 + 是否拦) blockSubagents: false # 是否真拦子代理的大任务(默认不拦,免得主任务断掉) onBlock: replace # replace | reject warnOncePerSession: true # 仅 reject 方式有意义 dryRun: false # 只记日志不真拦

想调「多严」就动这三处:useModelClassifier(要不要模型判)、peakMaxSteps(工具预算)、 classifierMinChars(多长的输入才值得花一次分类)。

中文: 要调整它的“严格程度”,改这三个:useModelClassifier(模型是否参与判定)、peakMaxSteps(工具预算)和 classifierMinChars(输入多长才值得做一次分类)。

想看自己的 provider 叫什么?日志里每次拦截都会打印 provider=...,照着填白名单即可。

中文: 想知道你的 provider 叫什么?每次拦截都会在日志里打印 provider=...,把它复制到白名单里即可。

验证 / Verification

先跑离线自测(155 项):/ 先运行离线自测(155 个用例):

离线自测(155 项):依赖 DSH 提供的 schemastery / @deepseek-ai/dsh-llm,所以要在 /profiles/web/node_modules 的解析链内运行
cd /profiles/web/vendor/dsh-peak-gate-src
node test/selftest.mjs

真机侧怎么确认插件生效(实测结论):ctx.logger 的输出不落盘(/logs/ 里没有 peak-gate 目录),所以别去翻插件日志,看这两处即可:

中文: 如何在真机上确认插件已生效(实测结论):ctx.logger 的输出不会写入磁盘(/logs/ 下没有 peak-gate 目录),所以不要翻插件日志,只看这两处即可:

| 看哪里 | 期望 |
| GUI「插件」页里 dsh-peak-gate 的开关 | 已启用 |
| 宿主启动日志 /dsh-web-launcher.err.log | 0 字节(无加载报错) |

中文:

| 看哪里 | 期望 |
| GUI「插件」页里 dsh-peak-gate 的开关 | 已启用 |
| 宿主启动日志 /dsh-web-launcher.err.log | 0 字节(无加载报错) |

加载成功时宿主控制台会打印 peak-gate: 峰谷守门 v2 已加载(mode=…,峰窗=…,精简段=…,白名单 N 词,模型分类=…,工具预算=… 步,自动日历=…)。

中文: 加载成功时宿主控制台会打印 peak-gate: 峰谷守门 v2 已加载(mode=…,峰窗=…,精简段=…,白名单 N 词,模型分类=…,工具预算=… 步,自动日历=…)。

卸载 / 回滚 / Uninstall / Rollback

cd ~/.dsh/profiles/web
Copy-Item package.json.bak-peakgate- package.json -Force # 恢复改动前的 package.json / 恢复改动前的 package.json
pnpm install # 重新解析依赖 / 重新解析依赖
然后重启 dsh web / 然后重启 dsh web

设计参考 / Design References

写这个插件时参考了市场里几个同类插件的做法(awesome-dsh-plugin.com):中文: 本插件的设计参考了市场里几个同类插件的做法(awesome-dsh-plugin.com):

| 插件 | 借鉴了什么 |
| dsh-peak-cost-mode | 峰时注入「精简输出」提示段(caveman 模式);systemPrompt.section 的 text 用函数动态求值 |
| dsh-peak-block | 只精确匹配 deepseek-official 判定官方、避免误伤中转;时区走 UTC+8 数学换算 |
| dsh-peak-indicator | 按事件时间戳分时段计价的口径意识 |

中文:

| 插件 | 借鉴了什么 |
| dsh-peak-cost-mode | 峰时注入「精简输出」提示段(caveman 模式);用函数动态求值 systemPrompt.section 的 text |
| dsh-peak-block | 只精确匹配 deepseek-official 判定官方、避免误伤中转;时区走 UTC+8 数学换算 |
| dsh-peak-indicator | 按事件时间戳分时段计价的口径意识 |
已知限制 / Known Limitations

- 任务量是估算:按字符类型粗估(ASCII ÷ 3.6,非 ASCII × 0.75)。够分级,不适合对账。
English: Task size is an estimate: a rough estimate by character class (ASCII ÷ 3.6, non-ASCII × 0.75). Good enough for classifying, not for accounting.
- 模型分类要多花一次调用:每次判定 heavy/light 约几十 token(maxTokens: 6)。相比拦下一次写程序的工具循环(动辄上万 token)可以忽略,但它确实是「每条够长的输入都问一次」的成本模型;想省就调高 classifierMinChars / 调低 useModelClassifier。
English: Model classification costs one extra call: each heavy/light decision is about a few dozen tokens (maxTokens: 6). Next to blocking one program-writing tool loop (easily tens of thousands of tokens) that is negligible, but it really is a cost model of "ask once for every input that is long enough"; to save, raise classifierMinChars / turn down useModelClassifier.
- 停下的那一轮没有模型收尾:第 3 层是「不发请求、直接落提示」,所以用户看到的是进度停住 + 一条说明,而不是模型自己写的总结。要继续就带 !force 重发,或把 peakMaxSteps 调大。
English: The turn that gets stopped has no model sign-off: layer 3 is "send no request, drop a notice instead", so what the user sees is progress halting plus an explanation, not a summary written by the model. To carry on, resend with !force, or raise peakMaxSteps.
- reject 方式界面静默:被拦的消息不进会话记录,会看到"发出去没反应"。默认的 replace 没这问题。
English: The reject mode is silent in the UI: the blocked message does not enter the session record, so it looks like "sent but nothing happened". The default replace does not have this problem.
- 不做记账:目前只在日志里记拦截次数,没有「今天省了多少钱」的面板。要做需要订阅 llm/stream 采真实 usage + 落盘 + client 半边(市场里 dsh-peak-cost-mode 是完整形态,可参考)。
English: No accounting: for now it only records the number of blocks in the log; there is no "how much did I save today" panel. Building one would mean subscribing to llm/stream to sample real usage + persisting it + a client half (marketplace plugin dsh-peak-cost-mode is a complete form of this, worth referencing).
- 精简段会让 KV cache 失效一次:峰谷切换时 system prompt 变化,会丢一次前缀缓存。一天只切 4 次,可接受。
English: The brevity section invalidates the KV cache once: switching between peak and off-peak changes the system prompt, so one prefix cache is lost. It only switches 4 times a day, which is acceptable.
- 只认 DeepSeek 官方 API 的计价口径;走第三方网关时用 officialProviders 排除,或自己改 peakWindows。
English: It only recognises the pricing rules of the official DeepSeek API; when going through a third-party gateway, exclude it with officialProviders, or change peakWindows yourself.

运行环境 / Requirements

- DSH(DeepSeek Harness)≥ 0.1.7-rc.2 —— package.json 里 dsh.compatibility.dshReleases 声明为 compatible;本仓在该版本上实测通过。
- Node.js ≥ 20 —— package.json 的 engines.node;本机在 Node 24 上实测通过。
- 运行依赖:无。代码用到 schemastery 与 @deepseek-ai/dsh-llm,两者均由 DSH 宿主提供(见 peerDependencies),本仓不随包安装任何第三方运行依赖。
- 可选联网:默认会去取法定节假日日历(可关,见「配置」里的 autoHolidayCalendar);关掉后走内置兜底表。

English:
- DSH(DeepSeek Harness)≥ 0.1.7-rc.2 —— 在 package.json 的 dsh.compatibility.dshReleases 中声明为 compatible;已在该版本上验证。
- Node.js ≥ 20 —— 见 package.json 中的 engines.node;此处已在 Node 24 上验证。
- 运行时依赖:无。代码使用 schemastery 和 @deepseek-ai/dsh-llm;两者均由 DSH 宿主提供(见 peerDependencies)。
- 可选联网:默认会获取法定节假日日历(可通过「配置」下的 autoHolidayCalendar 关闭);关闭联网时回退到内置表。

权限与依赖 / Permissions & Dependencies

本节如实描述本插件对系统的接触面,按「保守」口径写:没查到的地方不写成"不访问"。
English: This section describes, in a deliberately conservative way, what this plugin touches on the system. Where something could not be verified, it is not claimed to be "not accessed".

这是 DSH(DeepSeek Harness)宿主插件:它是 Node half,跑在 dsh web 宿主进程内,通过 profile 的 bundle patch 挂进来,不单独起进程、不开端口、不注册系统服务。因此它与宿主同权限 —— 宿主能读写的,它理论上也能;下面列的是它代码里实际会碰的部分(代码可逐行审计)。

English: This is a DSH (DeepSeek Harness) host plugin: it is a Node half that runs inside the dsh web host process, mounted through a profile bundle patch. It starts no separate process, opens no port and installs no system service. It therefore shares the host's privileges — anything the host can read or write, it could in principle too; listed below is what its code actually touches (the code is short enough to audit line by line).

| 接触面 | 实际情况 |
| 文件(读) | 读 DSH 的插件配置(由宿主 settings 服务提供,命名空间 peak-gate)与节假日缓存;不主动扫描/读取你的工作文件。 |
| 文件(写) | 只写节假日缓存一个文件:默认 /data/peak-gate/holidays-cn.json(可用 holidayCachePath 改到别处)。 |
| 网络 | 默认开启节假日日历更新:只按顺序请求三个源(jsDelivr → raw.githubusercontent → gh-proxy),只拉当年的日历 JSON,单源超时 8 s、响应上限 1 MB。可用 autoHolidayCalendar: false 或 holidayCalendarUrls: [] 完全关掉联网。除此之外不发起任何网络请求。 |
| 外部命令 | 不调用任何外部命令 / shell / 子进程;不需要 root / 管理员权限。 |
| 凭据 | 不读取、不存储任何凭据(不读环境变量里的 API key、不读凭据文件)。第 2 层的分类调用复用宿主已经配置好的 LLM 路由,鉴权由 DSH 负责;日志里可能打印 provider / model 名,不含密钥。 |
| 生命周期脚本 | 无:package.json 没有 scripts,没有 postinstall 之类的安装期脚本。 |
| 已知风险 | ① 峰时它会主动改变你的请求(默认用一条短提示顶替大请求)⇒ 先用 dryRun: true 或 mode: notify 观察;② 节假日日历来自第三方镜像源,插件已做质量校验(15~45 天、年份归属、并集合并、1 MB 上限、时间戳未来判损坏),但不能保证第三方源不被篡改;③ 分类与"重活"判定是启发式的,可能误判(设计上宁可放行);④ 它跑在宿主进程内,与宿主同权限。 |

English:

| Surface | What actually happens |
| Files (read) | Reads the DSH plugin config (supplied by the host settings service, namespace peak-gate) and the holiday cache; it does not scan or read your project files. |
| Files (write) | Writes exactly one file: the holiday cache, by default /data/peak-gate/holidays-cn.json (relocatable via holidayCachePath). |
| 网络 | 节假日日历更新默认开启:它按顺序请求三个来源(jsDelivr → raw.githubusercontent → gh-proxy),仅获取当年的日历 JSON,每个来源超时 8 秒,响应上限 1 MB。可通过 autoHolidayCalendar: false 或 holidayCalendarUrls: [] 完全关闭网络。它不发起其他网络请求。 |
| 外部命令 | 不调用任何外部命令、shell 或子进程;不需要 root / 管理员权限。 |
| 凭据 | 不读取或存储任何凭据(不读取环境变量中的 API 密钥,不读取凭据文件)。第 2 层的分类调用复用宿主已配置的 LLM 路由;身份验证是 DSH 的事。日志可能打印提供商 / 模型名称,但绝不打印机密。 |
| 生命周期脚本 | 无:package.json 没有 scripts 字段,也没有 postinstall 式的安装钩子。 |
| 已知风险 | ① 在高峰期它会主动修改你的请求(默认将一个大请求替换为简短通知)⇒ 先用 dryRun: true 或 mode: notify 观察它。② 节假日日历来自第三方镜像;插件会对其进行校验(15–45 天、年份归属、并集合并、1 MB 上限、未来时间戳视为损坏),但无法保证第三方来源未被篡改。③ 分类器 / “重活”判断是启发式的,可能误判(按设计它倾向于放行)。④ 它运行在宿主进程内,因此共享宿主的权限。 |
预览分享卡片长什么样 ↓CNyaotian-Lunar/dsh-peak-gate
分享 · DeepSeek Harness Hub
CNyaotian-Lunar/dsh-peak-gate

高峰时段自动限制 token 花销,可一键放行

回到顶部