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+Sin 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+Mtoggles 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, andpnpm run build - Run
node tests/smoke-client.mjsandnode tests/e2e-client.mjs - Sample the host entry, media proxy, shell state, feed lifecycle, and recently changed files
- Verify there are no empty
catchblocks, debug residues, or unexplained error swallowing - Proxy and permission boundaries must have explicit allowlists and failure paths
Running screenshots
| Floating | Docked | 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 searchshortsLockupViewModel(+ legacyreelItemRenderer); 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) — plusi18n(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
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3649
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 1731
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1646
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 288
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 194
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 161
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.


