Preface¶
The core concept of DeepSeek Harness (DSH) is that users develop their own plugins. In actual use, however, the underlying Cordis runtime is a “black box” for developers. It is difficult to view which listeners a plugin has registered, hard to inspect every hop of the event dispatch waterfall, and even harder to manage tools, skills, and presets intuitively. As a result, debugging and development become inefficient and often require repeated trial and error through conversation.
The dsh-plugin-studio plugin is designed to address these issues. It provides a web-based workbench that makes invisible runtime state visible, operable, and developable. The plugin is maintained by Tsqurt and follows the MIT license.
Core Capabilities¶
This plugin provides a full-featured web UI workbench, mainly containing the following modules:
- Real-time Event Stream: Provides a real-time scrolling event tree. Supports scrolling, filtering (by mode and category), and parameter expansion. Objects, arrays, and functions inside parameters can be inspected layer by layer.
- Plugin Overview: Displays event and service signatures of registered plugins through reflection directories, and draws a relationship graph between events and plugins.
- Plugin Management: Divides plugins into three zones: system plugins, external plugins, and dynamic plugins. Supports snapshot recording, state restoration, and quick startup/shutdown from the sidebar.
- Stateless Plugin Development: Provides an editor for function bodies. Supports inserting examples from a template library, selecting events and listeners from dropdowns, testing a JSON payload once, and “pushing as a plugin.”
- Resource Management: Provides management UI for tools, skills, and presets. Supports creating HTTP/code tools, creating Markdown skills, and creating presets via duplication and template editing.
Installation and Enabling¶
After installing this plugin, restart the dsh web process to load the UI.
dsh plugin --profile web add @tsqurt/dsh-plugin-studio
To enable it: click the 🧩 puzzle button at the bottom of the sidebar to open the dedicated panel.
In addition to installing it through official channels, you can also dynamically load the plugin using cordis_define (method three).
Runtime Principles and Limitations¶
The plugin consists of two parts: a host-side component and a browser UI component. The host-side component runs in the node:vm dynamic plugin sandbox and is responsible for capturing events, monitoring the lifecycle, and reflecting service signatures. The UI part communicates with the host side via HTTP RPC.
The following limitations need to be noted:
* Data Persistence: The event stream itself is not persisted and is cleared when the process restarts; however, data such as plugin directories, snapshots, and development packages is persisted.
* Editor Type: The code editor is an enhanced textarea with line awareness; it does not embed Monaco.
* Refresh Mechanism: The event stream uses polling for refresh and may experience second-level latency under high load.
* Environment Dependencies: The GitHub installation feature depends on the presence of git and a shell backend in the environment.
* System Operations: Starting or stopping system plugins writes back to the deployment loading table; operations include prompts.
Use Cases¶
Suited for developers who need to deeply debug plugin behavior, develop custom plugin logic, or manage tools and skills in a DSH environment.