Skip to content

dsh-progress-bar

Verified

dsh-progress-bar Β· v2.0.0 Β· MIT

A task progress bar for the DSH Web GUI. Host-inject mode: the host half serves /dsh-progress-bar/state and injects plain JS through webserver/index-inject; it deliberately declares no client half. The progress source defaults to $DSH_HOME/dsh-progress/st

Install

dsh plugin add dsh-progress-bar

Confirm the layer applied with dsh --profile default --dump-config β€” see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Readme

dsh-progress-bar

A task progress bar for the DeepSeek Harness Web GUI. It renders a native-DOM bar directly above the composer card and polls a local state file.

What it does

  • Registers GET /dsh-progress-bar/state (read the current progress) and GET /dsh-progress-bar/health (self-check).
  • Injects its CSS and a polling script through the host half's webserver/index-inject row, so it needs no client plugin entry and no build step.
  • Ships as a bundle (dsh.bundle.patch) and is manageable from the Web sidebar's Plugins page.

Install

dsh plugin --profile <profile> add dsh-progress-bar

Built and tested against DSH 0.2.0-rc.2.

The state file

The bar is shown only while the state is active, and hidden otherwise. Point a task at it by writing JSON to:

$DSH_HOME/dsh-progress/state.json      # default

Override the location with the PROGRESS_BAR_STATE environment variable (the same variable also moves the selfcheck.json written next to it). The file must be UTF-8 without a BOM β€” the host half parses it with JSON.parse, and a BOM makes the bar silently disappear. Write it atomically (temp file + rename) so a reader never sees a half-written document.

{
  "active": true,
  "label": "Downloading XnView MP",
  "percent": 63,
  "detail": "43 MB / 67 MB",
  "startedAt": 1791370181179,
  "updatedAt": 1791370181179
}

percent may be null for indeterminate progress (the fill sweeps back and forth). Set "active": false to collapse the bar. If updatedAt goes stale (20 s) the fill turns into the warning colour and the detail line says how long the source has been quiet.

It deliberately declares no client half

Same reason as dsh-xp-skin: adding any client half to this profile changed the client plugin composition and removed the user's avatar (measured three times). The browser-side code is injected from the host half instead.

Context for reviewers

The package is host-only by design, has zero runtime dependencies, and the injected browser script never throws into the page. Its inline script text must not contain a closing script tag β€” /dsh-progress-bar/health reports hasClosingScriptTag so that can be checked at runtime.

License

MIT