dsh-ssh-tunnel 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +16 -9
- package/README_en.md +16 -9
- package/icon.svg +26 -0
- package/lib/client.js +26 -5
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,20 @@ All notable changes to this project are documented in this file.
|
|
|
10
10
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
11
11
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
12
12
|
|
|
13
|
+
## [1.0.1] - 2026-10-04
|
|
14
|
+
|
|
15
|
+
### 新增
|
|
16
|
+
|
|
17
|
+
- 插件有了自己的图标:包根 `icon.svg`(36×36,双主机 + 双轨脉冲管道),由 `package.json` 顶层 `icon` 字段声明并列入 `files`。插件列表里不再显示 DSH 的默认图形。
|
|
18
|
+
- 侧边栏标签图标改用同一张图:`lib/client.js` 不再自画 24 画板的铅笔图标,改为内联渲染 `icon.svg` 的双主机与双轨脉冲(按 36 画板绘制,再放大 1.3 倍以贴合侧边栏的视觉重量)。插件列表与侧边栏因此是同一张标。
|
|
19
|
+
- 插件列表里的显示名与描述有了中英两份(`locale/en.json`、`locale/zh.json` 的 `meta.title` 与 `meta.description`),中文名定为「SSH 隧道」;`package.json` 的 `exports` 与 `files` 相应放行 `locale/*.json`。此前该处回退成包名与英文 `description`,在中文界面里中英混排。
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- The plugin now ships its own icon: `icon.svg` at the package root (36×36, two hosts joined by a dual-rail pulse), declared through the top-level `icon` field in `package.json` and listed in `files`. The plugin list no longer falls back to the default DSH artwork.
|
|
24
|
+
- The sidebar tab icon now renders the same artwork as `icon.svg` instead of a separate 24-unit pencil glyph: `lib/client.js` draws the two hosts and the dual-rail pulse on the 36-unit canvas and scales them 1.3× to match the sidebar's visual weight. The plugin list and the sidebar therefore carry one mark.
|
|
25
|
+
- The plugin's display name and description in the plugin list now ship in both languages (`meta.title` and `meta.description` in `locale/en.json` and `locale/zh.json`), with the Chinese name settled as 「SSH 隧道」; `exports` and `files` in `package.json` admit `locale/*.json` accordingly. The list previously fell back to the package name and the English `description`, mixing languages inside a Chinese interface.
|
|
26
|
+
|
|
13
27
|
## [1.0.0] - 2026-09-28
|
|
14
28
|
|
|
15
29
|
### 变更
|
package/README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<p align="center"><strong>简体中文</strong> | <a href="README_en.md">English</a></p>
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
<
|
|
4
|
+
<img src="https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/docs/logo.png" alt="DSH SSH Tunnel" width="160">
|
|
5
|
+
<h1>DSH SSH Tunnel</h1>
|
|
5
6
|
<p>DeepSeek Harness 的多机 SSH 工作台:主机库、按项目授权、右侧栏里的终端与双栏 SFTP。</p>
|
|
6
7
|
<p>模型用 <strong>SSHManager</strong> 工具执行命令、传文件;你在侧栏管主机与授权。<strong>密钥不进模型上下文</strong>。</p>
|
|
7
8
|
|
|
8
9
|
<p>
|
|
9
|
-
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/releases"><img src="https://img.shields.io/
|
|
10
|
+
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/releases"><img src="https://img.shields.io/github/v/tag/OMSociety/dsh-ssh-tunnel?label=version&color=4f6ef7" alt="Version"></a>
|
|
10
11
|
<a href="https://github.com/deepseek-ai/dsh"><img src="https://img.shields.io/badge/DSH-%3E%3D0.1.7--rc.2_%3C0.3.0--0-4f6ef7" alt="DSH"></a>
|
|
11
12
|
<a href="LICENSE"><img src="https://img.shields.io/github/license/OMSociety/dsh-ssh-tunnel?color=4f6ef7" alt="License"></a>
|
|
12
13
|
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/stargazers"><img src="https://img.shields.io/github/stars/OMSociety/dsh-ssh-tunnel?color=4f6ef7" alt="Stars"></a>
|
|
@@ -16,8 +17,6 @@
|
|
|
16
17
|
<a href="#这是什么">这是什么</a> • <a href="#核心特性">核心特性</a> • <a href="#快速开始">快速开始</a> • <a href="#侧栏">侧栏</a> • <a href="#模型工具">模型工具</a> • <a href="#安全">安全</a> • <a href="#开发">开发</a> • <a href="#许可证与作者">许可证与作者</a>
|
|
17
18
|
</div>
|
|
18
19
|
|
|
19
|
-
> **提示:**本仓库是 `dsh-ssh-tunnel` 的维护主线,在 [OMSociety 仓库](https://github.com/OMSociety/dsh-ssh-tunnel) 独立延续(2026-09-28 起脱离 fork 网络)。上游项目与代码作者是 [thirsty5034/dsh-ssh-tunnel](https://github.com/thirsty5034/dsh-ssh-tunnel)(MIT,见 [LICENSE](LICENSE))。修复与问题反馈都在本仓库处理。
|
|
20
|
-
|
|
21
20
|
## 这是什么
|
|
22
21
|
|
|
23
22
|
**dsh-ssh-tunnel** 是 [DeepSeek Harness](https://github.com/deepseek-ai/dsh) 的社区插件,挂在右侧栏宿主 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 上:把多台 SSH 主机收进一个**主机库**,按项目授权,然后在中央面板里开**交互式终端**(xterm)或**双栏 SFTP**。
|
|
@@ -47,17 +46,25 @@
|
|
|
47
46
|
|
|
48
47
|
## 快速开始
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
**方式一:从 npm 安装(推荐)**
|
|
51
50
|
|
|
52
51
|
```powershell
|
|
53
52
|
# 1) 先停掉 dsh web(运行中的服务会锁住依赖,装完再起)
|
|
54
|
-
dsh plugin --profile web add "
|
|
53
|
+
dsh plugin --profile web add "dsh-ssh-tunnel@1.0.1"
|
|
55
54
|
# 2) 重新启动 dsh web
|
|
56
55
|
```
|
|
57
56
|
|
|
57
|
+
包已发布到 npm,随包提供预构建产物,本地不需要构建步骤;换版本就把 `@1.0.1` 换成目标版本。
|
|
58
|
+
|
|
59
|
+
**方式二:从 GitHub 源安装**
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
dsh plugin --profile web add "github:OMSociety/dsh-ssh-tunnel"
|
|
63
|
+
```
|
|
64
|
+
|
|
58
65
|
想复现某次安装就钉住 ref:在仓库地址后加 `#<tag 或提交 sha>`。
|
|
59
66
|
|
|
60
|
-
|
|
67
|
+
**方式三:一键脚本**
|
|
61
68
|
|
|
62
69
|
```sh
|
|
63
70
|
curl -fsSL https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scripts/install.sh | bash
|
|
@@ -67,9 +74,9 @@ curl -fsSL https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scrip
|
|
|
67
74
|
irm https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scripts/install.ps1 | iex
|
|
68
75
|
```
|
|
69
76
|
|
|
70
|
-
|
|
77
|
+
脚本默认走 GitHub 源(`bash scripts/install.sh --from npm 1.0.1` 可切到 npm),除安装外还会把 profile 的 `minimumReleaseAgeExclude` 补上本插件、校验 `dsh.profile.bundles` 确实写入、清掉旧版手写在 profile `cordis.patch.yml` 里的挂载(先加 `--dry-run` 可只看计划不动手)。
|
|
71
78
|
|
|
72
|
-
>
|
|
79
|
+
> **提示**:装好后**刷新一下浏览器页面**,右侧栏才会出现「SSH 隧道」入口——只重启宿主不够,客户端产物是页面加载时取的。
|
|
73
80
|
|
|
74
81
|
**装完怎么用**
|
|
75
82
|
|
package/README_en.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<p align="center"><a href="README.md">简体中文</a> | <strong>English</strong></p>
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
<
|
|
4
|
+
<img src="https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/docs/logo.png" alt="DSH SSH Tunnel" width="160">
|
|
5
|
+
<h1>DSH SSH Tunnel</h1>
|
|
5
6
|
<p>A multi-host SSH workbench for DeepSeek Harness: host inventory, per-project grants, and a terminal plus dual-pane SFTP in the sidebar.</p>
|
|
6
7
|
<p>The model drives the <strong>SSHManager</strong> tool to run commands and move files; you manage hosts and grants in the sidebar. <strong>Secrets never enter model context</strong>.</p>
|
|
7
8
|
|
|
8
9
|
<p>
|
|
9
|
-
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/releases"><img src="https://img.shields.io/
|
|
10
|
+
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/releases"><img src="https://img.shields.io/github/v/tag/OMSociety/dsh-ssh-tunnel?label=version&color=4f6ef7" alt="Version"></a>
|
|
10
11
|
<a href="https://github.com/deepseek-ai/dsh"><img src="https://img.shields.io/badge/DSH-%3E%3D0.1.7--rc.2_%3C0.3.0--0-4f6ef7" alt="DSH"></a>
|
|
11
12
|
<a href="LICENSE"><img src="https://img.shields.io/github/license/OMSociety/dsh-ssh-tunnel?color=4f6ef7" alt="License"></a>
|
|
12
13
|
<a href="https://github.com/OMSociety/dsh-ssh-tunnel/stargazers"><img src="https://img.shields.io/github/stars/OMSociety/dsh-ssh-tunnel?color=4f6ef7" alt="Stars"></a>
|
|
@@ -14,8 +15,6 @@
|
|
|
14
15
|
</p>
|
|
15
16
|
</div>
|
|
16
17
|
|
|
17
|
-
> **Note:** This is the maintained line of `dsh-ssh-tunnel`, continued independently at the [OMSociety repository](https://github.com/OMSociety/dsh-ssh-tunnel) (standalone since 2026-09-28). The upstream project and the author of this code is [thirsty5034/dsh-ssh-tunnel](https://github.com/thirsty5034/dsh-ssh-tunnel) (MIT, see [LICENSE](LICENSE)). Fixes and issue reports are handled in this repository.
|
|
18
|
-
|
|
19
18
|
## What this is
|
|
20
19
|
|
|
21
20
|
**dsh-ssh-tunnel** is a community plugin for [DeepSeek Harness](https://github.com/deepseek-ai/dsh), mounted in the sidebar host [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar). It collects your SSH hosts into one **host inventory**, authorizes them per project, and then opens an **interactive terminal** (xterm) or **dual-pane SFTP** in the center panel.
|
|
@@ -45,17 +44,25 @@ This package is a **DSH-native implementation** (Cordis host/client plugin, `dsh
|
|
|
45
44
|
|
|
46
45
|
## Quick start
|
|
47
46
|
|
|
48
|
-
**Option 1: install from
|
|
47
|
+
**Option 1: install from npm (recommended)**
|
|
49
48
|
|
|
50
49
|
```powershell
|
|
51
50
|
# 1) stop dsh web first (a running server holds the dependency lock; start it again afterwards)
|
|
52
|
-
dsh plugin --profile web add "
|
|
51
|
+
dsh plugin --profile web add "dsh-ssh-tunnel@1.0.1"
|
|
53
52
|
# 2) restart dsh web
|
|
54
53
|
```
|
|
55
54
|
|
|
55
|
+
The package is published to npm and ships the prebuilt artifacts, so no local build step is involved. Replace `@1.0.1` to install another version.
|
|
56
|
+
|
|
57
|
+
**Option 2: install from the GitHub source**
|
|
58
|
+
|
|
59
|
+
```powershell
|
|
60
|
+
dsh plugin --profile web add "github:OMSociety/dsh-ssh-tunnel"
|
|
61
|
+
```
|
|
62
|
+
|
|
56
63
|
To reproduce a specific install, pin a ref by appending `#<tag or commit sha>` to the repository URL.
|
|
57
64
|
|
|
58
|
-
**Option
|
|
65
|
+
**Option 3: one-line installer**
|
|
59
66
|
|
|
60
67
|
```sh
|
|
61
68
|
curl -fsSL https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scripts/install.sh | bash
|
|
@@ -65,9 +72,9 @@ curl -fsSL https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scrip
|
|
|
65
72
|
irm https://raw.githubusercontent.com/OMSociety/dsh-ssh-tunnel/main/scripts/install.ps1 | iex
|
|
66
73
|
```
|
|
67
74
|
|
|
68
|
-
Besides installing,
|
|
75
|
+
The script installs from the GitHub source by default (`bash scripts/install.sh --from npm 1.0.1` switches to npm). Besides installing, it adds this plugin to the profile's `minimumReleaseAgeExclude`, verifies that `dsh.profile.bundles` really received the entry, and removes the mount older versions wrote by hand into the profile's `cordis.patch.yml`. Add `--dry-run` to print the plan without touching anything.
|
|
69
76
|
|
|
70
|
-
> **Note
|
|
77
|
+
> **Note**: After installing, **refresh the browser page** for the "SSH Tunnel" entry to appear in the sidebar — restarting the host alone is not enough, because the client artifact is fetched when the page loads.
|
|
71
78
|
|
|
72
79
|
**First run**
|
|
73
80
|
|
package/icon.svg
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="ssh_v2_3_host" x1="18" y1="6" x2="18" y2="30" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop stop-color="#4E6EF2"/>
|
|
5
|
+
<stop offset="1" stop-color="#1434B8"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="ssh_v2_3_flow" x1="14" y1="18" x2="22" y2="18" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop stop-color="#5CE1E6"/>
|
|
9
|
+
<stop offset="1" stop-color="#38E298"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<!-- 左服务器节点 -->
|
|
13
|
+
<rect x="7" y="10" width="7" height="16" rx="2" fill="url(#ssh_v2_3_host)"/>
|
|
14
|
+
<circle cx="10.5" cy="14" r="1" fill="#5CE1E6"/>
|
|
15
|
+
<circle cx="10.5" cy="18" r="1" fill="#FFFFFF" fill-opacity="0.8"/>
|
|
16
|
+
<!-- 右服务器节点 -->
|
|
17
|
+
<rect x="22" y="10" width="7" height="16" rx="2" fill="url(#ssh_v2_3_host)"/>
|
|
18
|
+
<circle cx="25.5" cy="14" r="1" fill="#5CE1E6"/>
|
|
19
|
+
<circle cx="25.5" cy="18" r="1" fill="#FFFFFF" fill-opacity="0.8"/>
|
|
20
|
+
<!-- 中间立体光纤加密管道连线 -->
|
|
21
|
+
<path d="M14 15.5H22" stroke="url(#ssh_v2_3_flow)" stroke-width="2.2" stroke-linecap="round"/>
|
|
22
|
+
<path d="M14 20.5H22" stroke="url(#ssh_v2_3_flow)" stroke-width="2.2" stroke-linecap="round"/>
|
|
23
|
+
<!-- 脉冲节点 -->
|
|
24
|
+
<circle cx="18" cy="15.5" r="1.3" fill="#FFFFFF"/>
|
|
25
|
+
<circle cx="18" cy="20.5" r="1.3" fill="#FFFFFF"/>
|
|
26
|
+
</svg>
|
package/lib/client.js
CHANGED
|
@@ -304,13 +304,34 @@ window.__ModuleLoader__.load({
|
|
|
304
304
|
|
|
305
305
|
function icon(size) {
|
|
306
306
|
const s = size || 16;
|
|
307
|
+
// 与包根 icon.svg 同一份图:插件列表磁贴与侧边栏共用同一张标。
|
|
307
308
|
return React.createElement("svg", {
|
|
308
|
-
width: s, height: s, viewBox: "0 0
|
|
309
|
-
strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true,
|
|
309
|
+
width: s, height: s, viewBox: "0 0 36 36", fill: "none", "aria-hidden": true,
|
|
310
310
|
},
|
|
311
|
-
React.createElement("
|
|
312
|
-
|
|
313
|
-
|
|
311
|
+
React.createElement("defs", null,
|
|
312
|
+
React.createElement("linearGradient", {
|
|
313
|
+
id: "dsh-ssh-tunnel-tab-host", x1: "18", y1: "6", x2: "18", y2: "30",
|
|
314
|
+
gradientUnits: "userSpaceOnUse",
|
|
315
|
+
},
|
|
316
|
+
React.createElement("stop", { stopColor: "#4E6EF2" }),
|
|
317
|
+
React.createElement("stop", { offset: "1", stopColor: "#1434B8" })),
|
|
318
|
+
React.createElement("linearGradient", {
|
|
319
|
+
id: "dsh-ssh-tunnel-tab-flow", x1: "14", y1: "18", x2: "22", y2: "18",
|
|
320
|
+
gradientUnits: "userSpaceOnUse",
|
|
321
|
+
},
|
|
322
|
+
React.createElement("stop", { stopColor: "#5CE1E6" }),
|
|
323
|
+
React.createElement("stop", { offset: "1", stopColor: "#38E298" }))),
|
|
324
|
+
React.createElement("g", { transform: "translate(18 18) scale(1.3) translate(-18 -18)" },
|
|
325
|
+
React.createElement("rect", { x: 7, y: 10, width: 7, height: 16, rx: 2, fill: "url(#dsh-ssh-tunnel-tab-host)" }),
|
|
326
|
+
React.createElement("circle", { cx: 10.5, cy: 14, r: 1, fill: "#5CE1E6" }),
|
|
327
|
+
React.createElement("circle", { cx: 10.5, cy: 18, r: 1, fill: "#FFFFFF", fillOpacity: 0.8 }),
|
|
328
|
+
React.createElement("rect", { x: 22, y: 10, width: 7, height: 16, rx: 2, fill: "url(#dsh-ssh-tunnel-tab-host)" }),
|
|
329
|
+
React.createElement("circle", { cx: 25.5, cy: 14, r: 1, fill: "#5CE1E6" }),
|
|
330
|
+
React.createElement("circle", { cx: 25.5, cy: 18, r: 1, fill: "#FFFFFF", fillOpacity: 0.8 }),
|
|
331
|
+
React.createElement("path", { d: "M14 15.5H22", stroke: "url(#dsh-ssh-tunnel-tab-flow)", strokeWidth: 2.2, strokeLinecap: "round" }),
|
|
332
|
+
React.createElement("path", { d: "M14 20.5H22", stroke: "url(#dsh-ssh-tunnel-tab-flow)", strokeWidth: 2.2, strokeLinecap: "round" }),
|
|
333
|
+
React.createElement("circle", { cx: 18, cy: 15.5, r: 1.3, fill: "#FFFFFF" }),
|
|
334
|
+
React.createElement("circle", { cx: 18, cy: 20.5, r: 1.3, fill: "#FFFFFF" })),
|
|
314
335
|
);
|
|
315
336
|
}
|
|
316
337
|
|
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-ssh-tunnel",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Multi-host SSH tunnel and SSHManager tool for DeepSeek Harness (project-scoped grants)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,8 +37,10 @@
|
|
|
37
37
|
"dsh": ">=0.1.7-rc.2 <0.3.0-0"
|
|
38
38
|
},
|
|
39
39
|
"main": "lib/index.js",
|
|
40
|
+
"icon": "./icon.svg",
|
|
40
41
|
"exports": {
|
|
41
42
|
".": "./lib/index.js",
|
|
43
|
+
"./locale/*.json": "./locale/*.json",
|
|
42
44
|
"./client": "./lib/client.js",
|
|
43
45
|
"./package.json": "./package.json"
|
|
44
46
|
},
|
|
@@ -79,6 +81,8 @@
|
|
|
79
81
|
"scripts/install.ps1",
|
|
80
82
|
"scripts/portal-probe.mjs",
|
|
81
83
|
"scripts/smoke-test.mjs",
|
|
82
|
-
"scripts/sync-to-dsh.sh"
|
|
84
|
+
"scripts/sync-to-dsh.sh",
|
|
85
|
+
"icon.svg",
|
|
86
|
+
"locale/*.json"
|
|
83
87
|
]
|
|
84
88
|
}
|