v2.1.6
DVR 2.1.6 is a compatibility and network-hardening patch for the 2.1.x train. It advances exact stable validation to DSH 0.1.5-rc.2, fixes the DSH 0.1.5 remote-settings startup error, and finishes the Host-first proxy convergence work without changing the public routing model, persisted settings schema, or minimum Host floor (0.1.0-rc.8).
DSH 0.1.5-rc.2 and remote Settings
- Advances the fixed stable/exact Host evidence to DSH
0.1.5-rc.2; exact0.1.5-alpha.2coverage remains preview verification evidence only.0.1.5-rc.1remains explicitly peer-compatible and the public DVR 2.1.x floor stays at0.1.0-rc.8. - Fixes #465 by declaring
settings,connection, andwebServeron the same Cordis caller fiber that invokesconnection.rpc.handle(). This preventscannot get property "webServer" without injectunder DSH 0.1.5 strict service-access semantics. - Keeps the remote Settings security model unchanged: the RPC channel remains
trusted-host, sensitive network/credential/local-device fields stay local-only, and the explicit remote field allow-list plus risk-confirmation flow remain authoritative. - Keeps the separate Web-bundle
modules -> webServercompatibility overlay in place while current upstream DSH still lacks that Loader activation dependency; #448 continues to track its eventual retirement.
Host-first proxy convergence
- Makes the DSH/Host network path authoritative whenever Vision Router's
proxyis blank. Ordinary Host traffic no longer passes through a second DVR proxy-routing decision. - Keeps explicit
proxy/proxyHostsas a supported, local-only Advanced override for visual traffic, including SOCKS5 and selective-host deployments that current DSH Host proxy policy cannot replace. - Scopes Host-owned visual adapter overrides with AsyncLocalStorage, so concurrent same-origin Host requests do not inherit DVR proxy state. Vision chain,
vision_describe, Benchmark, and Exact Check share the same scoped authority. - Gives Router-owned and scoped Host-owned ProxyAgents one shared lease/retire lifecycle. Hot proxy replacement, clearing configuration, pending construction, synchronous failures, and plugin unload now retire Agents without leaking or closing in-flight work.
- Enforces
proxyHostson every redirect hop after the initial request is admitted. Redirects that leave the allow-list return to the request-start Host/caller dispatcher while Fetch/Undici remains responsible for redirect semantics, body replay, header stripping, limits, and abort behavior. - Preserves historical
socks5h://settings without rewriting persisted configuration: the compatibility projection to Undici-nativesocks5://happens only after a request is admitted byproxyHosts. - Removes the obsolete process-wide dispatcher tracker/global-fetch observer after lifecycle ownership moved to the shared dispatcher pool.
Protocol and regression coverage
- Adds real loopback HTTP CONNECT and SOCKS5 protocol tests in addition to MockAgent/FakeProxyAgent coverage. The SOCKS case verifies proxy-side DNS by sending an unresolved domain name through the SOCKS5 tunnel.
- Exact-source stable/preview contracts continue to run on Ubuntu, macOS, and Windows; Node 22/24 CI, routing parity, adversarial fuzzing, dependency review, CodeQL, native multimodal cold resume, Windows screenshot runtime, and host-sharp integration remain release gates.
- Pre-release acceptance on macOS used the actual
npm packtarball installed through DSH0.1.5-rc.2, then exercised the real Chromium Settings UI, a settings write/readback round trip, cold Web restart, and a real headless vision turn.vision_ocr,vision_describe, andvision_colorscorrectly read a generated image using the machine's normal DSH model credentials.
Upgrade
Upgrade to 2.1.6 and restart DSH Web/Desktop. Existing 2.1.x settings remain compatible; no migration is required.
Commits
- Merge pull request #468 from ysr666/release/v2.1.6
- chore(release): prepare v2.1.6
- Merge pull request #467 from ysr666/fix/remote-settings-webserver-inject
- fix(settings): inject webServer for remote RPC
- Merge pull request #466 from ysr666/test/real-proxy-protocol-e2e
- test: exercise real proxy protocols
- Merge pull request #464 from ysr666/refactor/remove-dead-proxy-tracker
- refactor(proxy): remove obsolete dispatcher tracker
- Merge pull request #463 from ysr666/fix/proxy-redirect-hop-boundary
- fix(proxy): enforce redirect host boundaries
- Merge pull request #462 from ysr666/fix/provider-proxy-dispatcher-lifecycle
- fix(proxy): retire Router-owned dispatchers
- Merge pull request #461 from ysr666/docs/h3-proxy-product-contract
- docs(proxy): finalize H3 product contract
- Merge pull request #460 from ysr666/refactor/scoped-host-proxy-override
- refactor(proxy): scope Host-owned proxy override
- Merge pull request #459 from ysr666/refactor/host-proxy-egress-contract
- refactor: lock Host proxy egress contract
- Merge pull request #458 from ysr666/refactor/host-first-proxy-convergence
- refactor: make Host proxy the default authority
- Merge pull request #457 from ysr666/fix/proxy-ownership-host-normalization
- fix: harden proxy ownership and host matching
- Merge pull request #456 from ysr666/fix/455-socks5h-proxy-compat
- fix: preserve legacy socks5h proxy settings
Supply-chain verification
- Git commit:
c01758825663a443be3a1183441eab4a6b3f3b56 - npm tarball SHA-1:
4cc3bc44a569aa22064e6935727753a8af95b435 - tarball SHA-256:
0304734df4747a254dc74c750c2323271d3e16137a762d9f9c0cedddb6398ff4 - packed files:
203 - npm provenance: enabled via trusted publishing (OIDC)