github bowenliang123/dsh-context v0.75.1

2 hours ago

Install / Update

Install the dsh-context plugin on DeepSeek Harness with released NPM package:

dsh plugin --profile web add dsh-context@latest

Update the dsh-context plugin:

dsh plugin --profile web update dsh-context@latest

What'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

Don't miss a new dsh-context release

NewReleases is sending notifications on new releases.