Install / Update
Install the dsh-context plugin on DeepSeek Harness with released NPM package:
dsh plugin --profile web add dsh-context@latestUpdate the dsh-context plugin:
dsh plugin --profile web update dsh-context@latestWhat's New
A performance and memory pass: the Insights page, the Context tab, the Fleet member cards and the host-side fold all
do less work per update, and every page-lifetime cache now has a bound. Figures below are A/B measurements of the same
workloads against v0.75.0, interleaved in one process (median of repeated runs).
Performance
- Insights page: 75% less work per update — 32.4ms → 8.2ms for a 200-session page on every sessions-snapshot
change (which happens on every projection push while any session streams).- Per-session ledger re-proof no longer rebuilds a clean ledger: 7.5ms → 3.7ms per 200 ledgers.
- Row building skips the family merge for the (usual) childless session: 14.0ms → 4.2ms per 200 rows.
- The render stage (filters, group counts, sort, KPIs, daily rollup, skill tallies) is memoized on its real inputs.
- Insights typing stays under a frame — 0.9–3.4ms per keystroke with 441 sessions and the full stage cached;
previously every keystroke re-ran the whole stage. - Context tab paints first, then settles (#198) — the
browser column's height cap is measured after paint instead of inside a layout effect, so opening the tab no longer
forces a synchronous layout of every just-mounted card (the trend chart alone can be ~2,000 elements) before the
first frame. - Fleet / agent member cards: 666× less wire per member — cards read a head-only detail response (1,048 bytes)
instead of the full detail (698,062 bytes on a 1,500-step session), and the host no longer copies the collections it
would be discarded. Cold reads still build and cache the full payload under the durable revision, so a later full
read re-serves instead of refolding. - Cheaper fold on the host — each assistant message's packed stream is decoded in one pass instead of three
(−20% decode, −7% end-to-end on 300 messages carrying 1,000-record streams), and the per-push head build walks the
surface once (−24%: 0.085ms → 0.065ms per 2,000-node surface). - DNA mode on long logs no longer materializes the whole log — turning on DNA + Delta for a 1,500-step session
used to assemble every step up front (~82ms) and keep it for the data revision; it now assembles the painted window
(~0.4ms for 145 bars). The delta axis walk is 41% cheaper (89.8ms → 53.0ms at 1,500 steps) and memoized, so hovers
and scrolls no longer repeat it.
Memory
- Every page-lifetime cache is bounded — landed messages 128 entries, header epochs 12, Fleet ledgers 64 per
ledger kind, per-session detail stores 64 (never dropping one a mounted view holds). Each entry is a whole message
(tens of KB), a 40-message comms ledger, or a full tool-schema set, and these maps previously grew for the page's
whole life as you browsed. - Per-ledger window sums are cached per ledger and scope, so unrelated sessions' pushes no longer re-walk every
unchanged ledger; the cache key is the window's boundary day keys, so a rolling preset cannot accumulate entries. - The DNA band cache holds the painted window, not the log — a band pins its assembled context (~5KB per step in
a 145-bar window), so keeping all 1,500 steps cost ~66MB for one axis scale; the walk now reads its steps without
caching them. - A demoted detail store still keeps its identity, so reopening a session re-reads instead of forking a second
ledger.
Features
- Member cards show the model and effort — the Current Context label renders as
provider · model (effort), and
each member card shows its reasoning effort beside the model. - Member cards gained enter and aside navigation — open the member's chat in place, or in its own Sidebar pane.
- Member card meta folded into the foot line — the token figure is gone from the card foot; lifecycle and
navigation stay on one line.
Fixes
- The KPI band's timing now matches the timing card beside it — the band's active-time, model-call and tool-run
cells folded the windowed daily ledger while the card summed the scoped sessions' lifetime heads, so a bounded
preset could print two different "Active Time" figures. All four cells now read the card's own aggregate. - A malformed fee or skill table is repaired deterministically — one bad day no longer changes whether a sibling
day gets scrubbed; an own__proto__level is refused so an aliased day can never be billed from a prototype read. - Copy and find on both command detail cards.
Changes
- The Context tab's browser-column cap lands one frame after paint (the cards are already stacked top-to-bottom; only
the flush bottom edge settles late). - Delta mode in DNA mode now reads the same lazy per-step source as total mode, so a long log's bars are assembled
only when they paint.
Commits
- chore(release): 0.75.1 (7f96208)
- perf(context): measure the browser cap after paint (b51326f)
- fix(insights): keep the KPI band's timing on the timing card's source (389a203)
- perf(trend): spend the delta axis on totals, not on band objects (ef68eb3)
- perf(insights): repair only the days that need it (c31162d)
- fix: close the two review findings on the perf range (08c18b4)
- perf(trend): stop materializing a whole log's DNA bands for a delta axis (34b9e20)
- perf(fold): read each assistant stream once and walk the surface once (6d5cdb7)
- perf(cache): bound every page-lifetime cache with one shared LRU helper (0a26659)
- perf(agents): serve the member cards' heads without the detail collections (2fadc67)
- perf(insights): memoize the panel stage and cache per-ledger window sums (c518007)
- perf(insights): prove clean ledgers without rebuilding them (c57718d)
- feat(ui): fold the member card meta into the foot line without the token figure (0a0be1c)
- feat(ui): give each member card enter and aside navigation buttons (39a2ae1)
- feat(ui): render the Current Context label as provider · model (effort) (72f45f4)
- feat(ui): show each member's reasoning effort beside its model (c3a3b00)
- fix(ui): fold the agent team into the timing stats and lifetime KPIs (ad5eadc)
- feat(ui): put copy and find on both command detail cards (b8750cd)
v0.75.0...v0.75.1 · 18 commits
Contributors
- @bowenliang123
- @IThinkItsaName — reported the Context tab's blocking first paint with a verified fix