dsh-remote 0.8.17 → 0.8.18
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/README.md +26 -47
- package/README.zh.md +22 -35
- package/cordis.patch.yml +5 -55
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
[](https://github.com/topics/dsh-plugin)
|
|
10
10
|
|
|
11
|
-

|
|
12
12
|
|
|
13
13
|
**Remote-work assistant for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH).**
|
|
14
14
|
|
|
@@ -74,10 +74,8 @@ core or require a listening Web server:
|
|
|
74
74
|
`sidebar.right.pane.tab` seat. It reuses the existing explorer/editor and
|
|
75
75
|
gives remote files their own session-scoped resource addresses, rather than
|
|
76
76
|
sending remote paths to the local Files viewer.
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
retain the existing `/dsh-remote/*` routes and sidebar composition, including
|
|
80
|
-
the standalone-sidebar deduplication guard.
|
|
77
|
+
- `dsh-better-sidebar` is not bundled. Web hosts may install it separately;
|
|
78
|
+
official Desktop uses the native right-sidebar integration instead.
|
|
81
79
|
|
|
82
80
|
Validation so far covers Host startup, Desktop IPC JSON requests, read-only
|
|
83
81
|
SSH connection/list/read, and opening the settings/import UI. Native file-tab
|
|
@@ -99,48 +97,29 @@ build allowlist or automatically approve dependency scripts.
|
|
|
99
97
|
dsh plugin add dsh-remote # add the bundle
|
|
100
98
|
```
|
|
101
99
|
|
|
102
|
-
|
|
103
|
-
([dsh-better-sidebar](https://www.npmjs.com/package/dsh-better-sidebar)) is
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
>
|
|
122
|
-
>
|
|
123
|
-
>
|
|
124
|
-
>
|
|
125
|
-
> On an older harness either stay on **0.8.14**, or keep the host half by
|
|
126
|
-
> disabling the embedded sidebar row in your profile's `cordis.patch.yml`
|
|
127
|
-
> (verified working on 0.1.0-rc.8 — the `rw_*` tools keep working, the sidebar
|
|
128
|
-
> UI is what you give up):
|
|
129
|
-
>
|
|
130
|
-
> ```yaml
|
|
131
|
-
> - id: dsh-remote-sidebar
|
|
132
|
-
> disabled: true
|
|
133
|
-
> ```
|
|
134
|
-
>
|
|
135
|
-
> (and do not list a standalone `dsh-better-sidebar` bundle either).
|
|
136
|
-
|
|
137
|
-
> **Requires the profile's pnpm linker to be `hoisted`** (the DSH profile
|
|
138
|
-
> default, `nodeLinker: hoisted` in `pnpm-workspace.yaml`). The loader resolves
|
|
139
|
-
> plugin packages from the profile root, so the sidebar must be reachable in
|
|
140
|
-
> the top-level `node_modules`. If your `pnpm-workspace.yaml` was rewritten
|
|
141
|
-
> without `nodeLinker: hoisted`, add it back (`nodeLinker: hoisted`) and run
|
|
142
|
-
> `pnpm install` once — otherwise the embedded sidebar row fails with
|
|
143
|
-
> `Cannot find package 'dsh-better-sidebar'`.
|
|
100
|
+
Since **v0.8.18**, `dsh-remote` installs and mounts only itself. The Web sidebar
|
|
101
|
+
([dsh-better-sidebar](https://www.npmjs.com/package/dsh-better-sidebar)) is
|
|
102
|
+
optional and is no longer a dependency or an automatically mounted row. This
|
|
103
|
+
keeps the SSH tools and settings UI independent from a particular sidebar
|
|
104
|
+
implementation.
|
|
105
|
+
|
|
106
|
+
To add the optional Web remote-file explorer/editor, install both bundles:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
dsh plugin add dsh-remote
|
|
110
|
+
dsh plugin add dsh-better-sidebar
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
When the standalone sidebar service is present, `dsh-remote` discovers it
|
|
114
|
+
dynamically and registers its remote explorer/editor tabs. Without it, all
|
|
115
|
+
`rw_*` tools, the settings UI, sync, audit log, and port forwarding continue to
|
|
116
|
+
work. Official Desktop uses its native right-sidebar seats and does not need
|
|
117
|
+
`dsh-better-sidebar`.
|
|
118
|
+
|
|
119
|
+
> **Upgrading from 0.7.2–0.8.17:** upgrading to 0.8.18 removes the embedded
|
|
120
|
+
> sidebar dependency and mount. Install `dsh-better-sidebar` separately only if
|
|
121
|
+
> you still want that Web UI. Any old profile override for
|
|
122
|
+
> `id: dsh-remote-sidebar` can be removed because that row no longer exists.
|
|
144
123
|
|
|
145
124
|
(or `npm install dsh-remote` + add `- id: dsh-remote / name: dsh-remote` in `cordis.patch.yml`).
|
|
146
125
|
|
package/README.zh.md
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
`dsh-app:` 通道承载请求,鉴权仍由宿主负责,不启动 Web Server。
|
|
14
14
|
- 通过 `sidebarRightTabs` 和 `sidebar.right.pane.tab` 提供原生“远程文件”入口,
|
|
15
15
|
复用原来的文件树与编辑器,不把远端路径传给本地文件预览器。
|
|
16
|
-
-
|
|
17
|
-
|
|
16
|
+
- `dsh-better-sidebar` 不再内置;Web 版可以单独安装,官方 Desktop 则使用
|
|
17
|
+
原生右侧栏集成。
|
|
18
18
|
|
|
19
19
|
已验证 Host 启动、IPC 请求、真实 SSH 的只读连接/目录列表/文本读取,以及设置页和
|
|
20
20
|
测试 SSH 配置的导入。文件标签的完整 UI 操作、编辑/同步、多机器并行会话,以及旧 Web
|
|
@@ -28,7 +28,7 @@ Desktop 安装器还可能要求明确配置 `ssh2` / `cpu-features` 可选构
|
|
|
28
28
|
[](LICENSE)
|
|
29
29
|
[](https://github.com/topics/dsh-plugin)
|
|
30
30
|
|
|
31
|
-

|
|
32
32
|
|
|
33
33
|
**为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)打造的远程工作助手。**
|
|
34
34
|
|
|
@@ -76,38 +76,25 @@ DSH 的 Web 界面刻意只监听 `127.0.0.1`(CLI 为安全拒绝 `--host 0.0.
|
|
|
76
76
|
dsh plugin add dsh-remote # 添加 bundle
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
([dsh-better-sidebar](https://www.npmjs.com/package/dsh-better-sidebar)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
>
|
|
96
|
-
>
|
|
97
|
-
>
|
|
98
|
-
> ```yaml
|
|
99
|
-
> - id: dsh-remote-sidebar
|
|
100
|
-
> disabled: true
|
|
101
|
-
> ```
|
|
102
|
-
>
|
|
103
|
-
> (同时不要再单独列出 `dsh-better-sidebar` bundle。)
|
|
104
|
-
|
|
105
|
-
> **要求 profile 的 pnpm linker 为 `hoisted`**(DSH profile 默认,
|
|
106
|
-
> `pnpm-workspace.yaml` 里 `nodeLinker: hoisted`)。loader 从 profile 根解析
|
|
107
|
-
> 插件包,侧边栏必须能在顶层 `node_modules` 被解析到。如果你的
|
|
108
|
-
> `pnpm-workspace.yaml` 被重写丢掉了 `nodeLinker: hoisted`,请补回并执行一次
|
|
109
|
-
> `pnpm install` —— 否则内嵌侧边栏行会报
|
|
110
|
-
> `Cannot find package 'dsh-better-sidebar'`。
|
|
79
|
+
从 **v0.8.18** 起,`dsh-remote` 只安装并挂载自身。Web 侧边栏
|
|
80
|
+
([dsh-better-sidebar](https://www.npmjs.com/package/dsh-better-sidebar))
|
|
81
|
+
改为可选,不再是依赖,也不会被自动挂载。这样 SSH 工具和设置页不再被某个侧边栏
|
|
82
|
+
实现的版本/API 变化拖垮。
|
|
83
|
+
|
|
84
|
+
如需 Web 版远程文件浏览/编辑,请显式安装两个 bundle:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
dsh plugin add dsh-remote
|
|
88
|
+
dsh plugin add dsh-better-sidebar
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
独立侧边栏 service 存在时,`dsh-remote` 会动态发现它并注册远程文件 tab;
|
|
92
|
+
不安装时,`rw_*` 工具、设置页、同步、审计日志和端口转发均照常工作。
|
|
93
|
+
官方 Desktop 使用原生右侧栏,不需要安装 `dsh-better-sidebar`。
|
|
94
|
+
|
|
95
|
+
> **从 0.7.2–0.8.17 升级:** 升到 0.8.18 后,内嵌侧边栏依赖和挂载会消失。
|
|
96
|
+
> 只有仍需要 Web 侧边栏 UI 时才单独安装 `dsh-better-sidebar`。旧 profile 里针对
|
|
97
|
+
> `id: dsh-remote-sidebar` 的覆盖可以删除,因为这行已不存在。
|
|
111
98
|
|
|
112
99
|
(或 `npm install dsh-remote`,再在 `cordis.patch.yml` 加 `- id: dsh-remote / name: dsh-remote`。)
|
|
113
100
|
|
package/cordis.patch.yml
CHANGED
|
@@ -1,59 +1,9 @@
|
|
|
1
|
-
# dsh-remote bundle patch: inserts this plugin into a profile's layer stack.
|
|
2
|
-
# Applied when a profile lists this bundle; rows reference the package by name so
|
|
3
|
-
# Node resolution finds the installed code.
|
|
1
|
+
# dsh-remote bundle patch: inserts only this plugin into a profile's layer stack.
|
|
4
2
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
# row uses a DEDICATED id (`dsh-remote-sidebar`)
|
|
10
|
-
# and a guard so it backs off when another row mounts `dsh-better-sidebar`
|
|
11
|
-
# (e.g. the user installed the sidebar bundle on its own, or an aggregate
|
|
12
|
-
# bundle owns it) — two enabled mounts would both register /sidebar/api and
|
|
13
|
-
# fail the whole plugin tree at boot.
|
|
14
|
-
#
|
|
15
|
-
# Order-independence (issue #12): the guard must NOT depend on
|
|
16
|
-
# `ctx.loader.entries()` creation order. The loader creates entries in bundle
|
|
17
|
-
# order and each row's disabled expression is evaluated at creation time, when
|
|
18
|
-
# only rows created BEFORE it are visible — so with
|
|
19
|
-
# `bundles: [..., "dsh-remote", "dsh-better-sidebar", ...]` (standalone sidebar
|
|
20
|
-
# installed after dsh-remote, the normal `dsh plugin add` append order) both
|
|
21
|
-
# rows saw no other sidebar mount and BOTH started, crashing boot with
|
|
22
|
-
# `duplicate prefix route "/sidebar/api"`.
|
|
23
|
-
#
|
|
24
|
-
# Instead we scan the COMPOSED PATCH STACK — the include entry's
|
|
25
|
-
# `config.patches` (every bundle layer in `dsh.profile.bundles` order, then the
|
|
26
|
-
# profile/home/overlay layers) — for any OTHER row that mounts
|
|
27
|
-
# `dsh-better-sidebar`. That data is fully materialized before any row guard
|
|
28
|
-
# evaluates, so the outcome is identical no matter where the standalone bundle
|
|
29
|
-
# sits in the bundle list. It is also pure data: it never reads another row's
|
|
30
|
-
# `disabled` (reading another row's disabled expression would recursively
|
|
31
|
-
# re-enter the loader — dsh-better-sidebar's own row carries one too, so the
|
|
32
|
-
# two would ping-pong), so no recursion is possible. The old entries()-based
|
|
33
|
-
# check is kept as a belt-and-suspenders fallback for rows not visible in the
|
|
34
|
-
# patch stack (e.g. an entry injected at runtime by HMR or another plugin).
|
|
3
|
+
# dsh-better-sidebar is deliberately not mounted here and is not a dependency.
|
|
4
|
+
# Users who want that optional Web UI can install its bundle separately;
|
|
5
|
+
# lib/client.js discovers the betterSidebar service dynamically and adds the
|
|
6
|
+
# remote explorer/editor tabs when it is present.
|
|
35
7
|
- insert:
|
|
36
8
|
- id: dsh-remote
|
|
37
9
|
name: 'dsh-remote'
|
|
38
|
-
- id: dsh-remote-sidebar
|
|
39
|
-
name: 'dsh-better-sidebar'
|
|
40
|
-
disabled: !!js >-
|
|
41
|
-
(function () {
|
|
42
|
-
// Inspect the core row's explicit disabled flag, not service presence:
|
|
43
|
-
// a Web server that simply has not started yet must still be awaited.
|
|
44
|
-
// Do not evaluate another sidebar's disabled guard (issue #12).
|
|
45
|
-
if ([...ctx.loader.entries()].some((e) => e.options.name === '@deepseek-ai/dsh-host-webserver' && e.options.disabled === true)) return true
|
|
46
|
-
try {
|
|
47
|
-
const inc = ctx.loader && ctx.loader.resolve && ctx.loader.resolve('include')
|
|
48
|
-
const patches = inc && inc.subtree && inc.subtree.config && inc.subtree.config.patches
|
|
49
|
-
if (Array.isArray(patches)) {
|
|
50
|
-
for (const p of patches) {
|
|
51
|
-
if (!p || !Array.isArray(p.insert)) continue
|
|
52
|
-
for (const row of p.insert) {
|
|
53
|
-
if (row && row.name === 'dsh-better-sidebar' && row.id !== 'dsh-remote-sidebar') return true
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
} catch (e) {}
|
|
58
|
-
return [...ctx.loader.entries()].some((e) => e.options.name === 'dsh-better-sidebar' && e.options.id !== 'dsh-remote-sidebar')
|
|
59
|
-
})()
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-remote",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "Remote-work assistant for DeepSeek Harness: connect SSH (password/key/agent/keyboard-interactive/proxy jump), pick a remote workspace, operate on it with 21 rw_* tools (incl. rw_edit/rw_stat/rw_mkdir/rw_remove/rw_move/rw_forward), conflict-aware mirror sync, port forwarding, side-bar remote file editing, audit log, keychain passwords.",
|
|
3
|
+
"version": "0.8.18",
|
|
4
|
+
"description": "Remote-work assistant for DeepSeek Harness: connect SSH (password/key/agent/keyboard-interactive/proxy jump), pick a remote workspace, operate on it with 21 rw_* tools (incl. rw_edit/rw_stat/rw_mkdir/rw_remove/rw_move/rw_forward), conflict-aware mirror sync, port forwarding, optional side-bar remote file editing, audit log, keychain passwords.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "flymysql <flyphp@outlook.com>",
|
|
7
7
|
"homepage": "https://github.com/flymysql/dsh-remote",
|
|
@@ -66,7 +66,6 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"ssh2": "^1.16.0",
|
|
68
68
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
69
|
-
"dsh-better-sidebar": "^0.18.1",
|
|
70
69
|
"iconv-lite": "^0.6.3"
|
|
71
70
|
},
|
|
72
71
|
"devDependencies": {
|