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.

Quiet Hours — DSH Plugin for DeepSeek Harness
← Plugins
Q

dsh-quiet-hours

Quiet Hours

DSH plugin: hold every model call until a configured pause window ends, so work parks itself and resumes automatically.

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

npx -y @deepseek-ai/dsh plugin --profile web add github:Samuel-Ku/dsh-quiet-hours#4d40858c13232d5aa2a90ac254967f0a26cdb461
READMECompatibilityVersions

Compatibility and provenance

Quiet Hours is published as dsh-quiet-hours and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
9/29/2026

Versions

0.1.0stable
9/29/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/16/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 productivity-workflow.

Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio and its curated slide templates as a native DeepSeek Harness conversation view.Codex Ui@michengai/dsh-codex-uiDSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航 · A Codex-style sidebar, workspace session tree, global search, and turn navigation for DSH WebRemotedsh-remoteRemote-work assistant for DeepSeek Harness: connect SSH (password/key/agent/keyboard-interactive/proxy jump), pick a remote workspace, operate on it with 22 rw_* tools (incl. rw_edit/rw_stat/rw_mkdir/rw_remove/rw_move/rw_forward), conflict-aware mirror sy

README

dsh-quiet-hours

A DeepSeek Harness plugin that parks every model call until a configured pause window is over, so a long task stops itself during expensive hours and continues on its own when off-peak starts.

Nothing is restarted and nothing is spent while parked: the turn stays open, the request has not been sent, and the task resumes from exactly the same place when the window ends.

How it hooks in

The gate sits on the llm/stream waterfall — the hook @deepseek-ai/dsh-llm describes as the "waterfall around every streaming model call (retry, replay, routing)". During a pause window the listener returns an async generator that does not start the underlying request until the window is over.

One contract detail is easy to get wrong, and this plugin is built around it: the listener must return an AsyncIterable<StreamChunk> synchronously, because the caller consumes the waterfall result without awaiting it. A promise there would break every model call. That is why the wait lives inside the generator body rather than in the listener, and test/probe.test.mjs asserts it directly.

function handler(options, next) {
  if (!inPauseWindow(Date.now(), config)) return next();
  return (async function* parked() {
    await waitUntilResume(config, options.signal);
    yield* next();
  })();
}

Tools are not gated. They cost no tokens, and the model call that would consume their output is parked anyway — gating them would only risk interrupting a half-finished side effect.

Windows

A window is a wall-clock interval in an IANA timezone, evaluated through Intl, so DST is the platform's problem rather than offset arithmetic's:

windows:
  - days: [mon, tue, wed, thu, fri]   # the day the window STARTS on
    from: "01:00"
    to: "04:00"
  • from < to — a same-day window; the start is inclusive, the end exclusive.
  • from > to — spans midnight and belongs to the day it starts on, so a Friday 22:00–06:00 window covers Saturday 00:00–06:00 and nothing on Sunday.
  • from == to — rejected at load; a zero-length window is always a mistake.

An unknown timezone, a malformed HH:MM, or an unknown weekday name fails the plugin mount with a message naming the offending entry, rather than silently never pausing.

Configuration

FieldTypeDefaultMeaning
enabledbooleantruefalse = never park
timezonestringUTCIANA zone the windows are written in
windowslist[]pause windows; empty means never park
maxSleepChunkMsnumber60000wake-up cadence while parked (keeps the plugin responsive to clock jumps and aborts)
scanCapMsnumber21 dayshow far the resume search looks before giving up and re-checking
auditFilestring~/.dsh/logs/quiet-hours.jsonlJSONL trail of park/resume events

Peak-pricing example — work parks during peak and resumes the instant off-peak starts:

- id: quiet-hours
  name: dsh-quiet-hours
  config:
    enabled: true
    timezone: UTC
    windows:
      - days: [mon, tue, wed, thu, fri]
        from: "01:00"
        to: "04:00"
      - days: [mon, tue, wed, thu, fri]
        from: "06:00"
        to: "10:00"
    auditFile: /home/me/.dsh/logs/quiet-hours.jsonl

Install

dsh plugin --profile web add /path/to/dsh-quiet-hours

The bundle's cordis.patch.yml inserts the quiet-hours entry; override its config by id in the profile's cordis.patch.yml (do not re-insert it — that fails with duplicate loader entry id).

For a path or link: install, keep the checkout under $DSH_HOME/profiles/ so Node resolves the @deepseek-ai/* peers from $DSH_HOME/profiles/node_modules.

A new plugin module only mounts on a DSH restart; afterwards config edits reload live under patchReload: live.

Audit trail

One JSONL line per park and per resume, at auditFile:

{"time":1790422374944,"event":"pause","resumeAt":1790433600000,"provider":"example-provider","model":"example-model","pauseWindows":"mon,tue,wed,thu,fri 01:00-04:00 | mon,tue,wed,thu,fri 06:00-10:00 (UTC)"}
{"time":1790433600012,"event":"resume","parkedMs":11225068,"provider":"example-provider","model":"example-model"}

event is pause, then resume (with parkedMs) or cancelled when the turn was aborted while parked.

Tests

npm install
npm test

25 tests in two layers:

  • test/logic.test.mjs — clock parsing, config validation, window containment across timezones, weekends, same-day and overnight windows, the resume search, and the wait loop driven by an injected clock so hours pass instantly.
  • test/probe.test.mjs — mounts the plugin on a real Cordis context and drives the llm/stream waterfall the way LlmRuntime.stream() does. It asserts pass-through outside a window, parking inside one, the "AsyncIterable, not a promise" contract, release on abort, gate removal on unload, and a loud mount failure on a bad timezone.

The devDependencies exist only so the tests run from a bare clone; at runtime the plugin resolves its @deepseek-ai peers from the DSH install.

Caveats

  • A parked call is a live promise, not durable state: restarting DSH, or ending the session, discards it. The task does not resume by itself after a restart.
  • Approvals and auto-answered questions go through the same waterfall, so a judge call raised during a pause is parked too. In practice that is consistent — a parked agent raises no new requests — but it is worth knowing.
  • The longest park is bounded only by your windows; the wake-up cadence means the plugin re-checks the clock once a minute, so a wall-clock change is noticed promptly.

License

MIT — see LICENSE.