Repository navigation
Releases
v0.3.3 — DSH 0.1.5-rc.1 baseline
DSH 0.1.5-rc.1 baseline
This release aligns dsh-remote-ssh with DSH 0.1.5-rc.1. Three of the changes are required for the plugin to boot at all on 0.1.5; the rest are the harness patches re-cut.
Required for DSH 0.1.5
readByteRangeimplemented (fs-ssh) — 0.1.5 added this abstract method to theFileSystemseam; without it the remote filesystem provider fails to load. Read as a byte window over the helper (seek + bounded read), so[offset, offset+length)never buffers the whole file.connection.rpc.handleregression worked around (ssh-gui) — DSH commit2ef85b1e17droppedwebServerfromdsh-client-connection's inject, which brokeconnection.rpc.handle's internalowner.webServer.register(route)for every plugin. The/dsh-sshroute is now registered directly againstwebServer, reusing Connection's publicrequestRejectionfor the Host/Origin + browser-auth fence (unauthenticated requests still get 401).- SSH keepalive on by default (30s) (
ssh-gui) —keepaliveIntervaldefaulted to 0, so a silently dead peer (server power loss, network drop, NAT timeout) sent no FIN/RST, ssh2 never firedclose/error, and the memoized client/SFTP/PTY hung until a DSH restart. ssh2 now pings every 30s and emitsKeepalive timeoutafter 4 misses (~2 min), which the transport guard turns intoinvalidate()so the next use reconnects.
Harness patches re-cut against 0.1.5-rc.1
Both patches under harness-patches/ were cut against 0.1.2 and no longer applied. They are now re-cut against aa8262ec09:
dsh-remote-ssh-job-actions.patch— a real Stop button for background jobs in the session header.jobs.killis native in 0.1.5, so the patch only adds the browser trigger: asession.jobStopRemote plus the per-row button inui-jobs.dsh-remote-ssh-route-labels.patch— route-aware workspace titles (project-alpha · dev@192.168.0.101) so same-named directories on different hosts stay distinguishable. Smaller than the 0.1.2 cut: 0.1.5 centralizes default titles indefaultWorkspaceTitle(), so one function covers both call sites.
Both pass git apply --check on a clean 0.1.5 checkout, apply together, and build.
Docs
- Added a compatibility matrix (plugin version ↔ DSH baseline) to both READMEs.
- Documented the first-install
approve-buildsstep forssh2/cpu-features: pnpm 11 blocks their native build scripts, so the firstdsh plugin addfails untilallowBuildsis set.
Install
dsh plugin --profile web add github:aijunjiang/dsh-remote-sshmain always tracks the current baseline; this tag pins the 0.1.5-rc.1 one.
dsh-remote-ssh v0.3.2
dsh-remote-ssh v0.3.2 - working Stop chain and background-job UX.
- ssh_exec background:true registers a DSH session job shown in the header indicator; auto-registration is conservative (only setsid/nohup/disown daemonization; bare & and quick calls stay foreground).
- Stop works end to end: header Stop -> /jobstop command -> ctx.jobs.kill -> real remote process-group kill. Fixed the remote-job cancel scope bug and ui-jobs wiring ('remote without inject'), rebuilt the ui-jobs bundle.
- Agent routing guide carries a normative JOB POLICY; ssh_job tool manages list/stop/read.
- harness-patches/: route labels (Issue #1) and job Stop button patches with apply/rebuild notes.
dsh-remote-ssh v0.3.1
dsh-remote-ssh v0.3.1 - ssh_exec background jobs.
- ssh_exec background:true registers the command as a DSH session job: it appears in the job indicator next to the session title, with stop/log; cancel maps to a real remote process-group kill, completion fires when the remote process exits. New remote-job.ts (env-first spawn, bounded rolling log tail).
- Routing guide + tool docs teach the background mode and codify background-task discipline (detach stdin, pidfile kill, never pkill -f, flush logs).
- README is now bilingual (English root + Chinese mirror), documents the official dsh plugin add install, same-name title rule, and links Issue #1.
- harness-patches/ ships the route-label fix for the deployment's harness fork.
dsh-remote-ssh v0.3.0
dsh-remote-ssh v0.3.0 - official 'dsh plugin add' install.
Repo root is now the official bundle package (dsh.bundle.patch -> GUI user layer). Install: dsh plugin --profile web add github:aijunjiang/dsh-remote-ssh, then start dsh with no flags. Internal @deepseek-ai deps ride the DSH baseline as optional peers; only ssh2 comes from npm.
Also ships the human route suffix rule for same-named remote workspaces (folder name + 'at' user@host); the matching display fix lives in the deployment harness fork. Full remote-fs mode remains the cordis.patch.yml overlay for dedicated instances. Local dev install: node scripts/install.mjs.
dsh-remote-ssh v0.2.1
dsh-remote-ssh v0.2.1 - one-command, zero-flag install
Installation is now:
- git clone https://github.com/aijunjiang/dsh-remote-ssh && cd dsh-remote-ssh
ode scripts/install.mjs
3. restart dsh - start with no --patch
The installer links the monorepo packages into the profile loader tree AND
registers the SSH GUI user layer into the profile's own patch file (marked,
idempotent segment; removed with
ode scripts/install.mjs --remove).
README rewritten accordingly.
dsh-remote-ssh v0.2.0
dsh-remote-ssh v0.2.0 - remote workspace over SSH for DSH
Move file IO and command execution onto an SSH target while sessions, the web GUI and \ stay local.
Highlights
- GUI: connection manager, remote directory browser, per-session routing across multiple remote hosts (sidebar forked from UynajGI/dsh-ssh, MIT).
- Full mode (cordis.patch.yml): ctx.fs / ctx.subprocess / ctx.shell run on the remote host; helper daemon gives real pid/pgid, tree-scoped termination, bounded reads and target-side spills.
- Agent-facing experience (field-tested):
- routing identity + a usage guide in the runtime context of routed sessions (degraded-route warnings instead of silent empty mirrors);
- ssh_exec tool over the in-process ssh2/helper channel - no local ssh.exe, locale fixed to C, 256 KiB/stream cap, end-sentinel output integrity with one auto-retry on lost output;
- ssh_route_status recovery tool, DSH_SSH_* shell env, and a secret-free route manifest (dsh-ssh-routes.json).
- Install:
ode scripts/install.mjs (idempotent, removable) + pnpm dsh web --patch - see README.
Fixes since 0.1.0
- registry/sessions resolved lazily (async ctx.plugin mount degraded every routed session);
- silent exit-0-empty-output bug made visible and retried (sentinel integrity);
- route-spelled-but-unresolvable cwds now render explicit offline warnings.
Notes
- MIT licensed; technical detail in DESIGN.md and specs/.
- PTY/terminal spawn on remote connections not yet implemented; GUI-only mode leaves fs/subprocess local by design.