The Context Stats card's inject/compaction/prune cells duplicated what the events card already tracks. Drop the three cells (the grid falls to five: turns, steps, tool calls, cache hit, cost) and show each tally inside the matching kind-filter button instead, sourced from the same precomputed counts the stats card used.
155 lines
11 KiB
Markdown
155 lines
11 KiB
Markdown

|
||
|
||
# dsh-context
|
||
|
||
[](https://www.npmjs.com/package/dsh-context)
|
||
[](https://github.com/bowenliang123/dsh-context)
|
||
[](https://dshfind.com/en/plugins/bowenliang123/dsh-context?ref=badge)
|
||
|
||
**The best [DeepSeek Harness plugin](https://www.deepseek.com/harness/) for Agent's context insights and management.**
|
||
|
||
[`dsh-context`](https://www.npmjs.com/package/dsh-context) provides full context lifecycle management features.
|
||
- **Context tab** — an UI context dashboard for DeepSeek Harness's context stats, composition, trend, events, and messages.
|
||
- **Context panel** — the same dashboard as a right-sidebar tab (dsh 0.1.5-rc.1+): pick **Context** on the sidebar's guide page and the panel opens beside the chat.
|
||
- **`/context` command** — the slash command shows the context model for current context composition and recent context evolution.
|
||
|
||
## Install / Update
|
||
|
||
Install [`dsh-context`](https://www.npmjs.com/package/dsh-context) plugin from [DeepSeek Harness](https://www.npmjs.com/package/@deepseek-ai/dsh):
|
||
|
||
```sh
|
||
dsh plugin --profile web add dsh-context
|
||
```
|
||
|
||
Or update the `dsh-context` plugin:
|
||
|
||
```sh
|
||
dsh plugin --profile web update dsh-context@latest
|
||
```
|
||
|
||
Then start the web UI with `dsh web`. No build step, no restart.
|
||
|
||
## Use it
|
||
|
||
Three surfaces, one story — what your agent is carrying, how it got there, and what it did with it:
|
||
|
||
| Where | What you get |
|
||
| --- | --- |
|
||
| **Context tab** | The full dashboard: stats, composition, per-request trend, events, file activity, and the agent network — in every session. |
|
||
| **`/context` command** | A centered modal with the same composition and context browser, without leaving the chat. |
|
||
| **Settings → Plugin configuration** | Per-user defaults: trend granularity & mode, File Activity sort. |
|
||
|
||
## 📊 The Context tab
|
||
|
||
Open any session and click the **Context / 上下文** tab:
|
||
|
||

|
||
|
||
| Card | The question it answers |
|
||
| --- | --- |
|
||
| **Context Stats** | Turns, steps, live tool calls, the session's cache-hit rate — plus a list-price cost estimate (hover the `?` for per-1M rates). |
|
||
| **Token Stats** | Where the billed tokens went: cache read/write, uncached input, output — around the cache-hit ring. |
|
||
| **Timing Stats** | How active time split across model calls, tool runs, and overhead. |
|
||
| **Current Context** | What's in the window *right now*. |
|
||
| **Context Trend** | Every request's size — and its story. |
|
||
| **Context Browser** | What any request was *actually* assembled from. |
|
||
| **Context Events** | When and why the window changed. |
|
||
| **File Activity** | What the agent *did* to your files. |
|
||
| **Agent Network** | The whole agent family, live. |
|
||
|
||
The headline occupancy and composition read the **same official token-meter projections as the chat composer's context ring** (`contextPressure` / `contextBreakdown`), so the figures always match what the ring tells you.
|
||
|
||
### 🧱 Current Context — who ate the budget
|
||
|
||

|
||
|
||
A six-color stacked bar against the model's full window (hatching = free headroom): system prompt, tool schemas, user messages, injected context, assistant replies, tool results — each with its ≈token figure and share. When a conversation starts degrading, this is where you see *which part* is responsible.
|
||
|
||
### 📈 Context Trend — every request, sized and explained
|
||
|
||

|
||
|
||
One stacked bar per model request — finer than per-message — so you watch the window grow turn by turn:
|
||
|
||
- **✨ Step brief** — three plain-language rows under the chart: **User** recalls the message that opened the turn, **In** lists what newly entered (usually the previous tool results), **Response** shows the reply and/or tools called. Click a row to open that exact message in the Context browser.
|
||
- **✂ marks the events** — compactions and prunes are pinned to the bar where they happened, so the drops explain themselves.
|
||
- **Read it your way** — **Step / Turn** granularity, **Total** (cumulative makeup) or **Delta** (each request's signed change), and sideways scrolling through the whole session. In Delta mode, growth piles up above the baseline and a compaction dives below it:
|
||
|
||

|
||
|
||
- **Hover & pin** — scrub for an instant tooltip; click to pin the full breakdown, with provider-reported **Actual Prompt / Output / Cache** next to the estimates.
|
||
- **Live linkage** — hovering a bar previews that step's assembled context in the Context browser beside the chart; leaving the chart returns to your own pick.
|
||
|
||
### 🧭 Context Browser — open the box of any request
|
||
|
||
Pick **Live (next request)** or any retained step, and browse what that request was assembled from: six collapsible categories expand into one row per element with its token price, and every element expands again into its **actual content** — the system prompt, each tool's JSON schema, message text, reasoning, tool arguments, and tool outputs.
|
||
|
||
- **Who provides each tool** — every tool-schema row carries a best-effort source chip: `tool-*` first-party packages, `dsh-*` capability packages, `mcp:<server>` proxies, or the exact plugin watched live from `tools.register()`. Sort by **size / name**, and filter every category by its own searchable fields:
|
||
|
||

|
||
|
||
- **Tool results open into the full call** — the tool name and arguments with its **OK/error** status, the result body with line count and a **Raw / Markdown** toggle:
|
||
|
||

|
||
|
||
- **Image payloads render as cards** — thumbnails with name, dimensions, stored size, and the official DeepSeek image-token estimate (the dsh multimodal pipeline, e.g. `read_image` results and image attachments):
|
||
|
||

|
||
|
||
- **Diff against the previous turn** — signed delta badges per category (`+N` items, `±Nk` tokens) tell you what a turn added or reclaimed at one glance. Steps older than a compaction are reconstructed from the removed-message archive — and the card says so when a step's makeup is only approximate.
|
||
|
||
### ⚡ Context Events — when and why the window changed
|
||
|
||

|
||
|
||
Every injection, compaction, prune, model switch, and plan-mode toggle — labeled with its producer (instruction file, plugin id, skill name), its net token delta (compactions show what they reclaimed), turn/step, and time. The **Inject / Compact / Prune / Switch / Mode** chips filter the log by kind, each carrying its whole-session event tally.
|
||
|
||
### 📁 File Activity — what the agent did to your files
|
||
|
||

|
||
|
||
One row per touched file — read, written, or searched — aggregated up to whichever step you pick on the trend chart:
|
||
|
||
- **Per-purpose counts** with header chips doubling as filters (**Read / Written / Searched / Images**) and a path search box.
|
||
- **Line deltas** — every `edit`/`write` contributes its estimated `+added / −removed` footprint, per file and summed.
|
||
- **Every mode counts** — native tools, the Minimal preset's `str_replace_editor`, and the nested calls inside PTC `run_code` programs are all folded into per-tool rows.
|
||
- **Searches land on real files** — matched files get their own ops rows with hit counts.
|
||
- **Click a row** to expand its full operation log — every op jumps straight to the exact tool result in the Context browser.
|
||
- **Click a file name** to open its preview in the right Sidebar (dsh 0.1.5-rc.1+), exactly as the built-in Files sidebar does — the same viewer, the same tab-per-file behavior. On a harness without that column the name opens on your system as before.
|
||
|
||
### 🕸 Agent Network — the family portrait
|
||
|
||

|
||
|
||
The current agent, its parents, and every subagent — one node per agent, colored edges for the lineage, multi-level delegation on one map. Each ring is that session's composition scaled to its window occupancy; hover for tokens, requests, billing, and active time; click to jump into that session's own Context tab. Running agents breathe with a green pulse.
|
||
|
||
## ⌨️ `/context` command
|
||
|
||
Type `/context` (or pick it from the `/` menu) and press Enter:
|
||
|
||

|
||
|
||
A centered dialog opens with the **Current Composition** card and the **Context browser** — the same composition bar, per-step picker, and `vs previous turn` diff badges as the tab:
|
||
|
||

|
||
|
||
## ⚙️ Settings
|
||
|
||
In **Settings → Plugins → Plugin configuration**, the **Context** card holds this plugin's per-user preferences — default trend granularity (Step/Turn), default trend mode (Total/Delta), and the File Activity default sort. In-chart and in-card toggles stay per-view and never overwrite the stored preference.
|
||
|
||

|
||
|
||
## Good to know
|
||
|
||
- **Estimates vs actuals** — category figures use dsh's own fixed-density heuristic (the same one as its built-in token meter); the pinned trend details and Token/Timing rings show provider-reported actuals next to them.
|
||
- **Compatibility** — works on `@deepseek-ai/dsh` **0.1.2-rc1+**, across the V0 (0.1.2-rc.x), V2 (0.1.3-alpha.x), and V3 (0.1.5-alpha.x+) session-log generations. The per-release matrix and how it is verified: [docs/compatibility.md](docs/compatibility.md).
|
||
- **I18n** — UI in English and 简体中文.
|
||
|
||
## Like it?
|
||
|
||
If `dsh-context` helped you understand what your agent is carrying around, a ⭐ on [GitHub](https://github.com/bowenliang123/dsh-context) is much appreciated — and issues/PRs are welcome!
|
||
|
||
## License
|
||
|
||
[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)
|