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

远程开发插件集 artemiroshnichenko/dsh-plugins

MCP
artemiroshnichenko45 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

SSH 远程执行智能体,集成终端与安全护栏

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/artemiroshnichenko/dsh-plugins.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 45 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-plugins-monorepo(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:55:17

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 42 处,展示前 42 条)
  • 读取本地文件
    packages/dsh-env/src/index.ts:39
    const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
  • 执行外部命令来自配置/变量
    packages/dsh-git/src/git.ts:28
    child = spawn(file, args, {
  • 读取本地文件
    packages/dsh-git/src/git.ts:329
    content = await readFile(excludeFile, 'utf8');
  • 写入本地文件
    packages/dsh-git/src/git.ts:334
    await mkdir(join(repoRoot, '.git', 'info'), { recursive: true });
  • 写入本地文件
    packages/dsh-git/src/git.ts:335
    await appendFile(excludeFile, '\n.dsh\n.dsh/\n');
  • 写入本地文件
    packages/dsh-git/src/git.ts:386
    await mkdir(baseWorktreesDir, { recursive: true });
  • 执行外部命令固定命令
    packages/dsh-ssh/src/acp.ts:110
    const p = spawn("ssh", sshPlainArgs(host, reapCommand(host)), { stdio: "ignore" });
  • 执行外部命令固定命令
    packages/dsh-ssh/src/acp.ts:122
    const child = spawn("ssh", sshArgs(this.#host), { stdio: ["pipe", "pipe", "pipe"] });
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:210
    return this.request("initialize", {
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:220
    return await this.request("session/new", { cwd, mcpServers: [] });
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:232
    return this.request("session/resume", { sessionId });
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:236
    return this.request("session/list", cwd ? { cwd } : {});
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:240
    return this.request("session/prompt", { sessionId, prompt: [{ type: "text", text }] });
  • 发起网络请求
    packages/dsh-ssh/src/acp.ts:248
    return this.request("session/close", { sessionId });
  • 执行外部命令固定命令
    packages/dsh-ssh/src/acp.ts:258
    spawn("ssh", sshPlainArgs(this.#host, script), { stdio: "ignore", detached: true }).unref();
  • 读取本地文件
    packages/dsh-ssh/src/hosts.ts:21
    return parseSshConfig(await readFile(path, "utf8"));
  • 写入本地文件
    packages/dsh-ssh/src/index.ts:147
    await mkdir(this.mirrorRoot, { recursive: true });
  • 读取本地文件
    packages/dsh-ssh/src/index.ts:148
    this.canonicalRoot = await realpath(this.mirrorRoot);
  • 执行外部命令固定命令
    packages/dsh-ssh/src/index.ts:258
    const p = spawn("ssh", sshPlainArgs(host, listDirCommand(target), { connectTimeout: 15 }), {
  • 写入本地文件
    packages/dsh-ssh/src/index.ts:352
    await mkdir(local, { recursive: true });
  • 发起网络请求
    packages/dsh-ssh/src/remote.ts:217
    const outcome = await (this.#ctx as any).approval.request({
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:11
    const raw = JSON.parse(await readFile(path, "utf8"));
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:20
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:22
    await writeFile(tmp, JSON.stringify({ version: 1, hosts }, null, 2) + "\n", { mode: 0o600 });
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:23
    await rename(tmp, path);
  • 请求外部主机registry.npmjs.org
    packages/dsh-updater/src/checker.ts:47
    const res = await fetch("https://registry.npmjs.org/@deepseek-ai%2fdsh", {
  • 发起网络请求
    packages/dsh-updater/src/checker.ts:47
    const res = await fetch("https://registry.npmjs.org/@deepseek-ai%2fdsh", {
  • 发起网络请求
    packages/dsh-updater/src/client.js:459
    fetch(window.location.href, { method: "HEAD", cache: "no-cache" })
  • 写入剪贴板
    packages/dsh-updater/src/client.js:597
    navigator.clipboard.writeText(logLines);
  • 执行外部命令固定命令
    packages/dsh-updater/src/restarter.ts:52
    const child = spawn("/bin/bash", [tmpScriptPath], {
  • 执行外部命令来自配置/变量
    packages/dsh-workbench/src/index.ts:55
    execFile(
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:144
    const names = await readdir(at.path, { withFileTypes: true });
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:156
    const info = await stat(join(at.path, dirent.name));
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:189
    const info = await stat(at.path);
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:194
    const buffer = await readFile(at.path);
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:218
    const info = await stat(at.path);
  • 写入本地文件
    packages/dsh-workbench/src/index.ts:225
    if (!at.exists) await mkdir(dirname(at.path), { recursive: true });
  • 写入本地文件
    packages/dsh-workbench/src/index.ts:226
    await writeFile(at.path, text, "utf8");
  • 读取本地文件
    packages/dsh-workbench/src/index.ts:227
    const info = await stat(at.path);
  • 读取本地文件
    packages/dsh-workbench/src/paths.ts:76
    real = await realpath(abs);
  • 读取本地文件
    packages/dsh-workbench/src/paths.ts:80
    const info = await stat(real);
  • 读取本地文件
    packages/dsh-workbench/src/paths.ts:106
    real = await realpath(target);
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 远程SSH智能体执行
  • 集成终端与文件树
  • 安全护栏

面向生产环境的 DeepSeek Harness(DSH)插件:远程 SSH 智能体执行、集成终端与文件树、安全护栏、技能与 MCP 服务控制台。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 插件集(DSH) 精选一批生产级插件与扩展,专为 DeepSeek Harness (DSH) 打造。 装上这些插件,DeepSeek Harness 就变成功能齐全的 AI 开发环境:通过 SSH 在远程服务器上运行智能体,在内置 Web 终端里浏览文件、执行命令,对工具执行施加安全护栏,查看 MCP 服务器与技能,还能把环境变量动态注入系统提示词。 插件目录 | 包名 | 分类 | 说明 | Web GUI | 测试 | | dsh-guard | 安全与护栏 | 单调工具拦截、危险命令拦截、审批门控 | — | 13 passed | | dsh-workbench | 开发者工具 | 文件树浏览、带语法高亮与行号的实时编辑器、可视化差异、终端模拟器 | Yes | 17 passed | | dsh-chat-ux | 交互与控制 | Claude Code 风格会话布局、工具调用折叠、分叉/回滚操作 | Yes | 13 passed | | dsh-git | Git 与工作树 | 工作树管理、分支切换、脏状态提示、GitHub PR 集成 | Yes | 13 passed | | dsh-ssh | 远程执行 | 通过 SSH 远程运行智能体,带 ACP 桥接与浏览器审批中继 | Yes | 80 passed |
展开完整文档(README 剩余 1 节)
DeepSeek Harness 插件集(DSH)

精选一批生产级插件与扩展,专为 DeepSeek Harness (DSH) 打造。

装上这些插件,DeepSeek Harness 就变成功能齐全的 AI 开发环境:通过 SSH 在远程服务器上运行智能体,在内置 Web 终端里浏览文件、执行命令,对工具执行施加安全护栏,查看 MCP 服务器与技能,还能把环境变量动态注入系统提示词。

插件目录

| 包名 | 分类 | 说明 | Web GUI | 测试 |
| dsh-guard | 安全与护栏 | 单调工具拦截、危险命令拦截、审批门控 | — | 13 passed |
| dsh-workbench | 开发者工具 | 文件树浏览、带语法高亮与行号的实时编辑器、可视化差异、终端模拟器 | Yes | 17 passed |
| dsh-chat-ux | 交互与控制 | Claude Code 风格会话布局、工具调用折叠、分叉/回滚操作 | Yes | 13 passed |
| dsh-git | Git 与工作树 | 工作树管理、分支切换、脏状态提示、GitHub PR 集成 | Yes | 13 passed |
| dsh-ssh | 远程执行 | 通过 SSH 远程运行智能体,带 ACP 桥接与浏览器审批中继 | Yes | 80 passed |
| dsh-console | 可观测性 | 技能与 MCP 服务器检查面板,带 /skills 和 /mcp 斜杠命令 | Yes | 3 passed |
| dsh-env | 系统提示词 | 动态环境变量(today、platform、harness_version 等) | — | 5 passed |
| dsh-updater | 生命周期与更新 | 自动检测更新、Web GUI 一键升级、自动重启 | Yes | 11 passed |

重点能力

🛡️ dsh-guard — 工具护栏与安全策略

在工具执行之前就拦住误操作,保护你的工作站和基础设施:
- 即时拒绝(ctx.tools.guard):同步拦截灾难性命令(rm -rf /、裸磁盘写入 dd of=/dev/sd*、mkfs、fork 炸弹),不消耗 token 轮次。
- 人工审批门控:拦截危险操作(git 强制推送、删除分支、重启服务器、发布软件包),通过 Cordis 的 tools/pre-execute 瀑布式钩子提示用户交互审批。
- 文件系统限制:把写入和编辑工具严格限制在允许的工作区边界内,防止穿越到敏感目录(/etc、~/.ssh)。

💻 dsh-workbench — 文件浏览器与 Web 终端

直接嵌入 DeepSeek Harness Web GUI 的集成开发工作台:
- 目录树:在侧边栏浏览文件、查看内容、查看已修改文件,并预览 git 差异。
- 终端模拟器(xterm.js / PTY):与智能体聊天并排运行的真实、响应式终端会话。
- 可运行代码块:为模型返回的 markdown 代码块添加交互式「在终端中运行」操作按钮。
- 安全穿越检查:使用加固的路径限制逻辑,防止目录穿越和符号链接逃逸。

🌐 dsh-ssh — 通过 ACP 远程执行智能体

直接在远程预发环境、云虚拟机或生产主机上通过 SSH 运行 DeepSeek Harness 智能体:
- 智能体客户端协议(ACP):通过 SSH stdio(ssh host dsh --profile acp)连接远程机器,双向 JSON-RPC 流式传输。
- 本地工作区影子:在 ~/.dsh/remote/<host>/ 下索引并缓存工作区镜像,让本地会话历史、搜索和上下文持久化,同时操作在远程运行。
- 审批中继:把远程工具审批请求透明地路由回你工作站的本地浏览器 UI。
- Web GUI 主机切换器:从聊天头部即时切换目标服务器、浏览远程文件夹,并探测 ping 延迟。

🔍 dsh-console — 技能与 MCP 服务器检查器

完整查看智能体当前启用的工具和运行时配置:
- 设置面板:在 Web GUI 设置中添加专用的「技能与 MCP」面板。
- 斜杠命令:
- /skills:列出所有发现的工作区和全局技能、指令及调用参数。
- /mcp:显示活动的模型上下文协议(MCP)服务器、客户端传输方式和暴露的工具。
- 隐私安全:从检查输出中隐去授权 token、bearer 头和環境密钥。

⚙️ dsh-env — 动态提示词环境变量

把实时运行时事实注入智能体系统提示词模板:
- 内置变量:自动维护 today(日期边界)、platform(操作系统名称/架构)、os_version 和 harness_version。
- 自定义变量:在配置中定义键值对,提供部署专属上下文。

🔄 dsh-updater — 更新管理器与一键升级

直接在 Web 界面里让 DeepSeek Harness 和所有社区插件保持更新:

- 自动检测版本:查询 npm registry 获取 @deepseek-ai/dsh 的新版本,并监控 git 远程仓库以发现插件更新。
- Web 界面设置与顶栏徽标:新增「Updates」设置页;有新版本发布时,在会话顶栏显示提醒徽标。
- 自动修复符号链接:在 pnpm 工作区中更新 @deepseek-ai/dsh 时,自动修复虚拟存储的符号链接。
- 无缝自动重启:在后台平稳重启服务器,浏览器界面会自动检测服务器何时恢复在线并刷新。
- 斜杠命令:用 /update 查看发布版本,或用 /update now 直接在对话中升级。

安装与使用

1. 克隆并链接插件

克隆本仓库,运行自动安装脚本,把所有插件链接到你的 DeepSeek Harness 配置档(默认是 web):

git clone https://github.com/artemiroshnichenko/dsh-plugins.git
cd dsh-plugins
pnpm install
pnpm build
pnpm run link-plugins

2. 在配置中启用

把需要的插件加入本地 ~/.dsh/cordis.patch.yml 或 ~/.dsh/profiles/web/cordis.patch.yml:

- insert:
- id: workbench
name: dsh-workbench

- id: chat-ux
name: dsh-chat-ux
config:
dedupSystemPrompts: true
pageByTurn: true

- id: git
name: dsh-git
config:
ghEnabled: true

- id: guard
name: dsh-guard
config:
blockSshMutations: true

- id: console
name: dsh-console

- id: env
name: dsh-env

- id: updater
name: dsh-updater

To route sessions over SSH (replaces default local agent loop):
- delete:
- id: agent-loop
- insert:
- id: ssh
name: dsh-ssh
config:
hosts:
- name: staging
ssh: ubuntu@staging.example.com
cwd: /var/www/app
port: 22

重启 DeepSeek Harness 服务器,或重新加载配置档:

dsh web

架构与规范

本仓库所有插件都遵循 DeepSeek Harness 架构规范:

- Cordis DI 架构:通过 @deepseek-ai/cordis 注册纯服务、插件与 effect。
- 严格 TypeScript:用 TypeScript 5.5+ 严格模式编译(noImplicitAny、严格空值检查)。
- 运行时 Schema:在配置边界用 @deepseek-ai/schemastery 做校验。
- Typert RPC 网关:用 @deepseek-ai/dsh-typert-protocol 实现干净的主机到客户端远程过程调用。
- 全面的单元测试:112 个单元测试,由 Vitest 驱动,跑真实 fixture,不 mock 网络边界。

Monorepo 开发

Clone the repository
git clone https://github.com/artemiroshnichenko/dsh-plugins.git
cd dsh-plugins

Install workspace dependencies
pnpm install

Build all packages and Web client bundles
pnpm build

在所有包里跑单元测试
pnpm test

对整个代码库做类型检查
pnpm typecheck

常见问题(FAQ)

dsh-ssh 能用密码认证吗?
强烈建议配置 SSH 密钥认证或 SSH agent(ssh-add),这样 DSH 才能拉起非交互的后台 SSH 会话,不会卡在终端密码提示上。

dsh-guard 会拖慢工具执行吗?
不会。静态安全规则和模式检查在命令发往 shell 之前同步跑完,耗时不到 1 毫秒。

dsh-workbench 怎么隔离文件操作?
所有文件访问都会对照真实规范路径(fs.realpath)校验,确保操作无法借符号链接或 .. 路径逃出授权项目根目录。

参与贡献

欢迎提交贡献、功能请求和问题反馈!先看看 CONTRIBUTING.md 了解怎么上手。

许可证

MIT © 2026 Artem Miroshnichenko
预览分享卡片长什么样 ↓artemiroshnichenko/dsh-plugins
分享 · DeepSeek Harness Hub
artemiroshnichenko/dsh-plugins

SSH 远程执行智能体,集成终端与安全护栏

这是你的仓库?认领条目

回到顶部