dsh-vision-router 2.1.7 → 2.2.1
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/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.2.0.md +25 -0
- package/docs/releases/v2.2.1.md +22 -0
- package/docs/remote-settings.md +2 -0
- package/entry.js +2 -0
- package/index.js +355 -64
- 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 +22 -17
- package/lib/core-primitives.js +126 -5
- package/lib/degraded-local-evidence.js +39 -0
- package/lib/dsh-contract-compat.js +225 -0
- package/lib/dsh-support-window.js +1 -1
- package/lib/fetch-wrapper-lifecycle.js +56 -0
- package/lib/image-offload-compat.js +38 -0
- package/lib/legacy-global-proxy-boundary.js +4 -3
- 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/pi-ai-bridge-wire-compat.js +4 -3
- package/lib/pixel-diff-stream.js +12 -6
- package/lib/remote-settings-bridge.js +19 -1
- package/lib/replay-delegation.js +41 -21
- package/lib/runtime-composition.js +15 -2
- 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 +438 -97
- 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-breaker-shadow-health.js +26 -6
- package/lib/vision-evidence-guidance.js +39 -0
- package/lib/vision-resilience.js +73 -1
- package/package.json +12 -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.1
|
|
20
|
+
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.2.1"><img src="https://img.shields.io/badge/release-v2.2.1-5B4CF0?style=flat-square" alt="Release v2.2.1" /></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.1
|
|
42
|
+
> 📌 **Announcement (v2.2.1)**
|
|
43
43
|
>
|
|
44
|
-
> **v2.1
|
|
44
|
+
> **v2.2.1:** Stability hotfix for large-session repair, accessor-based fetch composition, non-divisible pixel-diff bounds, and local Ollama answer-budget preservation — without raising the rc.8 Host floor. [What’s new →](docs/releases/v2.2.1.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.1
|
|
20
|
+
<a href="https://github.com/ysr666/dsh-vision-router/releases/tag/v2.2.1"><img src="https://img.shields.io/badge/release-v2.2.1-5B4CF0?style=flat-square" alt="Release v2.2.1" /></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.1
|
|
42
|
+
> 📌 **公告(v2.2.1)**
|
|
43
43
|
>
|
|
44
|
-
> **v2.
|
|
44
|
+
> **v2.2.1:稳定性热修——修复大型 Session repair 卡死、accessor fetch 组合、非整除 pixel diff 边界与本地 Ollama 推理占满答案预算;公开最低 Host 仍保持 `0.1.0-rc.8`。** [查看完整更新 →](docs/releases/v2.2.1.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;其余工具无浏览器也能用。
|
|
@@ -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,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.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# v2.2.1
|
|
2
|
+
|
|
3
|
+
DSH Vision Router 2.2.1 is a focused stability and compatibility hotfix for the 2.2.0 line.
|
|
4
|
+
|
|
5
|
+
## Highlights
|
|
6
|
+
|
|
7
|
+
- Fixes the large-session repair regressions in #524 and #532. On supported DSH Hosts, production tool-result and guard-stop repair now consumes bounded post-commit `session/event` entries and performs zero live Session-history reads: no `sessionQuery.readEvent()`, no `observeSession.events` materialization, and no new `eventAt()` / `snapshotEvents()` dependency. This removes the original full-clone amplification and the later `Unable to deserialize cloned data` / Windows Node 24 native-crash path.
|
|
8
|
+
- Fixes global `fetch` compatibility composition with accessor-based Host/plugin pipelines (#519), preventing wrapper cycles while preserving live Host middleware authority.
|
|
9
|
+
- Fixes `vision_pixel_diff` worst-region bounds on non-divisible image/grid dimensions (#520).
|
|
10
|
+
- Fixes the confirmed Ollama portion of #526 by disabling hidden reasoning for generated local Ollama vision providers on the OpenAI-compatible Chat Completions path, preserving the bounded token budget for visible answer text.
|
|
11
|
+
- Completes the release-channel canary fixture so stable/latest and preview/alpha validate the same Session publication family before Host contract smoke.
|
|
12
|
+
|
|
13
|
+
## Compatibility
|
|
14
|
+
|
|
15
|
+
- Node 22 and Node 24 remain supported.
|
|
16
|
+
- Windows, macOS, and Linux remain gated.
|
|
17
|
+
- The public minimum DSH Host remains `0.1.0-rc.8`.
|
|
18
|
+
- Existing 2.2.0 settings require no migration.
|
|
19
|
+
|
|
20
|
+
## Known follow-ups
|
|
21
|
+
|
|
22
|
+
- #526 remains open for the LM Studio reasoning/budget path; 2.2.1 does not send Ollama-specific `reasoning_effort` to LM Studio without a documented LM Studio wire contract.
|
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,
|