跳过主要内容
L

dsh-capyreporter

linkbag/dsh-capyreporter

为 DSH Web 打造的永远置顶的水豚任务播报宠物——透明悬浮气泡逐条播报运行轨迹、标明所属项目,任务完成时提醒正在别处忙碌的你。

安装

dsh plugin --profile web add github:linkbag/dsh-capyreporter

README

🐾 CapyReporter

English | 简体中文

A local task reporter for DeepSeek Harness Web: a page pet, plus an optional transparent always-on-top Electron companion.

What it reports

  • Live workspace + session labels and a bounded assistant milestone preview: the collapsed bubble follows the assistant's latest statement instead of tool chatter. Reasoning stays hidden unless you opt in to Report thinking; prompts, tool arguments and tool output are never displayed.
  • Separate completed, cancelled, failed, blocked, interrupted and output-limit outcomes, using actual DSH turn/end events. Idle alone is not success.
  • Running subagents are visible while they work. The headline names them (⏳ 1 running · 2 subagents — <chat>) and, while the main chat has no fresh assistant text, the collapsed detail reads 🤖 2 subagents running; the count drops as they finish and their progress milestones take over. Localized throughout.
  • Only the main chat claims a finished turn. Delegated subagent runs never raise the green Turn complete tick for the parent chat: while a main chat is running the headline keeps showing it, and delegated finishes (✅ Subagent finished, ⚠️ Subagent failed, ⏹ Subagent cancelled) appear as progress milestones in the details. A main-chat result may only take the headline once no main chat is running.
  • Independent unread results for parallel sessions: starting another session does not erase a result. Up to 20 results are retained in memory for six hours.
  • Compact headlines and explicit Details / Go to chat / Mute controls, a top-right × close on the bubble, and pet-menu shortcuts that open settings or hand reporting over to the always-on-top companion. Keyboard support and reduced-motion-safe styling.
  • Ten-language UI with a live switcher (English, 中文, Español, हिन्दी, العربية, Português, Русский, 日本語, Français, Deutsch) that follows the browser/OS language by default, applies to the page pet and the desktop companion, and flips to right-to-left for Arabic. Every locale is copy-edited for natural phrasing — bubble actions, pet menu, settings rows and the desktop companion included — rather than a literal machine translation.
  • Optional away notifications: off by default, require both the plugin toggle and browser permission, and do not notify a focused page. Different open DSH tabs may each notify.

Install

dsh plugin --profile web add dsh-capyreporter

0.6.25 was re-verified against DeepSeek Harness 0.2.1-alpha.1 (routes, slots, client bundle serving, and agent/session events). The only peer dependencies are @deepseek-ai/cordis and react, which DSH supplies to the plugin; no DSH package version range is pinned. Refresh after a client update; host-code updates need plugin reactivation or a DSH restart. A page refresh alone cannot replace a loaded host module.

Optional desktop companion

The always-on-top pet is on by default: an install without saved preferences starts the companion right away, so the pet floats above other windows. Use page pet turns it off; Retry always-on-top pet restarts it after a failed start. Use DSH_PET_ELECTRON_PATH (or ELECTRON_PATH) for an existing Electron executable. The plugin also checks $DSH_HOME/electron/electron.exe on Windows (electron on Linux), the user npm installation, and legacy Windows install locations. No binary is downloaded automatically. macOS should use an explicit executable path.

The host's actual port is used automatically. DSH_CAPYREP_BASE_URL can override it with an exact loopback HTTP(S) origin, not a URL with credentials, paths or auth tokens. Remote/reverse-proxied origins are deliberately not supported by this plugin's local-only route boundary.

The page pet is hidden only after the companion has decoded its image, fetched activity, and reported ready. Missing Electron, a failed renderer, or a stale heartbeat keeps/restores the page fallback. Some exclusive fullscreen applications can still cover a topmost window. Empty window background is click-through; the artwork element and bubble are interactive rectangles.

Controls

