Skip to content

Releases

v1.1.1 - install section leads with the npm command

Choose a tag to compare

@baifagg baifagg released this 11 Oct 14:15

[1.1.1] — 2026-10-11

Changed

  • Documentation only; no behaviour change. The install section now leads with
    the npm command (dsh plugin --profile web add dsh-plugin-busy-workspace),
    which is what the plugin directories and storefronts tell users to run, and
    keeps the git and release-tarball forms underneath it. Published so the README
    inside the npm package matches the README in the repository.

v1.1.0 - five attention phases, urgency ranking, and a completion that stays

Choose a tag to compare

@baifagg baifagg released this 11 Oct 14:12

First revision with the attention model. Install:

dsh plugin --profile web add github:baifagg/dsh-plugin-busy-workspace

[1.1.0] — 2026-10-11

The revision that stops treating "running" as the only state worth showing, and
stops dropping a completion the moment you go to read it.

Added

  • Five attention phases behind the official four states: pending
    (warning), running (ongoing), unread (done, never opened), seen
    (opened, still worth finding), and interrupted (claims to run, silent for
    staleRunMinutes). Every phase paints from the token its own status dot uses.
  • Urgency-ranked promotion. Workspaces in the promoted band now sort
    waiting → running → unread → seen instead of sharing one band, so the
    workspace blocked on you is always first (data-busy-rank, CSS order
    -4 / -3 / -2 / -1).
  • A retention policy, as settings: unreadHoldMinutes (default 480),
    seenHoldMinutes (default 15), staleRunMinutes (default 360), each
    clamped to a documented range.
  • A seen phase that keeps an opened completion promoted — for as long as
    you stay on the row, then for seenHoldMinutes after you move on.
  • A workspace state badge that names the state in the harness's own words
    (待审批 / 计划待审 / 待回答, Approval / Plan review / Answer) rather than a
    generic "needs you".
  • A subagent chip on the running row, counted from the row's hidden
    official status label, so it is localized by construction (3 子智能体 /
    2 subagents) instead of by shipping translations.
  • An interrupted phase: a session whose dot still says ongoing but
    whose last activity is older than staleRunMinutes is drawn red and is
    deliberately not promoted.
  • npm test grew from 24 to 59 checks, including a behavioural group that
    lifts assess / ageOf / subagentsOf out of lib/client.js and walks a
    synthetic row through its whole lifecycle.

Fixed

  • Promotion and workspace-header treatment matched nothing. The list was
    located as [class*="_list"][role="tree"], and the official sidebar session
    list renders no role="tree" — that role belongs to an unrelated JSON
    viewer — so the two features never ran; only the session-row highlight did.
    The list container is now reached as the parent element of the workspace
    groups, which depends on no class name, no build hash, and no ARIA contract.
  • A completion vanished exactly when you went to read it. The previous
    revision dropped the promotion as soon as a run ended and gated it on a hard
    15-minute window, so opening the finished session — which is what clears the
    harness's own completionUnread flag — removed the row from the band. The
    retention model replaces the timer with the user's own behaviour, keeping a
    timer only as a backstop.
  • The status lookup could read a foreign element's state. A bare
    [data-state] lookup inside a row could pick up a decoration another plugin
    had placed in the row's leading cell (an installer's error mark, say), and
    a red rule for data-state="error" treated it as a session state no session
    row can carry. The lookup now requires the primitive's own aria-hidden
    marker and restricts the value to the official four.

Changed

  • data-busy-session now carries the phase name (pending / running /
    unread / seen / interrupted) instead of the string "true". Anything
    keying off [data-busy-session="true"] should read the attribute's presence
    instead. New attributes: data-busy-list, data-busy-rank,
    data-busy-state, data-busy-label, data-busy-count, data-busy-multi,
    data-busy-subagents.
  • Selection is drawn from its own hue. A row that was both selected and
    running used to paint its ring, bar and title in the status colour and read
    as just another running row; selection now mixes its own violet from the
    theme's own tokens and keeps the status on the bar and title.
  • Settings normalisation is driven by one defaults table plus a
    numeric-limits table, so a field cannot be added without a range.
  • Declared DeepSeek Harness compatibility explicitly (see below) and documented
    it in docs/COMPATIBILITY.md.

Compatibility

  • Declares @deepseek-ai/dsh as a peer, which is what the harness itself
    evaluates: `>=0.1.5-rc.1 <0.1.6-0 || >=0.1.6-alpha.1 <0.1.7-0 ||

    =0.1.7-alpha.1 <0.2.0-0 || >=0.2.0-alpha.1 <0.2.1-0 ||
    =0.2.1-alpha.1 <0.3.0-0` — one branch per released release line, each
    carrying a prerelease tag, so both the harness's own check and a plain
    semver evaluator resolve it the same way.

  • No change to the install path: still a Web GUI client bundle plus an optional
    Host half, still no build step and no runtime dependencies.

v1.0.0

Choose a tag to compare

@baifagg baifagg released this 28 Sep 17:35

First release of dsh-plugin-busy-workspace.

Pins workspaces holding a running session to the top of the sidebar session list, draws the running session row with an accent frame and tinted title, and plays a short settle animation when a session stops running. Colours come from the active theme's own tokens.

Install:
dsh plugin --profile web add dsh-plugin-busy-workspace

Or from GitHub:
dsh plugin --profile web add github:baifagg/dsh-plugin-busy-workspace