yuhao-pet · Yuhao Desktop Pet

A fox kemono boy named Yuhao (宇昊) lives in the bottom-right corner of your DeepSeek Harness web desktop, keeping you company while you code and earn points.
> Artwork and character settings come from the FurryBar character wiki (artist: 香瓜).
Features
- 🖱️ Draggable and hideable; lives in the bottom-right corner of your desktop
- 🍔 Feed / 🎾 Play / 🛁 Bathe / 💊 Medicine / 📖 Study / 💼 Work / 💤 Sleep (drinks are part of food)
- 📊 Five stats (hunger / cleanliness / mood / health / energy) decay over time — it can get sick and falls asleep
- ⭐ Level + XP + a points shop (food / toys / medicine / study / furniture / special)
- 🎒 Purchased items go into your bag, then use them from the matching action
- 💰 Earn points automatically from the tokens you spend (≈ 500 tokens = 1 point)
- 💬 Proactive chatter + AI conversation (DeepSeek; set the API key in Settings)
- 🎵 Works with the cyberpunk theme plugin: comments when the track changes, and switches songs when you ask
- 📜 Conversation history (persisted locally, each reply tagged with its trigger)
- 🦊 Animated portrait: Spine frame-by-frame breathing — ears / head / tail / body sway naturally
- 😊 Expressions: 7 faces switch with the pet's state, and also react to emotional words you type (see "Expressions / Portraits")
- 👋 Interactions: feather / finger / palm / tomato — click different body parts (head / face / ears / hands / belly / legs / feet / tail…) for different reactions
- 👕 Outfits: toggle dressed / undressed, the portrait changes in real time
- 🧸 Q-version portrait: switch back to the chibi version in Settings
- 📐 Portrait size: large / medium / small
- 🤧 Idle gestures: sneezes and blinks-and-looks-around at random, shakes its head and blushes when touched somewhere sensitive
- 🙈 Hide: hide it from Settings — docks into the cyberpunk HUD if installed, or the bottom-right corner otherwise
Install
cd yuhao-pet
dsh plugin --profile web add .Restart and refresh:
dsh webUsage
- Left-click the pet: stats panel
- Right-click: menu (chat / shop / settings / actions)
- Hold and drag: move it around
- Interact: pick a tool from the "互动" menu (feather / finger / palm / tomato), then click a body part
- AI chat: set the DeepSeek API key in Settings (⚙️), then chat in "对话" or click "回复" under a bubble
Expressions / Portraits
Yuhao has 7 expressions, each an animated (Spine frame-by-frame) breathing portrait. They switch with the pet's state, and emotional words in chat temporarily trigger them (about 12 seconds, then back to the state-based face).
| Expression | Trigger | Portrait |
|---|---|---|
| normal 正常 | default state |  |
| happy 开心 | mood > 75; say "happy / love / cute / hug" |  |
| sad 伤心 | mood < 30; say "sad / cry / upset" |  |
| angry 生气 | hunger < 30; say "angry / hate / annoying" |  |
| scared 害怕 | health < 30; say "scared / scary / afraid" |  |
| disdainful 鄙夷 | cleanliness < 30; say "disgusting / dirty" |  |
| shy 害羞 | say "shy / blush" |  |
Uninstall
dsh plugin --profile web remove yuhao-pet> Pet state is kept in <dshHome>/data/yuhao-pet/state.json, so reinstalling continues where you left off; delete that directory to fully reset.
Directory structure
yuhao-pet/
├── package.json # dsh.bundle + dsh.client
├── cordis.patch.yml # self-inserting patch
├── index.mjs # Node half: state ledger + routes + AI proxy
├── client.js # browser half: rendering + interaction
└── assets/ # anim-*.png frame sheets / preview-*.png previews / avatar / metadataLicense
[MIT](./LICENSE)