Repository navigation
Releases: slicenferqin/dsh-remote-control
Release list
dsh-remote-control v0.3.1
dsh-remote-control v0.3.1
A stability update for fixed HTTPS entries over SSH. DSH, project files, and provider configuration remain on the local computer; this release does not change Core's default network timings.
- Keep healthy SSH transports alive through public-probe trouble. Short DNS/TLS/HTTP health failures no longer kill an already verified SSH process. Three consecutive ordinary failures mark the entry degraded and preserve
lastHealthyAt; malformed or mismatched entry responses degrade immediately. Matching health restores online status. Actual SSH exits and forwarding failures still reconnect. - Recover credentials when Core loses its connection. The browser coalesces one refresh per outage, reuses the existing renewer's network retries, and requests at most one immediate Core retry after credentials are ready and Core is still connecting. A stream that recovers on its own is not interrupted by late recovery. Expired credentials and disposal prevent further recovery nudges.
- Reduce static-resource bytes before the SSH hop. Eligible authenticated
GET /plugins/scripts/resources stream through gzip level 1 on the DSH computer. Identity negotiation, existing compression, Range, HEAD, errors, Cookie/redirect rewriting, and revocation remain covered. Business APIs, JSON, SSE, and WS stay outside HTTP compression. - Make transport state clearer. The UI distinguishes degraded public health from actual SSH reconnection and retains the last successful verification time. Public health still sets no cookies and exposes no pairing credentials or device details.
- Document optional WAN tuning. OpenSSH
Compression yescan compress forwarded payloads, including large WS frames. Slow WAN deployments may need larger Core heartbeat/readiness budgets; these remain operator-managed Core settings, not defaults changed by this plugin. See the stable-entry guide, the official Connection documentation, and Gateway documentation.
Install:
dsh plugin --profile web add github:slicenferqin/dsh-remote-control#v0.3.1The DSH compatibility range remains >=0.2.1-rc.2 <0.3.0; Node.js 22.19 or newer is required. Local-user enablement and pairing, durable Off/revocation, exact authority checks, and Secure/HttpOnly/SameSite=Strict cookies are unchanged. Persistence remains opt-in and stores refresh hashes and metadata only. The 120-second rotation grace is not persisted; a crash after rotation commits but before the browser applies its cookies can require pairing again. Device stores support one writer.
Validation: 228 behavior tests pass locally, covering health degradation without transport churn, real-exit reconnects, bounded credential recovery and cancellation, pre-SSH streaming gzip, persistence, and authentication boundaries. Package verification includes the recovery helper, its build source, tests, documentation, and licenses. Test the actual phone and network deployment; this release does not guarantee every OS, browser, or WAN condition.
Release assets contain the installable source package and SHA256SUMS for integrity verification.
v0.3.0 — Persistent fixed HTTPS entry
dsh-remote-control v0.3.0
Adds a fixed HTTPS entry backed by a restricted SSH reverse tunnel while keeping DSH, provider configuration, and workspaces on the local computer. Quick Tunnels remain available and remain off by default.
- Fixed-entry SSH mode uses a dedicated OpenSSH target/config and a loopback-only remote forwarding port. Startup requires this process's forwarding acknowledgment and a CA-verified public health response matching the local gateway instance.
- The SSH carrier automatically reconnects with bounded backoff. The UI distinguishes enabled intent from actual online, checking, and reconnecting states. Temporary carriers also receive public-entry reachability checks.
- Optional private persistence saves refresh hashes and device metadata atomically with restrictive filesystem permissions. Controlled plugin reloads restore the same device identities and re-exchange a fresh Host cookie. Explicit Off/revocation remain durable; saved Off overrides automatic startup.
- Custom-domain browser credential renewal starts only after detecting the gateway's public health marker. Cookies remain Secure, HttpOnly, and SameSite=Strict. Agent tools cannot enable access or issue pairing credentials.
- A genuine top-level homepage authentication failure can show the bounded same-origin recovery page. API, management, WebSocket, authority, and Origin checks remain in place.
Read the fixed-entry guide for restricted SSH, HTTPS proxying, WebSocket/stream handling, and certificate renewal. DSH and the outbound connector must still run locally; a fixed VPS entry does not keep a sleeping computer online.
Install:
dsh plugin --profile web add github:slicenferqin/dsh-remote-control#v0.3.0Moving to another domain requires an initial pairing in that domain. Persistence is opt-in and does not migrate the former in-memory registry. The two-minute replay grace stays in memory; a crash after rotation commits but before the browser applies its new Cookie can still require re-pairing. The store is designed for one writer.
Validation: 185 behavior tests pass, covering authentication boundaries, disk reconstruction and permissions, durable startup intent, carrier startup/health/reconnect/stop races, custom-domain renewal, and compatibility with temporary mode. Actual restricted-SSH and HTTPS deployment checks, controlled carrier interruption, component reload with existing paired device identities, and the installed GUI were also exercised. This is not a certification of every network, OS, or Safari version.
v0.2.2 — Recover returning paired browsers
dsh-remote-control v0.2.2
Fix an already paired browser getting stuck on “请使用电脑上生成的配对二维码打开此页面” after reopening its old pairing address. The one-use fragment had been removed, so the former page treated a returning device as a new pairing attempt.
The no-secret page now tries the browser's existing refresh credential once, verifies that a current access Cookie was applied, and returns to the fixed homepage. Fresh QR links still require explicit device-name confirmation and submission; they do not trigger recovery or consume a code automatically. Network failures offer explicit retry, while unavailable credentials give a clear pairing message and a homepage link.
Cookie protections remain Secure, HttpOnly and SameSite=Strict. No credential values are read by the page or returned in JSON. Recovery never follows an arbitrary return URL. Normal device metadata reads retain their existing transparent renewal behavior; the recovery confirmation request only accepts current access.
After pairing, bookmark the remote homepage rather than the one-use pairing URL. Another browser, a new private session, or cleared site storage still needs a new QR code. The temporary tunnel / process-lifetime pairing limitations remain unchanged.
Install or update:
dsh plugin --profile web add github:slicenferqin/dsh-remote-control#v0.2.2CLI updates require restarting an already-running Web profile. Restarting the Host plugin clears its runtime pairing map and requires pairing again. This release does not provide a live state migration. Existing remote sessions can continue using the current homepage until a planned update.
Validation: 96 isolated behavior tests pass, including access-expired/refresh-valid recovery, current-access confirmation, no QR consumption, request timeout/retry and unchanged authentication boundaries. Browser-level pairing-page/CSP cases are checked separately; this is not an iPhone Safari engine certification.
v0.2.1 — Fix remote workspace directory selection
dsh-remote-control v0.2.1
Fix remote Add workspace (AddWorkspace) opening an OS directory dialog on the computer running DSH. The directory chooser now opens in the browser that requested it and browses directories on the DSH Host. A browser at home can therefore choose a workspace on the Host computer from its own page.
Core's automatic directory picker samples local conditions at startup. If it selects the native backend before remote access starts, opening a tunnel later does not switch the backend. This release disables the standard Web profile's default directory-picker row and explicitly adds Core's browse Host and browse Client through the bundle patch.
While the dsh-remote-control bundle is enabled, all browsers in that profile use the browser chooser, including local browsers and periods when the remote-access switch is off. The patch relies on the standard Web profile's default directory-picker row. Custom compositions must remove or disable conflicting native, automatic, or duplicate browse backends so only one directory-picker backend is active.
Install the tagged fix:
dsh plugin --profile web add github:slicenferqin/dsh-remote-control#v0.2.1For a CLI upgrade of an already-running Web profile, restart that profile and refresh its page. Restarting the Host clears runtime pairings, so pair remote devices again afterward. Install cloudflared separately on the DSH computer as before.
This fix uses Core's existing browser directory picker; it does not change the remote-control runtime JavaScript, tunnel protocol, or credential lifetimes. The declared DSH range remains >=0.2.1-rc.2 <0.3.0. The bilingual READMEs document the picker behavior, and the package includes a changelog. dsh-mobile's optional remote-control installation examples now point to v0.2.1; dsh-mobile itself remains v0.1.0.
This is a new release after v0.2.0; existing release tags and artifacts are not replaced.
v0.2.0 — Browser remote control preview
Developer-preview community release for DeepSeek Harness.
Continue the sessions running on your own DSH computer from a phone, tablet, or another browser.
- Opt-in Cloudflare Quick Tunnel with a temporary HTTPS address.
- One-use QR pairing with explicit device-name confirmation.
- Multiple devices, individual renaming, and immediate revocation.
- Eight-hour access credentials and rolling ten-day refresh credentials.
- Automatic browser/background recovery and HTTP/WebSocket forwarding.
Install the tagged release:
dsh plugin --profile web add github:slicenferqin/dsh-remote-control#v0.2.0Install cloudflared separately on the DSH computer. Restart an already-running Web profile after CLI installation, then open Settings → Remote control. For a task-first phone UI, also install dsh-mobile.
Validation: 77 behavior tests pass locally on Node 26.4.0; clean release-archive rebuild and independent production-consumer install pass. The repository includes a Node 22.19.0 / 24 / 26 CI matrix and bilingual documentation.
This release targets the pre-stable DSH Web APIs and was live-tested with a DSH 0.2.1-rc.2 source build on macOS arm64. A paired device has DSH owner permissions. Only loopback DSH listeners are supported. Closing/restarting the remote entry clears its runtime pairings, and Quick Tunnel addresses are temporary; the refresh window does not persist across those events.
Assets include a prebuilt browser bundle, buildable source and tests, and SHA256SUMS. This package is distributed through GitHub; npm publication is not required.