DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-pet-plugin

Pet Plugin

DSH 桌面伴侣插件:五只超写实立绘(表情 + 动作序列)、主动说话与神经音色、小输入框单聊(一次性模型调用,不进会话)。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:zuoyunlai/dsh-pet-plugin#2e6ee2b3e65e368e2deae6b74dbd9260a1c59a09
README兼容性版本

兼容性与来源证明

Pet Plugin 以 dsh-pet-plugin 发布,当前版本为 1.27.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/11/5

版本

1.27.1stable
2026/10/30
1.27.0stable
2026/10/29
1.26.1stable
2026/10/29
查看其余 38 个版本收起版本
1.26.0stable
2026/10/29
1.25.0stable
2026/10/28
1.24.1stable
2026/10/28
1.24.0stable
2026/10/27
1.20.1stable
2026/10/26
1.20.0stable
2026/10/26
1.19.9stable
2026/10/24
1.19.8stable
2026/10/23
1.19.7stable
2026/10/23
1.19.6stable
2026/10/23
1.19.5stable
2026/10/23
1.19.4stable
2026/10/23
1.19.3stable
2026/10/23
1.19.2stable
2026/10/22
1.19.1stable
2026/10/22
1.19.0stable
2026/10/22
1.18.1stable
2026/10/22
1.18.0stable
2026/10/22
1.17.1stable
2026/10/22

相关插件

正在加载相关插件…

最新版
1.27.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 2
周下载
2,723
最近提交
2026/10/31
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
1.17.0stable
2026/10/22
1.16.2stable
2026/10/22
1.16.1stable
2026/10/22
1.16.0stable
2026/10/22
1.15.0stable
2026/10/22
1.14.0stable
2026/10/22
1.13.0stable
2026/10/22
1.12.0stable
2026/10/22
1.11.0stable
2026/10/22
1.10.2stable
2026/10/22
1.10.1stable
2026/10/21
1.10.0stable
2026/10/21
1.9.4stable
2026/10/21
1.9.3stable
2026/10/21
1.9.2stable
2026/10/21
1.9.1stable
2026/10/21
1.9.0stable
2026/10/21
1.8.2stable
2026/10/21
1.8.1stable
2026/10/21

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Session Titles Bundle@deepseek-ai/dsh-experimental-session-titles-bundle新的用户提示到达时刷新会话标题。Personalized Recommendations@deepseek-ai/dsh-personalized-recommendations回答下方以卡片形式提供个性化页面和内置插件推荐Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义

README

dsh-pet

A little companion that lives in the bottom-right corner of the DSH web UI: it stays around or drops in at random, talks (with voice), walks, dances, gets shy or annoyed, and carries a tiny input box you can chat with. Five photo-realistic personas, each with its own temper.

