PerryLink/dsh-fast

dsh-fast

DeepSeek Harness 的性能剖析与 LLM 缓存诊断:上下文工程、延迟剖析与缓存行为报告。

待分类context-engineeringcordisdeepseek

⚡ dsh-fast

  • 1024 store channel: npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-fast (counts toward the deepseek1024.com install ranking).

Read-only performance diagnostics for DeepSeek Harness.

*Observes the session event stream — never the model hot path — and reports where latency and context budget actually go.*

Official repository. This is the only official repository of dsh-fast, maintained by PerryLink. Same-name repositories under other accounts are not affiliated.

English · 简体中文 · Español · Português · हिन्दी

dsh plugin --profile <name> add dsh-fast

📖 Ecosystem knowledge base — measured data, not marketing: plugin development guide · plugin-selection data · maintenance criteria.

Install & uninstall

dsh plugin --profile demo add dsh-fast       # install
dsh plugin --profile demo remove dsh-fast    # uninstall

Verify the row mounts: dsh --profile demo --dump-config | grep dsh-fast.

⭐ 如果它帮到了你

这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。

*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.

What is dsh-fast?

Read-only performance diagnostics for DeepSeek Harness.

Observes the session event stream — never the model hot path — and reports where latency and context budget actually go.

*Workflow overview: request → policy / review → verdict. The examples below use the real command surface.*

Compatibility

  • DeepSeek Harness dsh-v0.2.1-alpha.1 (adapted 2026-09-18): the session surface is read through the optional sessionQuery service — the deprecated synchronous Session.eventAt(seq) accessor is gone, with an equivalent synchronous read as the fallback — and every registration now lives in one lifecycle effect that releases them in reverse order. Internal implementation change: the reported metrics are identical for the same log. Verified 2026-10-04 against the local gate chain (three typecheck rulers + 71 tests); the compat workflow re-runs the profile install smoke against the published pins.
  • Node ^22.19.0 || >=24.0.0, ESM only ("type": "module").
  • Peer dependencies: @deepseek-ai/cordis ^4.0.2, @deepseek-ai/schemastery ^3.18.4, and @deepseek-ai/dsh-session, @deepseek-ai/dsh-tools, @deepseek-ai/dsh-commands, @deepseek-ai/dsh-compaction, @deepseek-ai/dsh-session-query, @deepseek-ai/dsh-storage-domain at >=0.1.2-rc.1 =0.1.5-alpha.1 =0.1.6-0 =0.1.7-0 =0.2.0-0 =0.2.1-0 <0.3.0 (devDependencies pin 0.2.0-rc.2); the 0.1.2-rc.1 line stays supported at runtime through a structural fallback to the pre-0.1.5 header.system.

