dsh-agent-compact
Manifest valid★ 4DSH plugin for agent-driven span compaction: compress chosen conversation spans into self-written checkpoints instead of the official head-anchored full-context sweep.
agent-compact
English · 简体中文
Context compression for DeepSeek Harness: lets the agent autonomously call context_compact to compress a span of the conversation it chooses — the finished, no-longer-needed middle — and replace it with a checkpoint the agent writes itself.
Why
Compaction is normally a full-context sweep: the official engine only ever compresses from the start of the conversation, so the opening's task plan and direction are partially lost along with the compressed information. context_compact compresses only the span the agent selects — a finished step, a debugged log exchange, an off-track discussion — while the important opening and the recent context stay intact. Span compaction keeps information loss from compaction as small as possible — like human memory, the middle is not compressed indiscriminately: what can be summarized is consolidated into a checkpoint, and important details stay word-for-word — the agent decides what is truly dead, and only that gets condensed.
Typical moments to use it:
- a task step is done — compress it, keep the remaining steps and the active instruction live;
- a bug hunt or a wrong research direction is over — compress that exchange into a short "what went wrong / root cause / fix" note;
- the opening requirements are stale — compress the start and restate the current intent.
What it does
- The agent picks the span via
startAnchor/endAnchor(unique-prefix matching, CJK punctuation-width tolerant) and passes a requiredsummary— the Markdown checkpoint it wrote itself. - The raw span is archived to the spill store first (
~/.dsh/spill/session-<hash>/<hex>-<seq>.txt, sequential naming, restart-safe); the path is echoed in the shadow message so the model can read the raw text back. - The host engine runs the stock transaction — boundary validation, tool-pair balance, surface replacement — with no separate LLM summarizer request.
The tool call itself happens inside the agent's normal turn and is billed like any other turn; what is avoided is only the extra summarizer request the official engine would make for the same span.
Install
# from a published registry package
dsh plugin --profile web add @mimichunterz/agent-compact
# or from a local checkout
dsh plugin --profile web add ./agent-compact
dsh plugin forwards to pnpm in the profile directory and appends the bundle to dsh.profile.bundles (see the official publish guide). Restart the profile — every session then sees the context_compact tool.
The bundle's own cordis.patch.yml pins the spill archive root to ~/.dsh/spill (deployments can override it again through the profile's cordis.patch.yml).
Uninstall
dsh plugin --profile web remove @mimichunterz/agent-compact
dsh plugin remove forwards to pnpm remove in the profile directory: it uninstalls the package and reconciles the bundle out of dsh.profile.bundles. Restart the profile — every session then stops seeing the context_compact tool. The same package name works whether you installed from the registry or from a local checkout.
If the plugin was additionally mounted through a row in the profile's cordis.patch.yml (dev mode), remove that row too, otherwise the patch re-mounts it on the next boot.
Configuration
| field | default | meaning |
|---|---|---|
autoArchive | true | context_compact saves the full raw span to a spill artifact before replacing it |
volumeNudgeTokens | 50000 | Every time accumulated surface growth (heuristic token count) since the last compaction crosses another multiple of this amount, remind the model to consider context_compact. 0 disables the nudge. |
Pass through the inserted row in the profile's cordis.patch.yml or a bundle patch.
How it works
- Agent-written checkpoint:
summaryis mandatory, so the tool path always uses the checkpoint the agent wrote.patchEngine()(seesrc/optimizer.ts) wraps the engine'ssummarize(): when an_externalSummaryis present (one-shot, keyed per session id), it returns that text directly; only when none is present does it forward to the stock implementation — a branch that serves the automatic compaction path and keeps official behavior intact. - System-prompt guidance: the bundle registers a global prompt section (
tool:context_compact, order 118) that tells the agent to usecontext_compactproactively — compress finished steps at topic boundaries instead of waiting for automatic full-context compaction. - Proactive volume nudge: a
systemPrompt.context()injection (agent-compact:volume-nudge, order 50) reminds the model once each time the session's surface has grown by anothervolumeNudgeTokens(default50000) multiple since the last compaction. It measures occupancy viacontextPressure.projectedTokens(falling back totokenMeter.measure().surfaceTokens); the growth baseline resets on everycompaction/summary;0disables it. As a tailsystemPrompt.context(), unchanged text is a no-op (KV-cache friendly) and it is independent of the auto-compactor's pressure threshold. - Anchor matching (
src/normalize.ts):normTextcollapses whitespace and maps CJK full-width punctuation to half-width (,→, etc.), applied to both anchors and node text. Matching keeps unique-prefix semantics: zero hits → "not found" with closest-node hints; more than one hit → "AMBIGUOUS". - Restart-safe sequential archives: the next number is derived by scanning the session's spill directory (
max+1) — gap-free; the backend's random hex prefix makes filename collisions impossible. - Paired cleanup: the tool-call message (carrying the full
summaryargument) and its tool/result are each replaced by one tiny shadow message, so the checkpoint text never appears twice on the surface (skipped when the message holds more than one tool call).
Compatibility
- Built and verified against DeepSeek Harness
0.1.1-rc.2(@deepseek-ai/dsh-compaction-basic@0.1.1-rc.2). - Only one compaction per session at a time (the engine transaction is serialized); anchors re-resolve on every call, so later compactions never go stale after earlier checkpoints replaced old nodes.
- With a local spill backend the root is fixed; other backends degrade gracefully (no
rootfield → in-memory counter), and compaction itself is unaffected.
License
MIT. The patch derives from @deepseek-ai/dsh-compaction-basic and related DeepSeek Harness packages (MIT, Copyright DeepSeek) — see LICENSE.
Compatibility
Versions
| Latest version | Published | Size |
|---|---|---|
| 0.1.0 | — | — |
| 0.1.1 | — | — |
| 0.1.2 | — | — |
| 0.1.3 | — | — |
| 0.1.4 | — | — |
| 0.2.0 | — | — |
| 0.2.1 | — | — |
Comments
Loading…
Similar plugins
by ya8D
A customized natural-language compaction plugin. It gives you the ability to precisely trim context — sometimes even to fix a malfunctioning context.
★ 0
MIT
TypeScript
Aug 16, 2026
dsh plugin --profile web add @ya8d/dsh-directive-compactby zyd232
DSH plugin: stop automatic context compaction from firing far too early on smaller context windows. Set the trigger per provider/model — no config edits, no pinned presets.
★ 4
↓ 320/wk
MIT
JavaScript
Oct 28, 2026
dsh plugin --profile web add dsh-compaction-policyby chuxindd
Persistent task state and context-aware compaction for DeepSeek Harness coding sessions.
★ 0
MIT
TypeScript
Sep 20, 2026
dsh plugin --profile web add dsh-context-enhancementby n0pe-sled
dsh plugin: default sub-agent provider, model, and reasoning effort plus per-delegation overrides
★ 0
TypeScript
Sep 29, 2026
dsh plugin --profile web add dsh-configurable-subagentsby EvannZhongg
A DeepSeek Harness plugin that keeps the exact text of user-authored messages that compaction has shadowed, and re-injects them as a budgeted runtime-context snapshot.
★ 0
MIT
TypeScript
Oct 18, 2026
dsh plugin --profile web add dsh-lossless-anchorsModel-driven context compaction for DeepSeek Harness. The agent decides when and what to compress, commits durable session-log replacements, and ships reversible tool-result compression with byte-exac
★ 0
dsh plugin --profile web add @internetnutzer/dsh-asc