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.

Deepseek Offpeak Indicator — DSH Plugin for DeepSeek Harness
← Plugins

dsh-deepseek-offpeak-indicator

Deepseek Offpeak Indicator

DeepSeek Harness plugin: a small dot left of the model name in the composer tool row — yellow for DeepSeek peak hours, green for off-peak (half price). Rendered only when the session's model provider is DeepSeek.

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-deepseek-offpeak-indicator@1.1.0
READMECompatibilityVersions

Compatibility and provenance

Deepseek Offpeak Indicator is published as dsh-deepseek-offpeak-indicator and currently resolves to version 1.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
10/12/2026

Versions

1.1.0stable
10/12/2026
0.1.1stable
10/11/2026
0.1.0stable
10/10/2026

Related plugins

Loading related plugins…

Latest
1.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
43.5 kB
Files
9
Surface
web
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
0
Last push
10/12/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
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in models-usage.

Whale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editinUsage@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.Cost Meterdsh-cost-meterDeepSeek Harness session cost statistics plugin: current session cost, today’s charges, historical records, and synchronization with official pricing; supports multi-provider, multi-model price calculation (built-in pricing catalog for 170+ model IDs with automatic matching); queries and displays su

README

dsh-deepseek-offpeak-indicator

See the current DeepSeek API pricing window at a glance in the DeepSeek Harness (DSH) Web GUI.

A single 5px dot sits in the composer tool row, just left of the model name (rendered only when the session's selected model provider is DeepSeek):

ColorWindowPrice
🟡 Yellow #f2b705Peak hoursStandard
🟢 Green #22c55eOff-peak hoursHalf price

Nothing else is rendered — no text, no icon, no placeholder copy (the dot carries an aria-label for screen readers). No build step, no third-party dependencies: the whole plugin is one file.

English | 中文

When it shows

The dot renders only while the session's selected model provider is DeepSeek; otherwise it renders nothing at all and takes no space:

ProviderShows
deepseek-official (DeepSeek API key)✅
deepseek-account (DeepSeek account)✅
Anything else (Anthropic, an OpenAI-compatible gateway, a self-hosted proxy, …)❌ hidden
Unknown (model directory still loading)❌ hidden

The provider is what counts, not the model name — a third-party gateway serving a DeepSeek model does not get DeepSeek's time-of-day pricing. The rule lives in isDeepSeekProvider(); change that one function to change the policy.

The session's model directory is resolved after mount, with retries: a freshly switched session has not registered its scope yet, so the lookup legitimately fails for a moment. The dot therefore appears a fraction of a second after a session switch instead of staying hidden for the whole session.

How the window is decided

Per DeepSeek's official pricing page (Models & Pricing):

  • Peak: Beijing time Monday–Friday (excluding Chinese statutory holidays), 09:00–12:00 and 14:00–18:00;
  • Off-peak: everything else, including weekends and statutory holidays all day (off-peak = half of the peak price).

Intervals are half-open: 12:00 and 18:00 sharp already count as off-peak, while 09:00 and 14:00 sharp count as peak. All comparisons use Asia/Shanghai, so the machine's own time zone does not matter.

Make-up workdays. The official wording is "Monday to Friday … all other periods, including weekends and Chinese statutory holidays, are off-peak all day". A Saturday or Sunday that the government designates as a make-up workday therefore stays off-peak (green) here. Change the WORKDAYS check in client.js if you disagree.

Installation

Requires a working DSH profile (desktop app or dsh web).

The recommended way is to paste a GitHub address into the Plugins page — no clone and no commands:

  1. Open the Plugins page from the sidebar (the plugin icon in the panel list).

  2. Click Add plugin.

  3. Paste this address into the field (it accepts a package name, a GitHub repository address, or a local directory path):

    https://github.com/cumthugo/dsh-deepseek-offpeak-indicator
    

    The shorthand github:cumthugo/dsh-deepseek-offpeak-indicator works too; add a branch or commit to pin a revision, e.g. github:cumthugo/dsh-deepseek-offpeak-indicator#<commit-sha>.

  4. It is live as soon as it finishes: the result reads application: applied and the open page needs no refresh. If it reports restart-required, restart Harness.

The installer writes the package into the profile's dsh.profile.bundles and dependencies, and inserts the loader row declared by this repository's own cordis.patch.yml — you never edit a config file by hand.

Installing through the agent (equivalent)

plugin_manager  action=install_bundle  target=github:cumthugo/dsh-deepseek-offpeak-indicator

Before installing, the manager runs a git ls-remote reachability check against the repository (public repos need no credentials).

Installing from a local directory (when editing the code)

  1. Clone the repository:

    git clone https://github.com/cumthugo/dsh-deepseek-offpeak-indicator.git
    
  2. Paste the absolute path of the clone into the same field (or hand it to the agent):

    plugin_manager  action=install_bundle  target=/absolute/path/to/dsh-deepseek-offpeak-indicator
    

    The profile records a link: dependency, so re-installing after an edit is enough.

Update: re-installing the same source does not take effect — the dependency is unchanged, so the installer reports ambiguous-install. Uninstall on the Plugins page first, then add the same address again:

plugin_manager  action=remove_bundle  target=dsh-deepseek-offpeak-indicator
plugin_manager  action=install_bundle target=github:cumthugo/dsh-deepseek-offpeak-indicator

The host re-reads the bundle and pushes it to the open page, so no restart is needed. (The local-directory flavour works the same way — swap the second target for the clone path; switching to a different source, e.g. from a local path to the GitHub address, also avoids the ambiguity.) Disable / uninstall: toggle the row on the GUI Plugins page, or use plugin_manager's remove_bundle with the package name dsh-deepseek-offpeak-indicator.

The package name matches the repository (dsh-deepseek-offpeak-indicator) and is not published to npm — install it by local path or from GitHub as shown above. The name must match the id in client.js's window.__ModuleLoader__.load({ id }) and the entry name in cordis.patch.yml: change one and all three must change, followed by a reinstall.

Holiday data and automatic refresh

Holidays are only used to exclude statutory days off from the peak windows. Three sources, in priority order:

  1. Local cache — localStorage key dsh-deepseek-offpeak-indicator:holidays:<year>, considered fresh for 30 days;
  2. Network refresh — the year JSON from holiday-cn (which scrapes the State Council holiday notices), trying raw.githubusercontent.com then cdn.jsdelivr.net, with a 6 s timeout;
  3. Built-in fallback — BUILTIN_HOLIDAYS in client.js (currently 2026, 33 days off).

So next year's schedule takes effect automatically once published, with no code change, provided the machine can reach one of those two hosts. Fully offline, the built-in table is used; for a year with neither cache nor built-in data the plugin degrades to a weekend-only rule (that year's holidays would be misread as peak during 09:00–12:00 and 14:00–18:00).

