🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

扩展管理器 gulagala001/dsh-extensions

DeepSeek Harness
gulagala00111 天前有提交已提供中文文档扫描:含敏感能力

在插件页统一开关和编辑 Skill、MCP、指令、命令与 Hooks

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add gulagala001/dsh-extensions
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(node_version),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 11 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(node_version · 2026/10/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 46 处,展示前 39 条)
  • 读取本地文件
    src/common.mjs:29
    try { const info = await stat(path); return info.isDirectory() ? 'directory' : info.isFile() ? 'file' : 'other'; }
  • 写入本地文件
    src/common.mjs:45
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    src/common.mjs:47
    try { await writeFile(temporary, text, { mode: 0o600 }); await beforeCommit?.(); await rename(temporary, path); }
  • 写入本地文件
    src/common.mjs:47
    try { await writeFile(temporary, text, { mode: 0o600 }); await beforeCommit?.(); await rename(temporary, path); }
  • 删除本地文件
    src/common.mjs:48
    catch (error) { await rm(temporary, { force: true }); throw error; }
  • 读取本地文件
    src/skills.mjs:105
    return { ...this.describe(row), content: row.editable ? await readFile(row.path, 'utf8') : definition.content };
  • 读取本地文件
    src/skills.mjs:151
    const target = await realpath(skill.path), stage = await mkdtemp(join(dirname(target), '.skill-edit-'));
  • 写入本地文件
    src/skills.mjs:154
    await writeFile(file, content, { mode: 0o600 });
  • 写入本地文件
    src/skills.mjs:157
    await rename(file, target);
  • 删除本地文件递归
    src/skills.mjs:159
    } finally { await rm(stage, { recursive: true, force: true }); }
  • 写入本地文件
    src/skills.mjs:168
    await mkdir(root.path, { recursive: true });
  • 读取本地文件
    src/skills.mjs:176
    const exists = await lstat(target).then(() => true, error => { if (error.code === 'ENOENT') return false; throw error; });
  • 写入本地文件
    src/skills.mjs:181
    await rename(payload, target);
  • 删除本地文件递归
    src/skills.mjs:185
    await rm(stage, { recursive: true, force: true });
  • 写入本地文件
    src/skills.mjs:194
    await mkdir(directory);
  • 写入本地文件
    src/skills.mjs:195
    await writeFile(join(directory, 'SKILL.md'), composeFrontmatter({ name, description: description.trim() }, body || ''), { mode: 0o600 });
  • 读取本地文件
    src/skills.mjs:202
    const text = await readFile(skill.path, 'utf8'), fields = {};
  • 读取本地文件
    src/skills.mjs:214
    const canonical = await realpath(directory);
  • 读取本地文件
    src/skills.mjs:216
    const canonicalRoot = await realpath(root).catch(error => { if (error.code === 'ENOENT') return null; throw error; });
  • 删除本地文件
    src/skills.mjs:222
    await rm(directory, { recursive: !linked });
  • 删除本地文件
    src/skills.mjs:223
    } else { this.assertOwner(skill); await rm(skill.path); }
  • 读取本地文件
    src/mcp.mjs:65
    const cached = await readFile(this.cacheFile, 'utf8').then(JSON.parse).catch(() => ({}));
  • 读取本地文件
    src/mcp.mjs:78
    try { text = await readFile(this.file, 'utf8'); } catch (error) { if (error.code === 'ENOENT') return { mcpServers: Object.create(null) }; throw error
  • 读取本地文件
    src/mcp.mjs:90
    const mtime = await stat(this.file).then(info => info.mtimeMs, () => null);
  • 读取本地文件
    src/instructions.mjs:20
    const entry = await lstat(path).catch(error => { if (missing(error)) return null; throw error; });
  • 读取本地文件
    src/instructions.mjs:21
    const info = entry?.isSymbolicLink() ? await stat(path) : entry;
  • 读取本地文件
    src/instructions.mjs:112
    for await (const chunk of createReadStream(path, { encoding: 'utf8', signal: readSignal })) {
  • 读取本地文件
    src/instructions.mjs:127
    const target = file.exists ? await realpath(path) : path;
  • 删除本地文件
    src/instructions.mjs:134
    if (file.exists) await rm(path);
  • 读取本地文件
    src/commands.mjs:26
    const text = await readFile(path, 'utf8');
  • 读取本地文件
    src/commands.mjs:36
    try { entries = await readdir(dir, { withFileTypes: true }); } catch (error) { if (error.code === 'ENOENT' || error.code === 'ENOTDIR') return []; thr
  • 删除本地文件
    src/commands.mjs:204
    if (previous && previous !== name && COMMAND_NAME.test(previous)) await rm(join(dir, `${previous}.md`), { force: true });
  • 删除本地文件
    src/commands.mjs:211
    await rm(path, { force: true });
  • 执行外部命令来自配置/变量
    src/hooks.mjs:56
    child = spawn(command, { shell: true, cwd, windowsHide: true, detached: !windows, stdio: ['pipe', 'pipe', 'pipe'],
  • 读取本地文件
    src/hooks.mjs:80
    const mtime = await stat(this.file).then(info => info.mtimeMs, () => null);
  • 读取本地文件
    src/hooks.mjs:85
    document = JSON.parse(await readFile(this.file, 'utf8'));
  • 发起网络请求
    src/client/api.mjs:9
    response = await fetch(`dsh-extensions/api${path}`, input === undefined ? { signal, cache: 'no-store' }
  • 发起网络请求
    src/client/api.mjs:30
    apps ??= fetch('open-in-app/apps', { cache: 'no-store' }).then(response => response.ok ? response.json() : { apps: [] }).then(value => value.apps ?? [
  • 发起网络请求
    src/client/api.mjs:34
    const response = await fetch('open-in-app/open', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ app, path }
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-mcp-client@deepseek-ai/cordis@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

在 DeepSeek Harness 里管理技能、MCP 服务、指令、命令和钩子。

README

由 DeepSeek 最新模型翻译生成
DSH Extensions 在 DSH 插件页管理 Skill、MCP、指令文件、自定义命令和 Hooks。DeepSeek Harness 插件 简体中文 · English 开始使用 · 完整文档 · 反馈 DSH 已经能读取 Skill、MCP 服务器、AGENTS.md 等扩展,但大多只能手改文件。DSH Extensions 在左侧栏 插件 页的“已安装”“发现”旁边加入五个标签页,用 DSH 自带的界面组件查看、开关和编辑它们,并补上自定义命令与 Hooks 两项运行能力。 快速开始 适用环境: DSH 0.2.1-rc.3,Node.js 22.19+。 1. 安装 打开实际使用的 DSH 实例,在 插件 → + 添加插件 中粘贴: https://github.com/gulagala001/dsh-extensions/releases/download/v0.1.2-dsh.0.2.1-rc.3/dsh-extensions-0.1.2-dsh.0.2.1-rc.3.tgz 等当前任务结束后,按宿主提示启用或重启该实例。其他方式、升级和卸载见安装指南 · SHA256SUMS。 2. 先试这一件事 打开 插件 → Skill,选一个 Skill 关掉开关,再新建一个会话。
展开完整文档(README 剩余 1 节)
DSH Extensions

在 DSH 插件页管理 Skill、MCP、指令文件、自定义命令和 Hooks。DeepSeek Harness 插件

简体中文 · English

开始使用 · 完整文档 · 反馈

DSH 已经能读取 Skill、MCP 服务器、AGENTS.md 等扩展,但大多只能手改文件。DSH Extensions 在左侧栏 插件 页的“已安装”“发现”旁边加入五个标签页,用 DSH 自带的界面组件查看、开关和编辑它们,并补上自定义命令与 Hooks 两项运行能力。

快速开始

适用环境: DSH 0.2.1-rc.3,Node.js 22.19+。

1. 安装

打开实际使用的 DSH 实例,在 插件 → + 添加插件 中粘贴:

https://github.com/gulagala001/dsh-extensions/releases/download/v0.1.2-dsh.0.2.1-rc.3/dsh-extensions-0.1.2-dsh.0.2.1-rc.3.tgz

等当前任务结束后,按宿主提示启用或重启该实例。其他方式、升级和卸载见安装指南 · SHA256SUMS。

2. 先试这一件事

打开 插件 → Skill,选一个 Skill 关掉开关,再新建一个会话。

成功标志: 这个 Skill 不再出现在模型的 Skill 目录里;重新打开开关后恢复。

功能

| 标签页 | 能做什么 | 保存位置 |
| Skill | 按项目、个人、自定义目录、内置和插件来源分组查看;开关模型调用与手动调用;新建、导入、编辑、删除 | 各 Skill 的 SKILL.md |
| MCP | 添加本地命令或 Streamable HTTP 服务器,粘贴常见的 mcpServers JSON;查看连接状态和工具,逐个开关工具,重新连接 | ~/.dsh/mcp.json |
| 指令 | 查看 DSH 会加载的 AGENTS.md/CLAUDE.md,包括个人文件和项目各级目录中的文件;创建、编辑、删除 | 原文件位置 |
| 命令 | 把常用提示词存成 /命令,支持 $ARGUMENTS 和 $1…$9;查看 DSH 与其他插件提供的命令 | ~/.dsh/commands/、<项目>/.dsh/commands/ |
| Hooks | 在会话开始、发送消息、工具调用前后、回合结束、会话关闭时运行命令,用于拦截或补充上下文;试运行和最近运行记录 | ~/.dsh/hooks.json |

Skill、指令和命令页可在 全局 与某个工作区之间切换,查看该项目自己的文件。

兼容范围

- Skill 开关写入 DSH 原生的 disable-model-invocation 与 user-invocable 头信息,卸载插件后仍然生效。
- MCP 使用 DSH 自带的 MCP 客户端,支持 stdio 与 Streamable HTTP;暂不支持 SSE。profile 配置里已有的 MCP 服务器只能开关。
- Hooks 的 hooks.json 使用与 Claude Code 相同的结构、退出码和 JSON 输出约定;匹配规则中的工具名是 DSH 的工具名。
- Hooks 中的工具调用前事件只能拒绝或要求确认,不会绕过 DSH 的审批。

常见问题

新建的命令或 Hook 什么时候生效?

保存后立即对所有会话生效。修改项目命令后,同一项目中已打开的会话也会更新。

Hook 安全吗?

Hook 会以你的系统账户直接运行命令,不经过 DSH 的沙箱和审批。首次添加时插件会要求确认;只添加你信任的命令。可在 Hooks 页顶部一键停用全部 Hook。

为什么某个 Skill 不能修改?

DSH 内置或由其他插件提供的 Skill 只读。可以复制到个人或项目目录后再修改。

许可

MIT

文档结构与贡献
预览分享卡片长什么样 ↓gulagala001/dsh-extensions
分享 · DeepSeek Harness Hub
gulagala001/dsh-extensions

在插件页统一开关和编辑 Skill、MCP、指令、命令与 Hooks

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部