Skip to content

Session-bound sidebar FS + UI chrome polish - #36

Merged
flymysql merged 1 commit into
mainfrom
cursor/session-bound-fs-8609
Sep 17, 2026
Merged

flymysql merged 1 commit into
mainfrom
cursor/session-bound-fs-8609

Conversation

@flymysql

@flymysql flymysql commented Sep 17, 2026

Copy link
Copy Markdown
Owner

Side-bar /ls, /read, /write, and /fs used the active-machine SSH pool. rw_* tools were already session-bound (issue #25). Two Desktop/Web conversations on different hosts could therefore list/edit the wrong machine even when resource URLs were session-scoped.

Session binding (0.8.19)

  • Resolve those HTTP routes with sessionId / local= through the same mirror binding as rw_*. Local (non-mirror) sessions get 403 instead of falling back.
  • Workspace picker still omits sessionId and uses the current machine.
  • Client explorer, file tab, and native right sidebar attach sessionId; saves send expectedMtime.
  • Oversized /read uses SFTP readPartial (no whole-file fastGet to a pid temp path).
  • Sync defaults depth 8 / 2000 files and report TRUNCATED. POSIX rw_search tries rg then grep -R.
  • Split lib/pool.js, lib/routes-fs.js, lib/remote-fs.js; document 20 tools in README.zh / package.json / PUBLISH.md.

UI / operation polish (0.8.20)

Settings, workspace picker, remote explorer, and file tab:

  • Theme-token hover/focus CSS (.dsh-rw-*); primary CTAs for save / set-current / set-workspace.
  • Segmented Local/Remote tabs; Enter / Esc / Ctrl/⌘+Enter; path autocomplete still works.
  • Machine rows use status pills instead of emoji soup; wider labels; collapsible forwards + audit (with refresh).
  • Rename / new directory use an in-app dialog (no window.prompt); context menu follows light/dark.
  • File editor uses theme text color (not hardcoded #e4e4e7); unsaved badge; Ctrl/⌘+S save, Esc cancel; 409 errors stay as a banner so the draft is not replaced.
  • Hover tints use a neutral translucent gray rather than --dsw-alias-interactive-bg-hover: measured against a live harness, that token is a 6% tint that disappears on the settings surface. Primary-button hover uses opacity, because the harness's primary fill is near-black in light theme and brightness() produces no visible change.

Verification

npm test — 128 passing (session-fs, desktop-fs, remote-fs, i18n key parity), plus node check.mjs.

Installed the packed 0.8.20 tarball into a separate DSH web instance (isolated DSH_HOME, port 7391) and exercised it in a browser: plugin routes answer 200 (/dsh-remote/machines, /status, /update-check reports current 0.8.20), the settings section renders with pills and collapsible panels, row hover is visible, and the picker's segmented tabs plus Enter/Esc/Ctrl+Enter behave. No console errors beyond the expected SSH failures (no reachable SSH host in the sandbox).

Remote workspace settings with status pills and collapsible sections

Workspace picker with segmented Local/Remote tabs and keyboard hint

Official Desktop GUI remains experimental; the multi-machine backend blocker for sidebar file ops is fixed.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

Sidebar /ls /read /write /fs now take sessionId (or a mirror local path) and
use the same mirror binding as rw_* tools, so two conversations on different
hosts no longer share the active-machine pool. Picker requests without a
session hint keep the current-machine pool.

Also: SFTP range reads for oversized previews, higher sync caps with an
explicit TRUNCATED signal, POSIX rg/grep search fallback, extract SshPool and
FS routes out of index.js, and align README.zh / PUBLISH.md / tool counts.

Co-authored-by: 兰州小红鸡 <flyphp@outlook.com>
@flymysql
flymysql marked this pull request as ready for review September 17, 2026 03:25
@flymysql
flymysql merged commit feceee3 into main Sep 17, 2026
1 check passed
@cursor cursor Bot changed the title Bind sidebar file routes to the session machine Session-bound sidebar FS + UI chrome polish Sep 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants