Repository navigation
Releases
v1.1.1 - install section leads with the npm command
[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
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), andinterrupted(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, CSSorder
-4/-3/-2/-1). - A retention policy, as settings:
unreadHoldMinutes(default480),
seenHoldMinutes(default15),staleRunMinutes(default360), each
clamped to a documented range. - A
seenphase that keeps an opened completion promoted — for as long as
you stay on the row, then forseenHoldMinutesafter 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
interruptedphase: a session whose dot still saysongoingbut
whose last activity is older thanstaleRunMinutesis drawn red and is
deliberately not promoted. npm testgrew from 24 to 59 checks, including a behavioural group that
liftsassess/ageOf/subagentsOfout oflib/client.jsand 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 norole="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 owncompletionUnreadflag — 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'serrormark, say), and
a red rule fordata-state="error"treated it as a session state no session
row can carry. The lookup now requires the primitive's ownaria-hidden
marker and restricts the value to the official four.
Changed
data-busy-sessionnow 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 indocs/COMPATIBILITY.md.
Compatibility
- Declares
@deepseek-ai/dshas 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
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