deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:YTxue/dsh-skill-manager-ytxue
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH Web 插件:在设置侧边栏中提供「Skill 管理」面板(列表 / 启用 / 停用 / 规范检查与自动修复)。
settings.section slot,order: 900)。SKILL.md 的目录或 .md 文件)→ 导入 1 个(kind: single);路径是包含多个 skill 的大文件夹 → 自动逐个导入直接子级(含 SKILL.md 的子目录 + 顶层 .md 文件),非 skill 文件忽略(kind: batch);skills\(立即生效,导入后自动检查修复)或复制到池 skill-pool\(零挂载,之后按需启用);guizang-ppt-skill-main → guizang-ppt-skill);结果逐条显示 ✓(覆盖标记)/△(重名跳过)/✗(失败)与警告。~/.dsh/skills\(系统级,DSH rank 400 原生扫描)与池目录 ~/.dsh\skill-pool\(零挂载)双列表。bundle/flat 标签后显示来源级别——系统级(~/.dsh/skills,对全部项目生效)与项目级(<项目根>\.dsh\skills rank 100 / <项目根>\.agents\skills rank 200,仅该项目生效;只读展示、灰点、不参与规范检查)。.git 祖先(与 DSH skill-filesystem 判定一致,无 .git 用 cwd 自身)。切到哪个文件夹的会话,面板就只显示哪个文件夹的项目级 skill,不显示其他项目的。<dshHome> 自身自动排除避免与系统级重复;config.projectRoots 可显式补充展示(标「配置」)。description(无简介时提示"(无简介)")。~/.dsh/skill-manager-ytxue.checked.json(按 SKILL.md 内容指纹 sha1 判定)。~/.dsh/skill-manager-ytxue.log:name 缺失/非 kebab/与目录名不一致 → 以目录名为准修正description 缺失 → 补充占位描述(DSH 会排除无 description 的 skill)disable-model-invocation / user-invocable)驼峰拼写 → 改为 kebab;非布尔值 → 修正/删除(TRUE/FALSE/1/0/yes/no/on/off 均识别).md 均支持;冲突/重复安全报错,绝不覆盖)。DSH 的 skill 条目有两种形态,面板在名字旁用标签区分:
| 标签 | 形态 | 说明 |
|---|---|---|
| bundle | 目录:skills\<name>\SKILL.md |
一个目录,正文在 SKILL.md,可附带脚本/模板/资源等多文件(如 docx 的 scripts/、guizang-ppt-skill 的 assets/)。适合功能复杂的 skill。 |
| flat | 单文件:skills\<name>.md |
整个 skill 就是一个 Markdown 文件。适合纯指令型 skill。 |
两者对 DSH 完全等价(同样被扫描、同样 frontmatter 要求),面板操作(启用/停用/检查)行为一致;标签只提示你"这个 skill 是目录型还是单文件型",移动管理时两者都按整个条目(目录或文件)整体移动。
⚠️ 包名说明:npm 上的
dsh-skill-manager(maintainer:gohana,版本 0.1.x,发布于 2026-08-13)是无关的第三方包,与本项目不同。本项目包名为dsh-skill-manager-ytxue(ytxue为作者昵称,用于区分)。请勿通过npm install dsh-skill-manager(会装到该第三方包);安装一律以本仓库为准:
- 推荐:
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git后按方式 B 挂载;- 或:
dsh plugin --profile web add git+https://github.com/YTxue/dsh-skill-manager-ytxue(带仓库地址,不经过 npm 同名包)。
源码托管于 GitHub:git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git。
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git
dsh plugin --profile web add /path/to/dsh-skill-manager-ytxue # pnpm 装入 profile 依赖树
然后在 $DSH_HOME/profiles/web/cordis.patch.yml 追加挂载条目(见方式 B 第 2 步),重启 DSH 生效。
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git
将 dsh-skill-manager-ytxue 目录放入 profile 依赖树:$DSH_HOME/profiles/web/node_modules/dsh-skill-manager-ytxue/(依赖 @deepseek-ai/* 经 $DSH_HOME/profiles/node_modules 的 junction 解析,任何标准 DSH 安装都有)。
在 $DSH_HOME/profiles/web/cordis.patch.yml 追加:
- insert:
- id: skill-manager-ytxue
name: 'dsh-skill-manager-ytxue'
验证配置树:dsh --profile web --dump-config(应出现 skill-manager-ytxue 条目)。
重启 DSH 后打开设置 → 「Skill 管理」。
说明:DSH 插件无需
plugin.json——插件元数据(入口、客户端注入、bundle patch)统一声明在package.json的main/exports["./client"]/dsh字段(与官方生态dsh-*包一致)。
常见错误排查:若启动报
Cannot find package '@deepseek-ai/...'(如dsh-home-paths),说明插件放在了依赖查找链之外的位置。本插件 host 端为零第三方依赖(仅 node: 内置模块 + cordis 服务注入),标准方式下任何位置(含~/.dsh/plugins/)均可加载;若仍报错,请确认插件目录与 DSH 安装目录在同一个 Node 解析链上(推荐profiles/web/node_modules/或dsh plugin add)。
项目根默认自动发现(当前会话 cwd 的 .git 祖先 + workspace 注册表)。仅当某项目从没开过会话、又想展示时,用 DSH 通用配置方式——在 $DSH_HOME/settings.yaml 顶层加本插件的命名空间键:
skill-manager-ytxue:
projectRoots:
- '/path/to/project1'
- '/path/to/project2'
兼容说明:旧版
cordis.patch.yml挂载条目config.projectRoots写法仍有效(自动合并兜底),新配置请优先使用 settings.yaml。
<dshHome>/profiles/web/node_modules/dsh-skill-manager-ytxue/ 并挂载 patch(见上文方式 B)。本插件 host 端为零第三方依赖,也可放入 ~/.dsh/plugins/ 等位置。dsh plugin add 安装后删除插件目录,启动会报 cannot resolve profile bundle "dsh-skill-manager-ytxue"——请从 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 与 dependencies 中移除 dsh-skill-manager-ytxue 条目(可运行 dsh plugin --profile web remove dsh-skill-manager-ytxue 或手动编辑)。EADDRINUSE: 127.0.0.1:3080 说明已有 DSH 实例在运行,先停止旧进程(ss -ltnp | grep 3080 找到 PID 后 kill,或 pkill -f "dsh web")再启动。git/gnutls_handshake failed(如 qwen-mm-plugins)属于 GitHub 网络链路问题(GFW/代理),重试或为 git 配置代理后重试即可。node: 内置模块;host 端同样零第三方依赖(homedir 内联、settings 命名空间用普通函数 schema),任意位置(含 ~/.dsh/plugins/)均可加载;client 仅 require("react")(平台种子词)+ inject: ["slots", "sessions"]。defaultDshHome()/$DSH_HOME 解析(grep 审计通过);跨平台路径用 node:path。{ok:false, error};复制/删除失败捕获并报告;日志与检查状态文件写入失败静默降级。<dshHome>/skills 与 <dshHome>/skill-pool 内;覆盖(overwrite)只删除目标目录内同名条目。/api/skill-manager-ytxue/*,无外部请求。lib/client.js 顶层 if (typeof window !== 'undefined') 调试包裹(浏览器无碍,SSR 时需移除);lib/client.js.backup 为历史备份(可从 git original tag 追溯,可安全删除)。| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/skill-manager-ytxue/state |
双目录状态快照(含 description 与 checked 红绿点状态) |
| POST | /api/skill-manager-ytxue/check |
仅检查未检查项并修复,返回 {checked, fixed, skipped} |
| POST | /api/skill-manager-ytxue/enable |
body {name} |
| POST | /api/skill-manager-ytxue/disable |
body {name} |
| GET | /api/skill-manager-ytxue/list-dir |
目录浏览(选择器用),?path= 缺省为用户主目录 |
| POST | /api/skill-manager-ytxue/import |
body {source, target?, conflict?, dryRun?};dryRun 预检返回 {kind, pending, conflicts, failed};执行返回 {kind, imported, skipped, failed} |
响应统一 {ok, data?} / {ok:false, error}。
lib/index.js — host 半区(cordis 插件:apply/Config/inject/name)lib/client.js — 浏览器半区(__ModuleLoader__ AMD bundle)lib/core.js — 纯 Node 核心(检查/修复/池管理,可独立测试)test/core-test.mjs — core.js 单元测试(临时根,51 项:审计/自动修复/幂等/启停/冲突/导入/BOM/状态驱动):
node test/core-test.mjs
$DSH_HOME/profiles/web/node_modules/dsh-skill-manager-ytxue/$DSH_HOME/profiles/web/cordis.patch.yml → insert: skill-manager-ytxuedsh --profile web --dump-config 含 - id: skill-manager-ytxue / name: dsh-skill-manager-ytxuedisable frontend-design → enable frontend-design);HTTP 接口 import/enable/disable 全链路 + 冲突保护实测通过;/check 真实根审计 checked: 3, fixed: 0(docx/frontend-design/guizang-ppt-skill 全部合规);core 单元测试 51/51(含状态驱动跳过/指纹失效重查、BOM、kebab 重命名、description 补齐、布尔字段修正)。~/.dsh/(skills\、skill-pool\、skill-manager-ytxue.log、skill-manager-ytxue.checked.json)——确保该目录对 DSH 进程可写;日志/状态文件写入失败不会阻塞主流程(静默降级)。~/.dsh/skill-manager-ytxue.log(JSONL 审计/操作日志)、~/.dsh/skill-manager-ytxue.checked.json(检查状态表:skill 名 → 内容指纹+时间;内容变更即红点失效重查)。client.js 必须导出 inject = ["slots"](运行时服务注入声明,与 package.json 的 dsh.client.inject 构建期声明互补);缺失会导致 cannot get property "slots" without inject、loader entry 失败。lib/core.js 的 parseSkillDoc 已剥离 UTF-8 BOM(PS 5.1 Set-Content -Encoding UTF8 等 Windows 工具写入的 SKILL.md 带 BOM,不剥离会使 frontmatter 解析失败)——该修复在磁盘上,待下次重启 DSH 后生效。client.js 顶层有 if (typeof window !== 'undefined') 调试包裹,浏览器端无碍;未来做 SSR 时需恢复为直接 window.__ModuleLoader__.load(...)。~/.dsh/skill-manager-ytxue.log。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: skill-manager、skill-manager-ytxue。