DeepSeek Harness Plugin

imkingjh999/dsh-shorts-wall

Stars ★ 0 Category UI Enhancements Added 2026-08-17 npm dsh-shorts-wall

Adds a docked-first vertical shorts wall to the DSH Web UI with YouTube Shorts and Bilibili sources, keyword rotation, four-corner resizing, and Alt+S/Alt+M shortcuts.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-shorts-wall

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:imkingjh999/dsh-shorts-wall

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).

README

Repo: https://github.com/imkingjh999/dsh-shorts-wall · issues welcome

中文 | English

A vertical shorts wall plugin for DeepSeek Harness (DSH) that runs docked to the right edge by default: switch on the Float toggle for a draggable/resizable floating window, or close it and recall from the bottom-right launcher. Dual source: YouTube Shorts + Bilibili vertical — wheel/keys/buttons to advance, auto-next on end, auto-append at the tail.

Personal viewing only. Anonymous public APIs and official playback channels throughout: no login, no cracking, no signature forging. Respect each platform's terms of service.

Features

Dual-source carousel

Header YT / B站 chips switch sources (remembered), with a "Switching…" toast.

YouTube Shorts Bilibili vertical
Playback Official iframe embed Native mp4 <video> (host-proxied, Range seek works)
Content Anonymous search (shorts filter) Anonymous search + portrait preflight (concurrent view calls confirm 9:16; landscape dropped)
Auto-advance End events + watchdog fallback Native events (most reliable)
Tail append Same-keyword re-search, deduped Paged append

Keywords

  • The active keyword shows as a chip in the header (right of the B站 chip); click it to open the keyword picker and switch with one click
  • "More videos" fetches a fresh batch under the SAME keyword (not a keyword change)
  • ⚙ keyword panel:
    • Preset packs (click to replace the list, + to append with dedup): KPOP fancam / Fashion / Costume / Pets / POV / Beach & swimwear / Stage
    • Custom: add entries one by one with region + keyword fields
    • Inline edit / reorder / delete / reset; per-source lists persisted independently (localStorage)

Playback experience

  • Window modes: the title-bar Float toggle turns floating mode on (drag / corner-hover resize cursors); off is the default docked rail; both modes share one remembered size, and the “Minimize” button lives at the window's bottom-right
  • Boss key: the title bar shows “Boss key Alt+S”; press Alt+S in floating or docked mode to minimize instantly, and press it again to restore the previous floating/docked layout and size without reloading playback
  • 9:16 locked: the player is the largest vertical rectangle inscribed in the card — width and height both fit the viewport
  • Navigation: wheel (debounced) / ↑↓ / j·k / ‹ › buttons; a wheel-catcher veil over the iframe (wheel never swallowed), click to hand control to the player for 6s
  • Auto-play chain: end → next; tail → append; dead items auto-skip (3-in-a-row breaker); platform-level YT outage shows a "YouTube unavailable" banner with a one-click switch to Bilibili
  • Sound: text buttons "Sound on / Muted" (no emoji), preference persisted; Alt+M toggles mute quickly
  • Intro chrome: cover lifts after 1s, title hides after 2s (hover to see) — never blocks the picture
  • i18n: UI follows the DSH host language (中文 / English), switching live

Project status

Current review_audit score: 91 / 100 (2026-08-16, v1.0.3 review baseline).

Review standard

DSH review_audit provides the objective baseline, followed by sampled review of the host entry, proxy boundary, shell-state module, and lifecycle tests. The score is engineering health, not a security certification.

Overall score

  • Arithmetic mean of eight dimensions, rounded to an integer
  • Passing threshold: 60
  • Release target for this repository: ≥ 90
  • Any dimension below 40 is treated as a priority failure

Dimensions and deductions

Dimension Current Scoring rule
Structure 88 Starts at 88; minus 6 per source file over 500 lines, minus 15 when there is no directory structure
Maintainability 90 Starts at 90; minus 2 per file containing legacy work markers, minus 4 per oversized file, minus 1 per 40 lines over 120 characters (maximum deduction 30)
Consistency 90 Starts at 90; minus 8 per file mixing tab/space indentation, plus minus 15 for project-wide mixed indentation
Robustness 85 Starts at 85; minus 5 per empty catch, minus 2 per leftover debug output
Tests 100 Passing suite scores 60 + min(40, test-file count × 10); a failing suite scores 20
Docs 100 README 40, LICENSE 25, .gitignore 20, and README completeness 15
Performance 84 Starts at 85; minus 3 per oversized file, minus 4 per 10 dependencies (maximum deduction 20), plus minus 15 above 20,000 lines
Security 87 Starts at 90; dependency-count deduction capped at 25, additional deductions for debug residue and empty catch; dependency-audit vulnerabilities add further penalties when enabled

Minimum manual review

  • Run pnpm typecheck, pnpm test, and pnpm run build
  • Run node tests/smoke-client.mjs and node tests/e2e-client.mjs
  • Sample the host entry, media proxy, shell state, feed lifecycle, and recently changed files
  • Verify there are no empty catch blocks, debug residues, or unexplained error swallowing
  • Proxy and permission boundaries must have explicit allowlists and failure paths

Running screenshots

Floating Docked Minimized
Floating mode Docked mode Minimized

Install

Requires DSH ≥ 0.1.0 with a web profile. No other plugins required.

dsh plugin --profile web add github:imkingjh999/dsh-shorts-wall
# restart dsh web, then hard-refresh (⌘⇧R / Ctrl+Shift+R)

A「Shorts」floating-window entry appears at the bottom-right of the page.

cd ~/.dsh/profiles/web
pnpm add link:~/projects/dsh-plugins/dsh-shorts-wall
# append "dsh-shorts-wall" to dsh.profile.bundles in package.json
pnpm install && pnpm run build   # in the plugin directory

Configuration (optional)

In the profile's cordis.patch.yml:

- id: shorts-wall
  config:
    extraAllowSuffixes: [cdn.example.com] # extra proxy allowlist suffixes
    resolveProxyUrl: http://127.0.0.1:7890 # optional personal proxy for feed scraping

Architecture

  • Host (src/index.ts): POST /shorts/api/feed (youtube shorts search · bilibili vertical search) + POST /shorts/api/play (bilibili mp4) + GET /shorts/proxy (browser-trust fence + CDN allowlist + Range passthrough). Legacy /bilibili/* prefixes kept for compat.
  • Resolvers (src/youtube.ts, src/bilibili-shorts.ts): YT anonymous search shortsLockupViewModel (+ legacy reelItemRenderer); Bilibili search + concurrent portrait preflight + html5 mp4 playurl.
  • Client (src/client/): floating-window rendering over three behavior hooks — embed-events (YT player events/watchdog), feed-state (dual-source batches/append/keywords), card-timers (cover/title timing) — plus i18n (zh/en). better-sidebar is no longer required.

Known limits

  • The YouTube source needs the browser to reach YouTube; during platform risk-control (bot walls) that source is unavailable — the plugin shows a clear banner and a one-click switch to Bilibili, which is unaffected.
  • Anonymous quality tier: YT per the official embed; Bilibili ~480p/720p (higher needs login — out of scope).
  • YT anonymous search has no pagination: ~15–30 items per batch; appends re-search the same keyword with dedup.

Development

pnpm install
pnpm test        # vitest: resolvers / lifecycle (jsdom) / i18n dictionaries
pnpm typecheck
pnpm run build   # tsdown: host ESM + dual-channel client CJS factories
node tests/smoke-client.mjs && node tests/e2e-client.mjs   # headless smoke + jsdom render e2e

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →