Replies: 1 comment
|
Update: reproduced, implemented, verified, and shipped as an ecosystem plugin Since posting, this has been validated end-to-end in a real remote deployment and released to the community: Reproduction (real-world): Proposed change (small): add Shipped as a plugin: dsh-remote-picker (npm: Verification: 31 tests green (unit cases + real-Loader composition with a webRuntime stub), full-repo Happy to inline the full upstream diff in this thread if it helps; the core idea is one line of signal + one branch — remote-access authorities are already a deployment fact available at boot. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
When
dsh webserves remote browsers through a reverse proxy on a loopback bind (tailscale serve, cloudflared, SSH remote forwarding), the adaptive directory picker resolves the native backend:resolveDirectoryPickerBackendchoosesnativefor any127.0.0.1bind on darwin/win32, assuming every browser behind the bind sits at the host display. A remote browser cannot drive the host OS chooser — the dialog opens on the unattended host, and picking a workspace directory fails from a phone or laptop.Evidence this is a real gap
apps/web/tests/pin-browse-picker.overlay.ymlpins the browse interaction for the Playwright smoke because "the resolved native backend cannot be driven from the page".--trusted-hostguides).Proposed fix (small, boot-time only)
Add a
trustedHostssignal toDirectoryPickerHostFacts, sampled once at boot from the composing bundle'swebRuntimeservice (the same authorities the /api browser-trust fence serves). A non-empty sample resolvesbrowsebefore the platform display signals:A deployment that names
--trusted-hostauthorities (or derived LAN literals) serves remote browsers by definition, and the in-browser picker works everywhere. Deployments without authorities keep the prior resolution (attended loopback still resolvesnative). The bundle'sdirectory-pickerrow injectswebRuntime, mirroring the existingconnectionrow pattern.Verification
webRuntimestub; bundle web-app tests unchanged)pnpm run typecheckandpnpm run lintpassStatus
Reproduced on a real tailscale serve +
--trusted-hostdeployment (phone browser could not pick a workspace directory), fixed locally, and shipped to the ecosystem as a plugin: dsh-remote-picker (npmdsh-remote-picker@0.1.0, install:dsh plugin --profile web add dsh-remote-picker). Happy to inline the full 10-file diff here if useful.All reactions