What you get

  • Session load timing — publication-to-first-request latency, classified open (fresh) vs restore (seeded/resumed), plus the restored seed-event count.
  • Spill-hit statistics — how many tool results were spilled to a session-scoped artifact (detected from the durable spill notice).
  • Compaction count and trigger — total compactions, split manual (slash command) vs automatic (pressure), and total shadowed tokens.
  • Context-injection volume — system-prompt (AGENTS.md + skills + persona), tool-schema, and surface tokens with their shares of the total; the surface bucket is conversation history only (the meter's surface includes the system node on 0.1.5-alpha.1, which dsh-fast subtracts).
  • LLM cache hit rate — input / cache-read / cache-write / output tokens aggregated from provider usage, plus the derived hit rate.
  • Optimization suggestions — threshold-driven notes (trim skills, tighten tool schemas, compact earlier, enable prompt caching, enable spill-policy, …).
  • Async sampling — metrics are folded O(1) per event and snapshotted on a timer, never on the append path.

Quick start

dsh plugin --profile web add github:PerryLink/dsh-fast

git channel

# From a scratch profile (pins the commit; runs the self-contained `prepare` build)
dsh plugin --profile demo add "github:YOUR_ORG/dsh-fast#<sha>"
# The profile's pnpm-workspace.yaml gains an allowBuilds entry for dsh-fast on first add.

npm channel

dsh plugin --profile demo add dsh-fast

Both channels install the bundle row (see cordis.patch.yml) into the profile's dsh.profile.bundles stack and take effect on restart.

/fast namespace collision

/fast is a host command. If another plugin registers a client commandUi contribution also named fast, the host command menu can drop the whole / source. That collision is in the host's client command namespace, not something this plugin can rename at runtime. Workaround: disable/rename the other plugin’s fast client command, or remove one of the plugins. /fast itself and fast_report still work when no duplicate client contribution exists.

Examples

These are the plugin's real entry points; install once, then call one.

Detailed example

Command

~~~sh /fast ~~~

Output

~~~text dsh-fast 0.1.0 — performance report session: abc

Session load

kind: open seed events: 0 time to first request: 150 ms

Spill

detected spilled results: 0 (heuristic)

Compaction

count: 0 (manual: 0, automatic: 0) shadowed tokens: 0

Context volume

total: 1000 tokens system (AGENTS.md/skills/persona): 400 (40%) tool schema: 200 (20%) surface: 400 (40%)

System prompt breakdown

persona: 100 tokens / 400 chars (25%) skills: 0 tokens / 0 chars (0%) AGENTS.md: 0 tokens / 0 chars (0%) other (harness identity + tool guidance): 300 tokens / 1200 chars (75%)

LLM cache

input: 800, cache read: 200, cache write: 50, output: 100 hit rate: 20%

Suggestions

  • none

~~~

*Observed from plugins/dsh-fast/src/analyze.ts:88-131; baseline fixture at test/analyze.spec.ts:12-35, 82-100*

Failure branch

Input

~~~text /fast --history nope ~~~

Output

~~~text Usage: /fast [--history [n]] ~~~

*Observed from plugins/dsh-fast/src/index.ts:241-245*

Brief examples

  • fast_report

Configuration

All tunables are Schemastery Config fields; invalid values fail the profile load loudly.

Key · Default · Description enabled · true · Master switch; false mounts nothing. privacy.includeCwd · false · Include the sanitized session working directory in reports. sampling.snapshotIntervalMs · 60000 · How often active sessions are sampled (ms). sampling.maxHistorySamples · 20 · Samples retained per session in the durable history. thresholds.systemPromptTokens · 20000 · Warn when the system prompt exceeds this many tokens. thresholds.toolSchemaTokens · 8000 · Warn when the tool schema exceeds this many tokens. thresholds.surfaceTokens · 60000 · Warn when the conversation surface exceeds this many tokens. thresholds.cacheHitRateFloor · 0.1 · Warn when the cache hit rate falls below this (0..1). thresholds.compactionCountWarn · 10 · Warn once this many compactions have triggered. thresholds.compactionShadowTokens · 40000 · Warn when the average shadowed token count per summary exceeds this. spill.detectSpilledResults · true · Detect spilled tool results from the durable notice marker.

Tools & surfaces

  • `/fast` — a human slash command that prints the current session's health report: load timing, spill, compaction, context-volume ranking, cache hit rate, and suggestions.
  • `fast_report` — a model tool returning the same report as structured JSON (so the model can reason over it), with a human-readable text render.

Permissions & data

dsh-fast consumes only public seams: session/* and agent/* events, the optional ctx.tokenMeter, ctx.storageDomain, ctx.commands, and ctx.tools. It is strictly read-only over the session log — it never mutates the model request, tool results, or the session surface. Metrics are persisted to the dsh_fast storage domain (one bounded history per session), not to the session log. Report identity and the optional working directory are sanitized before any display or durable write.

Security boundaries

  • Read-only, zero model-path overhead — folding is O(1) per event; sampling runs on a timer.
  • No network, no credential handling — the plugin makes no outbound requests and stores nothing sensitive.
  • Fail-loud configuration — every tunable is validated at mount; invalid bounds throw.
  • Sanitized display/durable data — control characters are stripped and strings are budgeted; cwd is off by default and path-truncated when enabled.
  • Reversible registrations — every contribution goes through ctx.effect() / ctx.on() / register(), so uninstall and hot reload are clean.

Known limitations

  • Storage domain, not session events — rc.2 Session.append offers no ignorable marker and no external event-registration surface, so a custom fast/* session event would make the persistence coordinator refuse the log on restore. Metrics are therefore persisted to the storage domain; the raw events remain the reconstructable source of truth.
  • Spill detection is heuristic — it reads the durable spill notice (Full … stored at:); no dedicated session event exists.
  • System prompt is one bucket — AGENTS.md, skill directory, and persona are all part of the assembled system prompt; since 0.1.5-alpha.1 it is surface node 0 (a system/message) and carries no per-section token accounting, so they are reported together.
  • Load timing starts at publication — the disk-read portion of a restore happens before session/created (owned by sessionPersistence) and is not observable from this plugin's allowed events; the reported duration is publication-to-first-request.
  • Degradations are announced once — a host without tokenMeter falls back to heuristic token pricing, a host without systemPrompt attributes the whole prompt to one bucket, and a failing inspector outlet is ignored; each of these now says so once per process instead of changing what the numbers mean in silence.

Development

pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm run typecheck:checkout
pnpm test
pnpm run build
pnpm run verify:self-contained && pnpm run verify:artifacts
node scripts/check-readme-sync.mjs
pnpm pack

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, performance, diagnostics, profiling, context-engineering, llm-cache

Contributors

Thanks to everyone who has contributed to dsh-fast:

  • PerryLink — author and maintainer: designed and built the read-only diagnostics (session-load timing, spill-hit counts, compaction metrics, context-injection volume, LLM cache hit rate), the /fast command and fast_report tool, the dsh_fast storage domain, and the five-language documentation.