Skip to main content

whale-girl

252Stars15Forks3Issues0Watchers

A whale girl desktop pet floats in the bottom right corner of the DSH webpage. It accompanies tasks and conversations, accumulating experience and memories. Users can feed, play with, and drag the pet.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
JavaScript
License
MIT
Branch
main
deepseek-harnessdshdsh-plugindsh-repository-pluginpet

Install

cmdweb profile
$ dsh plugin --profile web add whale-girl

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin vlln/whale-girl for me: review the repository at https://github.com/vlln/whale-girl first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

At a Glance

A whale-girl desk pet hovers in the bottom-right corner of the DSH Web GUI, accompanying you through completing tasks, meetings, accumulating seniority, and creating shared memories. It's a lightweight companionship plugin in the "QQ Pet" style, driven by accumulation rather than cultivation pressure.

Core Capabilities

  • Floating Window Rendering: Displays a draggable character in the bottom-right corner of the DSH web page, supporting click interaction menus (feed/play/switch character)
  • State Machine Driven: Automatically switches between 15 state animations (idle, nap, welcome, celebrate, scared, disappointed, thinking, waiting, walking, etc.) based on events like tasks/sessions/idle
  • Seniority Accumulation: Complete tasks +10 XP, new session +5 XP, active companionship time accumulates; zero negative feedback (failures only count, no point deduction)
  • Titles & Memories: Unlock titles automatically upon reaching milestones; cumulative shared events between you and the pet are written into a memoir
  • Experience Layer Hot-Reload: Pet size, transparency, wandering interval, idle time before napping, interaction reply text, etc. take effect without restart after modifying settings.yaml
  • Multi-Character Switching: Built-in multiple character assets (each character must provide all 15 states), menu supports cyclic switching or persistent selection via localStorage

Technical Implementation

  • Language: JavaScript (Node half) + ES Modules; client bundle packaged with esbuild
  • Key Dependencies: schemastery (config schema), esbuild (build client bundle); no other runtime third-party dependencies
  • Architecture Pattern: Official bundle plugin format — repository root package.json declares dsh.bundle.patch + dsh.client.platform=web; Node half is a complete Cordis plugin (depends on jobs/agents/sessions/settings/webServer), client mounted via __ModuleLoader__ kernel
  • Entry Files: lib/index.mjs (Node half) + lib/client/index.mjs (client source; product lib/client.js generated by scripts/build-client.mjs)

Use Cases

For people who use DSH for long periods running tasks or sessions, wanting a moving "companion" at their workstation to relieve monotony. The pet provides real feedback to task/session events (celebrates upon completion, accompanies during thinking, naps when idle), better demonstrating a "working together" atmosphere compared to purely decorative add-ons. Also suitable for users wanting to experience the QQ pet nostalgia, and as a reference for official bundle plugin development patterns.

Prerequisites & Compatibility

DependencyMin VersionDescription
DSHNot declaredOfficial bundle plugin, does not declare engines in package.json; requires DSH supporting bundle format (profile web management)
NodeNot declaredSource uses ES Modules and top-level await; runtime provided by host
PlatformCross-platformNode half cross-platform; asset path sanitization handles Windows backslash traversal
Native modulesNonePure JS dependency only on schemastery, no native binding introduced

Installation

dsh plugin --profile web add github:vlln/whale-girl

Configuration Options

ConfigTypeDescriptionDefault
enabledBooleanMaster switch for web pet rendering; recommend setting to false when desktop companion is running to avoid dual petstrue
sizeNumber (64–160)Pet display size (pixels)110
opacityNumber (0.2–1)Normal transparency (interaction has separate 0.25 temporary low transparency, not in this config)1
walk.enabledBooleanWhether to allow pet to periodically auto-wandertrue
walk.minWaitMs / maxWaitMsNumber (0–300000)Random wait bounds between two wanders (ms)18000 / 40000
walk.minMs / maxMsNumber (0–60000)Single wander duration bounds (ms)3000 / 6000
walk.speedPxPerSecNumber (10–300)Wander speed (pixels/sec)45
sleepAfterMsNumber (5000–600000)Idle duration before entering nap state (ms)60000
pollMsNumber (1000–30000)State polling interval (ms)3000
bubbleMsNumber (500–10000)Interaction reply bubble display duration (ms)2500
welcomeMs / celebrateMsNumber (0–30000)Welcome/celebrate state window duration (ms)6000 / 6000
errorMs / disappointedMsNumber (0–15000)Scared/disappointed state window duration (ms)4000 / 6000
replies.feed / replies.playString arrayReply text pools for feed/play interactions (custom additions allowed)Built-in 3 sentences each

The semantic layer (XP thresholds/level curves/title sets/memory limits) is not in the schema and cannot be overridden in configuration.

FAQ

Q: Why don't I see the pet after installation?

A: Bundle plugins are synthesized when DSH starts, so you need to restart DSH Web after installation. On first install, you'll also enter the onboarding guide page where the pet is hidden by default; it appears after completing the guide.

Q: Can it run simultaneously with the desktop companion?

A: Yes. When running the desktop companion under desktop/, the web pet will automatically hide via presence heartbeat (restores after companion exits or crashes with 45s TTL expiration). If you don't want dual-display, set whale-girl.enabled to false in settings.yaml to disable the web pet.

Q: Can I adjust seniority/titles/level curves?

A: No. These are code-level sealed semantic layer constants (XP formula 50·L·(L−1)/2, title sets, memory limits, etc.), schema intentionally doesn't expose them, guarded by the gate so config surface cannot reference them — only the visual/timing parameters in the experience layer table above are adjustable.

Q: Where is data stored? Will it be lost on uninstall?

A: State file is written to <DSH_HOME>/data/whale-girl/state.json, not in the plugin directory, so uninstalling the plugin won't delete seniority or memories; they continue accumulating after reinstallation.

Q: Updates didn't take effect, what to do?

A: Most changes (config surface, client behavior) require refreshing the page or restarting DSH Web to take effect; after modifying Node half source code, you must restart web because ESM secondary import to the same URL returns the old module.

Q: How to add custom characters?

A: Provide 15-state sprite sheets and manifest entries according to the asset full contract in docs/adding-a-character.md and docs/sprites-spec.md; character id limited to [a-z0-9-] (must be URL-path safe), locally run node scripts/gates/verify-assets.mjs for acceptance verification before plugin release.

Difficulty Level

Beginner — install with one command to use; all experience layer parameters have defaults; enter advanced level only when wanting to customize characters or participate in development (requires understanding schemastery, Cordis plugin structure, and sprite asset specifications).

Known Issues & Limitations

  • After bundle format initial release, plugin path/export name cannot be renamed (public ref consumed), changing structure breaks installed environments
  • Character id allows only [a-z0-9-] characters (URL path injection defense), naming needs attention
  • Desktop companion is not within dsh plugin installation scope; requires self npm install + starting Tauri/headless engine in desktop/ subdirectory
  • After modifying Node half source code, ESM cache causes disable/enable to not take effect, must restart DSH Web (plugin tree failed to load is a clear signal of this issue)
  • Although config modifications support hot-reload, initial injection still depends on synthesis at host startup; changing schema field names/defaults requires restart for old settings to re-normalize

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/vlln/whale-girl)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory