DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
O

dsh-off-peak-hours

Off Peak Hours

DeepSeek Harness 状态标签,显示所选 DeepSeek 或 z.ai 计费方案当前处于高峰时段还是非高峰(半价)时段,并可点击打开时间安排面板。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:Shadid516/dsh-off-peak-hours#673caab588a0580379d324feb28d53367fff026c
README兼容性版本

兼容性与来源证明

Off Peak Hours 以 dsh-off-peak-hours 发布,当前版本为 1.0.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/27

版本

1.0.0stable
2026/9/27

相关插件

正在加载相关插件…

最新版
1.0.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/27
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
Off Peak Hours — DeepSeek Harness 插件(DSH Plugin)

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Client Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilities为自定义 pi-ai 提供商声明每个模型的能力(图像输入和推理力度),可直接在 Models 设置卡片中编辑;写入官方 llm-pi-ai 设置命名空间,不更改 DSH 源代码。Codex Subscriptiondsh-codex-subscription通过 OAuth 在 DeepSeek Harness 中使用 ChatGPT 和 Codex 订阅,支持配额管理、安全重置、网页搜索、图像和快速模式Plugin@opencode2dsh/dsh-plugin供 DeepSeek Harness (DSH) 使用的免费 OpenCode Zen 模型:原生 dsh-llm 适配器插件,无需 API 密钥。

README

Off-Peak Hours

A DeepSeek Harness (dsh) bundle that puts one ambient pill under the composer while the Session's model comes from a provider with a time-of-day price. The pill answers a single question at a glance: is the next token billed at peak or off-peak rates?

The pill with its panel open, showing DeepSeek off-peak with the National Day holiday note

A rendering of the pill and the panel it opens, not a screenshot of a live session. The values come from an actual describe() evaluation, but the fonts and colours are the README's approximation of the theme tokens.

● Off-peak · 50% off · starts in 6h 40m
● Peak · full rate · ends in 1h 12m

The countdown says how long the current state lasts, but not what it leads to. Clicking the pill — like the two stats pills beside it — opens a panel that does.

Install

From a DSH session, the shortest path:

plugin_manager install_bundle github:Shadid516/dsh-off-peak-hours

Or from a shell, with dsh on the PATH. A package that declares dsh.bundle is added to the profile's bundle layers as soon as it is installed, so one command enables it:

dsh plugin --profile web add github:Shadid516/dsh-off-peak-hours   # from git
dsh plugin --profile web add dsh-off-peak-hours                    # from npm

From a checkout, point install_bundle at the absolute directory:

plugin_manager install_bundle /absolute/path/to/dsh-off-peak-hours

The bundle is a client decoration with no config, no service, and no state, so there is nothing to set afterwards. Reload the page if the pill does not appear immediately.

What it shows

StatePill
Off-peakgreen dot · Off-peak · 50% off · starts in …
Peakamber dot · Peak · full rate · ends in …

The dot colour is the only difference that survives a glance, so it carries the whole verdict; the words are there for the times a glance is not enough.

With a provider no plan claims, the entry renders nothing at all — no pill, no placeholder. An unknown provider is hidden rather than guessed at, so a custom route pointed at one of these vendors under a name the plan does not claim shows nothing until that plan's matches is extended.

The panel

Clicking the pill opens a panel with the same chrome as the shipped stat dialogs:

DeepSeek                              Off-peak (50% off)
────────────────────────────────────────────────────────────
Peak begins in 6d 23h, at Thu 2026-10-08 01:00 UTC
Holiday            National Day - off-peak all day
Peak hours         01:00-04:00 and 06:00-10:00 UTC, Mon-Fri, excluding
                   Chinese public holidays.
Time               Thu 02:00 UTC · Thu 10:00 UTC+8
Holiday calendar   2025-2026
Provider           deepseek-official
  • The header restates the pill's verdict in words.
  • The answer line names the state that begins, rather than leaving "starts in 6d 23h" to be interpreted.
  • An exception that explains a long wait — a holiday or a campaign — is the first row, above the rule it overrides.
  • A change less than a day away is stamped by weekday (Mon 04:00 UTC); further out it gains a date, because a weekday alone stops identifying the day.

It behaves like the shipped panels: portaled to document.body, anchored above the trigger and clamped into the viewport, dismissed by Escape or a pointerdown outside itself and the trigger. The pill is a button carrying aria-haspopup="dialog" and aria-expanded; the panel is a role="dialog" labelled with the plan.

Plans

Each plan owns its own schedule, and the selected provider picks the plan. The same instant can be peak for one and off-peak for another, so the pill only ever reports the plan actually in force.

DeepSeek

WindowRate
01:00–04:00 and 06:00–10:00 UTC, Monday–Friday, excluding Chinese public holidayspeak (full rate)
Every other instant — remaining hours, whole weekends, Chinese public holidays in fulloff-peak (half rate)

