Introduction¶
When engaging in long conversations, orchestration, or debugging within DeepSeek Harness (DSH), you occasionally need a “rest corner” that doesn’t leave your workspace—without needing to open a desktop emulator separately or switching context to another application. Game Bench is a type of client plugin released by maintainer zeelinkCN: it adds a controller entry in the left sidebar, clicking which runs an NES emulator based on jsnes 2.1.0 directly in the browser, along with capabilities for local game libraries, an optional game market, save states, and CRT filters. DSH’s ecosystem philosophy is “everything is a plugin”; the community plugin directory is maintained by an independent site and has no official affiliation with DeepSeek / Shanghai Fang. This article introduces its positioning, capabilities, and installation methods based on the repository README and manifest; please read the source code and license before installing.
What is it¶
Game Bench is a DSH Web Client Plugin (dsh.client.platform is web in package.json, injecting sidebar-related UI packages). The Host side provides routes like /game-bench/api/* via index.js; the frontend client.js handles the game library, market, player, and settings panel.
- Maintainer: zeelinkCN
- Repository: https://github.com/zeelinkCN/dsh-game-bench
- Directory Page: https://www.skillhub.cn/plugins/zeelinkCN/dsh-game-bench
- License: MIT (Third-party ROMs, jsnes, etc., see
THIRD-PARTY.md,GAME-RIGHTS.md) - Version (manifest):
@local/game-bench1.0.0
The plugin solves: running NES on macOS/Windows/Linux with an existing DSH Web UI, using the same code to play NES immediately in the browser, and installing extension ROMs from the market to the local data directory, allowing play of cached content even offline.
Core Features¶
Game Library and Built-in ROMs¶
The panel opens into the game library by default. 8 built-in games are distributed with the package: 7 classic NES titles (listed in README: Super Mario Bros, Contra, Battle City, Snow Bros, Tank 1990, Double Dragon II, and the author’s original demo “Star Pilot”). ROMs and covers are in the games/ directory; built-in content can be played offline.
The README states: The 7 classic ROMs are third-party copyrighted works and are not covered by the MIT license; the repository declares that the owner has obtained redistribution rights, and third parties should verify rights before use, see GAME-RIGHTS.md.
Game Market¶
The market connects to the private resource repository zeelinkCN/game-bench-library (README states 1100+ titles with covers and SHA-256). It reads catalog.json / store.json; click to download and install. ROMs and covers are written to the local cache after SHA-256 verification, allowing offline play later.
Accessing the market requires GitHub read permissions. The credential lookup order for the Host side is:
- Personal Access Token pasted in plugin settings (written to
settings.json, permissions 0600) - Environment variables
GITHUB_TOKEN/GH_TOKEN - Local
gh auth token(README recommends runninggh auth loginfirst) - Accessible anonymously if the repository is public
If no credentials are present, the market page shows authorization instructions; built-in games are not affected.
Simulator and Controls¶
The emulator is wrapped in engine.js, distributing the unmodified vendor/jsnes.min.js (jsnes 2.1.0, Apache-2.0). The README notes: Target 60fps in browser (measured approx 0.9ms/frame), supports Web Audio stereo, keyboard/controller, speedup, CRT filter, screenshots, and fullscreen.
Keybinds and Controller (extracted from README control table):
| Function | Keyboard | Controller |
|---|---|---|
| Direction | ↑ ↓ ← → | D-Pad / Left Stick |
| B (Jump/Fire) | Z | A |
| A (Run/Bounce) | X | B |
| Start | Enter | Menu / Start |
| Select | Shift | View / Back |
| Pause / Back | Space / Esc | — |
| 2P | WASD + J/K | Second Controller |
Save States: The toolbar “Save / Load” provides 3 manual slots + 1 auto slot (written every 60 seconds, on pause, exit, or page switch). Saves are in browser IndexedDB (database name game-bench), not in the Host data directory; deleting the game does not delete saves.
Installation and Activation¶
The installation method provided in the README is installing a bundle from the local plugin directory (for development/self-use scenarios):
# Install from this repository directory (development/self-use)
plugin_manager install_bundle target=/path/to/dsh-game-bench
Replace target= with the absolute path of your local dsh-game-bench directory. After installation, a controller icon should appear in the left sidebar; no need to restart DSH; if it doesn’t appear, refresh the Web page.
The plugin runs with the permissions of the current DSH process and may access local files, the GitHub API, and the network to download ROMs. Please review index.js, server/, and related documentation (docs/API.md, docs/ENGINE.md, docs/CONTRACT.md) before installing.
Data Directory and Environment Variables¶
Host-side cache and market metadata fall under the following paths (can be overridden by DSH_GAME_BENCH_DATA=/custom/path):
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/DSH Game Bench |
| Windows | %APPDATA%\DSH Game Bench |
| Linux | $XDG_DATA_HOME/dsh-game-bench or ~/.local/share/dsh-game-bench |
The directory usually contains catalog.json, store.json, roms/, covers/, library.json, and settings.json.
Typical Usage¶
- After installing the bundle, click the controller icon in the DSH left sidebar to enter the “Game Library”.
- Select a built-in or installed game and control it in the player using keyboard or controller; adjust CRT, speedup, etc., in settings as needed (refer to the panel).
- If you need to expand from the market: configure the GitHub Token in plugin settings, or configure
GITHUB_TOKEN/ usegh auth login, then install from “Game Market” by collection or search; after installation, return to the game library to start. - Use the toolbar to save/load during gameplay; for long sessions, rely on the auto-save slot.
The repository also provides self-test commands for developers to verify the Host interface and emulator locally (requires Node, README examples use NODE=node):
node dsh-game-bench/server/selftest.mjs
node dsh-game-bench/engine.selftest.mjs
node dsh-game-bench/selftest/run.mjs
node dsh-game-bench/selftest/real-api.mjs
Use Cases and Notes¶
Suitable for: Users already using the DSH Web UI who want to relax with short retro games in the same interface; users needing a built-in package that can be played offline and optionally expanded from game-bench-library.
Notes:
- The plugin is a client type, relying on browser Web Audio, IndexedDB, and controller APIs.
- ROM copyright and redistribution responsibility for market ROMs are for the user to verify; rights for built-in classic games are detailed in
GAME-RIGHTS.md. - GitHub Tokens are written to
settings.jsonin a restricted manner; do not paste high-privilege tokens in untrusted environments. - Stars and community popularity do not equal a security audit; make installation decisions based on source code and license.
Conclusion¶
Game Bench takes jsnes 2.1.0, local game libraries, and the optional GitHub-driven game market and turns them into a panel in the DSH sidebar: with 8 built-in games playable offline, extension ROMs cached after verification, and saves stored in browser IndexedDB. If you want to add an NES corner to your Harness workflow, you can learn more details from the directory page and repository.
- Directory Page: https://www.skillhub.cn/plugins/zeelinkCN/dsh-game-bench
- GitHub: https://github.com/zeelinkCN/dsh-game-bench