DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Off Peak Hours — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
O

dsh-off-peak-hours

Off Peak Hours

DeepSeek Harness pill that shows whether the selected DeepSeek or z.ai billing plan is in a peak or off-peak (half-price) window right now, with a click-to-open schedule panel.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:Shadid516/dsh-off-peak-hours#673caab588a0580379d324feb28d53367fff026c
READMECompatibilityVersions

Compatibility and provenance

Off Peak Hours is published as dsh-off-peak-hours and currently resolves to version 1.0.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/27/2026

Versions

1.0.0stable
9/27/2026

Related plugins

Loading related plugins…

Latest
1.0.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/27/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in models-usage.

Usage@linxin666/dsh-usageUsage statistics plugin for the dsh web GUI: per-provider balance and coding-plan quota detection plus a live token usage ledger, with a compact price glance card above the sidebar's Settings rowClient Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilitiesPer-model capability declarations (image input and reasoning efforts) for custom pi-ai providers, edited in place on the Models settings cards; writes the official llm-pi-ai settings namespace, no DSH source changes.Codex Subscriptiondsh-codex-subscriptionUse ChatGPT and Codex subscriptions in DeepSeek Harness with OAuth, quota, safe resets, web search, images, and Fast modeCommandcode Provider@mars-sea/dsh-commandcode-providerUnofficial DeepSeek Harness LLM provider plugin for Command Code, ported from pi-commandcode-provider (MIT). Registers the 'commandcode' provider route with a Models-page card and live model catalog.

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