dsh-remote-vs 0.8.5 → 0.8.6

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/lib/client.js CHANGED
@@ -823,7 +823,7 @@ window.__ModuleLoader__.load({
823
823
  onKeyDown: (e) => {
824
824
  if (e.key === "Enter") go();
825
825
  },
826
- placeholder: "/home/xiray/project",
826
+ placeholder: "/home/user/project",
827
827
  spellCheck: false,
828
828
  style: {
829
829
  flex: 1,
@@ -37978,7 +37978,7 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
37978
37978
  const primary = host.querySelectorAll("[class*=\"rvs-ck-\"]").length;
37979
37979
  const fallback = host.querySelectorAll("span[class^=\"rvs-t-\"]").length;
37980
37980
  const count = primary > 0 ? primary : fallback;
37981
- console.info(`[dsh-remote-vs] build 1022-1539 · ${source} · colored tokens: ${count} (${propsRef.current.path})`);
37981
+ console.info(`[dsh-remote-vs] build 1022-1607 · ${source} · colored tokens: ${count} (${propsRef.current.path})`);
37982
37982
  propsRef.current.onTokens?.(count);
37983
37983
  };
37984
37984
  const armFallback = () => {
@@ -40390,7 +40390,7 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
40390
40390
  * path decides between the bindings on it.
40391
40391
  *
40392
40392
  * One alias routinely carries SEVERAL bindings (the same host mounted at
40393
- * `/home/xiray/P710/…` and `/home/xiray/Z700/…`), so an alias-only match hands
40393
+ * `/srv/one/…` and `/srv/two/…`), so an alias-only match hands
40394
40394
  * back whichever was created first: the editor then opens the file the caller
40395
40395
  * named while the sidebar, the tree and the workspace selector stay on the
40396
40396
  * other workspace. The remote root the caller already holds (`summary.root`, a
@@ -40565,8 +40565,8 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
40565
40565
  * `bindingForWorkspacePath` answers only for the workspace path ITSELF (exact
40566
40566
  * alias-dir match). A session cwd is weaker evidence: the model cd'ed into a
40567
40567
  * project sub-directory, and the host commits whichever spelling the session
40568
- * ran in — the local alias (`C:\…\aliases\p710bb\src`) or the REMOTE path
40569
- * (`/home/xiray/P710/master/userdebug/P710/src`). Both are still inside exactly
40568
+ * ran in — the local alias dir (`C:\…\aliases\<alias>\src`) or the REMOTE
40569
+ * path (`/srv/one/src`). Both are still inside exactly
40570
40570
  * one binding, so the deepest containing alias dir / remote root decides.
40571
40571
  *
40572
40572
  * No fallback to "the first binding": a cwd that names no known binding answers
@@ -41204,7 +41204,7 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
41204
41204
  * workspace showed the sidebar on another — the selector kept whatever
41205
41205
  * localStorage held (or the FIRST binding, on a fresh profile), and a click in
41206
41206
  * the change panel matched its binding by alias alone, which is ambiguous as
41207
- * soon as one host carries two workspaces (P710 and Z700 share `ssh_xiray_new`).
41207
+ * soon as one host carries two workspaces under one alias).
41208
41208
  *
41209
41209
  * Resolution order, strongest evidence first (all of it inside
41210
41210
  * `planWorkspaceFollow`, so the policy has exactly one home):
@@ -43071,8 +43071,8 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
43071
43071
  }),
43072
43072
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
43073
43073
  className: "rvs-build",
43074
- title: `dsh-remote-vs build 1022-1539`,
43075
- children: "1022-1539"
43074
+ title: `dsh-remote-vs build 1022-1607`,
43075
+ children: "1022-1607"
43076
43076
  }),
43077
43077
  tokenCount !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
43078
43078
  className: "rvs-build",
@@ -60933,7 +60933,7 @@ Integer Float Double Long Int32 Int64 Uint8 uint32_t int32_t uint64_t int64_t si
60933
60933
  * Without this the panel opened on whatever localStorage held — and on a
60934
60934
  * fresh profile on `workspaces[0]` — so a session working in one remote
60935
60935
  * workspace showed another workspace's tree until the user corrected it by
60936
- * hand (the reported bug: a P710 session browsing Z700). The host's own
60936
+ * hand (the reported bug: a session browsing another workspace on one host). The host's own
60937
60937
  * workspace membership for the on-screen session is the only sanctioned
