dsh-vision-router 2.2.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -7
- package/README.zh.md +16 -7
- package/docs/architecture/2.3.0-compat-retirement.md +147 -0
- package/docs/architecture/2.3.0-execution-plan.md +410 -0
- package/docs/architecture/2.3.0-final-audit.md +279 -0
- package/docs/architecture/2.3.0-reopened-plan.md +720 -0
- package/docs/architecture/3.0-architecture-plan.md +252 -0
- package/docs/architecture/3.0-r0-contract-ledger.md +137 -0
- package/docs/architecture/3.0-r1-source-artifact-boundary.md +98 -0
- package/docs/architecture/3.0-r10-final-correctness-closure.md +207 -0
- package/docs/architecture/3.0-r11-adversarial-review.md +441 -0
- package/docs/architecture/3.0-r5-browser-go-no-go.md +165 -0
- package/docs/architecture/3.0-r5-browser-typescript-gate.md +105 -0
- package/docs/architecture/3.0-r6-compat-retirement.md +203 -0
- package/docs/architecture/3.0-r7-public-api.md +151 -0
- package/docs/architecture/3.0-r8-ci-release.md +248 -0
- package/docs/architecture/3.0-r9-final-audit.md +370 -0
- package/docs/architecture/compat-inventory.md +26 -34
- package/docs/architecture/dsh-compatibility-matrix.md +65 -54
- package/docs/architecture/dsh-support-window.md +30 -22
- package/docs/architecture/final-closure-audit.md +2 -0
- package/docs/releases/v2.3.0.md +53 -0
- package/docs/releases/v3.0.0.md +85 -0
- package/entry.js +9 -57
- package/index.js +268 -761
- package/lib/agent-request-route-authority.js +1 -20
- package/lib/catalog-corrections.js +1 -2
- package/lib/client-maintenance-actions.js +145 -0
- package/lib/client-presentation-boundary-main.js +75 -17
- package/lib/client-presentation-boundary.js +53 -28
- package/lib/client.js +246 -144
- package/lib/core-apply-lifecycle.js +41 -0
- package/lib/core-cache.js +87 -0
- package/lib/core-primitives.js +91 -278
- package/lib/core-vision-surface-domain.js +63 -0
- package/lib/core-vision-surface.js +11 -77
- package/lib/delegated-call-config.js +15 -24
- package/lib/desktop-screenshot-tool.js +262 -0
- package/lib/doctor-cli.js +0 -0
- package/lib/doctor-runtime.js +4 -1
- package/lib/dsh-contract-compat.js +37 -256
- package/lib/dsh-host-capabilities.js +3 -9
- package/lib/dsh-settings-017-compat.js +17 -10
- package/lib/dsh-support-window.js +3 -3
- package/lib/file-logger.js +8 -3
- package/lib/grounding-coordinate-runtime.js +1 -2
- package/lib/http-body-limit.js +97 -79
- package/lib/http-compat.js +1 -2
- package/lib/image-offload-compat.js +30 -21
- package/lib/image-resource-governor.js +210 -228
- package/lib/legacy-global-proxy-boundary.js +46 -3
- package/lib/live-model-client-prelude.js +12 -4
- package/lib/live-model-discovery.js +134 -43
- package/lib/local-remote-settings-permission.js +33 -7
- package/lib/local-vision-stabilizer.js +31 -17
- package/lib/maintenance-routes.js +134 -0
- package/lib/native-image-coexistence.js +15 -3
- package/lib/ollama-cold-start.js +87 -23
- package/lib/pi-ai-bridge-wire-compat.js +3 -2
- package/lib/proxy-dispatcher-pool.js +151 -92
- package/lib/proxy-routing.js +75 -51
- package/lib/proxy-url-compat.js +3 -10
- package/lib/public-config.js +36 -0
- package/lib/public-entry.d.ts +148 -0
- package/lib/public-entry.js +19 -11
- package/lib/remote-settings-bridge.js +11 -0
- package/lib/remote-settings-risk-client-boundary.js +155 -0
- package/lib/remote-settings-risk-confirmation.js +17 -105
- package/lib/replay-delegation.js +12 -7
- package/lib/replay-envelope-v2-compat.js +12 -7
- package/lib/runtime-composition.js +127 -34
- package/lib/runtime-i18n-boundary.js +10 -11
- package/lib/screenshot-source-boundary.js +2 -2
- package/lib/session-affinity-runtime.js +113 -97
- package/lib/session-affinity.js +89 -76
- package/lib/session-event-history-compat.js +30 -0
- package/lib/session-message-source-compat.js +7 -3
- package/lib/session-query-readers.js +263 -0
- package/lib/session-surface-compat.js +30 -31
- package/lib/session-surface-policy-domain.js +85 -0
- package/lib/session-surface-policy.js +2 -111
- package/lib/session-turn-resolver.js +2 -6
- package/lib/session-vision-attachment-index.js +143 -0
- package/lib/session-vision-delegation-boundary.js +34 -0
- package/lib/session-vision-delegation.js +22 -0
- package/lib/session-vision-index.js +179 -116
- package/lib/session-vision-mode-authority.js +229 -192
- package/lib/session-vision-mode-boundary.js +65 -22
- package/lib/session-vision-policy-domain.js +304 -0
- package/lib/session-vision-policy.js +104 -0
- package/lib/session-vision-state.js +368 -378
- package/lib/settings-client-017-compat.js +9 -7
- package/lib/settings-client-loader-lifecycle.js +129 -0
- package/lib/sharp-runtime.js +0 -7
- package/lib/structured-flow-hardening.js +25 -6
- package/lib/tesseract-exec-compat.js +9 -1
- package/lib/turn-budget-context.js +47 -41
- package/lib/update-check.js +11 -2
- package/lib/vision-attachment-handle-runtime.js +176 -156
- package/lib/vision-backend-runtime-policy.js +19 -2
- package/lib/vision-background-benchmark.js +41 -4
- package/lib/vision-background-failure-policy.js +41 -41
- package/lib/vision-background-stop-store-core.js +217 -0
- package/lib/vision-background-stop-store.js +8 -179
- package/lib/vision-capability-benchmark-service.js +1 -0
- package/lib/vision-capability-benchmark.js +11 -61
- package/lib/vision-capability-evidence.js +35 -0
- package/lib/vision-capability-fingerprint.js +72 -0
- package/lib/vision-capability-identity.js +116 -61
- package/lib/vision-capability-router.js +13 -33
- package/lib/vision-chunk-assembler.js +95 -0
- package/lib/vision-diagnostics-routes.js +246 -0
- package/lib/vision-evidence-guidance.js +3 -1
- package/lib/vision-execution-order-apply.js +45 -55
- package/lib/vision-execution-order.js +19 -19
- package/lib/vision-execution-policy.js +12 -7
- package/lib/vision-model-registry.js +30 -17
- package/lib/vision-provider-transport.js +137 -176
- package/lib/vision-routing-authority.js +47 -48
- package/lib/vision-routing-product.js +26 -29
- package/lib/vision-routing-settings-prelude.js +8 -3
- package/lib/vision-runtime-performance-store.js +166 -0
- package/lib/vision-runtime-performance.js +13 -142
- package/lib/vision-toggle-root-hardening.js +22 -5
- package/lib/vision-tool-runtime-boundary.js +104 -31
- package/lib/web/dsh-settings-017-root-transport.js +27 -12
- package/lib/web/remote-settings-client.js +6 -9
- package/lib/web-capability-boundary.js +17 -7
- package/lib/wrapper-directory.js +14 -23
- package/package.json +56 -20
- package/lib/android-attachment-compat.js +0 -244
- package/lib/settings-client-rc8-lifecycle.js +0 -397
|
@@ -1,62 +1,73 @@
|
|
|
1
|
-
# DSH compatibility matrix
|
|
1
|
+
# DSH compatibility matrix — DVR 2.3
|
|
2
2
|
|
|
3
|
-
This document is the
|
|
3
|
+
This document is the normative Host-evidence matrix for dsh-vision-router 2.3.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Runtime code remains capability-based: version labels below identify immutable CI evidence only. They must not become runtime version branches.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Support and admission policy
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
DVR 2.3 supports the DSH 0.1.x line continuously from the first admitted 0.1.5 release candidate and the 0.2.x line from the exact rc.2 boundary that is exercised by the current Desktop/Host gates:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
>=0.1.5-rc.1 <0.2.0-0
|
|
13
|
+
||
|
|
14
|
+
>=0.2.0-rc.2 <0.3.0-0
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Ordinary DVR development is pinned to exact `0.2.0-rc.2`. Hosts below the 0.1.5 train are not part of the DVR 2.3 support contract.
|
|
18
|
+
|
|
19
|
+
The `0.1.5-alpha.2` browser fixture may remain as historical drift surveillance. It is deliberately outside peer admission, outside the normative exact-source matrix, and must never be described as DVR 2.3 support evidence.
|
|
20
|
+
|
|
21
|
+
## Gating evidence
|
|
22
|
+
|
|
23
|
+
| Evidence | DSH version | Role |
|
|
10
24
|
| --- | --- | --- |
|
|
11
|
-
| `minimum-contract` | `0.1.
|
|
12
|
-
| `
|
|
13
|
-
|
|
|
14
|
-
| `
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
| `lib/android-attachment-compat.js` | Termux/Android file persistence can fail at the permission boundary on the minimum Host contract. | actual Android/Termux environment plus permission-boundary failure and absence of batch attachment ownership. | Minimum supported Host owns a working Android attachment store for this path. | `android-attachment-compat`, resource tests. |
|
|
53
|
-
| `lib/replay-envelope-v2-compat.js` | Durable replay producer identity moved into the v2 replay envelope. | exact `response.kind === 'pi-ai' && response.version === 2` producer proof. | Support window no longer contains histories/runtime needing the old source normalization. | `replay-delegation`, replay/session tests. |
|
|
54
|
-
| `lib/pi-ai-bridge-wire-compat.js` | The legacy direct image bridge predates pi-ai declared wire compatibility. | exact non-streaming image bridge fingerprint and resolved pi-ai route/model facts. | Direct bridge is removed or every supported Host executes the request through the native pi-ai wire contract. | `pi-ai-bridge-wire-compat`, native process-restart contract. |
|
|
55
|
-
| `lib/settings-client-rc8-lifecycle.js` | Browser-side settings lifecycle differs across supported Host generations. | browser/runtime surface behavior, not DSH version parsing. | Support window exposes one stable settings client lifecycle. | settings IA/lifecycle regression tests. |
|
|
25
|
+
| `minimum-contract` | `0.1.5-rc.1` | Public 2.3 minimum. Packed-plugin install, public entry, Settings persistence, batch attachment, SessionQuery and core Host contracts. |
|
|
26
|
+
| `current-contract` | `0.1.5-rc.3` | Current stable 0.1.5 Host evidence. |
|
|
27
|
+
| exact-source matrix | `0.1.5-rc.1`, `0.1.5-rc.3`, `0.1.7-rc.2` on Ubuntu/macOS/Windows | Proves the continuous supported 0.1.x line at the floor, current stable point and a later mid-train point. |
|
|
28
|
+
| `2.3 Critical Architecture Gate` / rc.2 reusable workflow | `0.2.0-rc.2` | Default development/next boundary: exact source on three OSes, real Host + Chromium, Windows Desktop Node 22/24 and macOS Desktop lifecycle. |
|
|
29
|
+
| preview browser historical canary | `0.1.5-alpha.2` | Non-support surveillance only; catches browser drift in an older immutable Host. |
|
|
30
|
+
| upstream Web overlay watch | moving DSH `master` | Retirement/drift sentinel only. It never changes the public support window by itself. |
|
|
31
|
+
|
|
32
|
+
Node 22 and Node 24 remain the general runtime matrix. Minimum/current Host jobs and exact-source/Desktop evidence are additive.
|
|
33
|
+
|
|
34
|
+
## Current capability evidence
|
|
35
|
+
|
|
36
|
+
| Capability / boundary | 2.3 verdict | Evidence / detection |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| Batch attachment ownership | native on every supported Host | `attachments.saveImages`; minimum/current Host contracts; immutable 0.1.5/0.1.7/0.2 source evidence. The pre-floor Android single-attachment fallback was retired in R2.3. |
|
|
39
|
+
| Official DeepSeek provider ownership | Host-owned throughout the supported window | DVR no longer reconstructs `deepseek-official`; `protectHostProviderOwnership()` prevents synthetic takeover. |
|
|
40
|
+
| Settings persistence | native, but lifecycle shape changes across the supported window | minimum Host real Settings persistence plus current/rc.2 browser contracts. `installHostSettingsCompatibility()` remains the narrow runtime bridge. |
|
|
41
|
+
| Session event/log reads | native minimum/current contract | `SessionQuery.readEvent/readSession/observeSession` capability probes; bounded Session recovery remains capability-based. |
|
|
42
|
+
| DVR duck-typed adapter contract | DVR normalization still required | `ensureAdapterContracts()` supplies missing Host base-class defaults such as `prepareCall` / `imageRequestPricing` to DVR-owned plain adapters only. |
|
|
43
|
+
| Client module loader lifecycle | supported Hosts still replace live `load` during `create()` | immutable 0.1.5-rc.1 through 0.2.0-rc.2 source review. The current Settings client lifecycle bridge therefore remains reachable. |
|
|
44
|
+
| modules -> webServer overlay | `shim-required` | exact supported/rc source contracts plus moving upstream watch. |
|
|
45
|
+
| connection -> webServer overlay | `shim-required` | exact supported/rc source contracts plus moving upstream watch. |
|
|
46
|
+
| Router-specific proxy override | product compatibility | explicit `proxy` / `proxyHosts` remain supported; Host-first default egress stays authoritative. |
|
|
47
|
+
| OpenCode Go session wire projection | Host gap remains | current pi-ai transports generic `sessionId`, but upstream does not yet emit the required `x-opencode-session` carrier. |
|
|
48
|
+
|
|
49
|
+
## R2.3 retirement result
|
|
50
|
+
|
|
51
|
+
The support-floor reset produced real removals rather than a cosmetic reclassification:
|
|
52
|
+
|
|
53
|
+
- retired the pre-floor no-batch Android attachment fallback;
|
|
54
|
+
- retired legacy DeepSeek provider reconstruction/keep-alive takeover;
|
|
55
|
+
- retired rc.7-labelled public compatibility aliases in favor of capability-named APIs;
|
|
56
|
+
- removed pre-floor `0.1.5-alpha.2` from the normative exact-source support matrix.
|
|
57
|
+
|
|
58
|
+
The remaining compatibility seams are retained only for one of four reasons:
|
|
59
|
+
|
|
60
|
+
1. a capability/lifecycle difference still exists on a supported 0.1.5+/0.2 Host;
|
|
61
|
+
2. supported Hosts can still consume durable data/profile state produced by older DVR/Host generations;
|
|
62
|
+
3. the behavior is an intentional current product compatibility contract;
|
|
63
|
+
4. the behavior closes a runtime/platform gap rather than a Host-version gap.
|
|
64
|
+
|
|
65
|
+
Detailed owners and removal conditions live in `compat-inventory.md`.
|
|
56
66
|
|
|
57
67
|
## Rules
|
|
58
68
|
|
|
59
|
-
1.
|
|
60
|
-
2. A
|
|
61
|
-
3.
|
|
62
|
-
4.
|
|
69
|
+
1. Runtime behavior branches on capabilities, not DSH version strings.
|
|
70
|
+
2. A pre-floor Host may be kept as an explicitly labelled non-support drift canary, but it may not be a required support fixture or broaden peer admission.
|
|
71
|
+
3. Durable historical data compatibility is independent of Host support: old Session/settings/replay state is retained when a supported Host can still load it.
|
|
72
|
+
4. A compatibility seam is removed only when its current-Host/product/durable-data/platform removal condition is proven.
|
|
73
|
+
5. Moving upstream/canary evidence may reveal drift but never silently redefine the public support policy.
|
|
@@ -1,58 +1,66 @@
|
|
|
1
1
|
# DSH Host support window
|
|
2
2
|
|
|
3
|
-
Status: normative for the current DVR
|
|
3
|
+
Status: normative for the current DVR 3.x compatibility program.
|
|
4
4
|
|
|
5
5
|
## Public support policy
|
|
6
6
|
|
|
7
7
|
The public support policy contains only released Host semantics. Preview/canary versions are intentionally excluded from this table.
|
|
8
8
|
|
|
9
|
-
|
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
|
9
|
+
| DVR train | Minimum Supported Host | Current Stable Host | Ordinary development Host |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| `2.2.x` | `0.1.0-rc.8` | `0.1.5-rc.3` | historical 2.2 development baseline |
|
|
12
|
+
| `2.3.x` | **DSH `0.1.5` train** | `0.1.5-rc.3` | historical 2.3 baseline |
|
|
13
|
+
| `3.0.x` | **DSH `0.1.5` train** | `0.1.5-rc.3` | **exact `0.2.0-rc.2`** |
|
|
14
|
+
|
|
15
|
+
DVR `2.2.x` keeps `0.1.0-rc.8` as its historical public floor.
|
|
13
16
|
|
|
14
|
-
DVR `2.
|
|
17
|
+
DVR `2.3.0` deliberately resets the public minimum to the **DSH `0.1.5` train**. The earliest admitted release in that train is `0.1.5-rc.1`; current stable evidence is `0.1.5-rc.3`. DVR 2.3 no longer publishes a jagged list of `0.1.0` / `0.1.1` / `0.1.3` / `0.1.7` exceptions.
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
Ordinary DVR 2.3 development is pinned to **exact DSH `0.2.0-rc.2`** so `pnpm install && pnpm test` exercises the latest fully verified Host/Desktop generation rather than an obsolete compatibility floor. This exact development pin is evidence policy, not a reason to turn runtime behavior into version-string checks.
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
Runtime branching remains capability-based rather than version-string-driven.
|
|
19
22
|
|
|
20
23
|
### DSH 0.2.x forward admission
|
|
21
24
|
|
|
22
|
-
DVR 2.2.x peer-admits the DSH `0.2.x` train from the verified rc.1 boundary (`>=0.2.0-rc.1 <0.3.0-0`) without raising
|
|
25
|
+
DVR 2.2.x peer-admits the DSH `0.2.x` train from the verified rc.1 boundary (`>=0.2.0-rc.1 <0.3.0-0`) without raising its historical `0.1.0-rc.8` minimum Host floor.
|
|
26
|
+
|
|
27
|
+
DVR 2.3 uses exact `0.2.0-rc.2` as its ordinary development Host while keeping the public minimum at the `0.1.5` train. Peer admission is intentionally train-shaped: `>=0.1.5-rc.1 <0.2.0-0` for the continuous supported 0.1.x line from 0.1.5, plus `>=0.2.0-rc.2 <0.3.0-0` for the 0.2.x train from the verified rc.2 boundary. Initial forward admission was backed by public pre-0.2.0 master `21638c56315ae6a2b552d6091945d3144c9af32e`. Exact release evidence has now advanced to immutable `dsh-v0.2.0-rc.2` commit `639ed015397290b3745d163aafe02ffee4aa3f84`, published on 2026-09-29. Required gates cover three-OS source contracts, real Host + Chromium, Settings mount/save/reload/readback, mixed attachments, bundle recomposition, Windows Node 22/24 Desktop authentication, the Node 24 multi-plugin isolation adversary, and Host-owned Sharp resolution.
|
|
23
28
|
|
|
24
|
-
The final immutable upstream `0.2.0` stable tag and signed official Desktop installer remain release-time revalidation targets. The rc.
|
|
29
|
+
The final immutable upstream `0.2.0` stable tag and signed official Desktop installer remain release-time revalidation targets. The verified `0.2.0-rc.2` boundary is already part of DVR 2.3's peer-admitted supported 0.2.x train; it does not raise the public minimum above the DSH 0.1.5 train.
|
|
25
30
|
|
|
26
|
-
## Verification evidence
|
|
31
|
+
## Verification evidence and drift canaries
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
Exact evidence answers which admitted Host points have current CI proof; moving canaries answer whether upstream has drifted beyond those points. Evidence inside an already declared train does not by itself change the minimum support floor, while peer-admission boundaries remain explicit support policy.
|
|
29
34
|
|
|
30
35
|
| Evidence role | DSH source | Meaning |
|
|
31
36
|
|---|---|---|
|
|
32
37
|
| Exact stable evidence | `0.1.5-rc.3` | Required Host/wire and real Host + Chromium coverage for the current stable release. |
|
|
33
|
-
| Exact
|
|
38
|
+
| Exact supported 0.2.x boundary | `0.2.0-rc.2` (`next/rc`) | Required Host/wire/lifecycle/browser/Desktop evidence for the peer-admitted 0.2.x train; it does not raise the 0.1.5 minimum floor. |
|
|
34
39
|
| Stable drift canary | npm dist-tag `latest` | Scheduled, dynamically resolved surveillance. A failure starts compatibility investigation; it does not rewrite support policy. |
|
|
35
40
|
| Next/rc drift canary | npm dist-tag `next` | Scheduled, dynamically resolved surveillance for the rc channel. A failure does not rewrite support policy. |
|
|
36
41
|
| Alpha/pre-release drift canary | npm dist-tag `alpha` | Scheduled, dynamically resolved surveillance for the alpha channel. A failure does not rewrite support policy. |
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
Exact evidence points may advance inside an already admitted train when CI proof advances. The public minimum and any peer-admission boundary change remain explicit support-policy changes.
|
|
39
44
|
|
|
40
45
|
Historical release notes under `docs/releases/` are release-time snapshots and are not rewritten when later evidence advances.
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
Peer-dependency admission is itself part of the compatibility contract. DVR 2.3 deliberately admits the 0.2.x train from verified `0.2.0-rc.2`; moving npm `next`/`alpha` canaries outside that declared boundary remain surveillance only.
|
|
43
48
|
|
|
44
|
-
## Floor
|
|
49
|
+
## Floor transitions across DVR 2.x
|
|
45
50
|
|
|
46
|
-
DVR 2.0.x was released with DSH `0.1.0-rc.6` as its minimum Host.
|
|
51
|
+
DVR 2.0.x was released with DSH `0.1.0-rc.6` as its minimum Host. DVR 2.1.0 raised the public minimum to DSH `0.1.0-rc.8`; DVR 2.2.x inherited that rc.8 floor. DVR 2.3.0 raises the floor again to the DSH `0.1.5` train.
|
|
47
52
|
|
|
48
53
|
```text
|
|
49
54
|
DVR 2.0.x minimum: DSH 0.1.0-rc.6
|
|
50
55
|
DVR 2.1.x minimum: DSH 0.1.0-rc.8
|
|
56
|
+
DVR 2.2.x minimum: DSH 0.1.0-rc.8
|
|
57
|
+
DVR 2.3.x minimum: DSH 0.1.5 train (earliest admitted release: 0.1.5-rc.1)
|
|
58
|
+
DVR 3.0.x minimum: DSH 0.1.5 train (unchanged from 2.3.x; earliest admitted release: 0.1.5-rc.1)
|
|
51
59
|
```
|
|
52
60
|
|
|
53
|
-
Users
|
|
61
|
+
Users on DSH trains older than `0.1.5` must upgrade DSH before upgrading to DVR 2.3.x or 3.0.x.
|
|
54
62
|
|
|
55
|
-
|
|
63
|
+
The 2.3 floor increase authorizes a fresh deletion audit for Host-version compatibility whose only purpose was keeping pre-`0.1.5` Hosts running. It does **not** authorize deleting compatibility for durable data merely because the Host that originally produced that data is no longer supported. Session logs, replay envelopes, persisted settings and other long-lived inputs require separate reachability evidence on supported Hosts.
|
|
56
64
|
|
|
57
65
|
## Support-policy change protocol
|
|
58
66
|
|
|
@@ -61,11 +69,11 @@ A public Host support-floor change is valid only when all of the following are t
|
|
|
61
69
|
1. the floor change is announced in a DVR minor or major release, never only in a patch release;
|
|
62
70
|
2. README / support documentation and release notes state the old and new floors;
|
|
63
71
|
3. Doctor reports the effective public support policy and gives a capability-based upgrade result for Hosts below the active floor;
|
|
64
|
-
4. required CI proves the public floor
|
|
72
|
+
4. required CI proves the public floor, current stable Host, and every declared forward-admission boundary, while moving canaries remain separately labelled surveillance;
|
|
65
73
|
5. compatibility seams are removed only after the new minimum Host proves the replacement capability;
|
|
66
74
|
6. removal PRs keep restart, settings, native-image coexistence, tool execution, Node 22/24 and supported-platform regressions green.
|
|
67
75
|
|
|
68
|
-
Advancing an
|
|
76
|
+
Advancing exact evidence inside an already declared train or moving a canary target does **not** by itself change the minimum support floor. Changing the peer-admitted train boundary is a support-policy change and must be explicit.
|
|
69
77
|
|
|
70
78
|
## Capability-first rule
|
|
71
79
|
|
|
@@ -75,6 +83,6 @@ DVR must not turn these tables into widespread version-string conditionals. Runt
|
|
|
75
83
|
|
|
76
84
|
## Compatibility-retirement rule
|
|
77
85
|
|
|
78
|
-
The 2.
|
|
86
|
+
The 2.3.x `0.1.5` train floor makes any compatibility path used only by pre-`0.1.5` Hosts eligible for a fresh deletion audit, but does not automatically authorize deletion. Durable session formats, replay envelopes, adapter wire shapes, and other historical inputs may outlive the Host version that originally produced them.
|
|
79
87
|
|
|
80
88
|
See [DSH 0.2.0-rc.2 compatibility audit](dsh-020-rc2-adaptation.md) for the upstream seam review and validation plan.
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Audit baseline: `main@1c11c1c3c7046268ae1c7b8f2287b023aeb1eb26` (after C3-B / PR #339).
|
|
4
4
|
|
|
5
|
+
> Historical 2.x closure baseline. The 2.3 architecture phase supersedes its compatibility-status observations; in particular, the former `VisionProviderTransport` process/profile registry has been removed. See `2.3.0-final-audit.md` for the current branch state.
|
|
6
|
+
|
|
5
7
|
This document records the final adversarial architecture review. It is not a feature roadmap and does not claim that PDF, video, CAD or GUI-agent support exists. The final `CLOSED` declaration is allowed only after the accompanying final Closure gate is merged and the resulting `main` gates are green.
|
|
6
8
|
|
|
7
9
|
## Severity result
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# v2.3.0
|
|
2
|
+
|
|
3
|
+
DSH Vision Router 2.3.0 is an architecture-hardening and compatibility-convergence release. It makes runtime ownership and lifecycle composition more explicit, closes Session and browser correctness gaps discovered by the reopened audit, retires only compatibility paths proven unreachable on the new supported Host window, and adds durable architecture/fuzz/resource evidence without changing Vision Router's core routing authority model.
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
- **Explicit composition and transport ownership:** runtime installation is grouped into five explicit phases. Router-owned provider HTTP uses an explicitly passed `VisionProviderTransport`; the former process-global current transport registry is gone.
|
|
8
|
+
- **Session correctness under pressure:** the bounded event-feed repair queue now recovers still-current events after overflow instead of silently losing the oldest pending repair, while steady-state paths remain bounded. Async Core bootstrap completion also follows actual Promise settlement.
|
|
9
|
+
- **Mature-Core extraction at stable seams:** public Config composition, maintenance Web routes, Desktop screenshot implementation, and diagnostics Web routes have dedicated owners. The branch deliberately rejects extractions that would only create callback bags or facades.
|
|
10
|
+
- **Current-product browser source owners:** maintenance actions, remote Settings risk/reminder behavior, and local remote-settings permission behavior are source-owned instead of duplicated across generated/compatibility code. The Settings loader lifecycle is named by capability rather than by its historical rc.8 origin.
|
|
11
|
+
- **DSH RemoteResult semantics:** Vision mode selection now treats a resolved `{ ok: false }` from the official `ModelDirectory.select()` contract as failure, preserving recovery diagnostics instead of presenting a silent no-op. Recovery state is also latest-selection-wins, so a stale Host completion cannot overwrite the state of a newer selection.
|
|
12
|
+
- **Session v4 producer ownership (#606):** every DVR-owned durable message producer now emits a Session-format source owned by Vision Router (`plugin:dsh-vision-router` on v4, the legacy plugin shape on v3). The source-normalization boundary remains defense-in-depth rather than the correctness owner, and exact upstream rc.2 admission is covered directly.
|
|
13
|
+
- **End-to-end cancellation ownership:** turn/tool cancellation now reaches macOS/Linux desktop capture processes, screenshot identification, Tesseract, potrace workers, and pair/direct-HTTP vision attempts. Cancellation is terminal, does not poison backend breaker state, and a cancelled `identify=true` screenshot cannot publish a successful managed artifact first.
|
|
14
|
+
- **Final transport and UI lifecycle closure (#610):** the text-projected direct bridge and capability benchmark retain the explicitly owned `VisionProviderTransport`, preserving `proxy` / `proxyHosts` without restoring a global registry. Remote Settings authorization is isolated per live RPC target, including Connection RPC replacement, and stale Vision-toggle settlements cannot overwrite newer recovery state.
|
|
15
|
+
- **Compatibility retirement with evidence:** pre-floor Android/no-batch attachment fallback, legacy DeepSeek provider reconstruction, and rc.7 public aliases are removed. Durable replay/profile compatibility, provider/platform compatibility, and supported Advanced proxy overrides remain where their removal conditions are not satisfied.
|
|
16
|
+
|
|
17
|
+
## Host support window
|
|
18
|
+
|
|
19
|
+
2.3.x intentionally raises the public Host floor:
|
|
20
|
+
|
|
21
|
+
- DSH 0.1.x: `>=0.1.5-rc.1 <0.2.0-0`
|
|
22
|
+
- DSH 0.2.x: `>=0.2.0-rc.2 <0.3.0-0`
|
|
23
|
+
- ordinary development Host: exact `0.2.0-rc.2`
|
|
24
|
+
|
|
25
|
+
Hosts below 0.1.5 are no longer supported. This does **not** retire durable historical Session/profile readers merely because the running Host floor moved forward.
|
|
26
|
+
|
|
27
|
+
Remote Settings keeps the same product contract: its confirmation is reminder/acknowledgement only. `acceptedRisk: true` is not authentication or an authorization credential. Remote mutation remains bounded by the explicit allow-list and local-only fields.
|
|
28
|
+
|
|
29
|
+
The explicit `proxy` / `proxyHosts` Advanced override remains supported and non-deprecated; blank DVR proxy configuration continues to follow the Host network path.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
The final release candidate and permanent gates cover:
|
|
34
|
+
|
|
35
|
+
- Node 22 and Node 24 full regression: `1569 tests / 1563 pass / 6 skip / 0 fail` on each, plus `10/10` backend-runtime-policy tests;
|
|
36
|
+
- current Architecture Closure: `131/131` on each Node line;
|
|
37
|
+
- ESM dependency graph: `166 modules / 354 static relative edges / 0 cycles`;
|
|
38
|
+
- minimum DSH `0.1.5-rc.1` and current `0.1.5-rc.3` Host contracts;
|
|
39
|
+
- real DSH `0.1.7-rc.2` Host coverage across Chromium, Windows Desktop Node 22/24, and macOS Desktop renderer lifecycle;
|
|
40
|
+
- exact DSH `0.2.0-rc.2` source on Ubuntu/macOS/Windows, plus real Host + Chromium and Windows/macOS Desktop lifecycle;
|
|
41
|
+
- exact upstream v4 Session admission for DVR durable source ownership;
|
|
42
|
+
- dependency review, P1/P2/P3 architecture gates, fetch-wrapper composition, adversarial compatibility/fuzz, native multimodal cold resume, and large-image resource stress;
|
|
43
|
+
- deterministic and rotating property/adversarial fuzz;
|
|
44
|
+
- 100MP compressed-image stress on Linux/macOS/Windows, with a maximum observed RSS delta of `92.5 MiB` and a fully drained resource governor;
|
|
45
|
+
- package/public-entry smoke and deterministic client-source synchronization.
|
|
46
|
+
|
|
47
|
+
Architecture evidence is recorded in `docs/architecture/2.3.0-final-audit.md`.
|
|
48
|
+
|
|
49
|
+
## Upgrade
|
|
50
|
+
|
|
51
|
+
Users already running 2.2.8 on a supported DSH 0.1.5+ Host can upgrade without migrating existing Vision Router settings or historical Session data.
|
|
52
|
+
|
|
53
|
+
If the current Host is below 0.1.5, upgrade DSH first. 2.3.0 intentionally does not restore the old jagged pre-0.1.5 compatibility exceptions.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# v3.0.0
|
|
2
|
+
|
|
3
|
+
DSH Vision Router 3.0.0 is the ownership release. Vision authority now belongs to a
|
|
4
|
+
durable, explicitly owned Session policy instead of ambient session state; the
|
|
5
|
+
package root is a deliberate, typed public API instead of a monolithic
|
|
6
|
+
implementation file; and the runtime installation is grouped into explicit
|
|
7
|
+
composition phases with an explicitly passed provider transport. It also closes the
|
|
8
|
+
R10 correctness work, the R11 adversarial final audit, and hardens the release
|
|
9
|
+
pipeline itself.
|
|
10
|
+
|
|
11
|
+
## Highlights
|
|
12
|
+
|
|
13
|
+
- **Session Vision policy has a durable owner.** A scoped policy store, backed by
|
|
14
|
+
the Host storage domain, owns Vision authority per Session: it hydrates before a
|
|
15
|
+
child session publishes, carries into direct Vision checks, and binds delegation
|
|
16
|
+
to the Host Agent lifecycle instead of re-deriving authority from ambient state. A
|
|
17
|
+
scoped volatile backend keeps hosts without durable storage working.
|
|
18
|
+
- **Deliberate package root.** The monolithic `index.js` entry is replaced by a
|
|
19
|
+
curated public entry with its own declaration file, and `exports["."]` now carries
|
|
20
|
+
`types`. The packed public-API contract executes that entry, checks its lifecycle
|
|
21
|
+
preconditions and arity, and type-checks a consumer sample against the shipped
|
|
22
|
+
declarations.
|
|
23
|
+
- **Explicit composition and transport ownership.** Runtime installation is grouped
|
|
24
|
+
into explicit phases; router-owned provider HTTP receives its
|
|
25
|
+
`VisionProviderTransport` explicitly, and Core no longer installs a process-wide
|
|
26
|
+
proxy fetch. Provider probes — live model discovery and the settings connection
|
|
27
|
+
check — run inside the same configured-pair proxy scope as vision turns, taking the
|
|
28
|
+
transport the proxy boundary owns rather than reading the process global at call
|
|
29
|
+
time.
|
|
30
|
+
- **R11 adversarial final audit.** Twenty findings closed, each recorded together
|
|
31
|
+
with the artifact that guards it, plus the mechanical gates that keep the defect
|
|
32
|
+
classes from returning: source-ownership lint rules, the bundle-patch activation
|
|
33
|
+
shim contract, the offline release state machine, and boundary tests against a real
|
|
34
|
+
Host.
|
|
35
|
+
- **Release-pipeline integrity.** The release state machine is refusal-first and
|
|
36
|
+
draft-safe; registry identity and package content are compared before and after
|
|
37
|
+
publishing; the README announcement bars and the release notes are hard gates; the
|
|
38
|
+
pnpm-free Windows runtime smoke now receives built artifacts instead of installing
|
|
39
|
+
a package manager.
|
|
40
|
+
|
|
41
|
+
## Breaking change: a new required peer
|
|
42
|
+
|
|
43
|
+
3.0.0 adds one required peer dependency:
|
|
44
|
+
|
|
45
|
+
- `@deepseek-ai/dsh-storage-domain` `>=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0`
|
|
46
|
+
|
|
47
|
+
It backs the durable Session Vision policy layer. A Host that cannot provide the
|
|
48
|
+
storage domain cannot persist the policy and therefore must be upgraded first.
|
|
49
|
+
Existing Vision Router settings, profiles and historical Session data keep working:
|
|
50
|
+
the policy store is additive and hydrates from the Session when no durable entry
|
|
51
|
+
exists yet.
|
|
52
|
+
|
|
53
|
+
## Host support window
|
|
54
|
+
|
|
55
|
+
Unchanged from 2.3.x:
|
|
56
|
+
|
|
57
|
+
- DSH 0.1.x: `>=0.1.5-rc.1 <0.2.0-0`
|
|
58
|
+
- DSH 0.2.x: `>=0.2.0-rc.2 <0.3.0-0`
|
|
59
|
+
- ordinary development Host: exact `0.2.0-rc.2`
|
|
60
|
+
|
|
61
|
+
## Validation
|
|
62
|
+
|
|
63
|
+
- the full gate battery on the exact release commit: install, build, build:check,
|
|
64
|
+
source-ownership lint, source→artifact evidence, reproducible clean build,
|
|
65
|
+
typecheck, the test suite, client-source synchronization, the Host support-window
|
|
66
|
+
contract, and the packed public-API contract;
|
|
67
|
+
- the real-Host compatibility matrix, adversarial compatibility/fuzz gates and the
|
|
68
|
+
resource-stress gates;
|
|
69
|
+
- consumer verification of the installed package on both targets (a `dsh web`
|
|
70
|
+
profile installed from the repository, and a real Desktop shell): a real image turn
|
|
71
|
+
reaches the provider with the image and the configured credential attached, live
|
|
72
|
+
model discovery reports the live models, and the Vision Router settings surface
|
|
73
|
+
renders.
|
|
74
|
+
|
|
75
|
+
The audit and its evidence index are recorded in
|
|
76
|
+
`docs/architecture/3.0-r11-adversarial-review.md`.
|
|
77
|
+
|
|
78
|
+
## Upgrade
|
|
79
|
+
|
|
80
|
+
Users on 2.3.0 with a supported Host can upgrade in place; Vision Router settings and
|
|
81
|
+
existing Session data are read as before, and the durable policy store starts empty
|
|
82
|
+
and hydrates from the Session. On a Host that predates the storage domain, upgrade
|
|
83
|
+
DSH first. Remote Settings keeps its existing product contract: its confirmation is
|
|
84
|
+
an acknowledgement, not an authorization credential, and mutation stays bounded by
|
|
85
|
+
the explicit allow-list and local-only fields.
|
package/entry.js
CHANGED
|
@@ -3,78 +3,30 @@
|
|
|
3
3
|
// P3-F keeps this file as the public schema/export boundary. Runtime ownership
|
|
4
4
|
// lives in lib/runtime-composition.js; the mature core remains in index.js.
|
|
5
5
|
|
|
6
|
-
import z from '@deepseek-ai/schemastery'
|
|
7
6
|
import * as core from './index.js'
|
|
7
|
+
import {
|
|
8
|
+
composePublicVisionConfig,
|
|
9
|
+
SETTINGS_CONTRACT_REVISION,
|
|
10
|
+
} from './lib/public-config.js'
|
|
8
11
|
import { applyVisionRuntimeComposition } from './lib/runtime-composition.js'
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
// absence changes write semantics. This revision is also exposed as a resolved
|
|
12
|
-
// schema default so a newer browser client can distinguish a genuinely updated
|
|
13
|
-
// Host from a stale in-process plugin module instead of reporting a generic
|
|
14
|
-
// readback mismatch after the old Host rejects a newly visible field.
|
|
15
|
-
export const SETTINGS_CONTRACT_REVISION = 7
|
|
13
|
+
export { SETTINGS_CONTRACT_REVISION }
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
// field schema. This mutates the Config object that index.js itself later uses
|
|
19
|
-
// for the settings namespace, so composition config and settings validation
|
|
20
|
-
// agree on the same default.
|
|
21
|
-
core.Config.set('progressiveTools', z.boolean().default(false))
|
|
22
|
-
// Keep the timeout layers coherent: one provider call may use up to 120s and
|
|
23
|
-
// one visual task (including fallbacks) shares 120s. The whole-turn visual
|
|
24
|
-
// budget is an optional user safety cap rather than an Agent lifetime policy:
|
|
25
|
-
// 0 means unlimited, which is the default for long-running autonomous turns.
|
|
26
|
-
core.Config.set('visionTaskTimeoutMs', z.number().step(1000).min(1000).max(180000).default(120000))
|
|
27
|
-
core.Config.set('visionTurnBudgetMs', z.number().step(1000).min(0).max(600000).default(0))
|
|
15
|
+
export const Config = composePublicVisionConfig(core.Config)
|
|
28
16
|
|
|
29
|
-
|
|
30
|
-
// Settings > Plugins compatibility card — edit the same Host-owned namespace.
|
|
31
|
-
core.Config.set('visionDepth', z.union(['fast', 'standard', 'deep', 'custom']).default('standard'))
|
|
32
|
-
core.Config.set('visionDepthMaxCalls', z.number().step(1).min(0).max(100).default(0))
|
|
33
|
-
|
|
34
|
-
// Product semantics: ordered remains the safe default; Auto changes execution
|
|
35
|
-
// only under explicit live routingMode:auto authority.
|
|
36
|
-
core.Config.set('routingMode', z.union(['ordered', 'auto']).default('ordered'))
|
|
37
|
-
core.Config.set(
|
|
38
|
-
'routingPreference',
|
|
39
|
-
z.union(['balanced', 'quality', 'speed', 'local']).default('balanced'),
|
|
40
|
-
)
|
|
41
|
-
// Background measurement is separate user authority; absence never grants it.
|
|
42
|
-
core.Config.set(
|
|
43
|
-
'backgroundBenchmarking',
|
|
44
|
-
z.union(['local-free', 'all', 'off']).default('off'),
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
// Settings surfaces and Host persistence must agree on this field.
|
|
48
|
-
core.Config.set('allowRemoteSettings', z.boolean().default(false))
|
|
49
|
-
|
|
50
|
-
// Internal read-only-by-convention handshake. It is not rendered by Vision
|
|
51
|
-
// Router's settings UI and is not in the remote mutable allow-list.
|
|
52
|
-
core.Config.set(
|
|
53
|
-
'settingsContractRevision',
|
|
54
|
-
z.number().step(1).min(1).max(SETTINGS_CONTRACT_REVISION).default(SETTINGS_CONTRACT_REVISION),
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
export * from './index.js'
|
|
17
|
+
export { inject, name } from './index.js'
|
|
58
18
|
export { sessionSurfaceReplacementIntent } from './lib/session-surface-compat.js'
|
|
59
19
|
export {
|
|
60
|
-
attachmentContextForContract,
|
|
61
20
|
ensureVisionAttachmentAdmissionPolicy,
|
|
62
21
|
hasBatchAttachmentContract,
|
|
63
22
|
hostOwnsOfficialDeepSeekProvider,
|
|
64
23
|
installHostSettingsCompatibility,
|
|
65
24
|
installVisionAttachmentAdmissionPolicy,
|
|
66
25
|
protectHostProviderOwnership,
|
|
67
|
-
// Transitional public aliases retained for callers/tests written during the
|
|
68
|
-
// rc.7 compatibility pass. Production runtime branches on feature seams.
|
|
69
|
-
installRc7SettingsCompatibility,
|
|
70
|
-
isRc7ContractRuntime,
|
|
71
|
-
protectRc7ProviderOwnership,
|
|
72
26
|
} from './lib/dsh-contract-compat.js'
|
|
73
|
-
export const Config = core.Config
|
|
74
|
-
|
|
75
27
|
// Defense in depth for direct/programmatic callers is implemented by the same
|
|
76
28
|
// production composition used by Cordis. This public entry intentionally owns
|
|
77
29
|
// no runtime installer ordering beyond that single call.
|
|
78
|
-
export function apply(ctx, config = {}) {
|
|
79
|
-
return applyVisionRuntimeComposition(ctx, config, core)
|
|
30
|
+
export function apply(ctx, config = {}, runtime = {}) {
|
|
31
|
+
return applyVisionRuntimeComposition(ctx, config, core, runtime)
|
|
80
32
|
}
|