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
v0.78.0 rebuilds the Token Stats ring around the model's content kinds: Thinking gets its own Reasoning slice, Tool Calls now folds the calls and their results, and Answers carries the reply prose. It also pages the complete command history, unifies the Fleet card surfaces, and lands a broad performance pass across session detail, Fleet, and the right Sidebar.
Features
-
Token Stats ring rebuilt around content kinds
- The billed ring now reads System Prompt, Tool Schemas, User Messages, Injected Context, Skill Injections, Tool Calls, Reasoning, and Answers; the old Output slice is retired.
- Reasoning is its own slice on both the replayed prompt and the generated output, keeps the Timing card's violet, and shares one displayed label across both cards (Reasoning / 模型思考).
- Tool Calls folds the call names and arguments (replayed plus generated) together with everything the tools returned. Answers splits the model's reply prose out of the same assistant content and output and reuses the Timing card's reply hue.
- Both the live assistant share and the generated output split by their reasoning / reply / tool-call content ratios, so message framing no longer lands on Tool Calls; a session without tool calls shows none. Tool Calls, Answers, and the assistant row state exactly what they count in their tooltips.
- Cached projections refold automatically (projection state version 34).
-
Complete execution history — the command card and the stats command lane read the whole session log instead of the newest 400 runs, so older runs are searchable, filterable, and rankable again. Loading pages backwards with progress, and a failure keeps the partial list with a retry. The command description now sits in the detail head.
-
Context Stats jumps — the whole Context Events tile hovers and jumps to the Context Events card; the turn and step figures jump to the Context Trend card. Landing hover is locked briefly so the bar that scrolls under the pointer cannot pop its tip over the card title.
-
Fleet surfaces unified — Agent Network, member, and task cards share one tile surface, hue strip, and hover / focus / pinned treatment; focusing a member dims unrelated cards and tasks, and task rows gain an open chevron. Fleet chips stay on one line at phone widths and the progress row stacks.
-
Context events read by form — the label leads with the injected item's context form (Notice, State Snapshot, Agent Relay, …) in bold; skill injections are retitled "Skill Injection · name" to follow the same shape.
-
Assistant kind chips count the search results — Thinking / Tools / Answer now count the replies in the current search results, so an inactive chip reads exactly what picking it shows; clearing the search restores the step-wide totals.
Performance
- Session detail reads warm early and stay bounded — the first detail read starts one frame after mount instead of after the 300ms trailing window; the page cache is capped by bytes as well as count; the active session warms once from the always-mounted input overlay; a streaming session keeps its warm-up deadline, a newer head gets one catch-up read, and a failed background warm-up cannot suppress the view's own retry.
- Fleet traffic is coalesced — at most four excerpt reads are in flight, only the newest queued stamp per session is kept, and a landed card refreshes on a trailing 750ms window without blanking. The session snapshot is coalesced for Fleet and subagent cards, and the full-detail ledger is trimmed to four entries.
- Fleet details fold incrementally on the host — a bounded FleetFold extends from the previous cut (append-only prefix for a live log, durable revision for a stored one) with message / prompt / reply / roster caps, replacing the whole-log rescan.
- Insights stay responsive — one sanitized base row, title, and childless variant are cached per immutable session row; daily totals fold incrementally; the below-fold heat / skills / grid body mounts after the KPI first paint behind placeholders.
- The right Sidebar releases hidden bodies — a collapsed or inactive tab mounts no cards and parks its detail subscription.
- The command fold no longer clones — the command array is cloned only for a command result or a Code-Mode batch flush, removing the quadratic fold on long sessions.
Measured results
Measured on the same machine with headless Chrome against real sessions; before is the pre-change build and after is 0.78.0. Timings are click → complete data (single-run medians where shown).
| Surface | Metric | Before | 0.78.0 |
|---|---|---|---|
| Context tab (12k events / 987 steps) | Click → complete data | 414 ms | 218–225 ms(−47%) |
| Context tab | Long-task time | 133 ms | 91–99 ms(−28%) |
| Context tab | Heap after GC | 54.9 MB | 50.1 MB(−9%) |
| Context tab | Layout shift (CLS) | 0.071 | 0 |
| Context Insights (506 sessions / 5.5B tokens) | First page with data | 221 ms | 204–208 ms |
| Context Insights | Longest task | 115 ms | 100–103 ms |
| Context Insights | One-session row derivation | 12.7 ms | 0.3–0.4 ms(−97%) |
| Context Insights | One-session daily aggregation | 13.4 ms | ≈0–0.3 ms(−98%) |
/context modal
| Open → two-card data layout | — | 111–132 ms, CLS 0 |
| Right Sidebar | Expanded → collapsed DOM | 9 cards / 476 nodes | 0 cards / 0 nodes |
| Fleet (9 agents) | First cards | 166 ms | 177 ms(run-to-run noise) |
| Fleet | Request burst | 9 concurrent | max 4 in flight |
| Fleet host fold (20k events) | Full scan / +100-event refresh | 0.9 ms / rescan | 0.9 ms / ≈0 ms incremental |
Fleet's 9-agent first paint is render-bound and stayed flat; the measured gains there are the bounded request burst and the incremental host fold, which matter as family size grows. These optimizations only reuse or defer rendering of complete payloads: session detail stays complete, command history still auto-fills to the log start, every Fleet member is still requested, and no manual “load more” was added.
Fixes
- File activity tallies follow the active filters: the title file count and line delta come from the visible set, and the chip tallies recompute from the path-matched entries.
- The overview cost KPI is labeled as estimated, matching the Total Est. Cost mini-card.
- The subagent token figure shows a dash at zero count; the positive count stays bold and the empty cost pair drops its figure weight.
- Find-in-page matches use pure yellow and the active match orange, matching Chrome in both themes.
- The Timing card's stray session/team scope caption is gone.
- Token Stats and Timing Stats share one Reasoning label and the same violet; the thinking row no longer carries a replay note.
- The dark theme's stacked-bar background and the command lane chips' name-hash palette are aligned with the shared colors.
- The Context Stats card drops its redundant Current Session caption.
Changes
docs/compatibility.mdrecords the optionaluseTabInfoseam that gates the right Sidebar body, and the estimate-based thinking / answers / tool-call split (no supported DeepSeek route reports those buckets).- Dependencies move to their latest in-range versions, with tsdown pinned to 0.23.1 and TypeScript constrained to ~7.0.2 so the
preparebuild succeeds again for git-based installs; the emittedlib/index.d.tsnow carries the banner. - Provider pricing keeps its documented models.dev table and aliases; the generic
dsh-<name>alias rule proposed in #207 and #209 remains out of scope, so those providers still read unpriced unless their alias is in the table.
Commits
- chore(release): 0.78.0 (08fe7cb5)
- ci(release): correct the dsh dist-tag comment (e3aff5f5)
- docs(readme): refresh the token-category screenshots (d8a4b733)
- perf(client): release hidden sidebar bodies and stabilize narrow layouts (52eab0d5)
- perf(client): memoize insights rows and day aggregates (aeb0de30)
- perf(client): coalesce session pushes and schedule fleet reads (335bb1d4)
- perf(client): warm and bound session detail reads (10b12a2a)
- perf(host): fold fleet details incrementally (5cb383fb)
- docs(coding standards): add anti-pattern guidelines to prevent over-engineering and memory issues (aa43da57)
- refactor(coding standards): enhance clarity and structure of coding principles and guidelines (97b1d755)
- feat(agents): establish coding standards and principles for user experience and data integrity (32aa4dff)
- perf(fold): clone the command log only for results that touch it (945050d4)
- feat(commands): page the complete execution history (7bd422d8)
- fix(agents): update code-review skill link for accuracy (093f649c)
- feat(fleet): unify card surfaces and interaction states (16d22619)
- fix(files): make the file activity tallies follow its filters (b6b3c9c8)
- feat(commands): move the description into the command detail head (02f25a0f)
- feat(stats): remove the redundant Current Session label from the Context Stats card (e42dff19)
- fix(agents): update code-review instructions for clarity and process improvements (ec27904c)
- feat(stats): add hover and jump on the whole context-events tile (a9a522ac)
- fix(agents): update code-review instructions to emphasize reusing existing test suites and removing outdated code (f4ce1be3)
- fix(agents): update code-review instructions to skip typecheck, lint, and test coverage (7f530dbe)
- feat(styles): adjust background color for dark theme in stacked bar (acd23066)
- fix(stats): color the command lane chips by the shared name-hash palette (572c0e0f)
- feat(tokens): merge assistant into Tool Calls and add Answers (7ddaae4c)
- feat(stats): jump the turn and step figures to the context trend (f993a75c)
- fix(stats): bold the positive subagent count and unbold the empty cost pair (0c1a5469)
- fix(build): include banner in dts output for type declaration consistency in lib/index.d.ts (eec54243)
- feat(tokens): clarify the assistant row in its tooltip (c346c056)
- fix(i18n): label the reasoning rows Reasoning / 模型思考 (5eda2eaa)
- fix(tokens): match thinking to the timing reasoning color (094e1fd6)
- fix(tokens): drop the thinking replay note (da01f29c)
- feat(tokens): split thinking out of the token stats ring (59f37915)
- docs(readme): update context-overview.png (44372248)
- fix(ui): show a dash for the subagent token figure at zero count (d957dd56)
- fix(browser): count assistant kind chips through the text lens (2b654de9)
- feat(ui): bold the leading form segment of context events (b8062d6b)
- chore(deps): update dependencies and pin the TypeScript 7.0 toolchain (7c0124bd)
- fix(ui): label the overview cost KPI as estimated (ee716702)
- test: wrap the remaining React updates in act (aae7f620)
- test: trim 10 cases and 373 spec lines; fix hollow route-gating tests (e4f8c836)
- test: cut suite runtime 65% and record pruning benchmarks (d6852bcb)
- test: prune and consolidate the test suite (53b66453)
- fix(ui): match Chrome's find-in-page highlight colors (6f4f9a47)
- docs(agents): add clarification on file coverage reporting in AGENTS.md (d73968b5)
- fix(ui): remove the timing card scope subtitle (8cef4546)
v0.77.0...v0.78.0 · 46 commits