dsh-remote-vs 0.9.2 → 0.10.0
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.en.md +15 -4
- package/README.md +13 -3
- package/cordis.patch.yml +10 -5
- package/lib/client.js +728 -94
- package/lib/index.js +2 -2
- package/lib/types/client/composer.d.ts +5 -1
- package/lib/types/client/scm/HistoryPanel.d.ts +5 -0
- package/lib/types/client/scm/actions.d.ts +25 -0
- package/lib/types/client/scm/git-cache.d.ts +93 -0
- package/lib/types/client/scm/panel-cache.d.ts +43 -0
- package/lib/types/client/scm/read-queue.d.ts +74 -0
- package/lib/types/client/store.d.ts +66 -3
- package/lib/types/git-ops.d.ts +38 -0
- package/lib/types/index.d.ts +5 -0
- package/package.json +37 -37
- package/src/client/SettingsHosts.tsx +2 -1
- package/src/client/composer.ts +11 -2
- package/src/client/i18n.ts +10 -2
- package/src/client/scm/HistoryPanel.tsx +61 -11
- package/src/client/scm/ScmPanel.tsx +123 -22
- package/src/client/scm/actions.ts +49 -6
- package/src/client/scm/git-cache.ts +159 -0
- package/src/client/scm/panel-cache.ts +93 -0
- package/src/client/scm/read-queue.ts +151 -0
- package/src/client/store.tsx +360 -60
- package/src/client/vsc/vsc.css +10 -0
- package/src/git-ops.ts +60 -0
- package/src/index.ts +10 -2
package/README.en.md
CHANGED
|
@@ -37,8 +37,9 @@ dsh plugin --profile web add dsh-remote-vs
|
|
|
37
37
|
(From npm, recommended; installing straight from the repository also works:
|
|
38
38
|
`dsh plugin --profile web add github:xiray-xia/dsh-remote-vs`.)
|
|
39
39
|
|
|
40
|
-
Requires DSH `0.2.
|
|
41
|
-
baseline is `0.2.
|
|
40
|
+
Requires DSH `0.2.2-alpha.2` or newer (`engines.dsh` enforces the range; **the tested
|
|
41
|
+
baseline is `0.2.2-alpha.2`**). Older Hosts (`0.2.1-rc.2` generation) need plugin `0.9.3`: the
|
|
42
|
+
Remote preset of this version uses the `0.2.2-alpha.2` tool schema. `--profile web` selects which profile to install into —
|
|
42
43
|
this is a Web plugin, so it has to go into the profile your Web GUI runs from (`web` is
|
|
43
44
|
the common name; use your own profile's name).
|
|
44
45
|
|
|
@@ -205,6 +206,16 @@ Both surfaces share one state module (`store.tsx`): **the sidebar "Remote" page*
|
|
|
205
206
|
hidden it does **no remote work** (directory listings, the SCM stash/branch/remote queries and editor
|
|
206
207
|
image reads all wait for the next foreground pass), and visibility is MEASURED on the plugin root
|
|
207
208
|
(IntersectionObserver) instead of being taken from a host prop.
|
|
209
|
+
- **No blank wait when switching workspaces**: the last git state read for each (workspace, repository
|
|
210
|
+
directory) is kept in memory, so switching back paints the change list, branch and tree marks **in the
|
|
211
|
+
same frame** and re-reads behind it. The panel says "cached · refreshing" meanwhile; the change list and
|
|
212
|
+
the stage/commit/discard buttons still act on that workspace (⟳ and "reset repository directory" are
|
|
213
|
+
disabled while the background read runs — pressing them would only queue a second walk of the same tree).
|
|
214
|
+
One git read per repository DIRECTORY at a time (changing the directory lets the two directories' reads run
|
|
215
|
+
side by side — they are two different walks); a manual refresh's answer is always post-click (it queues
|
|
216
|
+
after the running read); a read of a workspace you left behind only fills its own cache and never repaints;
|
|
217
|
+
a failed background read keeps the list and shows why instead of declaring the workspace "not a
|
|
218
|
+
repository". The first visit to a workspace still waits — cache cannot invent a read.
|
|
208
219
|
- **Editor**: tabs plus an info bar (path, language, **build stamp**, `tok N` coloured-token count,
|
|
209
220
|
saved state, reload/save). Those three marks exist for troubleshooting: the stamp answers "is the
|
|
210
221
|
browser running the bundle I just built?", `tok 0` answers "did a grammar match this extension?".
|
|
@@ -291,7 +302,7 @@ over helper RPC (fs) / ssh2 (processes), local stays untouched; both share one H
|
|
|
291
302
|
|
|
292
303
|
- Alias dirs: `$DSH_HOME/remote-ssh/aliases/<id>` (empty shells, routing keys only), auto-registered into the native workspace list as `<server> > <base>`
|
|
293
304
|
- Routing switch (dropdown at the top of Settings → Remote hosts; underneath it is profile patch `- id: remote-vs`, `config.routingMode`, volatile, no restart):
|
|
294
|
-
`off` (
|
|
305
|
+
default `enforce` (real routing); switch to `off` (pure local passthrough) / `shadow` (logs, still local) as debugging escapes
|
|
295
306
|
- New workspace: the native "Add workspace…" entry is adopted (local/remote dual tab; remote leg = host→push→bind wizard)
|
|
296
307
|
- Presets: a `Remote` preset (bash toolset); under enforce, new remote sessions switch to it automatically (default preset only, never overrides an explicit choice)
|
|
297
308
|
- Ground truths (measured, not assumed):
|
|
@@ -309,7 +320,7 @@ over helper RPC (fs) / ssh2 (processes), local stays untouched; both share one H
|
|
|
309
320
|
Upstream never published helper binaries (all Release assets are empty), so this plugin builds its own:
|
|
310
321
|
|
|
311
322
|
- Build machine: WSL2 Ubuntu-22.04 (glibc 2.35, matching the remote targets), Node v24.21.0 + pnpm 11.28.5
|
|
312
|
-
- Sources: the `dsh-v0.2.1-alpha.2` tag (the **build baseline**: what must match is the wire protocol version, not the Host version —
|
|
323
|
+
- Sources: the `dsh-v0.2.1-alpha.2` tag (the **build baseline**: what must match is the wire protocol version, not the Host version — our protocol is still **2**, so a Host upgrade to `0.2.2-alpha.2` needs no rebuild either: the plugin intentionally stays on `dsh-ssh@0.2.1-rc.2`, and the new generation's protocol 3 is deliberately not followed — see §2.26 of the maintenance notes)
|
|
313
324
|
- Command: stock script `pnpm exec tsx scripts/build-exe-for-ssh-helper.ts --target=node24-linux-x64`
|
|
314
325
|
- Only deviation: no docker for the manylinux 2.28 rebuild, so a `DSH_GLIBC_CEILING`
|
|
315
326
|
env override was added (default stays 2.28); this build targets 2.35 (see `glibc-ceiling.patch` in the cache dir)
|
package/README.md
CHANGED
|
@@ -34,7 +34,8 @@ dsh plugin --profile web add dsh-remote-vs
|
|
|
34
34
|
|
|
35
35
|
(从 npm 装,推荐;也可以直接跟仓库装:`dsh plugin --profile web add github:xiray-xia/dsh-remote-vs`。)
|
|
36
36
|
|
|
37
|
-
要求 DSH `0.2.
|
|
37
|
+
要求 DSH `0.2.2-alpha.2` 及以上(`engines.dsh` 门到底;**当前实测基线 `0.2.2-alpha.2`**)。
|
|
38
|
+
旧 Host(`0.2.1-rc.2` 一代)请用插件 `0.9.3`:新版的 Remote 预设用了 `0.2.2-alpha.2` 的工具 schema。
|
|
38
39
|
`--profile web` 指明装进哪个 profile —— 本插件是 Web 插件,
|
|
39
40
|
必须装进 Web GUI 所用的那个(`web` 是常见命名,以你自己的 profile 名为准)。
|
|
40
41
|
|
|
@@ -193,6 +194,13 @@ dsh_remote_vs/
|
|
|
193
194
|
保持挂载,切回来不重新拉取、不闪。隐藏期间**不做远端工作**(目录列表、SCM 的 stash/分支/远程查询、
|
|
194
195
|
编辑器图片读取都等回到前台再补一次),可见性是对插件根节点实测的(IntersectionObserver),
|
|
195
196
|
不靠宿主传参。
|
|
197
|
+
- **切工作区不空白**:每个(工作区, 仓库目录)最近一次读到的 git 状态留在内存里,切回时**同一帧**画出
|
|
198
|
+
更改列表、分支和文件树上的状态标记,再在后台重读替换;期间面板标「缓存 · 后台刷新中」,更改列表与
|
|
199
|
+
暂存/提交/丢弃等按钮照常作用于该工作区(⟳ 与「重置仓库目录」在后台读期间置灰 —— 再点只会对同一棵树
|
|
200
|
+
重复排队)。同一**仓库目录**同时最多一条 git 读(换目录时新旧目录的读会并行,它们本来就是两个目录);
|
|
201
|
+
手动刷新的结果一定晚于点击(排在后台读之后取最新结果),切走的读只写自己那份缓存、绝不上屏;后台读
|
|
202
|
+
失败保留原列表并显示原因,不会把工作区误判成"没有仓库"。刷新浏览器/重启 Host 后第一次切换仍要等
|
|
203
|
+
一次,这是有意的。
|
|
196
204
|
- **编辑器**:多标签 + 信息栏(路径、语言、**构建戳**、`tok N` 着色 token 数、已保存状态、重载/保存)。
|
|
197
205
|
信息栏三个标记是给排障用的:构建戳判定"浏览器跑的是不是刚编的包",`tok 0` 判定语法包是否命中。
|
|
198
206
|
- **悬浮编辑器**:文件树 / 搜索结果 / 源代码管理右键「在悬浮编辑器中打开」,或双击「远程编辑器」标签,
|
|
@@ -259,7 +267,7 @@ helper RPC(fs)/ ssh2(进程),本地一切不变;两者同 Host、共
|
|
|
259
267
|
|
|
260
268
|
- 别名目录:`$DSH_HOME/remote-ssh/aliases/<id>`(空壳,只做路由键),自动注册进原生工作区列表,标题 `<server> > <base>`
|
|
261
269
|
- 路由开关(设置 → 远程主机页顶部下拉;底层是 profile patch `- id: remote-vs` 下 `config.routingMode`,volatile,免重启):
|
|
262
|
-
`off
|
|
270
|
+
默认 `enforce`(真路由);可切 `off`(纯直通本地)/ `shadow`(记日志仍走本地)作为排障开关
|
|
263
271
|
- 新建工作区:原生"添加工作区…"入口已接管(本地/远端双 tab;远端腿=主机→推送→绑定向导)
|
|
264
272
|
- 预设:`Remote` 预设(bash 工具集);enforce 下远端新会话自动切过去(默认预设才切,不践踏显式选择)
|
|
265
273
|
- 顶层真相(实测结论,非假设):
|
|
@@ -277,7 +285,9 @@ helper RPC(fs)/ ssh2(进程),本地一切不变;两者同 Host、共
|
|
|
277
285
|
官方从未发布 helper 二进制(Release assets 全空),本插件走自编译:
|
|
278
286
|
|
|
279
287
|
- 构建机:WSL2 Ubuntu-22.04(glibc 2.35,与目标远端一致),Node v24.21.0 + pnpm 11.28.5
|
|
280
|
-
- 源码:`dsh-v0.2.1-alpha.2` tag(**构建基线**:对齐的是 wire 协议号,不是 Host 版本号 ——
|
|
288
|
+
- 源码:`dsh-v0.2.1-alpha.2` tag(**构建基线**:对齐的是 wire 协议号,不是 Host 版本号 —— 我们用到的
|
|
289
|
+
协议号仍是 **2**,Host 升到 `0.2.2-alpha.2` 也不需要重编:插件自行停在 `dsh-ssh@0.2.1-rc.2`,
|
|
290
|
+
新 Host 那一代 `dsh-ssh` 的协议 3 我们故意不跟,差异见维护文档 §2.26)
|
|
281
291
|
- 命令:官方原脚本 `pnpm exec tsx scripts/build-exe-for-ssh-helper.ts --target=node24-linux-x64`
|
|
282
292
|
- 唯一偏离:无 docker 跑不了 manylinux 2.28 重编,加了 `DSH_GLIBC_CEILING`
|
|
283
293
|
环境覆盖(默认仍 2.28),本次以 2.35 构建(见缓存目录 `glibc-ceiling.patch`)
|
package/cordis.patch.yml
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
inject: [localFileReferences, remoteWorlds]
|
|
55
55
|
|
|
56
56
|
# Remote agent preset, bound to this bundle's lifecycle.
|
|
57
|
-
# Mirrored from preset-standard @ dsh 0.2.
|
|
57
|
+
# Mirrored from preset-standard @ dsh 0.2.2-alpha.2 with these diffs:
|
|
58
58
|
# 1. persona prefix reframed for remote SSH work (transparent routing);
|
|
59
59
|
# 2. tool-bash moved into an isolated shell group with our routed bash
|
|
60
60
|
# executor (stock root shell stays pwsh on Windows);
|
|
@@ -67,6 +67,12 @@
|
|
|
67
67
|
# preset) right after `tool-plugin-manager` — mirrored here for the same
|
|
68
68
|
# reason as above: a row missing from the mirror is a preset that silently
|
|
69
69
|
# loads a different toolset than stock.
|
|
70
|
+
# 0.2.2-alpha.2 note: stock dropped `tool-subagent-list-agents` (the
|
|
71
|
+
# `dsh-tool-subagent-control/list-agents` subpath is gone from the package),
|
|
72
|
+
# renamed `modelSelectionSettings` to `modelSelection` + `modelDiscovery`,
|
|
73
|
+
# and made the plugin-manager row conditional on `profileContext`. All
|
|
74
|
+
# three are mirrored here: the first one is a hard module-resolution error,
|
|
75
|
+
# the other two are schema drift.
|
|
70
76
|
- id: preset-remote
|
|
71
77
|
name: '@deepseek-ai/dsh-agent-preset'
|
|
72
78
|
config:
|
|
@@ -207,14 +213,13 @@
|
|
|
207
213
|
config:
|
|
208
214
|
- id: tool-subagent-control
|
|
209
215
|
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
210
|
-
- id: tool-subagent-list-agents
|
|
211
|
-
name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
|
|
212
216
|
- id: tool-subagent
|
|
213
217
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
214
218
|
config:
|
|
215
219
|
provider: spawn
|
|
216
220
|
toolName: subagent
|
|
217
|
-
|
|
221
|
+
modelSelection: true
|
|
222
|
+
modelDiscovery: true
|
|
218
223
|
- id: tool-subagent-fork
|
|
219
224
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
220
225
|
config:
|
|
@@ -241,7 +246,7 @@
|
|
|
241
246
|
name: '@deepseek-ai/dsh-tool-present'
|
|
242
247
|
- id: tool-plugin-manager
|
|
243
248
|
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
244
|
-
disabled:
|
|
249
|
+
disabled: !!js "!ctx.get('profileContext')"
|
|
245
250
|
- id: tool-plugin-market
|
|
246
251
|
name: '@deepseek-ai/dsh-plugin-market/tools'
|
|
247
252
|
disabled: true
|