60938
60938
  * source (`useRemoteChatTarget`), and it is a soft read: while it answers
60939
60939
  * nothing the current selection stands.
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as pushPipeline, c as require_lib, d as ensurePrivateDir, f as keysDir, i as probe, l as aliasRoot, o as seedHelperCache, p as storePath, r as helperAvailability, s as RemoteFiles, t as RemoteWorlds, u as dshHome } from "./worlds-PUumRIh7.js";
1
+ import { a as pushPipeline, c as require_lib, d as ensurePrivateDir, f as keysDir, i as probe, l as aliasRoot, o as seedHelperCache, p as storePath, r as helperAvailability, s as RemoteFiles, t as RemoteWorlds, u as dshHome } from "./worlds-C6W225o9.js";
2
2
  import z from "@deepseek-ai/schemastery";
3
3
  import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, statSync, writeSync } from "node:fs";
4
4
  import { createHash, randomUUID } from "node:crypto";
@@ -2529,8 +2529,8 @@ function readHeadCommand(root, paths, capBytes, totalCapBytes) {
2529
2529
  /**
2530
2530
  * Name every immediate subdirectory that is a git repository.
2531
2531
  *
2532
- * A session working directory is often a CONTAINER for repositories (the
2533
- * reference host has `/home/xiray/dsh_workbase` holding `emv-toolbox-web`), and
2532
+ * A session working directory is often a CONTAINER for repositories (a root
2533
+ * that holds another repository inside it), and
2534
2534
  * `git status` at the container answers 128. This is a one-level `ls`-style
2535
2535
  * probe — bounded work, no `find` — so it can never become the expensive part
2536
2536
  * of a scan.
@@ -3357,8 +3357,8 @@ var SessionChanges = class {
3357
3357
  * index (1.4s measured on the reference monorepo).
3358
3358
  *
3359
3359
  * A session working directory is often a CONTAINER for repositories rather
3360
- * than one itself (the reference host has `/home/xiray/dsh_workbase` holding
3361
- * `emv-toolbox-web`), and `git status` there answers exit 128 — "not a git
3360
+ * than one itself (a session root that holds another repository inside it),
3361
+ * and `git status` there answers exit 128 — "not a git
3362
3362
  * repository (or any parent up to mount point /)". When that happens the
3363
3363
  * ledger looks one level down once and adopts the repository it finds, which
3364
3364
  * is the same idea the SCM panel's `repoSubdir` expresses by hand.
@@ -1,4 +1,4 @@
1
- import { l as aliasRoot, n as isWindowsAbsolute } from "./worlds-PUumRIh7.js";
1
+ import { l as aliasRoot, n as isWindowsAbsolute } from "./worlds-C6W225o9.js";
2
2
  import { FileSystem, FsError } from "@deepseek-ai/dsh-fs";
3
3
  //#region src/p2/router-fs.ts
4
4
  /**
@@ -148,8 +148,8 @@ export declare class SessionChanges {
148
148
  * index (1.4s measured on the reference monorepo).
149
149
  *
150
150
  * A session working directory is often a CONTAINER for repositories rather
151
- * than one itself (the reference host has `/home/xiray/dsh_workbase` holding
152
- * `emv-toolbox-web`), and `git status` there answers exit 128 — "not a git
151
+ * than one itself (a session root that holds another repository inside it),
152
+ * and `git status` there answers exit 128 — "not a git
153
153
  * repository (or any parent up to mount point /)". When that happens the
154
154
  * ledger looks one level down once and adopts the repository it finds, which
155
155
  * is the same idea the SCM panel's `repoSubdir` expresses by hand.
@@ -175,8 +175,8 @@ export declare function readHeadCommand(root: string, paths: readonly string[],
175
175
  /**
176
176
  * Name every immediate subdirectory that is a git repository.
177
177
  *
178
- * A session working directory is often a CONTAINER for repositories (the
179
- * reference host has `/home/xiray/dsh_workbase` holding `emv-toolbox-web`), and
178
+ * A session working directory is often a CONTAINER for repositories (a root
179
+ * that holds another repository inside it), and
180
180
  * `git status` at the container answers 128. This is a one-level `ls`-style
181
181
  * probe — bounded work, no `find` — so it can never become the expensive part
182
182
  * of a scan.
@@ -6,7 +6,7 @@
6
6
  * opens it through its own right-sidebar preview. That preview resolves the
7
7
  * address path against the SESSION WORKSPACE ROOT. A model that quotes a path
8
8
  * relative to its CURRENT directory (e.g. `_xfer/reports/x.md` while working
9
- * in `…/dsh_workbase/emv-toolbox-web`) therefore misses by one segment, and a
9
+ * in `<workspace>/<inner-repo>`) therefore misses by one segment, and a
10
10
  * remote session's workspace root only exists as an EMPTY local alias dir —
11
11
  * the click dies with the host-side ENOENT the user sees.
12
12
  *
@@ -67,7 +67,7 @@ export declare function bindingForWorkspacePath(table: RemoteOpenBindings, works
67
67
  * path decides between the bindings on it.
68
68
  *
69
69
  * One alias routinely carries SEVERAL bindings (the same host mounted at
70
- * `/home/xiray/P710/…` and `/home/xiray/Z700/…`), so an alias-only match hands
70
+ * `/srv/one/…` and `/srv/two/…`), so an alias-only match hands
71
71
  * back whichever was created first: the editor then opens the file the caller
72
72
  * named while the sidebar, the tree and the workspace selector stay on the
73
73
  * other workspace. The remote root the caller already holds (`summary.root`, a
@@ -199,8 +199,8 @@ export declare function selectionIsSessionBinding(options: {
199
199
  * `bindingForWorkspacePath` answers only for the workspace path ITSELF (exact
200
200
  * alias-dir match). A session cwd is weaker evidence: the model cd'ed into a
201
201
  * project sub-directory, and the host commits whichever spelling the session
202
- * ran in — the local alias (`C:\…\aliases\p710bb\src`) or the REMOTE path
203
- * (`/home/xiray/P710/master/userdebug/P710/src`). Both are still inside exactly
202
+ * ran in — the local alias dir (`C:\…\aliases\<alias>\src`) or the REMOTE
203
+ * path (`/srv/one/src`). Both are still inside exactly
204
204
  * one binding, so the deepest containing alias dir / remote root decides.
205
205
  *
206
206
  * No fallback to "the first binding": a cwd that names no known binding answers
@@ -222,7 +222,7 @@ export declare function setFollowSession(sessionId: string | undefined): void;
222
222
  * workspace showed the sidebar on another — the selector kept whatever
223
223
  * localStorage held (or the FIRST binding, on a fresh profile), and a click in
224
224
  * the change panel matched its binding by alias alone, which is ambiguous as
225
- * soon as one host carries two workspaces (P710 and Z700 share `ssh_xiray_new`).
225
+ * soon as one host carries two workspaces under one alias).
226
226
  *
227
227
  * Resolution order, strongest evidence first (all of it inside
228
228
  * `planWorkspaceFollow`, so the policy has exactly one home):
@@ -103,7 +103,7 @@ export declare class RemoteWorlds {
103
103
  * service canonicalizes through it), and the remote fs view answers the remote
104
104
  * absolute path. That is the right spelling for display and for remote
105
105
  * processes, but it is not always a spelling the router can route BACK: two
106
- * bindings may share one remote root (`mlxy:/home` + `xjp-xiray:/home`), and
106
+ * bindings may share one remote root (two aliases both mounted at `/home`), and
107
107
  * `/home` is then deliberately ambiguous and resolves local. A spawned child
108
108
  * session inherits exactly that committed spelling — so every subagent of a
109
109
  * remote session in one of those workspaces silently ran on the Host (and a
@@ -18432,7 +18432,7 @@ var RemoteWorlds = class {
18432
18432
  * service canonicalizes through it), and the remote fs view answers the remote
18433
18433
  * absolute path. That is the right spelling for display and for remote
18434
18434
  * processes, but it is not always a spelling the router can route BACK: two
18435
- * bindings may share one remote root (`mlxy:/home` + `xjp-xiray:/home`), and
18435
+ * bindings may share one remote root (two aliases both mounted at `/home`), and
18436
18436
  * `/home` is then deliberately ambiguous and resolves local. A spawned child
18437
18437
  * session inherits exactly that committed spelling — so every subagent of a
18438
18438
  * remote session in one of those workspaces silently ran on the Host (and a
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-remote-vs",
3
3
  "description": "VSCode-style remote development for DSH: SSH host manager (key/password), helper deploy pipeline with version check, remote file explorer + editor + terminal in dsh-better-sidebar.",
4
- "version": "0.8.5",
4
+ "version": "0.8.6",
5
5
  "icon": "icon.svg",
6
6
  "keywords": [
7
7
  "dsh",
@@ -600,8 +600,8 @@ export class SessionChanges {
600
600
  * index (1.4s measured on the reference monorepo).
601
601
  *
602
602
  * A session working directory is often a CONTAINER for repositories rather
603
- * than one itself (the reference host has `/home/xiray/dsh_workbase` holding
604
- * `emv-toolbox-web`), and `git status` there answers exit 128 — "not a git
603
+ * than one itself (a session root that holds another repository inside it),
604
+ * and `git status` there answers exit 128 — "not a git
605
605
  * repository (or any parent up to mount point /)". When that happens the
606
606
  * ledger looks one level down once and adopts the repository it finds, which
607
607
  * is the same idea the SCM panel's `repoSubdir` expresses by hand.
@@ -367,8 +367,8 @@ export function readHeadCommand(
367
367
  /**
368
368
  * Name every immediate subdirectory that is a git repository.
369
369
  *
370
- * A session working directory is often a CONTAINER for repositories (the
371
- * reference host has `/home/xiray/dsh_workbase` holding `emv-toolbox-web`), and
370
+ * A session working directory is often a CONTAINER for repositories (a root
371
+ * that holds another repository inside it), and
372
372
  * `git status` at the container answers 128. This is a one-level `ls`-style
373
373
  * probe — bounded work, no `find` — so it can never become the expensive part
374
374
  * of a scan.
@@ -108,7 +108,7 @@ export function RemoteDirectoryPicker(props: {
108
108
  onKeyDown={(e) => {
109
109
  if (e.key === 'Enter') go()
110
110
  }}
111
- placeholder="/home/xiray/project"
111
+ placeholder="/home/user/project"
112
112
  spellCheck={false}
113
113
  style={{ flex: 1, background: 'rgba(127,127,127,.12)', color: 'inherit', border: '1px solid rgba(127,127,127,.35)', borderRadius: 6, padding: '4px 8px', fontSize: 13, fontFamily: 'inherit', outline: 'none' }}
114
114
  />
@@ -133,7 +133,7 @@ function Shell(props: { ctx: Context; visible: boolean }): ReactNode {
133
133
  * Without this the panel opened on whatever localStorage held — and on a
134
134
  * fresh profile on `workspaces[0]` — so a session working in one remote
135
135
  * workspace showed another workspace's tree until the user corrected it by
136
- * hand (the reported bug: a P710 session browsing Z700). The host's own
136
+ * hand (the reported bug: a session browsing another workspace on one host). The host's own
137
137
  * workspace membership for the on-screen session is the only sanctioned
138
138
  * source (`useRemoteChatTarget`), and it is a soft read: while it answers
139
139
  * nothing the current selection stands.
@@ -234,8 +234,8 @@ export function ChangesDock(props: ChangesDockProps): React.ReactNode {
234
234
  // sees what the load wrote.
235
235
  //
236
236
  // Resolved by the session's REMOTE root, never by the alias alone: one
237
- // alias carries several bindings (P710 and Z700 both live on
238
- // `ssh_xiray_new`), and the alias-only form picked whichever came first —
237
+ // alias carries several bindings (two workspaces can live on one alias),
238
+ // and the alias-only form picked whichever came first —
239
239
  // the file opened while the tree and the selector stayed on the other
240
240
  // workspace. That was the reported bug.
241
241
  let binding = bindingForChangedFile(remoteOpenBindings(), summary, file.path)
@@ -6,7 +6,7 @@
6
6
  * opens it through its own right-sidebar preview. That preview resolves the
7
7
  * address path against the SESSION WORKSPACE ROOT. A model that quotes a path
8
8
  * relative to its CURRENT directory (e.g. `_xfer/reports/x.md` while working
9
- * in `…/dsh_workbase/emv-toolbox-web`) therefore misses by one segment, and a
9
+ * in `<workspace>/<inner-repo>`) therefore misses by one segment, and a
10
10
  * remote session's workspace root only exists as an EMPTY local alias dir —
11
11
  * the click dies with the host-side ENOENT the user sees.
12
12
  *
@@ -181,7 +181,7 @@ function isRemoteAbsolute(path: string | undefined): path is string {
181
181
  * path decides between the bindings on it.
182
182
  *
183
183
  * One alias routinely carries SEVERAL bindings (the same host mounted at
184
- * `/home/xiray/P710/…` and `/home/xiray/Z700/…`), so an alias-only match hands
184
+ * `/srv/one/…` and `/srv/two/…`), so an alias-only match hands
185
185
  * back whichever was created first: the editor then opens the file the caller
186
186
  * named while the sidebar, the tree and the workspace selector stay on the
187
187
  * other workspace. The remote root the caller already holds (`summary.root`, a
@@ -396,8 +396,8 @@ function bindingForHostPath(
396
396
  * `bindingForWorkspacePath` answers only for the workspace path ITSELF (exact
397
397
  * alias-dir match). A session cwd is weaker evidence: the model cd'ed into a
398
398
  * project sub-directory, and the host commits whichever spelling the session
399
- * ran in — the local alias (`C:\…\aliases\p710bb\src`) or the REMOTE path
400
- * (`/home/xiray/P710/master/userdebug/P710/src`). Both are still inside exactly
399
+ * ran in — the local alias dir (`C:\…\aliases\<alias>\src`) or the REMOTE
400
+ * path (`/srv/one/src`). Both are still inside exactly
401
401
  * one binding, so the deepest containing alias dir / remote root decides.
402
402
  *
403
403
  * No fallback to "the first binding": a cwd that names no known binding answers
@@ -761,7 +761,7 @@ let followFlight: { sessionId: string; promise: Promise<string | undefined> } |
761
761
  * workspace showed the sidebar on another — the selector kept whatever
762
762
  * localStorage held (or the FIRST binding, on a fresh profile), and a click in
763
763
  * the change panel matched its binding by alias alone, which is ambiguous as
764
- * soon as one host carries two workspaces (P710 and Z700 share `ssh_xiray_new`).
764
+ * soon as one host carries two workspaces under one alias).
765
765
  *
766
766
  * Resolution order, strongest evidence first (all of it inside
767
767
  * `planWorkspaceFollow`, so the policy has exactly one home):
@@ -189,7 +189,7 @@ export default class TransparentFileSystem extends FileSystem {
189
189
  // for remote processes), but that spelling is not guaranteed to route BACK:
190
190
  // a session path derived from it (working-directory.set commits THIS value)
191
191
  // would resolve local whenever two bindings share the remote root — that is
192
- // how subagents of `mlxy`/`xjp-xiray` sessions ended up running on the Host.
192
+ // how subagents of a session bound to another host ended up running on the Host.
193
193
  // toSessionPath keeps the remote spelling where it is unambiguous and uses
194
194
  // the binding's unique alias spelling only where it is not.
195
195
  return this.remote.toSessionPath(world, fs.processPath(target))
package/src/p2/worlds.ts CHANGED
@@ -173,8 +173,8 @@ export class RemoteWorlds {
173
173
  if (byRemotePath.length === 0) return undefined
174
174
  const longest = Math.max(...byRemotePath.map(candidate => candidate.length))
175
175
  const top = byRemotePath.filter(candidate => candidate.length === longest)
176
- // Two bindings can share one remote directory — here `mlxy:/home` and
177
- // `xjp-xiray:/home` do. Picking either would send a write to the wrong host,
176
+ // Two bindings can share one remote directory — here two aliases both
177
+ // mounted at `/home` do. Picking either would send a write to the wrong host,
178
178
  // and a wrong-host write is silent and destructive in a way a local one is
179
179
  // not, so an ambiguous remote-form cwd stays local instead of guessing.
180
180
  //
@@ -276,7 +276,7 @@ export class RemoteWorlds {
276
276
  * service canonicalizes through it), and the remote fs view answers the remote
277
277
  * absolute path. That is the right spelling for display and for remote
278
278
  * processes, but it is not always a spelling the router can route BACK: two
279
- * bindings may share one remote root (`mlxy:/home` + `xjp-xiray:/home`), and
279
+ * bindings may share one remote root (two aliases both mounted at `/home`), and
280
280
  * `/home` is then deliberately ambiguous and resolves local. A spawned child
281
281
  * session inherits exactly that committed spelling — so every subagent of a
282
282
  * remote session in one of those workspaces silently ran on the Host (and a