连接服务器管理文件终端,沉淀部署流程并自动发布
29.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add qigelunbiya/dsh-ssh-files-sidebar该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · market
装得上吗
实装验证未通过(dep_tree_unresolvable),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 58 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dep_tree_unresolvable · 2026/9/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-ssh-files-sidebar(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:48:26
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 40 条)
- 发起网络请求src/client/LinkedSshReferenceSource.ts:245
const response = await fetch(`/api/dsh-ssh/ls?${params.toString()}`, { signal }) - 发起网络请求src/client/LinkedSshReferenceSource.ts:325
const response = await fetch('/api/dsh-ssh/exec', { - 发起网络请求src/client/api.ts:65
const response = await fetch(`${BASE}/hosts`) - 发起网络请求src/client/api.ts:71
const response = await fetch(`${LINKED_SSH_API}?${query({ sessionId })}`, { cache: 'no-store' }) - 发起网络请求src/client/api.ts:77
const response = await fetch(LINKED_SSH_API, { - 发起网络请求src/client/api.ts:87
const response = await fetch(`${BASE}/ls?${query({ alias, path })}`) - 发起网络请求src/client/api.ts:93
const response = await fetch(`${BASE}/exec`, { - 发起网络请求src/client/api.ts:109
const response = await fetch(`${BASE}/download?${query({ alias, remotePath })}`) - 发起网络请求src/client/cross-files-clipboard.ts:159
const response = await fetch(`/sidebar/file?${params.toString()}`) - 发起网络请求src/client/cross-files-dnd.ts:190
const response = await fetch(`/sidebar/file?${params.toString()}`) - 读取本地文件src/deployment-runbook-observed.ts:36
const stat = statSync(cwd) - 读取本地文件src/deployment-runbook-observed.ts:51
stat = statSync(root) - 读取本地文件src/deployment-runbook-observed.ts:87
const stat = statSync(path) - 读取本地文件src/deployment-runbook-observed.ts:90
const content = readFileSync(path, 'utf8') - 读取本地文件src/deployment-runbook-observed.ts:99
if (!existsSync(path)) { - 写入本地文件src/deployment-runbook-observed.ts:241
writeFileSync(tmp, args.content.endsWith('\n') ? args.content : `${args.content}\n`, 'utf8') - 写入本地文件src/deployment-runbook-observed.ts:242
renameSync(tmp, path) - 读取本地文件src/deployment-runbook.ts:45
stat = statSync(cwd) - 读取本地文件src/deployment-runbook.ts:119
const stat = statSync(path) - 读取本地文件src/deployment-runbook.ts:124
const content = readFileSync(path, 'utf8') - 读取本地文件src/deployment-runbook.ts:132
if (!existsSync(path)) { - 读取本地文件src/deployment-runbook.ts:426
const exists = existsSync(path) - 写入本地文件src/deployment-runbook.ts:452
writeFileSync(tmp, args.content.endsWith('\n') ? args.content : `${args.content}\n`, 'utf8') - 写入本地文件src/deployment-runbook.ts:453
renameSync(tmp, path) - 读取本地文件src/linked-ssh.ts:51
if (!existsSync(path)) return { version: 1, sessions: {} } - 读取本地文件src/linked-ssh.ts:53
const parsed = JSON.parse(readFileSync(path, 'utf8')) as Partial<BindingFile> - 写入本地文件src/linked-ssh.ts:79
mkdirSync(dir, { recursive: true, mode: 0o700 }) - 写入本地文件src/linked-ssh.ts:80
try { chmodSync(dir, 0o700) } catch { } - 写入本地文件src/linked-ssh.ts:87
writeFileSync(tmp, `${JSON.stringify(compact, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 }) - 写入本地文件src/linked-ssh.ts:88
try { chmodSync(tmp, 0o600) } catch { } - 写入本地文件src/linked-ssh.ts:89
renameSync(tmp, path) - 读取本地文件src/remote-workspace-safety.ts:64
const data = JSON.parse(readFileSync(join(dir, META_FILE), 'utf8')) as Record<string, unknown> - 读取本地文件src/shared-hosts.ts:74
if (!existsSync(path)) return { version: 1, hosts: [] } - 读取本地文件src/shared-hosts.ts:76
const parsed = JSON.parse(readFileSync(path, 'utf8')) as Partial<DshSshStoreFile> - 写入本地文件src/shared-hosts.ts:89
mkdirSync(dir, { recursive: true, mode: 0o700 }) - 写入本地文件src/shared-hosts.ts:90
try { chmodSync(dir, 0o700) } catch { } - 写入本地文件src/shared-hosts.ts:92
writeFileSync(tmp, `${JSON.stringify(file, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 }) - 写入本地文件src/shared-hosts.ts:93
try { chmodSync(tmp, 0o600) } catch { } - 写入本地文件src/shared-hosts.ts:94
renameSync(tmp, path) - 读取本地文件src/shared-hosts.ts:136
keyReady: entry.auth.kind === 'key' && entry.auth.keyPath !== '' && existsSync(expandHome(entry.auth.keyPath)),
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- SSH连接服务器
- 远程文件与终端管理
DeepSeek Harness 的远程 SSH 工作区与部署智能体——SSH 文件、终端、远程编辑、从零到一 Bootstrap、Runbook 与闭环部署。
README
由 DeepSeek 最新模型翻译生成DSH 远程工作区与部署代理
dsh-ssh-files-sidebar
为 DeepSeek Harness 提供一套完整的 Remote SSH 工作区:文件、终端、远程编辑、从零部署、Runbook、自动化与发布闭环。
build
release
license
DSH Plugin
简体中文 · English
30 秒看懂它
如果你在 DeepSeek Harness 里经常做这些事:
- 连接 Linux / SSH 服务器;
- 浏览、编辑、上传、下载远程文件;
- 在本地 Workspace 写代码,但去服务器启动、看日志、查端口;
- 接手一个完全陌生的项目,不知道它到底该怎么部署;
- 希望把已经跑通的部署流程沉淀成 DEPLOYMENT.md;
- 流程稳定后,再逐步变成一键脚本,最后让 Agent 自己发布、自检、诊断和回滚;
这个插件就是把这些环节放进同一个 Conversation、同一个 SSH 安全边界、同一条部署成熟路径里。
展开完整文档(README 剩余 1 节)
DSH 远程工作区与部署代理
dsh-ssh-files-sidebar
为 DeepSeek Harness 提供一套完整的 Remote SSH 工作区:文件、终端、远程编辑、从零部署、Runbook、自动化与发布闭环。
build
release
license
DSH Plugin
简体中文 · English
30 秒看懂它
如果你在 DeepSeek Harness 里经常做这些事:
- 连接 Linux / SSH 服务器;
- 浏览、编辑、上传、下载远程文件;
- 在本地 Workspace 写代码,但去服务器启动、看日志、查端口;
- 接手一个完全陌生的项目,不知道它到底该怎么部署;
- 希望把已经跑通的部署流程沉淀成 DEPLOYMENT.md;
- 流程稳定后,再逐步变成一键脚本,最后让 Agent 自己发布、自检、诊断和回滚;
这个插件就是把这些环节放进同一个 Conversation、同一个 SSH 安全边界、同一条部署成熟路径里。
它和“只有 SSH 文件侧栏”最大的区别
| 能力 | dsh-ssh-files-sidebar |
| SSH Files / SFTP / Terminal | ✅ |
| Remote Workspace | ✅ |
| 本地源码 + 会话级 Linked SSH | ✅ |
| 远程图片 Vision / 系统 OCR | ✅ |
| 从零研究陌生项目并尝试部署 | ✅ |
| DEPLOYMENT.md Runbook | ✅ |
| 按用户真实习惯决定自动化边界 | ✅ |
| 一键脚本 | ✅,但只在 Runbook 验证后生成 |
| Agent 自主发布 + Health / 日志自检 | ✅ |
| 用户验收后的诊断 / 修复 / 回滚闭环 | ✅ |
核心原则:先搞清楚真实环境和真实流程,再文档化;先验证,再自动化;自动化成熟后,再让 Agent 自主闭环。
一分钟安装
推荐:预构建 GitHub Release,一条命令
如果你使用已经安装好的 dsh CLI:
dsh plugin --profile web add https://github.com/qigelunbiya/dsh-ssh-files-sidebar/releases/latest/download/dsh-ssh-files-sidebar.tgz
如果你是在 DeepSeek Harness 源码目录里运行:
pnpm dsh plugin --profile web add https://github.com/qigelunbiya/dsh-ssh-files-sidebar/releases/latest/download/dsh-ssh-files-sidebar.tgz
然后启动或重启 Web Profile:
dsh web
源码运行则:
pnpm dsh web
Release tarball 已包含构建后的 lib/,用户不需要 clone、pnpm install、pnpm build 或允许依赖安装脚本。
DeepSeek Harness 官方也支持直接从 GitHub 安装源码包,但 pnpm 10 会要求用户显式允许 Git dependency 的 prepare 构建脚本。因此本项目把 预构建 Release tarball 作为普通用户的推荐安装方式。
GitHub 源码安装(开发者 / 调试)
dsh plugin --profile web add github:qigelunbiya/dsh-ssh-files-sidebar
本项目提供 prepare,Git 安装时可以自行构建 runtime bundle。若 pnpm 10 拒绝运行构建脚本,请按照 DSH / pnpm 输出,把 dsh-ssh-files-sidebar: true 加到对应 Profile 的 pnpm-workspace.yaml -> allowBuilds 后重试。
产品能力
1. Remote SSH Workspace
一个顶层插件内部整合:
- dsh-better-sidebar
- @linxin666/dsh-ssh
- dsh-rw
- 本项目自己的 SSH Files / Linked SSH / Deployment Layer
SSH 主机与凭据只维护一份:
~/.dsh/dsh-ssh.json
一个 Conversation 只绑定一个 SSH 目标,Agent 不会为了完成任务自由枚举或切换到其他主机。
2. SSH Files + Editor + Terminal
SSH Files 支持:
- 远程目录树;
- CodeMirror 编辑 / 保存;
- PNG / JPG / GIF / WebP / BMP / ICO / AVIF;
- PDF;
- HTML 源码 / sandbox 预览;
- TAR / TGZ / ZIP / 7Z / RAR 等归档目录查看;
- 多选;
- 上传 / 下载;
- 原地重命名;
- 新建目录 / 删除;
- 会话级目录展开记忆。
快捷键:
| 操作 | 快捷键 |
| 多选增减 | Ctrl/Cmd + 点击 |
| 范围选择 | Shift + 点击 |
| 选择当前可见项 | Ctrl/Cmd + A |
| 原地重命名 | F2 |
| 删除 | Delete |
| 保存 | Ctrl/Cmd + S |
| 搜索 / 替换 | Ctrl/Cmd + F |
3. 本地 Workspace + Linked SSH
推荐的日常开发 / 发布模式:
LOCAL Workspace(真实源码) + Conversation Linked SSH(唯一目标服务器) + 项目根目录 DEPLOYMENT.md
本地 Git、构建和产物检查留在本机;上传、服务管理、日志和 Health Check 固定在当前会话绑定服务器。
4. Remote Vision / OCR
Agent 可以直接读取当前 SSH 上的图片做视觉分析;文本模型或不希望走视觉模型时,可以使用支持平台上的系统 OCR 路径,不需要为了识别一张服务器截图先把它手工复制进本地 Workspace。
从“完全不会部署”到“Agent 自己闭环”
项目现在支持两条入口。
flowchart TD
A1["已有部署经验历史命令 / 旧文档 / 已知流程"] --> B1["核对 LOCAL + REMOTE"]
B1 --> R["DEPLOYMENT.md可审查 Runbook"]
A2["完全陌生的项目只有源码 + 目标服务器"] --> L["研究 LOCAL结构 / Runtime / 产物 / 依赖"]
L --> S["研究 REMOTEOS / Runtime / 目录 / 端口 / 权限"]
S --> Q["逐步确认用户真实部署需求"]
Q --> P["Bootstrap Plan"]
P --> T["尝试部署 / 启动"]
T --> X{"技术验证通过?"}
X -->|否| D["stderr / 日志 / 进程 / 端口诊断"]
D --> C{"能否安全修复?"}
C -->|是| F["最小修复并重试"]
F --> T
C -->|否| STOP["明确承认当前目标无法安全部署"]
X -->|是| BASE["总结实际成功路径"]
BASE --> R
R --> V["用户实际使用并确认稳定"]
V --> H["访谈真实操作习惯确定自动化边界"]
H --> O["生成并验证一键脚本"]
O --> E["Agent 自主发布"]
E --> K["进程 / 端口 / Health / 日志自检"]
K --> G["分析 Change Set给出重点测试"]
G --> U{"用户业务验收"}
U -->|正常| DONE["完成"]
U -->|异常| Z["诊断"]
Z --> RISK{"继续修复还是恢复?"}
RISK -->|修复| FIX["最小修复"]
RISK -->|风险较高| RB["回滚"]
FIX --> RE["再次验证"]
RB --> RE
RE --> U
Zero-to-One Bootstrap:先跑通,再写 Runbook
对于没有可靠历史部署方式的项目,Agent 不会先“猜”一份完整 DEPLOYMENT.md。
它会先:
1. 只读检查本地项目,识别技术栈、运行时、入口、产物、配置、外部依赖、端口、持久化等;
2. 判断真正需要上传的 runtime payload,而不是默认把整个仓库复制到服务器;
3. 只读检查当前绑定服务器的 OS、架构、Runtime、可写目录、端口、服务管理方式、权限和磁盘;
4. 能自己查到的事实自己查,只把真正的偏好 / 业务决策交给用户确认;
5. 通过临时 Bootstrap Plan 逐步执行、观察、修正;
6. 启动失败时根据 stderr、日志、进程和端口证据做最小修复,而不是随机试命令;
7. 如果目标服务器确实不满足条件,明确说明 blocker 和可选方案,不为了“必须跑起来”扩大修改范围;
8. 第一次真正稳定后,把实际成功路径总结成 DEPLOYMENT.md。
详细行为模型见 Project Deployment Runbook。
Runbook → 自动化,而不是一开始就黑盒
DEPLOYMENT.md 是完整、可读的项目部署知识,但文档里有一条命令,不代表用户希望脚本自动执行它。
在脚本生成前,Agent 会和用户确认真实使用习惯,并把每个阶段标记为:
AUTOMATE → 纳入脚本 KEEP MANUAL → 保留人工操作 EXTERNAL / HAND-OFF → 由其他工具 / 流程完成 NOT IN NORMAL RUN → Runbook 保留,但不进入日常一键路径
所以最终脚本可以只自动化 30% 的 Runbook,只要这 30% 才是用户真正希望交给机器做的部分。
发布后的闭环
当 Runbook、自动化边界和脚本都已经被用户实际验证后,Agent 的角色会从“给命令”升级为“执行这次发布”:
确认本次发布内容 ↓ Agent 执行已验证自动化 ↓ 独立检查进程 / 端口 / Health / 日志 ↓ 基于 Git / Workspace 证据总结主要修改 ↓ 告诉用户重点测试哪些业务功能 ↓ 用户验收 ↙ ↘ 正常 异常 ↓ ↓ 完成 诊断 / 修复 / 回滚 ↓ 再验证
脚本退出码为 0 不等于部署成功;回滚命令返回成功也不等于已经恢复。两者都需要独立验证。
架构
一个顶层安装:dsh-ssh-files-sidebar │ ├─ dsh-better-sidebar │ └─ 右侧工作台 / Files / Editor / Terminal / Browser │ ├─ @linxin666/dsh-ssh │ └─ SSH Host / Web Terminal / SFTP / Tunnel / Engine │ ├─ dsh-rw │ └─ Local / Remote Workspace + Read/Write/Edit/Glob/Grep/Bash shim │ ├─ SSH Files + Linked SSH │ ├─ remote tree / editor / preview / transfer │ ├─ session-bound SSH tools │ ├─ remote vision │ └─ OCR fallback │ └─ Deployment Layer ├─ zero-to-one Bootstrap discovery ├─ Bootstrap Plan ├─ DEPLOYMENT.md Runbook ├─ automation coverage interview ├─ one-click automation └─ autonomous deploy → verify → UAT → diagnose / rollback
安全边界
- 一个 Conversation 只操作一个 SSH 目标;
- Remote Workspace 优先决定目标,否则使用会话级 Linked SSH;
- DEPLOYMENT.md 的 target-ssh 必须匹配当前 session lock;
- 高风险动作仍走 Harness 原生审批;
- 数据库恢复 / 迁移、递归删除、系统包、Firewall、磁盘、主机重启等不会因为存在 Runbook 就自动获得授权;
- 陌生项目 Bootstrap 期间,不会为了“让它跑起来”默认修改全局 Runtime、Firewall、反向代理、数据库或其他已有服务;
- 除非用户已经明确批准自动回滚条件,否则生产异常不会静默自动回滚。
开发者安装
git clone https://github.com/qigelunbiya/dsh-ssh-files-sidebar.git
cd dsh-ssh-files-sidebar
pnpm install
pnpm build
在 Harness 源码目录:
pnpm dsh plugin --profile web add link:E:/你的路径/dsh-ssh-files-sidebar
pnpm dsh web
当前版本只需要一个顶层 dsh-ssh-files-sidebar loader row;不要再单独挂载 dsh-better-sidebar、@linxin666/dsh-ssh 或 dsh-rw。
更新
Release 安装用户建议安装最新预构建包:
dsh plugin --profile web remove dsh-ssh-files-sidebar
dsh plugin --profile web add https://github.com/qigelunbiya/dsh-ssh-files-sidebar/releases/latest/download/dsh-ssh-files-sidebar.tgz
源码开发用户:
git pull
pnpm install
pnpm build
文档
- Deployment Runbook:从零部署 → Runbook → 自动化 → 闭环
- Deployment Agent 设计草案
- Distribution / 发布与曝光清单
上游依赖与致谢
- dsh-better-sidebar — MIT
- @linxin666/dsh-ssh — Apache-2.0
- dsh-rw — MIT
完整归属信息见 NOTICE。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
qigelunbiya/dsh-ssh-files-sidebar
连接服务器管理文件终端,沉淀部署流程并自动发布
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目