dsh-pet
PC2005-cloud/dsh-petDSH Web UI 桌面宠物,Windows / macOS / Linux 三端可用:浏览器浮层或透明置顶桌面窗口,106 个透明动画、带挤压与粒子的甩抛反弹物理、随会话事件实时联动的工作状态气泡、碎碎念与带持久记忆的对话、余额展示、表情包配图、多开同屏,并支持直接放入的自定义动画与宠物种类(pet pack)。
可拖拽的篮球桌宠:在窗口里左右弹跳,拖起来松手就能投篮;配一个可移动的篮筐和一个装球的箱子,进球加一分,分数每天重置。
A desktop pet for the DSH Web UI: a real basketball that lives on top of your workspace, a hoop and a ball crate you can drag anywhere, and a score that resets every day.
中文说明见 README.zh.md
· 🏀 Bouncy ball · Gravity 2400 px/s², floor restitution 0.78, air drag, spin. Hits compress it, fast falls stretch it. 🥅 Draggable hoop · Glass backboard, steel bracket, gradient rim and a diamond net that swings on a swish. Drag it by the rim, the board or the bracket. 📦 Draggable crate · Ball rests inside until you take it out. Drag the crate with the ball in it — the ball comes along. 🖱️ Flick to throw · 110 ms of pointer samples become the release velocity (capped at 2600 px/s). Throw flat, lob it, or bank it off the board. 🎯 Scoring · Dropping through the rim gives +1, a net swish, a +1 pop and a bump on the score plate. Rim and board give real bounces. 📅 Daily score · The count is stored per calendar day and flips back to 0 after midnight, even while the page stays open. 💾 Stays where you put it · Hoop and crate positions are remembered across reloads. ♿ Reduced motion · With prefers-reduced-motion the pet stops nudging itself but still reacts to your input. 🔒 No network, no storage of anything else · Pure rendering. The only persisted data is your score and the two positions.
From the plugin market, or from a shell:
dsh plugin add dsh-basketball-pet
# if your dsh asks for a target profile explicitly:
dsh plugin --profile desktop add dsh-basketball-petFrom a local checkout / release tarball:
dsh plugin add ./dsh-basketball-pet-1.3.0.tgzOr from source in this repo:
dsh plugin add github:<owner>/dsh-basketball-petThen reload the page (Ctrl+R). The pet mounts into the shell.overlay slot of the Web UI.
Action · Result Click the crate · The ball pops out Drag the ball and release · It flies off with your throw Click the ball (no drag) · It hops in place Drag the hoop's rim / board / bracket · The hoop moves, the score plate follows Drag the crate · The crate moves; a ball inside comes with it Drop the ball onto the crate · The ball is put away Throw the ball through the rim · +1
Single-file client plugin (client.js), no build step, no runtime dependencies. It registers one component on the shell.overlay slot and runs its own requestAnimationFrame loop that writes transform directly — React never re-renders per frame.
GRAVITY 2400, FLOOR_REST 0.78, WALL_REST 0.84, rim 1.72, board 0.62, air drag 0.1dsh-basketball-pet:score:v1, dsh-basketball-pet:layout:v1 (localStorage)shell.overlay slot and the @deepseek-ai/dsh-client-ui-slots serviceMIT