deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:miiaowuwu/dsh-sound-lab
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
English | 中文
A DSH Web GUI Sound Lab: pick a sound for each of the four triggers (session end / options popup / permission request / stop), generate AI character voice lines, and upload & manage your own sound library — all set with a few clicks, no code needed; floating desktop pet (default) or round ball, 3 appearances, dual-persisted config.
🐋 Character reference: a fan-made project for Angelina from Arknights. The bundled sample sounds are Angelina's "hirari do~", "Huh?" and "AWAWA!" voice clips, for personal learning and entertainment only — not for commercial use.
Both methods work for either user type — Desktop users and npx dsh web users can use whichever they prefer.
Option A — Setup installer (recommended, zero dependencies, works for both):
npx dsh web) so its profiles get initialized — then quit it (the Desktop app or the dsh web server)Note (just how it works — no action needed): the installer deploys the plugin to
$DSH_HOME/plugins/dsh-sound-laband registers it into every initialized profile (web, desktop, …) via the officialdsh plugincommand, so all profiles share the same copy. If no dsh CLI is found, it auto-detects one (desktop bundled runtime → system npx → downloads Node.js); if dsh hasn't been initialized yet (no profiles), it runsdsh webonce to initialize. On finish it restarts dsh automatically: for Desktop it closes the running instance first, then launches it (exactly like double-clicking the app — no terminal window, unaffected by closing the installer); when no Desktop app is detected (web environment) it prompts you to restart the dsh web service manually. Fully automated, no manual config edits.
Option B — dsh CLI (needs Node.js, works for both):
If dsh isn't running yet, start it once first (
npx @deepseek-ai/dsh web) so its profiles get initialized (npm run setupand the Option A installer do this automatically when uninitialized). Don't have dsh yet? Download the DeepSeek Harness Desktop app, or install Node.js (https://nodejs.org) and runnpx @deepseek-ai/dsh web.
Pick the one command that matches how you run dsh — Desktop or web — and run only that one (choose 1 of 2):
# Desktop users —— run this one
npx @deepseek-ai/dsh plugin --profile desktop add dsh-sound-lab --config.minimumReleaseAge=0
# web users (dsh runs via `npx dsh web`) —— run this one
npx @deepseek-ai/dsh plugin --profile web add dsh-sound-lab --config.minimumReleaseAge=0
Then restart dsh (or just start it if it isn't running):
npx @deepseek-ai/dsh web
Development convenience:
npm run setupauto-detects all local profiles and registers this plugin into each of them;npm run setup:deploydeploys a copy to$DSH_HOME/pluginsand points every profile at it (release/fixed-use mode). Add--profile <name>(e.g.node tools/install.mjs --profile web --unify) to operate on a single profile only;node tools/install.mjs --npm --startinstalls from the npm package and auto-starts the matching side when done (Desktop window for desktop / web service + browser for web).
sounds/ folder, managed via a sounds.json control file) + refresh + Upload dialog: pick/drag-drop upload, delete sounds, restore hidden bundled sounds; non-bundled sounds can be renamed via ✎sounds/ directory (mp3/wav/ogg/m4a/flac/opus/aac/wma/webm), served by the host side via the /dsh-sounds-control static server (Range/206 chunking, ETag, streaming)config.json, survives restarts; every field is sanitized (type/range/enum) on load, bad values fall back to defaultsnpm test (Node smoke tests for host-side list/config/upload/delete and browser-side logic), npm run setup / setup:fix / setup:deploy (multi-profile auto-config), releases/build-single-exe.ps1 (builds the Setup/UnSetup installers)dsh-sound-lab/
├── package.json # Package manifest (dsh.client / dsh.bundle.patch / types / scripts)
├── cordis.patch.yml # Composition patch: mounts line ui-event-sounds
├── CHANGELOG.md # Version history
├── README.md / README.zh.md
├── LICENSE
├── sounds/ # Sound library: bundled sounds (hirari do~/Huh?/AWAWA!) + uploaded/AI-generated audio
├── frames/ # Pet frame assets: <action>/sprite.webp sprite sheet (WebP lossless) + motion.json (60fps, 12 actions)
├── lib/
│ ├── index.js # Host side: /dsh-sounds-control static service (list/config/audio/TTS) + /dsh-frames-control (pet frames)
│ ├── client.js # Browser side: desktop pet / floating ball + settings dialog + trigger detection + playback
│ ├── tutorial/ # Illustrated tutorial images for AI voice generation (image1.png / image2.png)
│ └── types/index.d.ts # Type declarations
└── tools/
├── install.mjs # Multi-profile auto-config (setup / --fix / --unify / --deploy)
├── test-host.mjs # Host-side API smoke tests (list/config/upload/delete/TTS)
├── test-client.mjs # Browser-side logic smoke tests
└── api/ # Standalone TTS script (tts_api.py + guide + reference audio)
The plugin is two halves, loaded automatically from a single install:
sounds/ directory to the browser side through the /dsh-sounds-control static server (sound list / audio files / config.json persistence), and the frames/ pet assets through /dsh-frames-control (action list / frame PNGs)Mounting of both halves is driven by package.json — no separate install needed:
dsh.client declaration (exports "./client") → loads the browser side in the Web GUIdsh.bundle.patch (cordis.patch.yml) → registers the host side in the DSH main processBecause dsh plugins are isolated per profile ($DSH_HOME/profiles/<name> each has its own package.json / node_modules), a plugin must be registered in every profile you want it in — that's what the installer and tools/install.mjs automate (see Install).
sounds/ folder (see the directory tree above) — they are reconciled into the library automatically on startup. When installed, there is no need to hunt for the folder — open the settings dialog → Sound library → Upload, then pick a local file or drag & drop to import (it is copied into the sounds/ folder of the install location automatically). You can also delete sounds from the list (bundled sounds are hidden, restorable anytime) or rename them via ✎.sounds/Tip: drag the desktop pet anywhere; it docks at screen edges (peek left/right, sleep top/bottom — left/right hidden 40% with a 30° rotation, top flipped upside-down hidden 80%, bottom not hidden), falls asleep after 90s idle, greets on click; switch between desktop pet / round ball and Whale Girl / Pure White / Pure Black under "Appearance"; the floating-window settings dialog lets you adjust Theme / Event · Asset · Audio independently; position and config are saved automatically and survive restarts.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。