DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Pet In Frame — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-pet-in-frame

Pet In Frame

DeepSeek Harness 的代理桌面宠物叠加层:通过静态姿势或逐帧动画姿势响应代理状态和工具调用。

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-pet-in-frame@0.6.0
README兼容性版本

兼容性与来源证明

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

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/20

版本

0.6.0stable
2026/9/13
0.5.0stable
2026/8/18
0.4.0stable
2026/8/17
查看其余 3 个版本收起版本
0.3.0stable
2026/8/17
0.2.0stable
2026/8/16
0.1.0stable
2026/8/16

相关插件

正在加载相关插件…

最新版
0.6.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
809.7 kB
文件数
31
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
275
安全扫描
✓ v0.6.0 扫描通过
最近提交
2026/9/13
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Better Sidebardsh-better-sidebarDSH web 插件:类似 VSCode 的右侧边栏(资源管理器 / 编辑器 / 终端 / git / 浏览器),按对话会话隔离。提供服务,供其他插件注册侧边栏标签页和文件查看器。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio 及其精选幻灯片模板,作为原生 DeepSeek Harness 对话视图。Codex Ui@michengai/dsh-codex-uiDSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航Dream Skindsh-dream-skinDeepSeek Harness 换肤插件(Dream Skin for DSH):8 套 iOS / Linear 式清透冷调的高质感主题 + 弥散光壁纸 + 每款皮肤智能背景 + 强调色 + 主题包分享,把换肤做成材质与配色克制的高级感工艺,而非贴图。在原生 DSH Web 和第三方桌面客户端(DSH Desktop)中运行:8 款原创高端主题、玻璃材质、壁纸 2.0

README

dsh-pet-in-frame

English | 中文

A single-package DeepSeek Harness plugin: a small desktop pet that floats in the corner of the Web GUI and reacts to what the agent is doing — thinking, searching the web, reading code, running commands, editing files, hitting an error, or idling.

One package = one bundle = one loader row. The host half listens to the agent lifecycle (agent/status, tools/execute, tools/result, agent/error), watches the assets/ directory for image and manifest.json changes, and serves five HTTP routes (/dsh-pet-in-frame/state, /texts, /frames/<action>, /assets/<file>, /wake). The browser half registers the pet into shell.overlay, polls state, and swaps static poses or cycles frame animations.

The differentiator: the assets directory is the config. Drop a bash.png into assets/ and the pet shows it whenever a command runs; add a frame list plus one manifest.json line and you get an animation. No rebuild, no code change — changes hot-reload within a few seconds.

Screenshots

Explore screen — the pet idles in the bottom-right corner:

Idle on the explore screen

In a conversation — the pet switches poses with the agent's activity and shows a status bubble on click:

Pet during a conversation

Features

  • Poses switch with agent state and tool calls:

    ActionTriggered byImage
    thinkrunning, no active toolthink.png / {imgs:[...],delay}
    searchweb_fetchsearch.png
    learnweb_search, skilllearn.png → default.png
    readread, glob, grepread.png → search.png → default.png
    bashbash, pwshcommand.png / command.webp, plus a pinned bash_comp / pwsh_comp badge
    editedit, writeedit.png → default.png
    plantodo_*, goal tools, workflow, and goal/changed events (brief flash)plan.png / plan.webp
    askask_user_questionask.png → default.png
    subagentsubagent/start, subagent/end events; subagent / subagent_fork / send_message / interrupt_agent / report tool dispatchsubagent.png → default.png
    cordiscordis_define, cordis_run, cordis_stop, cordis_undefine, cordis_inspect_*cordis.png / cordis.webp
    permissionwhile an approval request is pending (sandbox escalation / sandbox_permissions)permission.png / permission.webp
    error; tool results with (failed operations, a failed subagent run); / non-zero exit (foreground result or background job); cancelled calls are excluded
  • Subagent working indicator: while any subagent is running, a badge pinned inside the pet image (top-left at ~4.63% / 31.66% of the pet, sized ~26.63% × 36.92% — matching a 334×463 badge on a 1254×1254 pet sprite) cycles the subagent_comp1~3 frames (500 ms interval). Because it lives inside the pet's own container it follows drag and resize. At start/end the pet flashes the subagent pose for ~2 s, and the badge lingers ~2 s after the last subagent settles so both disappear in sync. The pose flash and the running indicator are independent. If the main agent calls a tool during the flash, the pet switches to that tool's pose immediately (the flash is cancelled); pure thinking keeps the subagent pose until the window ends, then switches to think.

  • Subagent isolation: tool calls, status and error events originating from live subagents are ignored — only the main agent's activity drives the pet pose. So a foreground subagent keeps the pet in the subagent pose for its whole run, and a background subagent never steals the pose from the main agent's ongoing work.

  • Command badge: while the main agent runs a foreground bash / pwsh tool, the pet switches to the command pose and pins the matching badge inside the pet image — bash → bash_comp1~2 frames, pwsh → pwsh_comp1~2 frames (500 ms interval; badge top-left at 74.24% / 45.61% of the pet, sized 15.95% × 15.95%). The badge and the pose stay in sync: both hold for ~1.5 s after a quick command settles (MIN_TOOL_SHOW_MS), so even a sub-second command shows its badge. Shell calls from inside subagents never trigger it (subagent isolation).

  • Background commands: when the main agent dispatches bash / pwsh with run_in_background: true, the pet mirrors the subagent pattern — it flashes the command pose for ~2 s and pins the matching comp badge (bash_comp / pwsh_comp) while the job runs; when the job settles (done or killed) it flashes command again for ~2 s, and a job that failed (explicit failed status, or a completed job with a non-zero exit code) shows the error pose for ~6 s instead. The badge lingers ~2 s after the last job so both disappear in sync. Job lifecycle comes from ctx.jobs.onJobDone (deployments without the jobs service skip background tracking; the foreground badge is unaffected).

  • Fast state polling: the client polls /state every 250 ms, so pose switches land within ~0.25 s (average ~0.125 s). Each tool pose (and its comp badge) is additionally held for ~1.5 s (MIN_TOOL_SHOW_MS) as a readable display duration, so even a sub-second tool call is visible.

  • Idle sleep: after 30 s of continuous idle the pet falls asleep (sleep frames, 500 ms interval) and stays asleep; click the pet to wake it back to default and restart the countdown — 30 s later it sleeps again. Any tool call, thinking, or error also interrupts sleep and restarts the timer.

  • Two ways to configure each action: "action": "image.png" (static) or "action": { "imgs": [...], "delay": 1000 } (frame animation, delay in ms, default 500).

  • Hot reload: edit an image or manifest.json and the pet updates within ~3–4 s. No restart.

  • Draggable with viewport clamping, hover −/+ size control (100–320 px), click for a status bubble, × to hide / 🐾 to bring back.

  • No build step: plain JavaScript (Node ESM host + window.__ModuleLoader__ client).

