DeepSeek Harness 社区插件:MCP 连接管理面板 + Skills 管理面板ZIP 导出
34.3/100
综合分
6
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add pengxiaozi/dsh-plugins该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/20) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 73 处,展示前 64 条)
- 发起网络请求dsh-mcp-panel/client/client.js:82
const response = await fetch(url, Object.assign({ credentials: 'same-origin', headers: { accept: 'application/json' } }, options || {})) - 写入本地文件dsh-mcp-panel/lib/index.js:177
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-mcp-panel/lib/index.js:178
writeFileSync(file, new Date().toISOString() + ' ' + message + '\n', { flag: 'a' }) - 读取本地文件dsh-mcp-panel/lib/index.js:186
return JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件dsh-mcp-panel/lib/index.js:194
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-mcp-panel/lib/index.js:195
writeFileSync(tmp, text) - 写入本地文件dsh-mcp-panel/lib/index.js:196
renameSync(tmp, file) - 读取本地文件dsh-mcp-panel/lib/index.js:364
current = readFileSync(patchPath, 'utf8') - 发起网络请求dsh-runtime-inspector/client/client.js:499
fetch(`${API}${path}`, { - 写入剪贴板dsh-runtime-inspector/client/client.js:558
clipboard.writeText(text).then(() => { - 读取本地文件dsh-runtime-inspector/lib/inventory.js:93
const entries = await readdir(join(dir, SCOPE)) - 读取本地文件dsh-runtime-inspector/lib/inventory.js:114
const source = await readFile(file, 'utf8') - 读取本地文件dsh-runtime-inspector/lib/inventory.js:144
const text = await readFile(file, 'utf8') - 读取本地文件dsh-runtime-inspector/lib/inventory.js:451
const entries = await readdir(join(root.dir, SCOPE), { withFileTypes: true }) - 读取本地文件dsh-runtime-inspector/lib/inventory.js:476
const manifest = JSON.parse(await readFile(join(dir, 'package.json'), 'utf8')) - 读取本地文件dsh-runtime-inspector/lib/inventory.js:482
const source = await readFile(join(dir, 'lib', 'index.js'), 'utf8') - 发起网络请求dsh-sec-checklist/client/client.js:39
const res = await fetch(url, options) - 写入剪贴板dsh-sec-checklist/client/client.js:268
await navigator.clipboard.writeText(String(value)) - 读取本地文件dsh-sec-checklist/lib/index.js:96
try { names = readdirSync(root.path) } catch { continue } - 读取本地文件dsh-sec-checklist/lib/index.js:102
try { stat = statSync(abs) } catch { continue } - 读取本地文件dsh-sec-checklist/lib/index.js:106
if (existsSync(candidate)) mdPath = candidate - 读取本地文件dsh-sec-checklist/lib/index.js:114
try { text = readFileSync(mdPath, 'utf8').slice(0, 65536) } catch { continue } - 写入本地文件dsh-sec-checklist/lib/index.js:389
writeFileSync(logPath, '[' + new Date().toISOString() + '] ' + String(message) + '\n', { flag: 'a' }) - 读取本地文件dsh-sec-checklist/lib/index.js:395
if (!existsSync(configPath)) { - 写入本地文件dsh-sec-checklist/lib/index.js:396
try { writeFileSync(configPath, JSON.stringify(defaultConfig(), null, 2) + '\n') } catch (error) { log('config init failed: ' + error) } - 读取本地文件dsh-sec-checklist/lib/index.js:402
const stat = statSync(configPath) - 写入本地文件dsh-sec-checklist/lib/index.js:426
writeFileSync(tmp, JSON.stringify(config, null, 2) + '\n') - 写入本地文件dsh-sec-checklist/lib/index.js:427
renameSync(tmp, configPath) - 发起网络请求dsh-sensitive-mask/client/client.js:83
const response = await fetch(url, Object.assign({ credentials: 'same-origin', headers: { accept: 'application/json' } }, options || {})) - 执行外部命令来自配置/变量dsh-sensitive-mask/lib/index.js:367
const child = spawn(command, [dir], { detached: true, stdio: 'ignore' }) - 写入本地文件dsh-sensitive-mask/lib/index.js:384
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-sensitive-mask/lib/index.js:404
appendFileSync(file, lines.join('\n') + '\n') - 读取本地文件dsh-sensitive-mask/lib/index.js:412
names = readdirSync(dir) - 读取本地文件dsh-sensitive-mask/lib/index.js:420
const st = statSync(full) - 读取本地文件dsh-sensitive-mask/lib/index.js:433
if (!existsSync(full)) throw new Error('日志文件不存在') - 读取本地文件dsh-sensitive-mask/lib/index.js:434
const lines = readFileSync(full, 'utf8').split('\n').filter(Boolean) - 写入本地文件dsh-sensitive-mask/lib/index.js:486
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-sensitive-mask/lib/index.js:487
writeFileSync(tmp, text) - 写入本地文件dsh-sensitive-mask/lib/index.js:488
renameSync(tmp, file) - 写入本地文件dsh-sensitive-mask/lib/index.js:518
mkdirSync(logDir, { recursive: true }) - 读取本地文件dsh-sensitive-mask/lib/index.js:519
if (!existsSync(configPath)) writeFileAtomic(configPath, JSON.stringify(defaultConfig(), null, 2) + '\n') - 读取本地文件dsh-sensitive-mask/lib/index.js:524
const st = statSync(configPath) - 发起网络请求dsh-session-exporter/client/client.js:216
fetch(`${API}${path}`, { cache: 'no-store', credentials: 'same-origin', headers: { accept: 'application/json' } }) - 发起网络请求dsh-session-exporter/client/client.js:274
const response = await fetch(`${API}/save`, { - 读取本地文件dsh-session-exporter/lib/sessions.js:273
const info = await stat(workspacePath).catch(() => null) - 读取本地文件dsh-session-exporter/lib/sessions.js:281
while (existsSync(directory)) { - 写入本地文件dsh-session-exporter/lib/sessions.js:285
await mkdir(directory, { recursive: true }) - 写入本地文件dsh-session-exporter/lib/sessions.js:299
await writeFile(target, result.content, 'utf8') - 写入本地文件dsh-session-exporter/lib/sessions.js:317
await writeFile(join(directory, 'all.json'), JSON.stringify({ exportedAt: new Date().toISOString(), sessions: combined.json }, null, 2), 'utf8') - 写入本地文件dsh-session-exporter/lib/sessions.js:321
await writeFile(join(directory, 'all.md'), `# 工作区全部会话导出\n\n- 工作区:\`${workspacePath}\`\n- 会话数:${sessions.length}\n- 导出时间:${new Date().toISOString()}\n$ - 写入本地文件dsh-session-exporter/lib/sessions.js:325
await writeFile(join(directory, 'all.qa.json'), JSON.stringify({ exportedAt: new Date().toISOString(), sessions: combined.qa }, null, 2), 'utf8') - 写入本地文件dsh-session-exporter/lib/sessions.js:338
await writeFile(join(directory, 'manifest.json'), JSON.stringify(manifest, null, 2), 'utf8') - 发起网络请求dsh-skill-panel/client/client.js:91
const response = await fetch(url, Object.assign({ credentials: 'same-origin', headers: { accept: 'application/json' } }, options || {})) - 发起网络请求dsh-skill-panel/client/client.js:103
const response = await fetch(url, { credentials: 'same-origin' }) - 写入剪贴板dsh-skill-panel/client/client.js:269
await navigator.clipboard.writeText(skill.dir || skill.path || '') - 执行外部命令来自配置/变量dsh-skill-panel/lib/index.js:52
const child = spawn(command, [dir], { detached: true, stdio: 'ignore' }) - 读取本地文件dsh-skill-panel/lib/index.js:165
names = readdirSync(dir) - 读取本地文件dsh-skill-panel/lib/index.js:175
st = statSync(abs) - 读取本地文件dsh-skill-panel/lib/index.js:198
if (typeof skillPath !== 'string' || skillPath === '' || !existsSync(skillPath)) return null - 读取本地文件dsh-skill-panel/lib/index.js:201
st = statSync(skillPath) - 读取本地文件dsh-skill-panel/lib/index.js:298
names = readdirSync(root.path) - 读取本地文件dsh-skill-panel/lib/index.js:308
st = statSync(abs) - 写入本地文件dsh-skill-panel/lib/index.js:368
mkdirSync(profileDir, { recursive: true }) - 写入本地文件dsh-skill-panel/lib/index.js:369
appendFileSync(join(profileDir, 'skill-panel.log'), new Date().toISOString() + ' ' + message + '\n')
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成DSH Plugins — DeepSeek Harness 社区插件
面向 DeepSeek Harness 的六个 Web 插件:MCP 连接管理、Skills 管理、敏感信息脱敏、渗透测试安全清单、运行时透视(拦截 / 规则 / 提示词链)和 会话导出。运行时透视与会话导出是左侧栏独立面板,其余搬进设置页;全部纯本地运行,无任何外部上传。
插件一览
| 插件 | 设置入口 | 能力 |
| dsh-mcp-panel | MCP 连接 | 查看所有 MCP 服务器(托管 + profile 配置行)、连接状态与工具数;新增/编辑/删除;托管配置写入 profile 的 cordis.patch.yml 并热重载 |
| dsh-skill-panel | Skills | 查看全部本地/内置 skill,搜索、来源过滤、SKILL.md 预览、文件清单、打开文件夹;导出单个/选中/全部为 ZIP(含 _manifest.json) |
| dsh-sensitive-mask | 脱敏显示 | 发往模型前按正则/字面量脱敏(占位符 / 部分隐藏 / 固定文本,全局默认 + 单规则覆盖,头尾位数可配);仅占位符会在工具执行前还原;命中写本地 JSONL 日志(默认不存原文) |
展开完整文档(README 剩余 1 节)
DSH Plugins — DeepSeek Harness 社区插件 面向 DeepSeek Harness 的六个 Web 插件:MCP 连接管理、Skills 管理、敏感信息脱敏、渗透测试安全清单、运行时透视(拦截 / 规则 / 提示词链)和 会话导出。运行时透视与会话导出是左侧栏独立面板,其余搬进设置页;全部纯本地运行,无任何外部上传。 插件一览 | 插件 | 设置入口 | 能力 | | dsh-mcp-panel | MCP 连接 | 查看所有 MCP 服务器(托管 + profile 配置行)、连接状态与工具数;新增/编辑/删除;托管配置写入 profile 的 cordis.patch.yml 并热重载 | | dsh-skill-panel | Skills | 查看全部本地/内置 skill,搜索、来源过滤、SKILL.md 预览、文件清单、打开文件夹;导出单个/选中/全部为 ZIP(含 _manifest.json) | | dsh-sensitive-mask | 脱敏显示 | 发往模型前按正则/字面量脱敏(占位符 / 部分隐藏 / 固定文本,全局默认 + 单规则覆盖,头尾位数可配);仅占位符会在工具执行前还原;命中写本地 JSONL 日志(默认不存原文) | | dsh-sec-checklist | 安全清单 | 渗透测试检查清单:内置 6 分类 36 项 + 自定义;项目/授权/范围/测试账号本机保存;勾选要调用的渗透 skill;保存后注册运行时技能 security-checklist 供 AI 加载;内置 Playbook 与 Yakit MCP 工具对照 | | dsh-runtime-inspector | 左侧栏「运行时透视」 | 查看宿主真正拦截了什么:事件钩子表(监听器按 Loader 包归属、注册顺序、prepend)、运行时拦截决策记录(pass / intercept / error)、审批与 workspace 规则、system prompt 装配链与渲染结果、宿主包字符串常量与 schema 默认值。只读、同源登录鉴权、无外部请求 | | dsh-session-exporter | 左侧栏「会话导出」 | 按工作区列出全部会话(含冷会话/子会话),单会话或整批导出 Markdown / 无损 JSON / JSONL / 问答 JSON / 事件索引;下载 ZIP 或写入 <workspace>/dsh-session-exports/<时间戳>/(含 all.md / all.json / all.qa.json / manifest.json);Agent 可用 dsh_session_export 读取导出内容并提炼成 Markdown 文档。只读会话日志,唯一写操作限于已注册工作区 | 六个插件都是 host 半 + web client 半 的结构,遵循 DSH 官方插件形态: - package.json 声明 dsh.bundle.patch 与 dsh.client; - host 半通过 ctx.inject(['webServer']) 挂同源 HTTP 路由; - client 半注册 settings.section 面板,通过 window.__ModuleLoader__ 懒加载。 Skills | Skill | 作用 | | plan-gate | 首个需求先出「实施方案 + 涉及文件清单」再请求确认的闸门;确认后执行,同一需求只做一次 | 安装(全局技能目录):把 skills/plan-gate 复制到 <AGENTS_HOME>/skills/plan-gate(Windows 默认 %USERPROFILE%\.agents\skills\plan-gate),刷新页面后技能出现在目录中;也可在对话中直接用 /plan-gate 显式调用。 安装(本地 link,当前 DSH 版本) DSH 目前没有发布这些包到 npm,用 profile 的 link: 安装: 1) 克隆本仓库 git clone https://github.com/pengxiaozi/dsh-plugins.git 2) 在 DSH profile 目录安装(Windows 默认 %DSH_HOME%\profiles\<profile>) cd "$DSH_HOME/profiles/desktop" pnpm add "link:<repo>/dsh-mcp-panel" pnpm add "link:<repo>/dsh-skill-panel" pnpm add "link:<repo>/dsh-sensitive-mask" pnpm add "link:<repo>/dsh-sec-checklist" pnpm add "link:<repo>/dsh-runtime-inspector" pnpm add "link:<repo>/dsh-session-exporter" 3) 在 profile package.json 的 dsh.profile.bundles 末尾追加: "dsh-mcp-panel", "dsh-skill-panel", "dsh-sensitive-mask", "dsh-sec-checklist", "dsh-runtime-inspector", "dsh-session-exporter" 或在 profile 的 cordis.patch.yml 里用 loader insert 行加载(推荐,宿主回写 bundles 时不会丢) 4) 刷新 DSH 页面(Ctrl+F5);未出现则重启 DSH 卸载:从 bundles 移除六个名字,pnpm remove dsh-mcp-panel dsh-skill-panel dsh-sensitive-mask dsh-sec-checklist dsh-runtime-inspector dsh-session-exporter,删除插件目录。 兼容性 - 已在 DeepSeek Harness 0.2.1-rc.1 ~ 0.2.1-rc.3 验证(Windows 桌面版,desktop 配置档 / web 面); - 只使用公开插件面:webServer、loader、configEditor、tools、skills、profileContext;运行时透视另外使用 connection、events(活事件表)、sessions、approval、workspaceRegistry、systemPrompt;会话导出另外使用 connection、sessionPersistence(含冷会话)、workspaceRegistry、sessions、workingDirectory; - 不依赖任何第三方运行时依赖,插件代码只用 Node 内置模块;运行时透视读取宿主包源码时,限定在安装目录的 node_modules/@deepseek-ai/ 内。 安全与隐私 - 不收集、不上传任何数据:无遥测、无外部请求;列表、读写、导出全部在本机完成。 - MCP 面板会把服务器配置(含 headers 中的 Authorization 等令牌)以明文写入 profile 的 cordis.patch.yml。请勿把 profile 目录提交到公共仓库;建议优先使用 127.0.0.1 本地地址。 - Skills 面板只读:不修改、不删除 skill 文件;ZIP 在内存中生成后直接返回浏览器。 - 导出路径与技能名来自 DSH 技能目录(ctx.skills),不接受任意文件系统路径。 - 脱敏显示:规则与命中日志只保存在本机 profile;日志默认只记规则、脱敏结果、长度与 hash,不记原文(可在设置里显式打开);占位符映射只在进程内存中,重启即清空;插件不发起任何外部请求。 - 安全清单:项目、授权、范围、测试账号只保存在本机 profile(sec-checklist.json);密码为本地明文,默认不会写进运行时技能或模型上下文(需在设置里显式打开「把密码写进清单」);插件不内置任何真实凭据,不发起外部请求。 - 运行时透视只读:所有 /dsh-runtime-inspector/ 路由先过 ctx.connection.requestRejection(Host/Origin + 登录 cookie),未登录返回 401;插件只观察 system-prompt/assemble、llm/stream、tools/ 等事件并原样 next(),不写配置、不改 system prompt、不注入内容、无外部请求;source 路由只能读安装目录 @deepseek-ai 包内文件并拒绝路径穿越;拦截记录只存在进程内存环形缓冲(200 条,插件重载即清空)。 - 会话导出只读 + 限定写入:/dsh-session-exporter/ 同样先过 ctx.connection.requestRejection;读取走 ctx.sessionPersistence 的校验式日志,不直接读 JSONL 文件;唯一的写操作「导出到工作区」只接受已注册工作区目录,文件固定写入 <workspace>/dsh-session-exports/<时间戳>/,不接受任意路径;附件只导出事件里的引用,不复制二进制;无外部请求。 开发与测试 每个插件目录下都有自包含测试: node dsh-mcp-panel/test/smoke.mjs node dsh-skill-panel/test/smoke.mjs node dsh-skill-panel/test/host-routes.mjs # 用假 ctx 跑通 state/body/export 路由 node dsh-sensitive-mask/test/smoke.mjs node dsh-sensitive-mask/test/host-routes.mjs node dsh-sec-checklist/test/smoke.mjs node dsh-sec-checklist/test/host-routes.mjs # 假 ctx:运行时技能注册、state/config/preview/doc/reveal/reset node dsh-runtime-inspector/test/smoke.mjs # 纯函数:常量/默认值解析、prompt 渲染、钩子归属、规则快照 node dsh-runtime-inspector/test/host-routes.mjs # 假 ctx 跑通 apply()、HTTP 路由、鉴权拒绝与工具注册 node dsh-session-exporter/test/format.mjs # 纯函数:md/json/jsonl/qa 格式化、统计、文件名 node dsh-session-exporter/test/host-routes.mjs # 假 ctx:列表、单会话导出、ZIP、保存、工具 修改 host 代码后,在 profile 里触发一次配置重载(例如改一下 cordis.patch.yml 的时间戳内容),或重启 DSH,新代码才会生效。 DeepSeek Harness 的六个社区插件:dsh-mcp-panel(在设置里查看和编辑 MCP 连接)、dsh-skill-panel(浏览技能并导出为 ZIP)、dsh-sensitive-mask(在用户输入和工具结果到达模型之前做脱敏,支持占位符 / 部分 / 固定三种样式,并写本地审计日志)、dsh-sec-checklist(渗透测试清单,可配置项目 / 范围 / 凭据,可选渗透测试技能,并生成一个智能体能加载的 security-checklist 运行时技能)、dsh-runtime-inspector(只读的运行时检查器:实时事件钩子表,带 Loader 包归属;运行时拦截决策;审批 / 拦截 / 工作区规则;真实的系统提示词组装链与渲染后的提示词;宿主包字符串常量与 schema 默认值)和 dsh-session-exporter(把工作区的每个会话导出为 Markdown / 无损 JSON / NDJSON / 问答 JSON / 事件索引,可下载 ZIP 或把文件写进工作区,再让智能体把导出内容提炼成 Markdown 文档)。全部在本地运行,无遥测、无外部请求。在你的 DSH 配置档里用 pnpm add link:<path> 安装,并把包名追加到 dsh.profile.bundles。 License MIT © 2026 pengxiaozi
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
pengxiaozi/dsh-plugins
DeepSeek Harness 社区插件:MCP 连接管理面板 + Skills 管理面板ZIP 导出
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目