Back to home@dat-lequoc

dsh-shots

Shots tab for DeepSeek Harness: live screenshot player over a browser daemon's shots/ feed (dsh plugin)

Stars
0
Language
JavaScript
Created
Aug 22, 2026
Updated
Aug 22, 2026
GitHub repo

Introduction

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

PieceWhat
lib/index.jsHost 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.jsBrowser half: the Shots entry in the native conversation.view ring (order 20 — between Trajectory and the supervisor Feed)
cordis.patch.ymlOne 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.