Bundle
dsh-plugin-anti-rot
dsh plugin: compresses verbose tool error payloads (drops stack frames, caps message lines) on the tools/post-execute waterfall before they reach model context.
- Source
- orangelightening
- License
- MIT
- Updated
- Updated 11 hours ago
Readme
# dsh-plugin-anti-rot
A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) plugin
developed to remove a common source of **context rot** in long-running agent
sessions: verbose tool error payloads piling up in the context window. When a
child process dies mid-traceback, its raw stack dump would otherwise spend the
whole error — often dozens of noise lines — against the session's context
budget, and repeated failures compound over hours of work. This plugin
compresses those payloads before they reach model context and the session log. A failed call's text is reduced to its first `maxLines` message
lines, indented `at …` stack-frame lines are dropped, and an elision marker names
what was removed:
```
Error: boom
[…anti-rot: dropped 8 stack-frame lines, omitted 0 of 8 message lines…]
```
## How it works
The plugin hooks the `tools/post-execute` waterfall and rewrites error text in
place. It recognizes two failure signals and nothing else:
- an `isError` result (infrastructure failures — spawn errors, aborts), or
- a trailing non-zero `[exit code: N]` marker per the shell tools' shared
rendering contract (failing commands are model-interpreted SUCCESS results,
so the marker is the only failing-command signal).
A clean exit leaves the result untouched. The exit marker is always re-appended
as the final line of a compressed payload, because the model is instructed to
check it and the terminal UI parses it from the end of the text.
Bounding oversized *successful* text is a different concern, owned by
`@deepseek-ai/dsh-spill-policy`; both plugins delegate through `next()` and
compose.
## Install
From a checkout of this repository:
```sh
pnpm dsh plugin --profile web add /path/to/dsh-plugin-anti-rot
```
Or run it transiently with an overlay:
```sh
pnpm dsh web --patch /path/to/dsh-plugin-anti-rot/overlay.yml
```
## Configuration
| Field | Type | Description |
| --- | --- | --- |
| `maxLines` | `number` | Maximum message lines kept in a compressed error payload. Must be a positive integer; load fails loudly otherwise. |
Example entry in `cordis.patch.yml`:
```yaml
- insert:
- id: anti-rot
name: dsh-plugin-anti-rot
config:
maxLines: 15
```
## Development
```sh
npm install
npm run build # tsc → lib/
node --import tsx/esm tests/anti-rot.smoke.ts # keyless smoke tests
npx tsc -p tsconfig.json # strict typecheck
```
## License
[MIT](./LICENSE) © Orangelightening
Install
dsh plugin --profile web add github:orangelightening/dsh-plugin-anti-rot
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-plugin-anti-rot from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.