dsh-skill-viewer

86Stars8Forks0Issues0Watchers

Provides a skill management panel and command-line interface for DSH, supporting hot adding/removing, enabling/disabling, cross-workspace migration, and grouping.

Language
JavaScript
License
MIT
Branch
main
deepseekdshdsh-pluginmcppluginskills

Install

$ dsh plugin --profile web add github:Fishquito7/dsh-skill-viewer

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

One-Sentence Pitch

Add a "Skills" settings panel to DeepSeek Harness, plus a dsh-skill command-line tool, letting you toggle, add, remove, migrate, and group-manage skill files directly from the web interface and terminal—without manually editing SKILL.md or restarting the gateway.

Core Features

  • Add a "Skills" entry under "Plugins" in the web settings page, displaying registered skill cards with search by name and click-to-expand for full SKILL.md content
  • Provide enable/disable toggles (closed skills can be re-enabled later), delete buttons, and batch migration buttons; state changes take effect instantly via file renaming, with DSH's built-in listener detecting changes within ~200ms
  • Support adding skills from .md files, directories with top-level SKILL.md, and .zip packages; drag-and-drop or click "+" to upload, max 200 files or 8 MB per batch
  • Workspace tab bar ("Global" + each workspace, filterable by group) for one-click switching to show only skills in a specific scope; skills with the same name in global and workspace appear as separate rows
  • Skill grouping (private display config only for this plugin, stored in ~/.dsh/skills/.system/skill-viewer/groups.json), does not modify skill files themselves, can filter by group
  • Built-in dsh-skill CLI: list/add/enable/disable/delete/scope/migrate/update, works even when gateway is down, hot-reloads changes

Technical Implementation

  • Language: TypeScript (ESM, type: module)
  • Key Dependencies: @deepseek-ai/dsh-typert-protocol (register Typert remote service), @deepseek-ai/dsh-home-paths (resolve user home), fflate (ZIP extraction), yaml (frontmatter parsing), zod (wire schema validation)
  • Architecture Pattern: Cordis half-zone plugin; cordis.patch.yml automatically mounts the skills-viewer bundle to dsh.profile.bundles; host-side apply(ctx) registers a remote service named skillsViewer with typert, exposing methods (list/workspaces/groups/checkUpdate/saveGroup/deleteGroup/content/setEnabled/migrate/batchMigrate/deleteSkill/addSkill) to the API gateway; client is a browser-side React component (client.ts), communicating with the host via Typert protocol; CLI is an independent node entry point lib/cli.js
  • Entry Files: src/index.ts (host half-zone), src/client.ts (Web UI client), src/cli.ts (CLI), compiled output in lib/

Use Cases

Users who frequently toggle/add/remove skills without touching YAML or restarting the gateway. For example, after setting up a new workspace, batch-import several skills then enable them as needed, or migrate a debugging skill from a project to global sharing; the CLI is also suitable for directly managing skills in terminal, SSH remote, or when the gateway is unavailable.

Prerequisites & Compatibility

DependencyMin VersionNotes
DSH (cordis / typert)0.1.0-rc.6+From @deepseek-ai/dsh-typert-protocol: ^0.1.0-rc.6
Node.jsNot declaredNo engines field in package.json; source uses built-in APIs like node:fs/promises, AbortController, fetch
PlatformmacOS / Windows / LinuxCross-platform; process.platform === "win32" branch handles Windows path case-insensitivity
Native ModulesNoneAll dependencies (fflate/yaml/zod/@deepseek-ai/*) are pure JS, no node-pty, node:sqlite, etc.

Installation

dsh plugin --profile web add github:Fishquito7/dsh-skill-viewer

Configuration

ConfigTypeDescriptionDefault
DSH_HOMEEnv VariableUser home directory, overrides default ~/.dsh~/.dsh
DSH_AGENTS_HOMEEnv VariableLegacy user home directory, overrides default ~/.agents~/.agents

This plugin requires no additional YAML/Schema editing; cordis.patch.yml is automatically appended by dsh plugin add, no manual maintenance needed.

FAQ

Q: What does this plugin do?

A: Adds a "Skills" settings panel and dsh-skill CLI to DeepSeek Harness, enabling direct enable/disable, add, remove, migrate, and group management of skill files from web and terminal—the underlying mechanism is modifying SKILL.md, and DSH's file listener automatically detects changes.

Q: What will I see after installation?

A: A "Skills" entry appears under "Plugins" in the settings page: skill card list, status toggles, search bar, workspace tab, group tab, add and migration buttons; the terminal gains the dsh-skill command. No manual cordis.patch.yml editing needed.

Q: Is additional configuration required?

A: No configuration needed. Only two environment variables DSH_HOME and DSH_AGENTS_HOME can change the user home (defaults ~/.dsh, ~/.agents), keep defaults for normal use.

Q: What sources are supported for adding skills?

A: Three forms: single .md file, directory with top-level SKILL.md, .zip package; drag-and-drop or click "+" to upload; auto-detects structure; invalid content (missing SKILL.md, frontmatter errors, duplicate names in batch, path conflicts) will be rejected with explanation.

Q: What if a skill with the same name exists in both global and workspace?

A: Displayed as separate rows by (name + scope) in the UI, independent of each other; CLI's enable/disable/delete with duplicate names across scopes must explicitly use --global/--project/--workspace, otherwise exits with error—no silent operations on the "winning" one.

Q: Where is data stored? Will it be lost after uninstalling the plugin?

A: Skill entities are ordinary files: global in ~/.dsh/skills/, workspace in <workspace project root>/.dsh/skills/. Disable = rename SKILL.md to SKILL.md.disabled, enable = rename back. Uninstalling the plugin does not touch these files; they continue to be discovered by DSH's built-in provider.

Q: What if Git installation fails?

A: pnpm v11 disallows git-hosted plugins from running prepare scripts by default; add the key pnpm provides in the error to allowBuilds in the profile directory's pnpm-workspace.yaml and retry; or directly install the release tarball to bypass build script restrictions.

Q: Why can't bundled skills be modified?

A: Skills deployed with DSH (source === "bundled") are read-only; both UI and CLI will reject disabling, deleting, and migrating, with prompt "Bundled with deployment, cannot be modified."

Learning Curve

Beginner — one-click installation, no YAML modifications needed; page features are clickable, CLI's list/enable/disable/delete/add require no complex parameters.

Known Issues & Limitations

  • Legacy frontmatter fields disableModelInvocation / modelInvocable will be rejected; must use disable-model-invocation / user-invocable instead (src/skill-files.ts:111-113)
  • Bundled skills (source === "bundled") cannot be disabled, deleted, or migrated (src/index.ts:627, src/index.ts:728)
  • pnpm v11 disallows running prepare scripts during Git installation by default, reports "git-hosted plugins build on install..."; need to allowlist in profile directory's pnpm-workspace.yaml under allowBuilds, or install release tarball (README.md:39-50)
  • dsh-skill CLI by default scans only the current directory's anchored project root and user home; managing other workspaces requires --cwd <workspace path>; same-name multi-scope operations must explicitly use --global/--project/--workspace (src/cli.ts:79-80, src/cli.ts:493-516)
  • Add skill total size limit 8 MB, max 200 files per batch; zip structure must be "one directory containing SKILL.md" or "flat multiple .md" files, otherwise entire batch is rejected (src/index.ts:302-303, src/index.ts:821)
  • dsh-skill update directly requests the latest version URL from GitHub Releases; will fail when network is unreachable or rate-limited (src/cli.ts:466); web端的"检查更新" button failure is silently ignored (src/client.ts:1082)