Installation
npx -y @deepseek-ai/dsh plugin --profile web add github:ghbhiee/dsh-plugin-snakeThis installation command is an unverified starting point generated from the GitHub repository address.
README
Maintainer-authored documentation snapshot.
This README snapshot could not be refreshed during the latest directory sync.
dsh-plugin-snake
A Snake (贪吃蛇) game panel for the DeepSeek Harness web UI, as an out-of-tree plugin.
A floating 🐍 button in the frame's overlay layer opens a self-contained Snake
game: arrow keys / WASD to steer, Space to pause, swipe gestures on touch
screens. The high score is persisted in localStorage.
Install
The plugin is hand-written JavaScript with no build step, so it installs straight from GitHub — nothing to download or compile:
dsh plugin --profile web add github:ghbhiee/dsh-plugin-snake
Or from a local clone (a link:, so edits are picked up on the next restart):
git clone https://github.com/ghbhiee/dsh-plugin-snake.git
dsh plugin --profile web add ./dsh-plugin-snake
Restart the web profile afterwards — plugins are assembled at boot, never hot-loaded:
systemctl restart dsh-web # or: launchctl kickstart -k gui/$(id -u)/com.tokencv.dsh-web
Sibling plugins install the same way: dsh-plugin-workbench, dsh-plugin-mobile-shell, dsh-plugin-cli-session.
How it works
Two halves, discovered through package.json:
| Half | Entry | Runs in | Role |
|---|---|---|---|
| host | exports["."] → lib/index.js | Node | An empty cordis plugin. It exists so the bundle row resolves and dsh can discover the browser half. |
| browser | exports["./client"] → lib/client.js | the page | Registers into the shell.overlay seat and renders the game. |
cordis.patch.ymlcontributes the one bundle row (id: snake,name: dsh-plugin-snake), which is what makes the package get imported.- The browser half wraps itself in
window.__ModuleLoader__.load({ id, factory })—idmust equal the package name — and is served at/plugins/dsh-plugin-snake/client.js?rev=<content-hash>, so a code change invalidates the browser cache by itself. - It registers a component rather than touching the page: the host app renders
every entry registered into
shell.overlayas its own React children. The one piece of direct DOM work is injecting a de-duplicated<style>tag. reactcomes from the loader's shared externals (require("react")), never bundled — two React copies would break hooks.
Editing
There is no build: lib/*.js is the source, hand-written CJS for the
browser half and ESM for the host half. Edit it, then restart the web profile.
npm run check # node --check on both entry points
Because the browser half is plain JavaScript, it uses React.createElement(...)
directly instead of JSX.
Project files and signals
Shown items are public repository signals detected in the directory snapshot.
Repository information
- Language
- JavaScript
- License
- MIT
- Last updated
- Aug 18, 2026, 6:33 AM
Install deliberately
Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.