ActionResult
Drag the petMove it; dragging does not dismiss results or open DSH
Ctrl / Cmd + wheel over the petResize, 50–250% (ordinary scrolling remains available)
Click, right-click, or Enter/Space on pet controlsOpen controls
Click anywhere outside an open menu (or press Escape)Dismiss the pet menu — in the page pet and in the always-on-top companion
Details / CollapseToggle scrollable session details
Go to chatOpen the session the headline refers to (running, else finished) via DSH workspace navigation; also in the pet menu. In the always-on-top companion it also opens/focuses the DSH page in your browser at that session
Pet menu → Open settingsJump straight to the CapyReporter section of DSH settings (also in the desktop companion menu)
Pet menu → Enable / Retry always-on-top petStart the always-on-top companion, or retry it after a failed start, without leaving the page pet
× in the bubble's top-right cornerClose the current bubble (new activity resurfaces it); after a run ends it also acknowledges the result. The pet menu keeps Dismiss result
Drag any bubble edge/corner, arrow keys on the corner handle, or Ctrl + wheel over the bubbleResize the bubble (width 260–560, height 160–720 px), remembered per browser; buttons stay pinned to the bottom edge and the details area scrolls when the bubble is short
Drag any edge/corner of the desktop bubbleResize the always-on-top bubble; its window follows so the pet stays anchored above the bubble
Double-click a resize handle, or Reset bubble size in the pet menuRestore the default 360 px width and content-driven height
Mute 30 minSilence the bubble for the configured duration (default 30 min)
Restore bubbleShow current activity again and end a mute early
Double-click desktop pet / Open DeepSeek HarnessOpen the configured DSH origin
EscapeClose controls/details

Appearance and preferences

Settings → 🐾 CapyReporter controls visibility, the always-on-top pet, size, artwork, notifications, the Status bubble mute duration (10/30/60/240 min, default 30), Report thinking (opt-in 💭 reasoning as the live milestone, off by default) and the interface Language (Auto plus the ten supported locales; Arabic switches to RTL and the desktop companion follows). Auto tracks your browser/OS language and anything unsupported falls back to English; the choice persists on the host. Artwork must be a PNG, at most 4 MiB, with each side 1–4096 px. SVG, arbitrary data URLs and malformed/truncated containers are rejected. Custom-to-custom changes invalidate the image revision immediately.

Image, size and toggles are saved atomically to $DSH_HOME/capyreporter.json (default ~/.dsh). A legacy homura-pet.json is read only when that file is absent. Page position is stored separately in this browser's local storage; desktop position is session-only. Corrupt settings are logged, not silently replaced with unrelated legacy settings. Failed writes leave the previous preferences active.

Hide pet is not uninstall. Remove the package using DSH's plugin manager or:

dsh plugin --profile web remove dsh-capyreporter

Security and diagnostics

Plugin HTTP handlers are separate from DSH's SPA authentication gate. This plugin rejects cross-origin/opaque browser requests, non-loopback callers/Host headers and GET mutations; it does not expose wildcard CORS. The desktop uses an activation-scoped capability held in its main process, a sandboxed renderer, restrictive CSP and an allowlisted IPC broker. See architecture for boundaries, including what they do not protect against.

No telemetry or outbound service is used. Notifications and the always-on-top pet can expose session titles/assistant previews on your screen; disable them in shared-screen environments.

Development

Handwritten JavaScript is the shipped source; there is no build step.

npm ci
npm test
npm run verify
npm run test:browser
npm pack --dry-run

Browser smoke tests use installed Chrome by default (DSH_TEST_BROWSER_CHANNEL=chromium for a Playwright browser) and an optional existing Electron executable. They use temporary settings and ephemeral loopback fixtures, never your installed preferences or running DSH server. Electron coverage is explicitly skipped when no binary is found. Tests and dev dependencies are not runtime requirements.

MIT. Artwork is replaceable; other projects referenced in the audit were studied for architecture, not copied into this package.

相关插件