dsh-vision-router 2.1.6 → 2.2.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 +8 -14
- package/README.zh.md +8 -14
- package/cordis.patch.yml +14 -0
- package/docs/architecture/compat-inventory.md +1 -1
- package/docs/architecture/dsh-compatibility-matrix.md +4 -1
- package/docs/architecture/dsh-support-window.md +1 -2
- package/docs/releases/v2.1.7.md +13 -0
- package/docs/releases/v2.2.0.md +25 -0
- package/docs/remote-settings.md +2 -0
- package/entry.js +2 -0
- package/index.js +387 -77
- package/lib/artifact-boundary.js +11 -0
- package/lib/artifact-io.js +60 -7
- package/lib/catalog-corrections.js +5 -0
- package/lib/client.js +293 -48
- package/lib/core-primitives.js +122 -7
- package/lib/degraded-local-evidence.js +39 -0
- package/lib/dsh-contract-compat.js +202 -0
- package/lib/dsh-support-window.js +1 -1
- package/lib/image-offload-compat.js +38 -0
- package/lib/live-model-discovery.js +125 -15
- package/lib/local-vision-stabilizer.js +15 -6
- package/lib/official-deepseek-catalog.js +120 -0
- package/lib/ollama-cold-start.js +3 -15
- package/lib/remote-settings-bridge.js +28 -5
- package/lib/replay-delegation.js +68 -42
- package/lib/runtime-composition.js +15 -2
- package/lib/runtime-config-normalizer.js +271 -1
- package/lib/runtime-i18n-boundary.js +4 -13
- package/lib/runtime-i18n.js +2 -2
- package/lib/session-surface-compat.js +40 -0
- package/lib/session-turn-resolver.js +57 -0
- package/lib/session-vision-index.js +206 -93
- package/lib/session-vision-mode-boundary.js +83 -6
- package/lib/session-vision-runtime.js +8 -2
- package/lib/session-vision-state.js +0 -13
- package/lib/tesseract-exec-compat.js +16 -2
- package/lib/twin-image-capability-fallback.js +2 -11
- package/lib/vision-artifact-store.js +16 -3
- package/lib/vision-attachment-handle-runtime.js +9 -21
- package/lib/vision-backend-runtime-policy.js +7 -6
- package/lib/vision-background-stop-store.js +30 -20
- package/lib/vision-breaker-shadow-health.js +15 -5
- package/lib/vision-capability-probe.js +24 -14
- package/lib/vision-evidence-guidance.js +39 -0
- package/lib/vision-image-input-verdict.js +22 -7
- package/lib/vision-resilience.js +73 -1
- package/lib/web-capability-boundary.js +85 -22
- package/package.json +14 -7
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
|
-
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.
|
|
20
|
+
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.2.0"><img src="https://img.shields.io/badge/release-v2.2.0-5B4CF0?style=flat-square" alt="Release v2.2.0" /></a>
|
|
21
21
|
<a href="tests"><img src="https://img.shields.io/badge/verified-Node%2022%20%2B%2024-2EA44F?style=flat-square" alt="Verified: Node 22 + 24" /></a>
|
|
22
22
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat-square" alt="License: MIT" /></a>
|
|
23
23
|
<a href="package.json"><img src="https://img.shields.io/badge/Node.js-%3E%3D22-339933?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node.js >=22" /></a>
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
<p align="center">💬 <strong>QQ community group: 1105463028</strong></p>
|
|
40
40
|
|
|
41
41
|
> [!WARNING]
|
|
42
|
-
> 📌 **Announcement (v2.
|
|
42
|
+
> 📌 **Announcement (v2.2.0)**
|
|
43
43
|
>
|
|
44
|
-
> **v2.
|
|
44
|
+
> **v2.2.0:** Lands Vision Quality Round 2 with adaptive local OCR, bounded degraded-evidence work, stable artifact handoff, successful-evidence convergence, and stronger DSH/session compatibility — without raising the rc.8 Host floor. [What’s new →](docs/releases/v2.2.0.md)
|
|
45
45
|
|
|
46
46
|
<p align="center">
|
|
47
47
|
<img src="assets/vision-demo.gif" width="640" alt="Demo: paste an image, the agent locates the send button with vision_ground / vision_crop / vision_pixel_diff and answers with coordinates" />
|
|
@@ -246,7 +246,7 @@ The diagram covers the eleven image-processing tools. `vision_present` (durable
|
|
|
246
246
|
|---|---|---|
|
|
247
247
|
| `vision_bootstrap` | Optional 1+x structured first visual pass; establishes task-independent evidence before at least one follow-up vision call | — |
|
|
248
248
|
| `vision_describe` | Image Q&A / multi-image compare / structured-evidence JSON mode (summary + layout regions + entity inventory + verbatim transcription) | — |
|
|
249
|
-
| `vision_materialize` | Copy an authorized attachment into
|
|
249
|
+
| `vision_materialize` | Copy an authorized attachment into a stable content-addressed workspace handoff file and return absolute + short workspace-relative paths for local OCR/parser fallbacks; no vision/network call | image copy |
|
|
250
250
|
| `vision_ground` | Locate a target → **original-pixel box x1/y1/x2/y2** | annotated PNG (optional) |
|
|
251
251
|
| `vision_detect` | Numbered inventory of every element of a kind (buttons/inputs/links…) with original-pixel boxes | annotated PNG with numbered boxes |
|
|
252
252
|
| `vision_crop` | Crop and zoom into a pixel box | PNG |
|
|
@@ -299,17 +299,11 @@ Failures are classified (region / tos / quota / rate-limit / context / network)
|
|
|
299
299
|
|
|
300
300
|
## Stealth mode
|
|
301
301
|
|
|
302
|
-
Stealth mode is **off by default** (explicit opt-in since issue #34):
|
|
302
|
+
Stealth mode is **off by default** (explicit opt-in since issue #34): the official `deepseek-official` route stays untouched. When you need images, the composer’s “👁 Vision” control switches to the internal DeepSeek wrapper, which is hidden from the stock picker and `/model` presentation by default.
|
|
303
303
|
|
|
304
|
-
|
|
304
|
+
On newer DSH Host generations, the official DeepSeek provider owns request-local attachment, file and image-access behavior. Vision Router therefore **never reconstructs or resurrects `deepseek-official` on those Hosts**. Keep `llm-deepseek` enabled and use the internal “DeepSeek + Auto Vision” wrapper / “👁 Vision” control for image tasks. If the official row is disabled or unavailable, the settings card reports that configuration problem instead of silently recreating a partial provider.
|
|
305
305
|
|
|
306
|
-
|
|
307
|
-
- id: llm-deepseek
|
|
308
|
-
name: '@deepseek-ai/dsh-llm-deepseek'
|
|
309
|
-
disabled: true
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
With the stock row present, the plugin keeps the official route and uses the internal wrapper through “👁 Vision”. Conversely, with stealth off but the stock row still disabled, the plugin performs a keep-alive takeover so the DeepSeek models don't vanish (the settings card explains this); to restore the fully official route, flip the `disabled` above back to `false` and restart.
|
|
306
|
+
Legacy Host contracts that do not expose this provider-ownership capability retain the historical takeover/keep-alive behavior for compatibility: when their stock DeepSeek row is absent, Vision Router can still rebuild the legacy provider path so existing profiles and sessions keep working. This fallback is not a setup requirement for current Hosts and should not be enabled by disabling `llm-deepseek` on a modern installation.
|
|
313
307
|
|
|
314
308
|
> Stealth mode **only affects the official DeepSeek route**. Custom/third-party routes such as opencode also receive internal vision wrappers by default, used through the composer toggle rather than a second user-facing model group.
|
|
315
309
|
|
|
@@ -422,7 +416,7 @@ ollama pull qwen2.5vl
|
|
|
422
416
|
## Requirements
|
|
423
417
|
|
|
424
418
|
- DeepSeek Harness Web profile. Normal installs can use `npx @deepseek-ai/dsh ...`; source checkouts use `pnpm dsh ...`. A bare `dsh ...` command only works when the CLI is already on your shell `PATH`.
|
|
425
|
-
- **DSH Host support policy:** DVR 2.1.x keeps DSH `0.1.0-rc.8` as the public minimum and currently supports the released stable channel through `0.1.5-rc.2`. Exact `0.1.
|
|
419
|
+
- **DSH Host support policy:** DVR 2.1.x keeps DSH `0.1.0-rc.8` as the public minimum and currently supports the released stable channel through `0.1.5-rc.2`. Exact `0.1.6-alpha.1` coverage is **verification evidence only**, not a preview support promise; scheduled `latest`/`alpha` canaries monitor drift without changing the support policy. DVR 2.0.x was the final train with public support for rc.6/rc.7. See [DSH Host support window](docs/architecture/dsh-support-window.md).
|
|
426
420
|
- Node ≥ 22 (host side).
|
|
427
421
|
- No API key for the default free chain; a credential reference (`apiKeyEnv`) only for paid `httpProviders`.
|
|
428
422
|
- Chrome / Chromium / Edge is needed only for `vision_html_screenshot`; every other tool works without a browser.
|
package/README.zh.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
|
-
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.
|
|
20
|
+
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.2.0"><img src="https://img.shields.io/badge/release-v2.2.0-5B4CF0?style=flat-square" alt="Release v2.2.0" /></a>
|
|
21
21
|
<a href="tests"><img src="https://img.shields.io/badge/verified-Node%2022%20%2B%2024-2EA44F?style=flat-square" alt="已验证 Node 22 + 24" /></a>
|
|
22
22
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat-square" alt="MIT 许可证" /></a>
|
|
23
23
|
<a href="package.json"><img src="https://img.shields.io/badge/Node.js-%3E%3D22-339933?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node.js >=22" /></a>
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
<p align="center">💬 <strong>QQ 用户交流群:1105463028</strong></p>
|
|
40
40
|
|
|
41
41
|
> [!WARNING]
|
|
42
|
-
> 📌 **公告(v2.
|
|
42
|
+
> 📌 **公告(v2.2.0)**
|
|
43
43
|
>
|
|
44
|
-
> **v2.
|
|
44
|
+
> **v2.2.0:Vision Quality Round 2 正式落地——自适应本地OCR、失败证据有界收敛、稳定artifact handoff、成功证据停止重复调用,并进一步收敛DSH/Session兼容;公开最低Host仍保持 `0.1.0-rc.8`。** [查看完整更新 →](docs/releases/v2.2.0.md)
|
|
45
45
|
|
|
46
46
|
<p align="center">
|
|
47
47
|
<img src="assets/vision-demo.gif" width="640" alt="演示:粘贴图片,Agent 用 vision_ground / vision_crop / vision_pixel_diff 定位发送按钮并给出坐标" />
|
|
@@ -244,7 +244,7 @@ Agent 仅根据参考图复刻 UI,再用 `vision_pixel_diff` 验证最终结
|
|
|
244
244
|
|---|---|---|
|
|
245
245
|
| `vision_bootstrap` | 可选 1+x 结构化首遍视觉识别;先建立任务无关证据底图,再至少进行 1 次后续视觉调用 | — |
|
|
246
246
|
| `vision_describe` | 看图问答 / 多图对比 / 结构化证据 JSON 模式(摘要 + 布局区域 + 实体清单 + 原文转写) | — |
|
|
247
|
-
| `vision_materialize` |
|
|
247
|
+
| `vision_materialize` | 把已授权附件复制到稳定的内容寻址工作区交接文件,并返回绝对路径和较短的工作区相对路径,供本地 OCR/解析器降级使用;不调用视觉模型或网络 | image copy |
|
|
248
248
|
| `vision_ground` | 定位目标 → **原图像素框 x1/y1/x2/y2** | 标注 PNG(可选) |
|
|
249
249
|
| `vision_detect` | 盘点某类元素(按钮/输入框/链接…)→ 编号清单 + 原图像素框 | 编号标注 PNG |
|
|
250
250
|
| `vision_crop` | 按像素框裁剪放大 | PNG |
|
|
@@ -297,17 +297,11 @@ vision_long_screenshot_ocr image="chat-log.png" chunkHeight=1200 overlap=120
|
|
|
297
297
|
|
|
298
298
|
## 隐身模式
|
|
299
299
|
|
|
300
|
-
隐身模式默认**关闭**(issue #34 起显式 opt-in
|
|
300
|
+
隐身模式默认**关闭**(issue #34 起显式 opt-in):官方 `deepseek-official` 路由原样保留;需要看图时通过输入框旁的「👁 识图」切换到内部 DeepSeek wrapper。该 wrapper 默认从原生模型选择器和 `/model` 展示层隐藏。
|
|
301
301
|
|
|
302
|
-
|
|
302
|
+
在新版 DSH Host 中,官方 DeepSeek provider 自己负责请求期的附件、Files API 与图片访问能力。因此 Vision Router **不会再重建或复活 `deepseek-official`**。请保持 `llm-deepseek` 启用,通过内部「DeepSeek + 自动识图」wrapper /「👁 识图」处理图片;如果官方行被禁用或不可用,设置页会明确提示重新启用,而不是偷偷注册一个能力不完整的替代 provider。
|
|
303
303
|
|
|
304
|
-
|
|
305
|
-
- id: llm-deepseek
|
|
306
|
-
name: '@deepseek-ai/dsh-llm-deepseek'
|
|
307
|
-
disabled: true
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
官方行在场时,插件保留官方路由并使用内部 wrapper +「👁 识图」入口。反过来,隐身模式关闭但官方行仍被禁用时,插件会做 keep-alive 兜底接管,保住 DeepSeek 模型(设置页会给出提示);想完全恢复官方原生行,把上面的 `disabled` 改回 `false` 再重启即可。
|
|
304
|
+
缺少这项 provider ownership 能力的 legacy Host contract 仍保留历史接管 / keep-alive 行为,以兼容旧 profile 和旧会话:只有这条兼容路径在官方行缺失时才可能由 Vision Router 重建旧 provider。这不是新版 Host 的配置方式;当前安装不要为了隐身模式去禁用 `llm-deepseek`。
|
|
311
305
|
|
|
312
306
|
> 隐身模式**只作用于官方 DeepSeek 路由**。opencode 等自定义/第三方文本路由与隐身模式无关——默认也会生成内部识图 wrapper,由「👁 识图」按需使用。
|
|
313
307
|
|
|
@@ -420,7 +414,7 @@ ollama pull qwen2.5vl
|
|
|
420
414
|
## 环境要求
|
|
421
415
|
|
|
422
416
|
- DeepSeek Harness 的 Web profile。普通安装可用 `npx @deepseek-ai/dsh ...`;从源码仓库运行时用 `pnpm dsh ...`。只有 CLI 已经进入系统 `PATH` 时才能直接写 `dsh ...`。
|
|
423
|
-
- **DSH Host 支持策略:** DVR 2.1.x 的公开最低 Host 仍为 DSH `0.1.0-rc.8`,当前正式发布通道已验证并支持到 `0.1.5-rc.2`。对 `0.1.
|
|
417
|
+
- **DSH Host 支持策略:** DVR 2.1.x 的公开最低 Host 仍为 DSH `0.1.0-rc.8`,当前正式发布通道已验证并支持到 `0.1.5-rc.2`。对 `0.1.6-alpha.1` 的精确覆盖**只属于验证证据**,不代表对 preview 的公开支持承诺;定时 `latest`/`alpha` canary 只负责发现上游漂移,也不会自动改变支持策略。DVR 2.0.x 是最后公开支持 rc.6/rc.7 的版本线。详见 [DSH Host 支持窗口](docs/architecture/dsh-support-window.md)。
|
|
424
418
|
- Node ≥ 22(宿主侧)。
|
|
425
419
|
- 默认免费链路无需 API Key;付费 `httpProviders` 只需一个凭据引用(`apiKeyEnv`)。
|
|
426
420
|
- 只有 `vision_html_screenshot` 需要 Chrome / Chromium / Edge;其余工具无浏览器也能用。
|
package/cordis.patch.yml
CHANGED
|
@@ -19,6 +19,20 @@
|
|
|
19
19
|
name: '@deepseek-ai/dsh-client-modules'
|
|
20
20
|
inject: [webServer]
|
|
21
21
|
|
|
22
|
+
# DSH rc.6 至 0.1.5-rc.2 的 Web bundle 里,Connection provider row 只声明
|
|
23
|
+
# webRuntime,但 HostConnectionService.rpc/fetch 的 accessor 会把调用 owner
|
|
24
|
+
# 追踪回这个 provider fiber;rpc.handle() 最终又通过 owner.webServer.register()
|
|
25
|
+
# 挂载路由。因此仅在 DVR 的调用 child fiber 注入 webServer 仍不足以覆盖
|
|
26
|
+
# Cordis Service shadow 语义(issue #478 / Desktop 2.0.9 可稳定复现)。
|
|
27
|
+
#
|
|
28
|
+
# 保留官方既有 webRuntime 依赖,并让 Connection provider 本身同时等待
|
|
29
|
+
# webServer。这样不改 connection config / trustedHosts,不复制 RPC 协议或鉴权,
|
|
30
|
+
# 也不改变非 Web surface。exact-source contract 会监控上游 row;官方一旦
|
|
31
|
+
# 自己拥有 webServer,此 shim 必须随支持窗口审计退休,避免覆盖未来新增依赖。
|
|
32
|
+
- id: connection
|
|
33
|
+
name: '@deepseek-ai/dsh-client-connection'
|
|
34
|
+
inject: [webRuntime, webServer]
|
|
35
|
+
|
|
22
36
|
# 挂载插件行。默认保持完整视觉工具表常驻(issue #81):虽然渐进挂载可以
|
|
23
37
|
# 少发一小段工具 schema,但图片轮首次扩展工具列表会改变请求前缀,可能让
|
|
24
38
|
# 长会话的 provider KV/prefix cache 整体失效。高级用户仍可在 profile /
|
|
@@ -7,7 +7,7 @@ P0 records why each major compatibility seam exists and the condition that permi
|
|
|
7
7
|
- **Reason:** preserve released attachment/settings/provider-ownership behavior across the supported DSH window.
|
|
8
8
|
- **Host gap:** rc.6 has the single-attachment contract; later Hosts add batch save, max-dimension policy and newer settings/provider lifecycle behavior.
|
|
9
9
|
- **First needed for:** minimum rc.6 support and the subsequent rc.7/rc.8 attachment migration.
|
|
10
|
-
- **Feature detection:** `attachments.saveImages`, attachment `imageLimits`, settings registration/scope functions, and LLM registration methods. No version-string branch.
|
|
10
|
+
- **Feature detection:** `attachments.saveImages`, attachment `imageLimits`, settings registration/scope functions, and LLM registration methods. The batch-attachment generation is also the semantic boundary where `deepseek-official` remains Host-owned instead of being reconstructed by DVR. No version-string branch.
|
|
11
11
|
- **Removal condition:** minimum supported DSH natively exposes the required attachment/settings/provider seams and legacy profile overlays are outside support.
|
|
12
12
|
- **Tests:** `rc6-rc7-compat`, `rc6-real-settings-persistence`, `attachment-admission-policy`, `dsh-host-capabilities`, minimum/legacy/current contract CI.
|
|
13
13
|
|
|
@@ -11,7 +11,8 @@ The matrix is capability-based. Runtime code must feature-detect the seam it nee
|
|
|
11
11
|
| `minimum-contract` | `0.1.0-rc.6` | Historical compatibility-retention fixture. The name is legacy; DVR 2.1.x public support starts at rc.8. |
|
|
12
12
|
| `legacy-contract` | `0.1.0-rc.8` | Public support-floor fixture carrying batch attachments and dimension policy. |
|
|
13
13
|
| `current-contract` | `0.1.5-rc.2` | Current stable Host contract baseline. Must remain green. |
|
|
14
|
-
| exact preview gates | `0.1.
|
|
14
|
+
| `preview-contract` / exact preview gates | `0.1.6-alpha.1` | Required verification evidence only; not a public preview-support claim. |
|
|
15
|
+
| retained preview regression | `0.1.5-alpha.2` | Older preview regression fixture retained while the 0.1.6 preview line is qualified. |
|
|
15
16
|
| `latest-dsh` / alpha canaries | resolved dynamically from npm dist-tags | Scheduled drift surveillance only. Never changes support policy by itself. |
|
|
16
17
|
|
|
17
18
|
Node 22 and Node 24 remain the general required runtime matrix. The Host contract jobs are additive; they do not replace the normal test matrix.
|
|
@@ -37,6 +38,8 @@ Node 22 and Node 24 remain the general required runtime matrix. The Host contrac
|
|
|
37
38
|
| Public entry boot | yes | yes | yes | packed plugin public entry import in each Host contract fixture. |
|
|
38
39
|
| Packaged tarball install | yes | yes | yes | each Host contract fixture packs the plugin then installs the tarball into an isolated Host package. |
|
|
39
40
|
|
|
41
|
+
Preview-only evidence: the `0.1.6-alpha.1` contract fixture additionally mounts the Host-owned `@deepseek-ai/dsh-compaction-image-offload` projection and proves that one offloaded image occurrence stays offloaded across live requests, `SessionStore.fork()`, JSONL process restart, and cold resume, while a new occurrence of the same durable attachment remains a retained image. This is verification evidence for the preview contract only; it does not expand the public support window.
|
|
42
|
+
|
|
40
43
|
## Compatibility inventory and exit criteria
|
|
41
44
|
|
|
42
45
|
Every compatibility seam must answer the same six questions: **Reason**, **Host gap**, **First needed for**, **Feature detection**, **Removal condition**, and **Tests**. Source modules carry the detailed annotation; this table is the architectural index.
|
|
@@ -24,7 +24,7 @@ Compatibility evidence answers a different question: what exact upstream release
|
|
|
24
24
|
| Evidence role | DSH source | Meaning |
|
|
25
25
|
|---|---|---|
|
|
26
26
|
| Exact stable evidence | `0.1.5-rc.2` | Required Host/wire and real Host + Chromium coverage for the current stable release. |
|
|
27
|
-
| Exact preview evidence | `0.1.
|
|
27
|
+
| Exact preview evidence | `0.1.6-alpha.1` | Required preview Host/wire/lifecycle/browser evidence. This is not a preview support promise. |
|
|
28
28
|
| Stable drift canary | npm dist-tag `latest` | Scheduled, dynamically resolved surveillance. A failure starts compatibility investigation; it does not rewrite support policy. |
|
|
29
29
|
| Preview drift canary | npm dist-tag `alpha` | Scheduled, dynamically resolved surveillance with preview-specific lifecycle coverage. A failure does not rewrite support policy. |
|
|
30
30
|
|
|
@@ -32,7 +32,6 @@ The exact evidence values may move in a patch-level maintenance PR when CI proof
|
|
|
32
32
|
|
|
33
33
|
Historical release notes under `docs/releases/` are release-time snapshots and are not rewritten when later evidence advances.
|
|
34
34
|
|
|
35
|
-
|
|
36
35
|
The optional peer-dependency range may admit an exact preview version so CI/users can install a verified preview Host without peer-resolution noise. That install admission is compatibility evidence, not a public preview support promise.
|
|
37
36
|
|
|
38
37
|
## Floor transition from DVR 2.0.x
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# v2.1.7
|
|
2
|
+
|
|
3
|
+
DSH Vision Router 2.1.7 is a security, lifecycle, compatibility, and release-integrity patch for the 2.1.x train.
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
- Hardens remote Settings admission and local-only capability boundaries.
|
|
8
|
+
- Bounds browser presentation resources and long-lived persistent-cache state.
|
|
9
|
+
- Adds property-based fuzzing and expands adversarial resource coverage.
|
|
10
|
+
- Tightens current DSH 0.1.5 compatibility around connection and live model catalog ownership.
|
|
11
|
+
- Hardens release provenance, exact-main verification, and GitHub Actions source policy.
|
|
12
|
+
|
|
13
|
+
The public DSH support floor remains `0.1.0-rc.8`; existing 2.1.x settings remain compatible and require no migration.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# v2.2.0
|
|
2
|
+
|
|
3
|
+
DSH Vision Router 2.2.0 is the Vision Quality Round 2 release. It turns the Round 2 production fixes, Host/session compatibility work, and isolated quality harness into the new minor-release baseline.
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
- Adaptive local Tesseract evidence with canonical temp staging, bounded alternate layout attempts, confidence/uncertainty reporting, and no heuristic forced backend switch on low confidence alone.
|
|
8
|
+
- Source/turn-scoped degraded-evidence convergence after all configured visual backends fail, while preserving unrelated Host tools, other images, and the next Host turn.
|
|
9
|
+
- Stable content-addressed materialization handoff paths, eliminating the random UUID path-copy failure chain seen in real Agent traces.
|
|
10
|
+
- DSH-native post-execute success guidance that stops redundant visual work without changing canonical tool results or exact-character verification semantics.
|
|
11
|
+
- A strict single-attachment `attachmentIds` compatibility alias for `vision_ocr`, without turning OCR into a multi-image or filesystem-expanding interface.
|
|
12
|
+
- Session/attachment compatibility convergence across image-offload projections and evolving Host Session surfaces, with bounded asynchronous history reads instead of eager indexing.
|
|
13
|
+
- Catalog/tool authority fixes that preserve official DeepSeek identity through transient directory failures and restrict only tools actually registered by Vision Router.
|
|
14
|
+
- An isolated Round 2 Host API runner plus suite revision 2, with fresh runtime/workspace/session isolation and publish-surface self-scrubbing.
|
|
15
|
+
|
|
16
|
+
## Compatibility
|
|
17
|
+
|
|
18
|
+
- Node 22 and Node 24 remain supported.
|
|
19
|
+
- Windows, macOS, and Linux remain gated.
|
|
20
|
+
- The public minimum DSH Host remains `0.1.0-rc.8`; current preview coverage includes `0.1.6-alpha.1`.
|
|
21
|
+
- Existing 2.1.x settings require no migration.
|
|
22
|
+
|
|
23
|
+
## Known limit
|
|
24
|
+
|
|
25
|
+
Round 2 intentionally does not add benchmark-specific rules for intrinsically confusable glyphs such as `O/0` and `I/l/1`. When evidence cannot establish exact character identity, uncertainty remains preferable to a fabricated exact answer.
|
package/docs/remote-settings.md
CHANGED
|
@@ -6,4 +6,6 @@ Remote editing is off by default. When a Vision Router settings page is opened t
|
|
|
6
6
|
|
|
7
7
|
DSH `trustedHosts` protects the browser carrier against Host/Origin/DNS-rebinding attacks; it is **not user authentication**. Enable remote editing only when you trust the clients that can reach the DSH instance. Ordinary remote mutations remain restricted to the explicit Vision Router allow-list. Credential-bearing HTTP providers, local Ollama/LM Studio configuration, artifact paths and every other field not present in that allow-list stay unavailable remotely. `allowRemoteSettings` itself is not added to the ordinary mutation allow-list: it can be enabled only through the explicit risk-confirmation flow (or from the loopback settings page).
|
|
8
8
|
|
|
9
|
+
The transport contract differs across supported DSH generations without changing that security model. On the rc.8 Connection contract, Vision Router registers the dedicated channel with the required per-channel `{ authority: 'trusted-host' }` option. Newer Connection contracts expose the carrier-level `requestRejection()` / BrowserAuth fence and `rpc.handle()` no longer accepts a channel authority option; Vision Router feature-detects that carrier and registers with the modern two-argument form. The remote field allow-list and `allowRemoteSettings` gate remain authoritative in both cases.
|
|
10
|
+
|
|
9
11
|
If DSH is behind Nginx, Caddy or another reverse proxy, forward `/vision-router-settings/*` to the same DSH origin in addition to the normal DSH routes. The UI detects a 404 on this channel and shows this requirement directly.
|
package/entry.js
CHANGED
|
@@ -55,10 +55,12 @@ core.Config.set(
|
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
export * from './index.js'
|
|
58
|
+
export { sessionSurfaceReplacementIntent } from './lib/session-surface-compat.js'
|
|
58
59
|
export {
|
|
59
60
|
attachmentContextForContract,
|
|
60
61
|
ensureVisionAttachmentAdmissionPolicy,
|
|
61
62
|
hasBatchAttachmentContract,
|
|
63
|
+
hostOwnsOfficialDeepSeekProvider,
|
|
62
64
|
installHostSettingsCompatibility,
|
|
63
65
|
installVisionAttachmentAdmissionPolicy,
|
|
64
66
|
protectHostProviderOwnership,
|