DSH Plugin Store
Back to home

jasper-zsh

dsh-plugin-skill-panel

DeepSeek Harness(DSH)的只读技能清单插件,在 Web GUI 中展示全局技能和当前会话可见的技能,并从会话日志推导技能加载状态。

Stars
0
Language
TypeScript
Created
Aug 14, 2026
Updated
Aug 14, 2026
Skills
GitHub repo

Introduction

dsh-plugin-skill-panel

DeepSeek Harness(DSH) 的只读技能清单插件,在 Web GUI 中展示全局技能和当前会话可见的技能,并从会话日志推导技能加载状态。

功能

  • 会话技能视图:在会话顶部视图栏增加“技能”页签,按“项目技能”和“全局技能”分组。
  • 全局技能清单:在设置面板增加“技能”页面,只显示默认 Agent Preset 可见的非项目技能。
  • 只读展示:没有加载、刷新、启停等操作按钮;清单每 15 秒自动更新一次。
  • 技能详情对话框:点击任一技能行,在模态对话框中查看技能说明和入口正文,不再占用列表行内空间。
  • 技能文件浏览器:对话框左侧以树形结构展示入口正文明确引用的本地资源,右侧按需读取并显示 UTF-8 文本文件内容。
  • 安全读取边界:不枚举可变目录;仅允许读取安全清单中的文件,打开时限制在 backing SKILL.md 目录内且不跟随符号链接。单文件最大展示 1 MiB,文件树最多 1,000 项。
  • 会话排序:会话页每个技能分组中的自定义技能固定排在该分组末尾。
  • 状态推导:展示“可用 / 已加载 / 加载中 / 加载失败 / 仅手动 / 已禁用”。
  • 来源标记:区分项目 .dsh、项目 .agents、全局 .dsh、全局 .agents、内置、自定义和运行时来源。
  • 静态 TypeScript 双端插件:Host 查询 DSH 技能注册表和会话事件,Client 只接收最小化 JSON 数据。

当前 DSH 没有可追加的通用右侧详情页签槽位;details 只服务于选中的 Tool call。插件因此使用官方的 conversation.view 加性槽位作为独立会话页面,不会替换详情栏或聊天界面。

状态含义

状态含义
可用当前会话目录可见,允许模型通过 skill 工具加载,但本会话尚无成功加载记录。
已加载会话日志中存在成功的 skill 工具结果,或存在用户显式技能调用注入。
加载中已记录 skill 工具调用,尚未记录配对结果。
加载失败最近一次加载尝试失败,且本会话此前没有成功加载记录。
仅手动不允许模型调用,但允许用户显式调用。
已禁用模型和用户调用策略均关闭。

“已加载”不是 DSH Skill Registry 的原生字段,而是插件根据持久化的 tool/calltool/resultskill-invocation 会话事件推导。

项目结构

src/
├── index.ts              # Host 入口和只读 HTTP 端点
├── catalog.ts            # 技能目录查询、作用域解析和加载状态折叠
├── services.ts           # 插件使用的 Host 服务结构类型
├── types.ts              # Host/Client 共享 JSON 类型
└── client/
    ├── index.tsx         # Web Client 入口与槽位注册
    ├── api.ts            # 同源技能目录请求
    ├── components.tsx    # 会话及全局只读清单
    └── styles.ts         # 主题变量驱动的紧凑列表样式

构建输出:

  • lib/index.js:Host ESM;
  • lib/client.js:DSH Web lazy-CJS Client bundle。

开发

pnpm install
pnpm typecheck
pnpm build
pnpm dev

pnpm dev 使用 tsdown --watch 持续重建 Host 和 Client bundle。Web profile 还需要启用 Cordis hmr 行,并将本仓库的 realpath 加入 hmr.config.root。Client bundle 由 DSH client-hmr 的轮询与 SSE 通道热替换;首次新增插件到 profile 后需要刷新一次页面,后续 Client 修改无需刷新。

安装到 Web profile

dsh plugin --profile web add "$PWD"

~/.dsh/profiles/web/cordis.patch.yml 中加入:

- insert:
    - id: skill-panel
      name: dsh-plugin-skill-panel

- id: hmr
  disabled: false
  config:
    root:
      - .
      - /absolute/real/path/to/dsh-plugin-skill-panel

HTTP API

请求说明
GET /skill-panel/catalog.json默认 Agent Preset 可见的全局技能。
GET /skill-panel/catalog.json?sessionId=<id>指定已附着会话可见的项目/全局技能及加载状态。
GET /skill-panel/detail.json?name=<name>读取全局技能正文和声明资源文件树。
GET /skill-panel/detail.json?name=<name>&sessionId=<id>读取指定会话可见技能的正文和声明资源文件树。
GET /skill-panel/file.json?name=<name>&path=<relative-path>读取全局技能安全清单中的 UTF-8 文本文件。
GET /skill-panel/file.json?name=<name>&path=<relative-path>&sessionId=<id>读取指定会话技能安全清单中的文本文件。

所有响应使用 Cache-Control: no-store。API 不返回绝对路径;文件端点拒绝目录穿越、符号链接、非 UTF-8 文件和超过 1 MiB 的文件。