Scope: the pet only lives inside the DSH window (it mounts into the framework's overlay slot). It cannot float above other applications — that would need a separate Electron shell rather than a plugin.

At a glance

  • Languages: UI chrome, persona taglines and the chat system prompt follow the browser interface language — shipped for en / zh / es / pt / hi (locale/*.json, namespace pet; slots register with locale: 'pet' per the DSH slot contract). Each persona also ships an English line pack, so a non-Chinese UI hears English lines.

  • Mount points: shell.overlay (the pet itself, a click-through layer) and conversation.input.right (the entry button next to the composer).

  • Private chat: what you type in the small box never enters your session. The host half exposes POST /dsh-pet/chat and answers with a one-shot ctx.llm.stream() call (no session, no session log). Defaults: deepseek-account / deepseek-flash; provider, model, maxTokens and temperature are plugin config.

  • Icon: icon.svg (the rose silhouette) and the composer button share the same path.

  • Settings panel: grouped (look / voice / display / actions / effects), custom dropdowns (native <select> popups are system-white and unreadable in dark themes) and custom switches; it is placed relative to the pet (above her, or to her left when there is no room) and clamped into the viewport under the header.

  • Five personas (photo-realistic, same lighting; all five ship 5 expressions each: default / happy / shy / angry / sleepy): 薇 (violet), 绯 (crimson), 靛 (indigo), 雪 (silver), plus 鲸鱼娘 (azure) — a whale-fin maid whose expression set was added in 1.23.0, with its own walk / dance / hair clips. Expression changes cross-fade (180 ms) instead of hard-cutting.

  • Action sequences: a persona may declare actions: { dance: [...], hair: [...], walk: [...] }; each set is 3–6 frames (3-frame sets step at 340 ms, 6-frame at 230 ms; azure ships clips only, no frame sets). All four originals have dance / hair-flip / walk, each stylised to the character; newer personas may instead ship video clips (VP9 + alpha), and a clip's own length decides how long the action lives.

  • Adding artwork: drop transparent PNGs into assets/ and reference them from PERSONAS (image, or images: { mood: 'file.png' }). Served by /dsh-pet/assets/ (image and webm video extensions only, basename only). tools/make-pet-image.py removes a green-screen background (preferred) and falls back to a gradient key.

Behavior

CapabilityHow
Always-on / randomToggle in the panel; random mode rolls a per-hour probability inside the active window
Active hoursStart/end time, supports crossing midnight (22:00 → 03:00)
Proactive linesPer-mood line packs, bubble + speech
VoiceOptional: if the host has any python with edge-tts, /dsh-pet/tts synthesises (cached) and /dsh-pet/tts/status probes it; otherwise it falls back to the system speechSynthesis. The plugin itself has zero runtime dependencies
Small input boxHidden by default; slides out when you hover the character (since 1.22.0, and moving from the character onto the box does not dismiss it). Turn off "Only on hover" in settings to pin it. Messages go to the pet only; one-shot model call, nothing is written to any DSH session
Moodsidle / walk / dance / shy / angry / sleep / talk / happy
Dragging60% chance of a drag line once you drop it; all five personas have them (completed in 1.24.0), five languages
Inner voiceA low-frequency (7%) grey aside — a thought, never spoken; only for personas that declare lines.aside; all five have them (1.24.0)
GazePupils follow the mouse (CSS variables only, no re-render)
EffectsInk / confetti / cloud / fog (wipable) / bomb + cracked screen
Event hooksConfetti after a turn longer than 4 s; a cloud appears after a failed tool call
TemperPer-persona weight table decides what it does more of
Hide"Hide for 1 h" in the panel

Install (local, no registry)

Published as dsh-pet-plugin on npm; it also installs straight from a folder.

# from the registry (after publish)
dsh plugin --profile desktop add dsh-pet-plugin
# from a local checkout: quit DSH first, then
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1    # or double-click install.cmd

Quit DSH first (the profile's package.json is HMR-watched). The script adds "dsh-pet-plugin": "file:<this dir>" to the profile, registers the bundle, runs pnpm install, then reads back all four facts. update.cmd only refreshes files and is safe while DSH is running. For the sweeter neural voice:

pip install edge-tts                     # any python the host can find
export DSH_PET_PYTHON=/path/to/python    # only if auto-discovery misses it

Verify

node --check client.js
node tests/smoke.mjs                     # fake window + React stub, renders every persona/mood
# host routes need the harness packages, so run them from the installed copy:
cd <profile>/node_modules/dsh-pet-plugin && node --test tests/host.test.mjs
node <dsh-plugin-guide>/bin/dsh-plugin-dev.js check --cwd . --strict
node <dsh-plugin-guide>/bin/dsh-plugin-dev.js verify --cwd .

Customize

  • The client bundle is generated: edit src/*.js and run node build.mjs, which concatenates the parts into client.js (the only file DSH loads). Never edit client.js by hand — npm test rebuilds and then runs the smoke test.
  • Personas, lines and tempers: pets/<id>/pack.json — images (five expressions), actions (dance / hair / walk, 3–6 frames each), voice, temper, and lines / linesEn line packs.
  • UI strings: edit the pet namespace in locale/*.json, then node build.mjs — the dictionaries are injected at build time, so the locale files are the single source of truth. New language: run node tools/gen-locales.cjs for a skeleton, then translate.
  • Moods and animations: add keyframes in src/70-style.js and map the class by mood in src/96-overlay.js.
  • Action clips: a pack may carry clips: { dance: "pet-x-dance.webm" } — a VP9 WebM with an alpha channel. Clip heights are tiered (1.25.0): stage clips 960 (single-generation re-export from the 2K masters, for the zoomed dance on 4K displays), hair/walk of the four originals 768 (native from the 768 masters), the rest 640; ordinary clips are about 5.167s and stage clips about 10.125s. tools/assets-manifest.cjs records dimensions, duration, codec, pixel format, alpha mode, byte size, and SHA-256; the asset test enforces those values and a 20 MB aggregate budget. When that action plays the pet renders a looping <video> instead of flipping through still frames, which is the only way to get true 24 fps motion.
  • Artwork: drop transparent WebPs into assets/ and reference them from pets/<id>/pack.json, then node build.mjs (it regenerates src/30-personas.js). The /dsh-pet/assets/ route only serves allow-listed image and webm video extensions.

Extending at runtime (1.21.0)

  • Custom persona packs without a rebuild: drop $DSH_HOME/dsh-pet/pets/<id>/pack.json (with its assets next to it; license is a release gate for the built-in packs — user packs are not license-checked at runtime) — the host scans it at startup, merges it with the built-in five, and serves it under /dsh-pet/pets/<id>/… (realpath containment + extension whitelist + 413 oversize). A pack must satisfy the render contract, or it is refused whole at load (fail-closed, one warning in the host log): name + clips, image (or, for SVG personas, a complete colors table), and — when voice / temper are present — voice.pitch / voice.rate as finite numbers and temper as mood → positive number. The client picks the list up via GET /dsh-pet/personas and falls back to the built-in table when absent.
  • Line overrides: $DSH_HOME/dsh-pet/voice.json — {"<personaId>|*": {"lines|linesEn|linesEs|linesPt|linesHi": {"<mood>": ["…≤300 chars, ≤200 lines"]}}}. Merged per mood, warn-and-drop on any malformed piece; a broken file is ignored with a warning, never a crash.
  • Make the pet speak: POST /dsh-pet/announce {"text": "…"} (≤300 chars, 30/min rate limit). Poll /dsh-pet/ping for phase (working|tool|review|done, 15s freshness) and announce (seq-guarded) — phase drives walk/hair micro-actions while the agent works.
  • State on the host: GET/POST /dsh-pet/state. Both sides carry updatedAt (newest wins, so an old host snapshot can never roll back a fresh local change); the client debounces a POST 500 ms after every settings/history change. History is stored as {role, content} objects — legacy "[object Object]" strings are dropped and migrated instead of being written back. Settings keys are whitelisted host-side (≤64 entries, history ≤200 items × 8000 chars).
  • Silence auto chatter: settings statusBubbles: "auto" | "off" mutes mood/greeting/idle bubbles; taps, drags and announce still speak.
  • Licensing: every pack declares license; third-party notices ship in THIRD_PARTY_NOTICES.md; the asset test enforces both.

Security model

  • The host routes are gated three ways, none of them tied to a fixed port or domain: Host must be a loopback address, the host's own origin, or listed in the allowedHosts plugin config (for reverse-proxy / LAN deployments); a present Origin must be same-origin with that Host or the desktop shell (dsh-app://app, dsh-app://shell); and Sec-Fetch-Site, when present, must be same-origin or none. Non-browser clients that send none of these are allowed — that is the deliberate limit of a local HTTP endpoint, see below.
  • Speech synthesis is a POST endpoint that returns the audio bytes; there is no GET URL to feed to an <audio src>, so a page (or another local process) cannot make the host synthesise anything by pointing an element at it.
  • Synthesised speech is cached in the OS temp dir with a size cap that is re-checked after every synthesis, and writes go through a random temp name + rename so a pre-planted symlink cannot redirect them.
  • Anything the page sends (settings, chat history, persona id) is treated as data: validated, length-capped, and never interpolated as instructions or markup.
  • Neural voice sends the spoken text to Microsoft's edge-tts endpoint. Turn it off (or never install edge-tts) to keep everything local; the panel says so.

Known limits

  • Host version: built and tested against dsh 0.2.1-alpha.2. It needs the webServer service and the shell.overlay / conversation.input.right slots, which are 0.2-generation APIs — on a 0.1.x host it installs but never mounts (one console line says so). engines.dsh in package.json is a declaration only: the installer does not enforce it, and the plugin declares no @deepseek-ai/dsh-* peer ranges on purpose, so a version mismatch never blocks installation.

  • Neural voice needs a host python with edge_tts; otherwise the system SAPI voice is used.

  • Browsers block autoplay before the first user gesture — click the page once.

  • Settings live in localStorage. The debug handle (globalThis.__dshPet) stays off unless you set dsh-pet.debug=1 in localStorage or append ?petdebug=1.

  • The pet cannot float above other applications (overlay slot only).