dat-lequoc/dsh-shots0

dsh-shots

Shots tab for DeepSeek Harness: a video-player view (live + YouTube-style scrubber) over a browser daemon's screenshot feed in <workspace>/shots/

包名
dsh-shots
版本
0.1.0
最近更新
2026年8月22日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:dat-lequoc/dsh-shots

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_.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 /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 /shots/NNNNNN_.png (zero-padded to six digits). Lines are append-only; a torn trailing line is skipped until its closing newline lands.