Vai al contenuto principale
C

dsh-deepy-pet

chenweiqi12345/dsh-deepy-pet

A two-eyed royal-blue pixel whale that perches on the DSH composer, changes expression with the live agent state, watches you type, and makes a short dive across the composer every 30 seconds while idle.

Installazione

dsh plugin --profile web add github:chenweiqi12345/dsh-deepy-pet

README

Deepy, a royal-blue pixel whale

Deepy — pixel whale companion

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.

中文文档

What it does

Deepy reacts to the live session without owning any agent state:

StateTrigger
Idlea finished session with no pending work
Thinkingthe assistant is reasoning or running tools
Writingthe assistant is streaming answer text
Errorthe latest turn failed, or the prompt failed
Donea turn just finished successfully
Playfulyou poke Deepy, or a random idle mood
Waitingan approval or question is waiting for you
Expectingyou are typing in the composer; Deepy stops swimming and watches
Dazea random idle mood
Sleepingtwo minutes without activity, or a short random nap
Cruisingthe 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.

The 30-second cruise

Every 30 seconds, when no agent work or approval needs the status animation, Deepy leaves its perch:

  1. It turns side-on with a short squash-and-flip transition, not a hard cut.
  2. It glides smoothly to a random point along the way; the dive location changes every cruise.
  3. A large, deep-blue pixel water mound gathers at the surface, then bursts into a splash. Only after that does Deepy pitch into an angled head-first dive and sink below the composer edge. The composer top acts as the waterline: the body is clipped by it, not faded out.
  4. It returns underwater. The return leg takes exactly as long as the outbound leg (6 s each).
  5. It rises back through the same waterline at home, head and shoulders first, accompanied by a second water burst. No opacity fade is used in either direction.

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.

Names and little announcements

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.

Install

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.

From GitHub

dsh plugin --profile web add github:ChenWeiqi12345/dsh-deepy-pet

In the Desktop app: open Settings → Plugins → Install and paste the repository URL.

From a local checkout

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

From a tarball

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

Controls

  • Drag Deepy left or right to move it along the composer edge. Grabbing it during the visible outbound leg stops the swim at its current position.
  • Click / tap Deepy to make it playful.
  • ⚙ opens the settings panel: your name, Deepy's name, size, and position.
  • Arrow keys nudge position; + / - resize; R resets size and position while the whale is focused.

Names, size, and position are stored in the browser's local storage (deepy-pet.settings.v1) and restored on reload. Reset keeps the names.

How it works

  • Registers into conversation.input.dock at order 30, directly above the composer.
  • Reads useSession, useSessionStatus, and useChat from the slot's standard props, plus the owner-provided input snapshot.
  • Uses useChat only to distinguish a streaming reasoning block from streaming answer text.
  • Uses the owner-provided input draft plus a short idle window to detect typing; a non-empty draft cancels the cruise and shows the expectant expression.
  • The cruise is split into React-owned perch position and an imperative requestAnimationFrame layer. A second requestAnimationFrame loop draws the front/side turn, dive, underwater return, and resurface. Neither loop re-renders the conversation.
  • The whale is composed from the same pixel-mask profile as the reference. A short horizontal squash plus a CSS flip transition gives the turn, and a CSS pixel-splash layer animates the dive and resurface waterline separately from the moving canvas.
  • All UI chrome uses --dsw-* theme tokens; the artwork keeps its royal-blue palette.
  • The canvas is transparent and has no card or panel background, so it blends into the dark composer area.

Privacy

No network requests, no telemetry, no host-side services. The plugin only reads the session state the conversation slot already exposes.

License

MIT

Plugin correlati