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 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.1-alpha.3` or newer (`engines.dsh` enforces the range; **the tested
41
- baseline is `0.2.1-rc.2`**). `--profile web` selects which profile to install into —
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` (default, local passthrough) / `shadow` (logs, still local) / `enforce` (real routing)
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 — it is still 2, so a Host upgrade to alpha.4 or alpha.5 does not require a rebuild)
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.1-alpha.3` 及以上(`engines.dsh` 门到底;**当前实测基线 `0.2.1-rc.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`(默认,直通本地)/ `shadow`(记日志仍走本地)/ `enforce`(真路由)
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 版本号 —— 协议号至今仍是 2,故 Host 升到 alpha.4 / alpha.5 都无需重编)
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.1-alpha.3 with these diffs:
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
- modelSelectionSettings: true
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: true
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