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
Features
-
Agent Network is now a card wall — one card per agent, carrying its billing and its work state
- Every agent gets its own card: its title, live context size and window occupancy, a composition bar, how long it has been running, how many steps it has taken, and its request count. The card's cost estimate and billed-token total come from the same price book the stats board uses, so the two never disagree.
- Hovering a card lights its whole chain in the lineage's color and reads the full breakdown — occupancy, activity, composition — in the detail strip below. Clicking jumps into that session's own Context tab.
- Work state now reads in the harness's own glyphs: a running agent breathes with a green pulse on its incoming edge and turns over the same rolling spinner the header's subagent list uses, settling into the same green dot once the work is done.
- Sibling order follows the parent row's own
subagentCatalogprojection — the same sequence the harness header's subagent popup lists — instead of the running-first heuristic. - Narrow panes fold the family into tidy rows, never a horizontal scrollbar.
This direction came from #130 — @AquaVictor read the agent network with several subagents, proposed the card layout and the fold-by-lineage behaviour, and offered to contribute it rather than wait on a PR. Thanks for the idea and for pushing on the direction.
-
The Context page stops reflowing as data lands
- Opening the tab used to grow the page by 343px on a cold read, and each arriving step nudged the cards below down by a few pixels. Seven independent lanes had a height that came from their content instead of from their role: the brief lane under the chart, the detail header's metric pills, the file card's empty state, its filter band, the browser's category rows, text-only titles, and the trend card's pending body. Each now holds its own height, and the trend chart rises only its newest columns on mount.
Fixes
- Tool timing no longer stalls a session that used a tool named
__proto__. The name passed the own-property guard but assigned the tally's prototype instead of booking a row, so the count was lost and the wire schema rejected the inherited keys — a throw inside the registry that left the session's push feed loading forever. The client boundary has skipped this name since issue #44; the host fold, where the untrusted name first lands, now does too. - The activity view now copies a day's nested records before serving them. Each day entry held aliased references to the persisted
costledger andskillstable, so a later fold could mutate what had already been served. The ledger walk now sits besideaddBilledUsageas its mirror, so both halves price through one implementation. - The page-lifetime detail payload cache is bounded, and the detail store parks when its last viewer leaves.
- The price book's retry cycle ends when its last subscriber leaves, instead of polling a session nobody is watching.
- The heatmap legend uses half as many swatches.
- The decode-text bucket in the timing strip is labelled 模型回复 / Answers.
Changes
- Code slimming, in the open.
src/is 4,945 lines lighter than the last release (3,976 added, 8,921 removed) with no feature lost:- The fold module split into state, metering, and wire siblings; the fold bounds and the duplicated decode-tally aliases are derived once instead of copied.
- The context browser split into schema, tool-card, and node siblings, and the oversized specs split into siblings over shared harnesses.
- Route registration and the record re-proof are shared; the per-baseline registry run that CI repeated collapsed into one.
- Comments were swept against the repo's guideline across the build configs, client, host, shared, and test suites — keeping only what the code cannot say for itself. A source-file size limit was added to the contributing guide.
- The tools row on the stats card no longer caps the tally at an arbitrary top three and quietly drops the rest. It keeps one line like the Input/Output row above it, and folds whatever does not fit into a trailing "其他 +N" — the fit is measured against the real chip widths, so nothing is clipped or overlapped.
- The English dictionary is now checked against Chinese at compile time. Both were annotated
Record<string, string>— an index signature and a promise of nothing — so a key added to one side alone typechecked and shipped; a key reaching only one side is now a compile error. - The compatibility seam matrix now actually runs on pull requests. The PR workflow never fetched the baseline tags or set
DSH_REPO, soskipReasons()always reported a missing checkout and skipped every per-baseline probe — the proofdocs/compatibility.mdclaims for "everypnpm test" was a no-op until a tag was cut. Both workflows now fetch the tags, and a skip under CI fails the run instead of hiding behind green. - The client bundle's declared externals dropped the four
@deepseek-ai/entries that never appear in the built output. The emitted require list is unchanged, and the purity gate still fails the build on any genuinely new external. docs/compatibility.md's verification stamp is refreshed to this source tree.
Commits
- docs(agents): add guidance for reviewing recent issues and PRs in release notes (70d2889)
- i18n(timing): label the decode-text bucket 模型回复 / Answers (5856324)
- fix(overview): halve the heatmap legend swatches (e1a6655)
- fix(client): park the detail store when its last viewer leaves (45e1697)
- fix(client): bound the page-lifetime detail payload cache (115e926)
- fix(client): end the price-book retry cycle when its last subscriber leaves (6475afc)
- docs(agents): add guidance for reviewing recent issues and PRs in release notes (0a57e33)
- perf(timing): sweep the strip's bands on one wrapper, not one animation each (20826dc)
- perf(trend): rise only the newest columns on mount (def268b)
- docs(agents): update comments guideline for clarity and conciseness (79fe95e)
- docs(agents): refine comments guideline for clarity and conciseness (f90bd98)
- refactor(comments): trim host/shared comments to the value the code cannot carry (3fe1b7c)
- refactor(comments): trim client comments to the value the code cannot carry (7cb0a9f)
- refactor(comments): trim comments in the build configs (537e53a)
- refactor(comments): rewrap test comments onto fuller lines (7c87ce2)
- refactor(comments): drop two stale test comments (eb8368f)
- refactor(comments): clean up the test-suite comments to the guideline (87a2893)
- refactor(comments): add guideline for source code file size limit (ec203da)
- refactor(host): split the fold module into state, metering, and wire siblings (c4f5500)
- refactor(host): derive the fold bounds and drop the duplicated decode-tally aliases (d746d57)
- refactor(client): split the context browser into schema, tool-card, and node siblings (52a5843)
- test(client): split the oversized specs into siblings with shared harnesses (9aaa115)
- fix(ci): run the compat seam matrix on pull requests (f50f33d)
- fix(host): skip the reserved prototype key in the tool-timing tally (3611d50)
- fix(host): copy a day's nested activity records before serving them (483e76b)
- refactor(host): share the route registration and the record re-proof (73f279e)
- refactor(client): unwrap the zero-argument component factories (ba8d7c7)
- test(host): collapse the duplicated per-baseline registry run (9ccf236)
- chore(docs): move the social-preview generator out of docs (0164778)
- build: drop the client externals the bundle never requires (9b31d40)
- docs(compat): refresh the verification stamp (5541de3)
- feat(client): rework the agent network as live cards (32cb738)
- docs: refresh the agent network portrait and notes (c8f2320)
- feat(client): give every agent card a duration and a step count (38fe279)
- style(client): widen the agent card grid (cd26173)
- feat(client): show the agent cards' work state in the harness's own glyphs (8876154)
- refactor(i18n): check the en dictionary against zh at compile time (209169d)
- refactor(client): spell out the tools that fit, fold the rest into one chip (861ee77)
- fix(client): hold every data-dependent lane so the page stops reflowing (667e1a9)
- chore: release v0.67.0 (df136da)
v0.66.1...v0.67.0 · 40 commits