
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-tool-result-guard
Advanced tools
Zero-loss tool-result pruning for the DeepSeek Harness (DSH): oversized tool results are spilled to a file first, then pruned with exact elided-span offsets and a recovery locator. A dsh-plugin.
English | 中文
Zero-loss tool-result pruning for the DeepSeek Harness (DSH). A dsh-plugin.
Oversized plain-text tool results are spilled to a file first, then replaced with a bounded head/tail preview whose position-0 marker carries the exact elided span and the spill locator. The model can always recover the middle; nothing is ever dropped without a durable copy.
[pruned: kept chars [0, 4096) + [28976, 30000) of 30000; the elided middle
[4096, 28976) is NOT lost — full output saved at: /tmp/dsh-spill/.../bash.txt.
Recover any elided span with the read tool (offset/limit), grep, or sed on that file.]
<head: first 4096 chars>
[... middle elided ...]
<tail: last 1024 chars>
DSH ships two built-in mechanisms:
| mechanism | trigger | behavior |
|---|---|---|
dsh-spill-policy | result > maxInlineBytes (default 50000 bytes) at post-execute | full text to ctx.spillStore, bounded preview + locator returned — zero-loss |
dsh-compaction-tool-result-pruner | text > 8192 chars, only when compaction pressure qualifies | head 4096 + [... tool result middle pruned ...] + tail 1024. The original event stays in the append-only session log for replay, but the model gets no locator, no offsets, and no tool to read the log — the middle is unrecoverable for the model |
The gap: results between ~8K chars and 50K bytes that survive until compaction are pruned with no model-facing recovery path. This plugin closes the gap by pruning earlier (at tools/post-execute), always spilling the full text first, and embedding the exact elided span [head, total-tail) plus the locator in the marker.
If you install this plugin, the built-in pruner finds nothing over 8K chars on the surface and becomes a no-op; you may keep or remove its row. Same for spill-policy (its cap is never reached). Keeping both is harmless.
One command:
dsh plugin --profile web add dsh-tool-result-guard
Restart DSH. Done — it now applies to every agent preset in that profile. Remove with dsh plugin --profile web remove dsh-tool-result-guard.
Tune the budgets by id in your profile's ~/.dsh/profiles/web/cordis.patch.yml:
- id: tool-result-guard
config:
thresholdChars: 16384
npx dsh-tool-result-guard install --preset my-preset --from standard
copies the shipped standard preset to ~/.dsh/.agent-presets/my-preset/, drops dsh-tool-result-guard.js beside its agent.cordis.yml, and appends the plugin row; start a new session on my-preset. Patch an existing user preset with --preset <id> (no --from), undo with remove --preset <id>, print the snippet with --print. Manual equivalent — copy index.js next to the preset's agent.cordis.yml and append:
- id: tool-result-guard
name: './dsh-tool-result-guard.js'
Unknown keys fail at load. All budgets are Unicode code points (surrogate pairs never split).
| Key | Default | Meaning |
|---|---|---|
thresholdChars | 8192 | Prune when the flattened plain-text result exceeds this many code points. |
headChars | 4096 | Leading code points kept inline. |
tailChars | 1024 | Trailing code points kept inline. |
excludeTools | ["read"] | Tools whose results always pass through. read is excluded by default to prevent a read spill file → prune → read again loop. Add e.g. ["read", "subagent", "memory_search"]. |
spillDir | (unset) | Override the local fallback spill directory (default: a private dir under the OS temp dir). |
headChars + tailChars must be below thresholdChars so the marker always fits.
ctx.spillStore when loaded, else a private per-process local directory) before the middle leaves the model-facing result.tools/post-execute waterfall listener and delegates via next(), so tool-owned projection and other hooks run first; their replaced content is what gets pruned. additionalContexts survive.thresholdChars, so a second pass never re-prunes.The marker names the spill file and the exact char span. Models recover with read (offset/limit), grep -n, or sed -n 'X,Yp' on that file — the read exclusion prevents recovery reads from being pruned themselves.
npm test # node:test, zero dependencies
MIT
FAQs
Zero-loss tool-result pruning for the DeepSeek Harness (DSH): oversized tool results are spilled to a file first, then pruned with exact elided-span offsets and a recovery locator. A dsh-plugin.
The npm package dsh-tool-result-guard receives a total of 7 weekly downloads. As such, dsh-tool-result-guard popularity was classified as not popular.
We found that dsh-tool-result-guard demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.