Preface

When developing a DeepSeek Harness plugin, you’re not just implementing a tool—you also need to handle bundle formats, tool DSLs, configuration validation, testing, and pre-release checks. Here we introduce sunshine-lang/dsh-plugin-template. It consolidates these aspects into a single skeleton, serving as an ideal starting point for generating new plugins from a template.

What Is This

dsh-plugin-template is a DeepSeek Harness plugin skeleton maintained by sunshine-lang, licensed under MIT.

GitHub repository:

https://github.com/sunshine-lang/dsh-plugin-template

It covers the following:

  • DeepSeek Harness plugin skeleton
  • Bundle format
  • Tool DSL
  • Configuration validation
  • Testing
  • Release checklist
  • Scaffold script for generating new plugins

Generating a Plugin from the Template

First, run the scaffold script to generate a plugin directory named dsh-myplugin:

node scripts/scaffold.mjs dsh-myplugin --description "what it does"

After generation, complete the tools based on your capabilities, adjust the Config fields, and follow the release checklist to add installation, usage, and configuration documentation.

The provided test command is:

node --import tsx/esm scratch-plugin/dsh-myplugin/test-integration.ts

During build, the documentation distinguishes two paths. If building within the harness repository, use:

pnpm exec tsc -p tsconfig.local.json

If independently cloning and installing dependencies, use:

npm install && npm run build

The documentation also notes: lib/ is already built and committed; GitHub installations do not run build scripts.

Finally, test-run in the Web UI:

pnpm dsh --profile web --patch ./scratch-plugin/dsh-myplugin/cordis.patch.yml

Installation and Enabling

The fetched documentation does not provide official installation commands for dsh-plugin-template, and you should not directly construct an installation command from the template name.

If you publish the plugin as an npm package following the optional release path in the documentation, the user-side installation form is:

dsh plugin add <name>

Here, <name> is the published npm package name. The name, description, and repository fields in package.json from the fetched documentation are still placeholders; the final package name and repository address are not confirmed.

If you push to GitHub and use the GitHub installation path, the command form provided in the documentation is:

dsh plugin add "github:you/repo"

The documentation indicates that when pushing to GitHub, use a standalone repository, and this path requires the package root directory.

Tools, Config, and Parsing Conventions

The documentation lists the following conventions:

  • Optional tool parameters should omit required; writing required: false will be rejected by the schema compiler.
  • Define Config using Schemastery; invalid configurations fail loudly on load.
  • Apply boundaries to full results: limit file size, page count, and character count; truncate at meaningful boundaries and inform the model how to continue.
  • Node resolution: use .js suffixes for relative imports; declare @deepseek-ai/* dependencies in dependencies and resolve them from the profile’s node_modules.

Runtime Environment and Release Notes

  • engines requires node >=22.19.
  • Optionally npm publish; then users can dsh plugin add <name>.
  • lib/ is already built and committed; GitHub installations do not run build scripts.
  • Running npm install in a pnpm workspace subdirectory will fail; for independent development, scaffold outside the harness repository; for building within the repository, use tsconfig.local.json.

Applicable Scenarios and Notes

Suitable for developers who are already using DeepSeek Harness and need to write new plugins or organize their plugin repository structure.

Note: Plugins run with the current dsh process permissions; review the source code and license before installation. This template is licensed under MIT.

Links

  • GitHub: https://github.com/sunshine-lang/dsh-plugin-template
  • Directory page URL: Not provided in the fetched documentation.