Weekends stay off-peak even when a holiday block designates them as makeup workdays (调休). The Chinese calendar decides "holiday" in China Standard Time (UTC+8); inside a peak window the UTC date, the China date, and the weekday always agree, so the two never conflict.

z.ai (GLM Coding Plan)

WindowRate
14:00–18:00 Singapore time (UTC+8) = 06:00–10:00 UTC, Monday–Fridaypeak (full rate)
Every other instant, weekends includedoff-peak (half rate)

The plan documents no holiday exclusion, so a weekday inside the window is peak even on a public holiday — unlike DeepSeek, which yields the whole holiday block. That asymmetry is deliberate and covered by tests.

Campaign. From 2026-09-25 to 2026-10-07 (UTC+8 days, inclusive) all-day usage is charged at the off-peak rate. While a campaign is active the pill appends a campaign note and the panel names its dates in a Campaign row. Delete the entry from promotions once it ends; until then it is applied, not assumed.

Both routes the pi-ai catalog ships for this plan — zai and zai-coding-cn — resolve to the same schedule.

How the provider is resolved

The pill needs to know which plan is in force before it can say anything, and at the moment a Session opens there is no model selected yet. It therefore reads two sources in order:

  1. The model directory, keyed by session. This is authoritative and covers the blank-Session case, because it resolves the provider the next turn will use rather than waiting for one to arrive.
  2. The Session's projected model selection, as a fallback when the directory has not answered yet.

When neither yields a provider — the normal state for a Session whose model comes from somewhere no plan describes — the entry renders nothing.

Adding a plan

Everything lives in the PLANS table at the top of client.js. One entry is enough:

{
  id: 'example',
  labelKey: 'plan.example',          // display name (dictionary key)
  scheduleKey: 'schedule.example',   // the vendor's own wording (dictionary key)
  source: '...',                     // the vendor's wording, kept next to the window
  peakWindowsUtc: [[9, 12]],         // `[startHour, endHour)` in UTC
  usesChinaHolidays: false,
  promotions: [],                    // optional dated all-day off-peak windows
  matches: (provider) => provider === 'example',
}

Add the matching plan.example and schedule.example strings to the EN and ZH dictionaries — the test suite asserts the two dictionaries stay in step. A window stated in a local time zone converts to UTC by a fixed shift, because every zone these plans are written in is UTC+8 with no daylight saving.

Layout

FileRole
package.jsonBundle manifest: dsh.bundle.patch, the dsh.client browser declaration, exports["./client"], and the display metadata the Plugin Manager card reads.
cordis.patch.ymlInserts the single Host row.
index.jsHost half. Empty on purpose — nothing is computed server-side.
client.jsThe whole feature: plans, holiday table, provider resolution, pill, panel.
locale/en.json, locale/zh.jsonPlugin-card title and description.
icon.svgPlugin-card artwork.
test/schedule.test.mjs97 tests over the shipped client module.
scripts/check-manifest.mjsValidates the install and discovery contract.

Updating the holiday calendar

HOLIDAY_RANGES in client.js is the only part that ages besides campaigns. It holds the official days off, as continuous blocks, from the State Council General Office notices:

  • 2025 — 国办发明电〔2024〕12号
  • 2026 — 国办发明电〔2025〕7号

The next year's arrangement is published around early November, so 2027 is absent. Until it is added, years outside the table fall back to the weekday/weekend rule alone and the pill appends calendar ends 2026 in the warning colour rather than silently pretending the holidays are known. The warning is scoped to the plans that consult the calendar; z.ai never shows it.

Makeup workdays are deliberately not listed: they are ordinary weekends here, and weekends are off-peak.

Developing

npm ci
npm run check     # manifest contract, then the test suite

npm test runs the suite alone. The tests load client.js exactly as the browser does — through window.__ModuleLoader__.load — and drive the registered component with a small React stand-in, so every expectation is checked against shipped code rather than a re-implementation. The stand-in supplies what the component actually reaches for: a hook store that defers effects past the commit and enforces React's positional hook contract (a render calling a different number of hooks is what retires a slot entry in the browser), document/window event targets, refs bound to stand-in nodes with settable geometry, and a react-dom createPortal that records where the panel went.

npm run check:manifest validates the contract the ecosystem depends on: that the patch is a top-level YAML array, that its rows name this package, and that every file the manifest promises is published. See CONTRIBUTING.md before changing schedule data.

Compatibility

The bundle needs a dsh that ships conversation.composer.dock and the modelDirectories service. It is written against DSH 0.1.7-rc.2, and it imports no Harness client package: a client bundle may not require @deepseek-ai/dsh-client-ui-primitives, so the panel chrome is reimplemented under this plugin's own opkh- prefix using the same theme tokens.

There is no persistent state and no migration, so upgrading is a package update.

License

MIT