DeepSeek Harness plugin

dsh-companion-studio

Privacy-aware, packable desktop companions for DeepSeek Harness

Jump to install

Source facts

Repository
030611/dsh-companion-studio
Latest update
Aug 19, 2026
Category
Development & Runtime
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/030611/dsh-companion-studio
Plugin: dsh-companion-studio
Author: 030611

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

DSH Companion Studio

English | 简体中文

An early, privacy-aware desktop-companion engine for DeepSeek Harness. It is deliberately not another balance or cost meter. It turns official session facts into useful ambient feedback and leaves character art in independently installable packs.

> Status: public core preview. The runtime, privacy boundary, state machine, pack schema and bundle manifest are testable. No redistributable character pack is bundled with the core package, and npm publishing remains disabled while real-profile QA continues.

Preview

![DSH Companion Studio enabled in a real local DeepSeek Harness profile](docs/images/companion-overview.png)

The companion is enabled in a real local DSH profile. Its state is visible at the lower right, while the composer shows the active workspace permission, model and mode.

![Native DSH live session metrics below the composer](docs/images/session-metrics.png)

The native DSH session strip remains visible below the composer. It reports turns, steps, LLM and tool latency, average first-token latency, throughput, cache hit rate, and input/output token counts; the companion complements these facts instead of replacing them.

![Jingyun whale-maid companion showing a live assistant-reply bubble](docs/images/companion-reply-bubble.png)

The bubble shows a short, live preview of the current assistant reply above the selected pet. It reads assistant-authored text only, can be disabled independently, and never selects reasoning, user prompts, tool arguments or tool results. The surrounding conversation body is intentionally omitted from this documentation capture.

![Chinese companion controls in the draggable settings panel](docs/images/companion-settings.png)

The settings panel is draggable and exposes reply preview, hourly variation, local speech controls, voice selection and local pet upload. The screenshots show the locally installed Jingyun whale-maid pack; the selected character and outfit are visible in the panel.

What is different

  • Eight explicit states: idle, thinking, streaming, tool use, waiting for the user, success, error and sleep.
  • A compact live bubble containing assistant text only. Reasoning, prompts, tool arguments and tool results are never selected.
  • Credential-like strings are redacted before display. Preview can be disabled separately.
  • Completion can be read with the browser's local Web Speech API. It is off by default, sends no audio or text to a voice service, and can be stopped immediately from the pet menu.
  • Optional hourly variation rotates the selected character's outfit and plays a short showcase motion. It is off by default.
  • The voice menu auto-ranks installed Mandarin voices, allows an explicit local choice and includes a short audition line.
  • Shown, docked and completely hidden modes. A session-header button restores a fully hidden pet.
  • Character and outfit selection is data-driven. External character plugins can register before or after the core.
  • A user can upload one local PNG/WebP and use it immediately as a private pet. The image is normalized locally, stored in IndexedDB and restored after reload.
  • prefers-reduced-motion is respected.

Bundled demo metadata

The public core includes one art-free metadata placeholder, 星汐 / 星潮鲸灵, so the picker and outfit settings remain testable. It intentionally renders as a glyph until a user uploads a local image or installs a character pack. The preview screenshots show a locally installed Jingyun pack; the core runtime and npm package do not bundle its standalone source assets.

Pack model

The core package stays small. A separately installed DSH client plugin can import registerCompanionPack from dsh-companion-studio/client-api and register one manifest. Each manifest binds its license, palette, outfits and optional animation sprite sheets. The global Symbol registry handles either load order and returns a disposer for hot reload.

See [docs/PACK-SPEC.md](docs/PACK-SPEC.md) for the v1 contract and animation requirements.

User-created pets

The settings panel accepts a single PNG or WebP up to 5 MB and 2048×2048 / 4.19 million pixels. DSH decodes and re-encodes it as a static PNG, preserving transparency while removing metadata and animated payloads. SVG, HTML, remote URLs and arbitrary scripts are not accepted. The resulting Blob lives only in the browser's IndexedDB; an object URL exists only while the plugin is mounted and is revoked on deletion or unload.

One image receives the core's eight lightweight CSS motions, so a user does not need a sprite sheet. Advanced per-state art remains the explicit pack path. Background removal is not claimed: users should upload transparent art for the cleanest result.

Privacy boundary

The reply bubble reads the official ConversationSnapshot.partial and finalized assistant nodes. It accepts only blocks whose kind is text. The following never enter preview or speech:

  • user prompts or injected context;
  • reasoning blocks;
  • tool names, arguments or results;
  • approval/question payloads;
  • telemetry, balances or model pricing.

The preview is capped and sanitized again before local speech. Speech is opt-in.

Development

# Node.js 22.19 or newer
pnpm install
pnpm check
pnpm pack --dry-run

For local evaluation after building:

dsh plugin --profile web add link:/absolute/path/to/dsh-companion-studio

The included cordis.patch.yml uses DSH's profile-bundle patch mechanism. This is a source preview rather than a published npm package.

Public-repository boundary

  • MIT covers the source code in this repository.
  • The core runtime and npm package do not ship standalone character-art source assets; documentation screenshots show local evaluation only.
  • User-uploaded pets stay in that user's browser.
  • External pack authors are responsible for declaring compatible licenses and keeping provenance records.

See [docs/ASSET-PROVENANCE.md](docs/ASSET-PROVENANCE.md) and [SECURITY.md](SECURITY.md).

Near-term gates

1. Validate streaming, tool, waiting, error and completion transitions in a real DSH profile. 2. Validate drag persistence, full hide/restore and Chinese/English local voices. 3. Build one independently licensed external pack to prove install/uninstall and load-order behavior. 4. Complete in-app visual QA with both a local upload and an external pack. 5. Only then remove private: true, publish to npm and submit to community directories.