Install

Prereqs: a running dsh web profile, pnpm available to the dsh CLI.

From npm (recommended):

dsh plugin --profile web add dsh-pet-in-frame

From GitHub (pin a commit for auditability):

dsh plugin --profile web add github:HarmlessFunny/dsh-pet-in-frame#<commit-sha>

From a local checkout (development):

dsh plugin --profile web add file:E:/path/to/dsh-pet-in-frame

Then restart the dsh web process — new plugin entries load at boot. The package's cordis.patch.yml inserts its own loader row, so no manual cordis.yml edits are needed.

Assets & configuration

Images live in the package's assets/ directory. You can point elsewhere with the DSH_PET_ASSETS environment variable or a config.assetsDir on the loader row:

- id: dsh-pet-in-frame
  name: dsh-pet-in-frame
  config:
    assetsDir: C:/path/to/your/assets

Convention mode (zero config) — assets/<action>.<ext>, extensions png/jpg/jpeg/gif/webp/svg:

assets/
├── default.png   # fallback
├── think.png     # thinking
├── search.png    # web search / code reading
└── bash.png      # optional; falls back to default.png

manifest.json — explicit control, including animations:

{
  "default": "default.png",
  "think": { "imgs": ["think1.png", "think2.png", "think3.png"], "delay": 1000 },
  "sleep": { "imgs": ["sleep1.png", "sleep2.png", "sleep3.png"], "delay": 500 },
  "bash": "bash.png",
  "read": "search.png"
}
  • String = static single image; object {imgs, delay} = frame animation.
  • Files that don't exist are skipped; a malformed manifest is ignored and the filename convention is used instead.
  • Actions missing from the manifest still resolve via the convention → fallback chain.

Asset optimization: originals are usually 1254px+ while the pet displays at most 320px — shipping them raw slows first load noticeably. Run scripts/optimize-assets.cjs to downscale to 512px WebP (~1/10 the size) in place, then update manifest.json to the .webp names.

How it works

The host half exposes five loopback routes:

RouteReturns
/dsh-pet-in-frame/state{ status, action, tool, error, idleMs, rev }
/dsh-pet-in-frame/textsbubble copy for each action
/dsh-pet-in-frame/frames/<action>{ frames: [url...], delay } (URLs carry the current rev)
/dsh-pet-in-frame/assets/<file>image bytes
/dsh-pet-in-frame/wakePOST; wake the pet and reset the idle countdown on click

The client polls state every 250 ms and refetches frames whenever rev changes, so pose switches are near-instant and image/manifest edits propagate without a reload.

Security

  • Only the configured assets directory is served; filenames must match [\w.-]+, so no path traversal.
  • The manifest is parsed with JSON.parse and treated as data only; a bad manifest degrades to the convention mode.
  • Routes are read-only GETs except POST /wake, which only resets a timer (no request body read, nothing written).

Known pitfalls

  • Restart required after install — new bundle entries load at boot; the browser bundle also needs a page refresh.
  • The assets directory is the source of truth after install. If you previously pointed a dynamic plugin at ~/Desktop/assets, copy those files into the package's assets/ (or set DSH_PET_ASSETS).
  • Pet display is process-wide. This is a host-plane plugin, so events from all sessions contribute to the same pet — fine for a single-user deployment.
  • Frame animations are flipbook-style: several static images cycled by a timer. For many frames prefer a single sprite/GIF.

License

MIT. Copyright (c) 2025 dsh-pet-in-frame contributors.

agent/error
isError
bash
pwsh
oops.webp
idle / defaultnothing activedefault.png
sleepafter 30 s of continuous idlesleep.png / {imgs:[...],delay}