Bundle
dsh-context-proxy
Thin on-demand context-retrieval layer for DeepSeek Harness: context_query / context_slice / context_grep tools over the sessionQuery and subprocess seams.
- Source
- EvilIrving
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# dsh-context-proxy
Thin on-demand context-retrieval layer for the DeepSeek Harness.
[](https://awesome-dsh-plugin.com)
Automatic truncation, spill-to-disk, compaction, and token metering are already
owned by `output-retention`, `spill-policy`, `compaction-basic`, and
`session-query`. This package adds only the missing piece: three model-facing
tools that read already-persisted history back on demand.
## Install
```sh
dsh plugin --profile <name> add github:EvilIrving/dsh-context-proxy
```
Or, from a checkout:
```sh
dsh plugin --profile <name> add ./dsh-context-proxy
```
The bundle patch inserts one plugin row (`dsh-context-proxy`). `sessionQuery`
and `subprocess` are optional backends (`ctx.get`): without a `sessionQuery`
backend each tool degrades to an `isError` result instead of waiting forever.
## Tools
| Tool | Backing seam | Returns |
|---|---|---|
| `context_query` | `sessionQuery.filterEvents` | lightweight `{ seq, type, text }` matches by seq/type/surface/text |
| `context_slice` | `sessionQuery.readEvent` | one event plus a bounded `before`/`after` window |
| `context_grep` | `subprocess` (packaged `rg`) or `sessionQuery.filterEvents` | matches with `{ text, citation }` |
Citations are replay-safe: `context_query`/`context_slice` cite `session:<seq>`
(rebuildable from the canonical log), and `context_grep` cites either a spill
path (`path:line`, fast local path) or `session:<seq>` (semantic-text fallback
when no spill path is supplied or available).
## Config
```ts
export interface Config {
readWindowDefault: number // default before/after for context_slice (default 0)
grepMaxBytes: number // rg stdout in-memory cap (default 1 MiB)
rgGraceMs: number // rg termination grace (default 5000)
}
```
## Dependencies
- `sessionQuery` and `subprocess` are **optional** services read via
`ctx.get(...)`. A missing `sessionQuery` backend degrades each tool to an
`isError` result (`session query backend unavailable`) instead of leaving the
plugin waiting forever; the same applies to `subprocess` for `context_grep`
with an explicit path.
- `tools` is a hard dependency (`inject`).
- The packaged ripgrep binary comes from `@vscode/ripgrep` — the same mechanism
`dsh-tool-fs-search` uses — so no system `rg` install is required and no
shell layer exists between the argv vector and ripgrep.
## Model Experience
### Request context and condition
#### What the model sees
Three tool schemas (`context_query`, `context_slice`, `context_grep`) are
registered into the agent's tool set. Each result is a compact JSON object of
matches/items plus citations; no prose is returned for the model to parse ids
out of.
#### Token effect
Zero-direct effect until a tool is invoked; each invocation's cost is bounded
by the query/slice window and the `grepMaxBytes` cap.
#### KV Cache effect
Append-only: tool results append to the surface; they never rewrite earlier
request tokens.
## Known Limitations and Deferred Work
- **`context_grep` line parse is `path:line:text`** — a spill path containing a
newline (not expressible in the durable locator) would confuse the parser;
absolute spill paths never contain one.
- **Fallback text scan is literal, not regex** — when no spill path is
supplied, `context_grep` falls back to `sessionQuery`'s literal,
case-insensitive, whitespace-flexible scan, not a regex search.
- **Bundle writing is not sandboxed** — nothing here writes files; retrieval
only reads through the seams.
Install
dsh plugin --profile web add github:EvilIrving/dsh-context-proxy#1e1965f51ace195272697ff55b9dc8d43798e6a6
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-context-proxy 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.