bites-the-dsh
Read-only, scriptable session playback for the DeepSeek Harness WebUI
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 19, 2026
- Updated
- Aug 20, 2026
Introduction
Bites the DSH
Read-only, scriptable session playback for the DeepSeek Harness WebUI.
https://github.com/user-attachments/assets/3c9dfdcf-a454-4750-9edf-76771ed5a9a6
The demo shows Bites the DSH together with dsh-turn-fold.
The plugin turns the native conversation into a replay view without opening a separate panel. A single native session-header control enters replay. While replay is active, the conversation is fully read-only: the native composer and session-changing interactions are blocked, while UI and scripts may move time without mutating the source session.
Current implementation
- Native session-header entry and compact playback controls.
- Pause, forward play, reverse play, event stepping, speed selection, adjustable idle-gap compression, and direct event/turn/time seeking.
- Optional simulated typing previews the next direct user message in the native read-only composer without touching its live draft.
- A per-session observable controller exposed as
ctx.sessionPlaybackfor time-only scripting. - Historical projection through DSH's native
ChatView; the source session and live head continue independently. - Historical timelines expose
playbackClock: { kind: 'historical', time: cursorTime }so projection consumers never treat an open historical turn as live wall-clock work. - Native composer, model, stop, branch, and assistant write actions are disabled during replay; viewing controls remain interactive.
- English and Chinese labels using DSH theme tokens, without a separate panel.
The current compatibility target is DSH 0.1.0-rc.8. Harmony selector drift fails the automated test instead of silently changing the wrong component.
Install
dsh plugin --profile web add @ch4acko3/bites-the-dsh
dsh harmony status --profile web
All four Bites the DSH patches should report bound. Reload the WebUI, open a
session, then use Replay session in the native session header.
Script control
Other DSH plugins can use the same per-session clock through the provided Cordis service:
const playback = ctx.sessionPlayback
playback.enter(sessionId)
playback.seekTime(sessionId, Date.parse('2026-08-20T12:00:00Z'))
playback.play(sessionId, 1)
playback.pause(sessionId)
playback.exit(sessionId)
The service also supports event and turn seeking, reverse playback, rate and idle-gap settings, subscriptions, and position reads. It deliberately exposes no operation that mutates the source session.
Development
Requires Node.js ^22.22.3 || >=24.11.1 and pnpm 11.
pnpm install
pnpm check
CI/CD
Every push to main and every pull request runs pnpm check and verifies the
npm package contents. Publishing a
GitHub Release whose tag matches v<package.json version> publishes the public
package to npm through Trusted Publishing (OIDC), with automatic provenance and
no npm token stored in GitHub.
License
MIT