To refresh the built-in table offline:

node tools/update-holidays.mjs            # existing years + this year and the next
node tools/update-holidays.mjs 2027       # only the given years

Run the remove → install flow above afterwards, so the page picks up the new built-in table.

Layout

FilePurpose
package.jsonBundle manifest: dsh.bundle.patch and the dsh.client declaration
cordis.patch.ymlInserts the deepseek-offpeak-indicator loader row
index.jsHost half, empty apply() (it exists so the loader has a host row)
client.jsBrowser half: window logic, the dot component, slot registration (one file, no build)
tools/update-holidays.mjsRegenerates the built-in holiday table
tools/test-classify.mjsRegression tests: peak windows, the provider gate, and the session-switch resolve/retry path (31 assertions)

Customizing

Everything lives at the top of client.js: PEAK_WINDOWS, PEAK_COLOR / OFFPEAK_COLOR, DOT_SIZE (default 5), DEEPSEEK_PROVIDER_IDS / isDeepSeekProvider() (which providers count as DeepSeek), plus the slot and its placement — the dot registers into conversation.input.right, which renders immediately left of the model name, and nudgeX / nudgeY shift it by a few pixels (currently 16 / 1). To move it elsewhere change name in ctx.slots.register (e.g. conversation.input.left, conversation.composer.dock) and adjust id accordingly.

Development

node tools/test-classify.mjs   # window-logic regression tests ("全部通过" = all passed)
node --check client.js         # syntax check

client.js is the complete browser artifact: it calls window.__ModuleLoader__.load({ id, factory }), where id must equal the package name in package.json. React comes from the host module table via require('react'), so the bundle must not ship its own copy. Run the remove → install flow above after editing.

Compatibility

Developed and verified on macOS with DSH desktop 0.2.0-rc.2 (install_bundle returned application: applied; the conversation.input.right occupant reports active: true). The plugin only uses slot registration and React, so it should work on the same DSH generation; a change to slot names or the dsh.client manifest contract would require an update here.

Disclaimer

Unofficial plugin, not affiliated with DeepSeek. Windows and prices follow the official pricing page; if the rules change, this project needs to follow. Holiday data comes from a third-party aggregation and may lag or differ.

License

MIT © 2026 ZhangYong (cumthugo)