READMESource: master@195da58c
dsh-shots — a Shots Tab for DeepSeek Harness
A Shots view tab for the dsh Web GUI: a video-player over a browser
daemon's screenshot feed. Any session whose workspace contains shots/
(manifest.jsonl + NNNNNN_<action>.png, appended by a browsing daemon) gets
a player that shows the newest frame live and lets you scrub history with a
YouTube-style seek bar, ‹ › stepping, and arrow keys / Home / End.
- Live by default — every new screenshot replaces the frame; drag the slider to pause, drag to the end or press GO LIVE to resume.
- Smooth — frames swap only after the next PNG has decoded (no blanking),
neighbours are pre-warmed, and PNGs are served
immutable(write-once files), so revisiting frames costs zero network. - Standalone — no supervisor required; the tab lights up for any workspace with a shots directory.
Install
dsh plugin --profile web add file:/path/to/dsh-shots
# restart dsh once (bundle layers compose at boot)
dsh web
What it ships
| Piece | What |
|---|---|
lib/index.js |
Host half: GET /shots/manifest?ws=…[&since=n] (incremental JSON; torn trailing manifest lines skipped) and GET /shots/png?ws=…&file=… (traversal-guarded, immutable caching) |
lib/client.js |
Browser half: the Shots entry in the native conversation.view ring (order 20 — between Trajectory and the supervisor Feed) |
cordis.patch.yml |
One insert row mounting the host half |
Feed contract
One JSONL line per shot in <workspace>/shots/manifest.jsonl:
{"n":42,"ts":"2026-08-22T08:44:17Z","action":"click_1062_812","url":"https://x.com/","title":"X"}
The PNG for line n is <workspace>/shots/NNNNNN_<action>.png (zero-padded
to six digits). Lines are append-only; a torn trailing line is skipped until
its closing newline lands.
No comments yet. Be the first to write one.