Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心

dsh-skill-manage

Skill management plugin for DeepSeek Harness (dsh): list / enable / disable / delete / add / migrate / edit skills from the web UI settings panel. 为 DeepSeek Harness 提供技能管理:列表 / 启用 / 停用 / 删除 / 添加 / 迁移 / 编辑。

lijian-ui @lijian-ui ⬇ 1 ★ 0 main

安装

dsh plugin --profile web add github:lijian-ui/dsh-skill-manage
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

Skill management plugin for DeepSeek Harness (dsh): list / enable / disable / delete / add / migrate / edit skills from the web UI settings panel. 为 DeepSeek Harness 提供技能管理:列表 / 启用 / 停用 / 删除 / 添加 / 迁移 / 编辑。

该插件未提供要点说明,请参考仓库 README。

  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/lijian-ui/dsh-skill-manage
许可证MIT
主要语言main
下载量1
GitHub 星标0
最近推送2026-08-23
收录日期2026-09-19
分类界面增强

事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

# dsh-skill-manage · Skill Management Plugin

**English** | [中文](./README.zh-CN.md)

> A skill management plugin for DeepSeek Harness (dsh) desktop: list / enable / disable / delete / add / migrate skills, filling the gap in dsh's official skill toggle control.

## Features

| Feature | Description |
|---|---|
| Skill List | Display all skills grouped by scope (global / workspace), with search |
| Enable / Disable | Toggle switch for hot enable/disable, no restart required |
| Delete Skill | Permanently remove skill files with a custom confirmation dialog |
| Add Skill | Upload new skills from local files (directory bundle or single file) |
| Skill Details | Render skill content as Markdown, display frontmatter metadata table |
| Batch Migrate | Copy or move skills between global / workspace scopes |

## Background

dsh officially has **no** skill enable/disable control — no CLI command, no settings UI, no slash command, no config file field, no API method. The only official "control" is via frontmatter fields `disable-model-invocation` and `user-invocable`, which require manual file editing and don't truly disable the skill (it's still discovered and loaded, just hidden from certain interfaces).

This plugin implements true toggle control via a `.disabled` file rename mechanism: renaming `SKILL.md` to `SKILL.md.disabled` causes dsh's official provider to ignore the file (it only recognizes `.md` extensions), effectively "disabling" the skill.

## Installation

### Prerequisites

- DeepSeek Harness (dsh) desktop
- Node.js >= 18

### Integration in dsh-desktop

1. Add the plugin as a project dependency:

```bash
npm install @lijian-ui/dsh-skill-manage
```

2. Register the plugin in dsh desktop's plugin configuration (typically in `src/main/profile-init.ts`).

3. Restart the desktop app.

### Local Development

```bash
# Enter the plugin directory
cd extensions/dsh-skill-manage

# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run watch

# Type check
npm run typecheck
```

Build output goes to `lib/` and is automatically synced to `node_modules/@lijian-ui/dsh-skill-manage` via junction. Restart the desktop app after each build to load the new bundle.

## Usage

1. Open dsh desktop
2. Navigate to **Settings** → **Skill Manage**
3. In the skill list:
   - Click the toggle switch to enable/disable a skill
   - Click the delete button to permanently remove a skill
   - Click a skill card to view details
   - Use the search box to filter skills
   - Click "Add skill" to upload a new skill
   - Click "Batch migrate" to move skills between scopes

### Skill File Convention

| State | Directory Bundle | Flat File |
|---|---|---|
| Enabled | `/SKILL.md` | `.md` |
| Disabled | `/SKILL.md.disabled` | `.md.disabled` |

### Skill Scopes

| Scope | Path | Description |
|---|---|---|
| Global dsh | `~/.dsh/skills/` | User global skills |
| Global agents | `~/.agents/skills/` | Agents global skills |
| Workspace | `/.dsh/skills/` | Project-level skills |
| Bundled | `DSH_BUNDLED_SKILL_DIR` | Deployment-bundled, read-only |

## Technical Architecture

### Directory Structure

```
extensions/dsh-skill-manage/
├── src/
│   ├── index.ts                    # Host entry
│   ├── remote.ts                   # Host RPC methods (list/setEnabled/deleteSkill/migrate etc.)
│   ├── skill-files.ts              # File conventions (DISABLED_SUFFIX, collectSkillEntries)
│   ├── scope.ts                    # Migration engine
│   └── client/
│       ├── index.ts                # Client entry (SECTION_ID, RPC registration, inject)
│       ├── SkillManageSection.tsx  # Main settings component (card list + toggle + detail dialog)
│       └── client-i18n.ts         # Client i18n (zh/en)
├── lib/                            # Build output
├── docs/
│   └── troubleshooting-and-bugs.md # Troubleshooting & official bug analysis
├── package.json
└── tsdown.config.ts
```

### Host Side (`src/remote.ts`)

Provides the following RPC methods:

| Method | Function |
|---|---|
| `list(sessionId)` | List all skills with enabled status |
| `content(name, sessionId)` | Get full skill content |
| `setEnabled(name, sessionId, enabled)` | Enable/disable skill (file rename) |
| `deleteSkill(name, sessionId)` | Delete skill |
| `addSkill(sessionId, payload)` | Add new skill |
| `workspaces()` | List available workspaces |
| `migrate(name, sessionId, payload)` | Migrate a single skill |
| `batchMigrate(sessionId, payload)` | Batch migrate skills |

### Client Side (`src/client/`)

- **`index.ts`**: Registers the settings section via `ctx.slots.inject`
- **`SkillManageSection.tsx`**: React component rendering skill cards, toggle switches, detail dialog, delete confirmation, and migration dialog
- **`client-i18n.ts`**: Chinese/English translations

### Toggle Mechanism

```
User clicks toggle
  → Client optimistically updates UI (immediate switch state change)
  → RPC call to host setEnabled
  → Host: rename(SKILL.md ↔ SKILL.md.disabled)
  → dsh chokidar watcher detects file change
  → Registry cache invalidated (revision++)
  → After 800ms delay, ctx.emit('connection/reset')
  → Client fetches Map cleared
  → Next / completion re-queries → gets latest skill list
```

## Known Issues & Solutions

### Slash command completion not refreshing after enabling a skill

**Issue**: After enabling a skill, the `/` slash command completion menu in the chat doesn't show the newly enabled skill.

**Root Cause**: dsh's official `dsh-client-ui-skill` package is missing a subscription to the `skills/change` event, causing the client-side skill list cache to never be invalidated when skill files change.

**Our Solution**: In `reloadAfterHot`, after an 800ms delay, call `ctx.emit('connection/reset')` to silently refresh all module caches. Since the user is in the settings panel, they won't perceive the cache refresh in the chat interface.

See [Troubleshooting & Bug Analysis](./docs/troubleshooting-and-bugs.md) for details.

## Internationalization

Supports Chinese and English. Translation files are in `src/client/client-i18n.ts`. Language follows the dsh desktop language setting.

## Tech Stack

- **Language**: TypeScript
- **Build**: tsdown (rolldown)
- **Frontend**: React 18
- **Markdown Rendering**: `MarkdownText` component from `@deepseek-ai/dsh-client-ui-primitives`
- **YAML Parsing**: yaml (frontmatter parsing)
- **File Watching**: dsh's official chokidar watcher (auto-detects skill file changes)

## License

MIT

## Related Links

- [Troubleshooting & Bug Analysis](./docs/troubleshooting-and-bugs.md)
- [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/dsh)

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。