dsh-pet
PC2005-cloud/dsh-petDSH Web UI 桌面宠物,Windows / macOS / Linux 三端可用:浏览器浮层或透明置顶桌面窗口,106 个透明动画、带挤压与粒子的甩抛反弹物理、随会话事件实时联动的工作状态气泡、碎碎念与带持久记忆的对话、余额展示、表情包配图、多开同屏,并支持直接放入的自定义动画与宠物种类(pet pack)。
趴在 DSH 输入框上沿的双眼宝蓝色像素小鲸鱼,表情跟随智能体实时状态,打字时会停下来注视,空闲时每 30 秒横穿输入框巡游一次。
A reference-style royal-blue pixel whale that perches on the top edge of the composer in DeepSeek Harness, mirrors the live agent state with different expressions, and goes for a short diving cruise every 30 seconds.
Deepy reacts to the live session without owning any agent state:
| State | Trigger |
|---|---|
| Idle | a finished session with no pending work |
| Thinking | the assistant is reasoning or running tools |
| Writing | the assistant is streaming answer text |
| Error | the latest turn failed, or the prompt failed |
| Done | a turn just finished successfully |
| Playful | you poke Deepy, or a random idle mood |
| Waiting | an approval or question is waiting for you |
| Expecting | you are typing in the composer; Deepy stops swimming and watches |
| Daze | a random idle mood |
| Sleeping | two minutes without activity, or a short random nap |
| Cruising | the 30-second diving excursion |
The whale keeps the reference silhouette: a compact head, a long body, a raised forked tail, and two small eyes and blush so its expression still changes with the state. The head stays compact instead of a large front-facing face.
Typing wins. As soon as the draft changes to non-empty text, Deepy cancels a swim and switches to the expectant face. It keeps watching for a few seconds after the last edit, then returns to the current agent state.
Every 30 seconds, when no agent work or approval needs the status animation, Deepy leaves its perch:
While the agent is thinking, writing, waiting, showing an error, or while you are typing, the cruise is postponed so the status animation stays readable.
Between cruises, idle Deepy randomly dazes, plays, or takes a short nap, mixed with the live agent
states. Each ordinary action runs for about two seconds, then rests for about two seconds before
the next cycle. The canvas uses image-rendering: pixelated, so the whale stays crisp at every
size.
Open ⚙ → Your name / Deepy's name to rename both characters. The names are saved locally. After a task finishes, Deepy picks one of several completion lines and shows it in the speech bubble, for example:
{pet} has finished helping {user}!
Failures, waiting states, typing, poking, dozing, sleeping, swimming, and resurfacing each have their own small set of randomized lines. The lines use the names currently saved in settings.
Deepy is a Web UI client plugin. It ships as plain ESM and canvas code — there is no build step and nothing to compile.
Requirements: DeepSeek Harness >= 0.2.0 < 0.3.0 with the Web UI (dsh web, or the
Desktop app). CLI examples below use the web profile; the Desktop app manages its own
desktop profile from Settings → Plugins.
dsh plugin --profile web add github:ChenWeiqi12345/dsh-deepy-pet
In the Desktop app: open Settings → Plugins → Install and paste the repository URL.
Useful while developing:
git clone https://github.com/ChenWeiqi12345/dsh-deepy-pet.git
dsh plugin --profile web add link:/absolute/path/to/dsh-deepy-pet
pnpm pack
dsh plugin --profile web add ./dsh-deepy-pet-1.0.0.tgz
After installing, reload the Web UI page. To remove it:
dsh plugin --profile web remove dsh-deepy-pet
Names, size, and position are stored in the browser's local storage
(deepy-pet.settings.v1) and restored on reload. Reset keeps the names.
conversation.input.dock at order 30, directly above the composer.useSession, useSessionStatus, and useChat from the slot's standard props, plus the owner-provided input snapshot.useChat only to distinguish a streaming reasoning block from streaming answer text.requestAnimationFrame layer. A second requestAnimationFrame loop draws the front/side turn,
dive, underwater return, and resurface. Neither loop re-renders the conversation.--dsw-* theme tokens; the artwork keeps its royal-blue palette.No network requests, no telemetry, no host-side services. The plugin only reads the session state the conversation slot already exposes.