{"_id":"dsh-vision-router","_rev":"53-850eecf9d8bb3cbad9d4034e2cffd98a","name":"dsh-vision-router","dist-tags":{"latest":"3.0.3"},"versions":{"1.0.0":{"name":"dsh-vision-router","version":"1.0.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.0.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"2682e9ee0e68f1eed6f13a0fc8970de0f47573d8","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.0.0.tgz","fileCount":26,"integrity":"sha512-68NWsZvMP0IeR3zlA8LaQgqh432/vMS48f0WI2r6nHFloaxhGEzxJW1Bf8YckAbEV0byd/gvU0jiPNrN+buusg==","signatures":[{"sig":"MEUCIQCFregKk/4bGC5NBUyvWKzr/s9r4ntK8kDEPYf+k4ipWgIgCLlLJfUshThT/8xXu6fIJTSY0KpW4a4DYYOFACZkQL0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1316291},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/client.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.7.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.5.0","dependencies":{"sharp":"^0.34.0","undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.0.0_1786722478141_0.8761954426970631","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"dsh-vision-router","version":"1.0.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.0.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"1e66a0a545daf0ebdb770a737f6b7c084fe54dfe","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.0.1.tgz","fileCount":26,"integrity":"sha512-GH5rTwqFJiqSVjnFi0TmEbv7AgB01i5+Of/wa3znNTZgviS20vnoh3zjZjzYb8w1r79XVTXpw2HDgCBSSqQvrw==","signatures":[{"sig":"MEUCIQDxg7Vd9P+syvgEDdv7q2jvBzz6TIPaDyja8kuYUbZW5gIgGMSj6C+qEa/cLqZy0vSkwLKamT7n/muleHdGHjPEUqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1320039},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"ce57514d2894581d8b930fd8ebc4f55a8aad61b1","scripts":{"test":"node --test tests/core.test.js tests/client.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.34.0","undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.0.1_1786727060890_0.40541541254010105","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"dsh-vision-router","version":"1.1.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.1.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"fd92d5bcaf2e209332cf5cee73d1748341acf2f8","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.1.0.tgz","fileCount":26,"integrity":"sha512-exYq+CEj2uADU+uJ5r89V9t8n1zSEay6DnZimSDBXSk0Hl52z5aCTo9BvsrCaWomZNF/1Wz9bXv+N/voDZ7ltg==","signatures":[{"sig":"MEYCIQDopGOY4VeDANv2gzpEntVynkEvKEwteVAdAAGIs3sS+QIhAPlJqo5vLEwj+EuDRlOYxvnla3QzntfK/rjAJ2ZNt7vL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1362627},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"bc815bd078e824e32090a9e8c7503c83e440ad08","scripts":{"test":"node --test tests/core.test.js tests/client.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.34.0","undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.1.0_1786734375069_0.3226656876307412","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"dsh-vision-router","version":"1.1.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.1.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"2e228864239f14c03d1586b48843248e85c3b595","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.1.1.tgz","fileCount":26,"integrity":"sha512-DkvJ41mJtdF7a2CVsGhhviEVaLFEk+C8MLPxLFCmeN5mqeAa/3MCAHtHXyhGJsjXR2vghmr98cmXLFON6mAZEA==","signatures":[{"sig":"MEYCIQDA429EixT1MbmEdj3JTIVwTaYidJeAQv3MJ0G/T3JktwIhALOCZ3YODBerltTdxo3f3BdI6EwAUmxvBFXR8nNnHFmP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1370552},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"64d376214412c2a2aeb9f28a9c518a9510c48f79","scripts":{"test":"node --test tests/core.test.js tests/client.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3"},"peerDependencies":{"sharp":">=0.35.3 <1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.1.1_1786770772169_0.8567501441850474","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"dsh-vision-router","version":"1.2.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.2.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"0b000edd921347a6326284db1e683bfd07bc0a2d","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.2.0.tgz","fileCount":35,"integrity":"sha512-CkqW2ddpmMraUsmZvB02qUm1/Q2ROGe2wel7nM3TbfbMJvYM7fFxRb3WvF101xt5/ZMRLNF5k8nUJvWnwOWY4w==","signatures":[{"sig":"MEQCIHmyZAabVIvDQEDMrqQxaq1LP/xdZLod0F6WXdpruU41AiBbluZJnNKuKeoFacCh2W8p7uMxxCKC6Yml0wmMDvio+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1490774},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"acf5d680c3711f1227974f3ec757499e774be891","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3"},"peerDependencies":{"sharp":">=0.35.3 <1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.2.0_1786790153924_0.6853991731439693","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"dsh-vision-router","version":"1.2.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.2.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"ec6d63859e2bdb9661fe4bf3c25c2c94a26f9db4","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.2.1.tgz","fileCount":35,"integrity":"sha512-yJgemuprpHrZhT6L7G4fTGHtPjAzFnHD9AYOjtq265WOlPyrDRLlkGZ7f1V5lqiQq8s7ELTw8guKjaFZbenqdg==","signatures":[{"sig":"MEUCIQDzk4pi6FwrzYZx3Ooup694UWUUf7oTQ4QK/n1So1xmUwIgNcOa9phrD2FasQUzzJXfe8h4cIS1TN9KMUbeumiAqzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1866345},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"1b7470b52ea5f4e5cbf7d4c75eccb467221ac4fe","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3"},"peerDependencies":{"sharp":">=0.35.3 <1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.2.1_1786810961849_0.5591952424280902","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"dsh-vision-router","version":"1.2.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.2.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"7b23fb41162580e08d018b7c3cebcf087f746fba","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.2.2.tgz","fileCount":35,"integrity":"sha512-+kv3/oXvrZGlpRzbVtGe+0skIIJt5Hqp/GTXNPpduAjsvxF3mlg0eLjdtmEMVeOxxtbrgy6/jprd1yawZbfGhA==","signatures":[{"sig":"MEUCIHGH654+hArpfB6CF4EuTqGwucrnQvnlvKgAooZbKaVMAiEAjkPFx744ngwbAgiCvtANw61bYlksPnf7f5Fs3HglEkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1889406},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"86268695b1fb537794b33d0fb5267ce64ddbb8ce","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3"},"peerDependencies":{"sharp":">=0.35.3 <1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.2.2_1786821224498_0.05830985153972312","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"dsh-vision-router","version":"1.2.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.2.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"e7b08dbd5ebd3999f4584f767e923e0c8d4ffb85","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.2.3.tgz","fileCount":35,"integrity":"sha512-DtsBo8BzhpBzmXdamVYpwHGhSAyKrktfzyMGXNR6J6eDf/s5DrJJ34i+P5CmpKVAhtkOt90oLqt/SXoLYVG5hQ==","signatures":[{"sig":"MEYCIQD1FGapFxqDCpe35sZi4cR2DUFgWPucabPH6VFV9R/pAwIhAIBVgTLqU7oYLzsYHgDOoNbzHKwpdS5HXHGULMc1gVaT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1895828},"main":"index.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"ddfa6baf3f70ff9ddb2b5e7ff3a09d5840398d1f","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3"},"peerDependencies":{"sharp":">=0.35.3 <1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.2.3_1786845698003_0.1356682407764238","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"dsh-vision-router","version":"1.3.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.3.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"88b8934316cb195f204222816983ed271a53f160","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.3.0.tgz","fileCount":38,"integrity":"sha512-U5jrcdFTTRTmougScqxbY0hqddWiWK+UIO0gguRoFX7c2vobH/28mj6OLauCV2fclkjArwR0OtH4YwGfmo6rnQ==","signatures":[{"sig":"MEUCIHCxjr6hAQHhmvoJWSNRcYCrkiPJ+WAAwF6Xi4c+7y5wAiEAsYUJHI3W7UOPunQORB+yQdhYw9jevyhwIsGW+pDf78w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1919106},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"1913a0b8a0a399ad62eaeda0f668330f7ae5ba5c","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.3.0_1786863335523_0.760455971465188","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"dsh-vision-router","version":"1.4.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"6ecd5b6bde8f49e4bb634c991cdf0f91fe0f3678","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.0.tgz","fileCount":38,"integrity":"sha512-KLxzJNf8lTR5XJEqVYOOJXQFREYWutSTA+n/WcTXvmVFghn5hq2kr/Bkjg5W6krvPa5T3eBThQ2vzFqPjSislw==","signatures":[{"sig":"MEYCIQDozgOg/CuW8tmi9i3KSa/uZE15V8gPnho67M/KS46VMwIhAP2Bq55D/Py8He32UweZ9bgfWGdzhZc3H/ZEzMAO32If","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1975710},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"c4217b882852420b13117265e4cb531e1eb72107","scripts":{"test":"node --test tests/core.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.0_1786874982738_0.9694635444387705","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"dsh-vision-router","version":"1.4.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"e45222a6b62ac964d3f474f61c18f952a1c95688","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.1.tgz","fileCount":40,"integrity":"sha512-T9gLJRggeAI4AGDroz98SGwx68mlIiUCpnXiYcXn4jS9YFSs47ys9FODGgznMIxVGTtJhKt9MkE5BLACvirWRw==","signatures":[{"sig":"MEYCIQCmPDO1bxtQKVMKqxDfVRHzze1C6cF8RPyik298jX2vEgIhAIYAcSQWHKDRm6JmX7PQAPODbxjfERhoJPffCU6aI7LD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2034886},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"0e022a9f804e9c77976714895a1de3718d9d2098","scripts":{"test":"node --test tests/core.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.1_1786888890833_0.6194351944984906","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"dsh-vision-router","version":"1.4.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"dd6076415ef45a7212cf1395227e9a40b1b28247","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.2.tgz","fileCount":41,"integrity":"sha512-yxP5qS3gXB0uIptw+GJvUsIWzOBZFb6Fe6V2CuF4IfKWnhrOVHjYPb99waL6MpHjlvubPJfwJmIGUMUSzMt2mA==","signatures":[{"sig":"MEQCIBP3+4QqaCtoBx+A89Ze3jtRDKb+gI4nUivXengU2UsAAiAn4YSKBBsfbdGEE3pZCt4EyhJBVF99TB/v14unPBYmcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2069846},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"c44bdbadd50d4f3dce660762d95178e2fda934f1","scripts":{"test":"node --test tests/core.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.2_1786896382605_0.2147880141655456","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"dsh-vision-router","version":"1.4.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"dc5b80e84660ebcd0bf9edc4761f3e09a42e14f2","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.3.tgz","fileCount":41,"integrity":"sha512-FTqJW1cO1wiwtXDqcLNfOWWZcmN6A89ovWEvWGe3PujtSj2xq0wozaDf8Gh6jOD4XpJ0MWXBTO18Tt02d3LNUQ==","signatures":[{"sig":"MEUCIQDtSKqiKIoDKxU8Hv6kLoaCbY7hOqi9fcCcwF7+ycNjQAIgF6B5prTU8xW7ATymSUCVnsq/I5AdvceasbHvTO01GeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2081554},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"298acd53a89eb8cc709274975d0afe5718fbd86a","scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.3_1786905883617_0.9844978833443543","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"dsh-vision-router","version":"1.4.4","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.4","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"1e4f96e152db5d7c6d8b20c2ae38649fff233192","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.4.tgz","fileCount":41,"integrity":"sha512-AIbWRMOIXR3TbDojRnrxYyATJx6VCSSFoOjaMdi7Z1XjcrzMoTCuTZGZRUEGIXIgd65Jv0nnkq/S2Bx3D+zGzw==","signatures":[{"sig":"MEUCIQDUmkhOML/83CoSiXmWWFAs7zb+R1sLD3WbiQKZi2Z4/AIgOT2gM5lk3Lb85cCCyPuXh+jeNIgu0T0Dv6oa87/DSCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2081603},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"d5de7f0dbe72a5133e84436ddada661f7e0765a3","scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.4_1786909164300_0.581913180786142","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"dsh-vision-router","version":"1.4.5","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.4.5","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d643b0750f02c7b396e11d9509dbcf575a4a5650","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.4.5.tgz","fileCount":42,"integrity":"sha512-cw0dazUjZ8g0JyoeLwu0tIXyJBzQQn0FM+Fc89nOsRKxvYwdLyFLLdiRxZ13wTItGb25PSGsH8pnqlBci0IOog==","signatures":[{"sig":"MEQCIEAv51lw1XHFRRpmxSwPTZ1HIQCxKooTwSsXj20Hvv9jAiBRPmOa8ZnwO8FYpqoBfvc3kn/kcpeRTALbip/aTy/r3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2105806},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"511aacce61c737f443a8bc8786c71e3cc8607750","scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js"},"_npmUser":{"name":"ysr182","email":"ysr182@qq.com"},"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"10.9.8","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":">=6.15.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.4.5_1786949963191_0.8275502229485852","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"dsh-vision-router","version":"1.5.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.5.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"bb02d809c8ff4e2250ecbf4516486d84d509b246","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.5.0.tgz","fileCount":43,"integrity":"sha512-7+cgrmfsMoaigEcHV87wkFxOv3m6WHmwaJa9zYPHzkmsPeqKlc45wyXkmYBoHpz4x6qRyStMJVaJmBmmK9Z6yA==","signatures":[{"sig":"MEYCIQCBXhdD8CHc9iQPwCRX8v7rlWZJZdeNEaU+y4/4iqb7dgIhALd0/ykxzxlAw6y9DUmac/tCq2+rHU64M0pg8GdYrEdC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2212093},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.5.0.tgz","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.5.0.tgz","_integrity":"sha512-7+cgrmfsMoaigEcHV87wkFxOv3m6WHmwaJa9zYPHzkmsPeqKlc45wyXkmYBoHpz4x6qRyStMJVaJmBmmK9Z6yA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.5.0_1786961639821_0.6397795607608219","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"dsh-vision-router","version":"1.5.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.5.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"bc2cd06c77eee900a4d976e54878feaea1643a56","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.5.1.tgz","fileCount":43,"integrity":"sha512-h8m6mdFt9t1SkS+GIN/aykwOsywQ1xQ6kwJ9cLmOEb85X+McpXeNnDgv5N/4BQmNQbW0/HVM5mloeqq8JYIuSA==","signatures":[{"sig":"MEYCIQCZBONWEflnCrCmKd2x6aTDgZMnKXxa6lF34XMU7PC/aQIhAKQdedyioq7AU0ZD/yg7z+Qyu/eYQn2AIxhcJbO3zX7N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2222212},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.5.1.tgz","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.5.1.tgz","_integrity":"sha512-h8m6mdFt9t1SkS+GIN/aykwOsywQ1xQ6kwJ9cLmOEb85X+McpXeNnDgv5N/4BQmNQbW0/HVM5mloeqq8JYIuSA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.5.1_1786969792622_0.09757312946987406","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"dsh-vision-router","version":"1.5.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.5.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"bd0c6c0da956d1ea9211e9cef5f5e8ef585d3cad","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.5.2.tgz","fileCount":43,"integrity":"sha512-UbggRZLZIR5SwgnXrZ+zo5bYud60rv595H/D4nlNFYdQxS/QBFq/WUIb20doUOxytdMtzE4zkkD6IQXTrdjZpQ==","signatures":[{"sig":"MEUCIQD8jSp3tDWoUnnLZ+4d9nx3tQLJr7LDk63JiXDquQlNOwIgVa1C7VTQ0EIJMCoTNKBfqbpPo2THc16N2lqGOOJmuEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2222166},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.5.2.tgz","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.5.2.tgz","_integrity":"sha512-UbggRZLZIR5SwgnXrZ+zo5bYud60rv595H/D4nlNFYdQxS/QBFq/WUIb20doUOxytdMtzE4zkkD6IQXTrdjZpQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.5.2_1786974301055_0.7777735866446178","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"dsh-vision-router","version":"1.5.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.5.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"11ce712e207f3620c1bfea6b76bac6e4f288b2e4","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.5.3.tgz","fileCount":45,"integrity":"sha512-8l+mBWJUA18eUowzI9gdgSRIRLhN+eCoM1Ibp0zQdIN+PwyqThlgF6tQtNoItklovm19M2c5PKuxXe3+QLuhOw==","signatures":[{"sig":"MEUCIB9tU1043jxNm6pbn2zpG7YMwi9oVPSpqS5rD9RDZHRpAiEA1w7A+6CkFTlgHBsjhD1QmYUy6skqBQEqYKTLxAQg5X8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2231783},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.5.3.tgz","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.5.3.tgz","_integrity":"sha512-8l+mBWJUA18eUowzI9gdgSRIRLhN+eCoM1Ibp0zQdIN+PwyqThlgF6tQtNoItklovm19M2c5PKuxXe3+QLuhOw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.5.3_1786982176404_0.41229681846286326","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"dsh-vision-router","version":"1.6.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.6.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"6b6fad9ac9a3107df9fa1e19ff28cf674c5b9f49","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.6.0.tgz","fileCount":49,"integrity":"sha512-2mRBJ9qOI/cXzJsCKkWoYDZl2W/0CZ9hvct/jQpBHIw8tsQgJTR2goJ9emuSgO6EWp3fry4E22Rjl7UAAYCcAQ==","signatures":[{"sig":"MEUCIAvaVjbxonRDl//R97VdhvYPR4tECZ4cnhoMy056MzH5AiEA4oetJcZM87Dm+pT72mULCGm5ntI2mrhNvErL1lBUyXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2300098},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.6.0.tgz","engines":{"node":">=22"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.6.0.tgz","_integrity":"sha512-2mRBJ9qOI/cXzJsCKkWoYDZl2W/0CZ9hvct/jQpBHIw8tsQgJTR2goJ9emuSgO6EWp3fry4E22Rjl7UAAYCcAQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.6.0_1787046391225_0.82717948409501","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"dsh-vision-router","version":"1.6.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.6.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"70a4b495b937868016d7e215edab00edae1d2699","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.6.1.tgz","fileCount":53,"integrity":"sha512-XhY1IdGA8rvbwK55gi8ePzvWToyVXGoy0WzC4x5KVYaLPr1NCS3POwVUIXd4Hz/s4QWShL2T4Ms8tJu0XCOQNA==","signatures":[{"sig":"MEYCIQDUe26PMVn/9iFE7Ec9IgV9BGzDHzZNkUTxbINWVOPrWQIhAJUhG4Kf5smTSx1Zb8MDfHNHbh4pBkEKb49fkjl2po/W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2357844},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.6.1.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.6.1.tgz","_integrity":"sha512-XhY1IdGA8rvbwK55gi8ePzvWToyVXGoy0WzC4x5KVYaLPr1NCS3POwVUIXd4Hz/s4QWShL2T4Ms8tJu0XCOQNA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.6.1_1787064105703_0.5367554463456352","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"dsh-vision-router","version":"1.6.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.6.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"cc251fa862ef6676970f54127e809b29a437b00d","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.6.2.tgz","fileCount":59,"integrity":"sha512-UiRbbse/JbKzaR7KW9ZOPt4zBwpSNkBigesbI4liYxWEdSDm2KvyzvGOAnfLrHHtPMzMv8WnuPVOeZQQmn+aJg==","signatures":[{"sig":"MEUCICP519mZfvbfcsKTfduvhydXWc4dHs/xVAydgh2MiEozAiEAmbnlyMwUIz3AvPY5xYImev1goKBM5X2LP712sGoWJ6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2414179},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.6.2.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-resilience.test.js tests/client.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/runtime-boundary-fixes.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.6.2.tgz","_integrity":"sha512-UiRbbse/JbKzaR7KW9ZOPt4zBwpSNkBigesbI4liYxWEdSDm2KvyzvGOAnfLrHHtPMzMv8WnuPVOeZQQmn+aJg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.6.2_1787075129976_0.22946256405387744","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"dsh-vision-router","version":"1.7.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"619aa01996289de907289de7acde9905a9d0e76f","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.0.tgz","fileCount":78,"integrity":"sha512-HyElnUwZba6gMt2XvuxDPYi0drYrGps82zqaw884Vb/UYCs0ipL2TGPBlvD1X5Y6KXIdfGTlje4+ZZEl320sgA==","signatures":[{"sig":"MEYCIQDkJFaR7aedT8NzbE/Vm3PEPjqK+v+VC0mZKfJi5d4GtQIhAJ5gKU1MHjKJJnmHSci1AbkRYHMD0RNL5noFdtXvqXrJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2654844},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.0.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/vision-resilience.test.js tests/client.test.js tests/remote-settings-bridge.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.0.tgz","_integrity":"sha512-HyElnUwZba6gMt2XvuxDPYi0drYrGps82zqaw884Vb/UYCs0ipL2TGPBlvD1X5Y6KXIdfGTlje4+ZZEl320sgA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.0_1787149869203_0.0055273710695600275","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"dsh-vision-router","version":"1.7.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"0bd3f9a877463822c2ba597047d1961741589e0a","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.1.tgz","fileCount":79,"integrity":"sha512-VaW5lYMu430sLYKgr15RWUbU8DabTyOOuVjnXTYXMkbsFXh5Vih/kt51MufhIbmYCD9vl0S7yg2ffvya8kMT0g==","signatures":[{"sig":"MEYCIQC0iYrpufa81z0RKj9VANyV6Zyo2rftulFF1kizSF7wrgIhANl7oSZBZb+1EdcIzY7mBLvhAJCynDwPS43n/8M4qeeL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2666459},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.1.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/vision-resilience.test.js tests/client.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.1.tgz","_integrity":"sha512-VaW5lYMu430sLYKgr15RWUbU8DabTyOOuVjnXTYXMkbsFXh5Vih/kt51MufhIbmYCD9vl0S7yg2ffvya8kMT0g==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.1_1787155714689_0.9284177812568901","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"dsh-vision-router","version":"1.7.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"776ba9114c146e3b99c906983ad78f5cc0948957","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.3.tgz","fileCount":80,"integrity":"sha512-cWTjRMYJfvsf7uwxJ16OOoXboAcyyd9jAM10x7cEwSGOahVrngY8Srdy4sPul2og1uT32wbJRNU3ZjdN/zrMAg==","signatures":[{"sig":"MEQCICXBcW4lg070Scwaox3C3ANf6J+3VwVnxq81FBOPfAhMAiAosfNiIbjiT/q5jwxP5k6nAXrufB9VewqZ9rUH1ledhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2685476},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.3.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.3.tgz","_integrity":"sha512-cWTjRMYJfvsf7uwxJ16OOoXboAcyyd9jAM10x7cEwSGOahVrngY8Srdy4sPul2og1uT32wbJRNU3ZjdN/zrMAg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.3_1787204918261_0.7081380483694479","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"dsh-vision-router","version":"1.7.4","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.4","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"4873241c7dbc4e74e23246ddb1b6b1320d1a30b3","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.4.tgz","fileCount":84,"integrity":"sha512-ihqzGwq/tGPprZu4EcGRP0aNooB7u4kvg23JngvJdDWUTqEakmEBihsvIY9G26dsOFFtohCu22MdiPRttMD6cw==","signatures":[{"sig":"MEQCIAOZEc+E/sKsrwG1p4lTjgOfmVs992EH1uWjHWOG6H6pAiBksSlS5paBcriUl3rFt/GFHfOP2NOz97vPxmJeskBUFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2738851},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.4.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.4.tgz","_integrity":"sha512-ihqzGwq/tGPprZu4EcGRP0aNooB7u4kvg23JngvJdDWUTqEakmEBihsvIY9G26dsOFFtohCu22MdiPRttMD6cw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.4_1787291599705_0.06507917663406726","host":"s3://npm-registry-packages-npm-production"}},"1.7.5":{"name":"dsh-vision-router","version":"1.7.5","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.5","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"6e0fc98187fbb1f0f9e52c9efceebf6295f14636","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.5.tgz","fileCount":89,"integrity":"sha512-Vua7fD3ub//SNWCjKJ9Um8DXgbjjnENLaa9G4nlWFAGHyEQaS75T13KnEACXV7OOTujipZF9evPFy/3o7M7COg==","signatures":[{"sig":"MEUCIGJw3XP8v6RjRcTDBRYA/UrzgHns3H6qNeu89FM5jB2hAiEA0C3BsfLn6J8D1ViX6U7Eiw/UHtz3kQC3OZZ9fsvHqoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2836516},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.5.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/vision-backend-smoke-test.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.5.tgz","_integrity":"sha512-Vua7fD3ub//SNWCjKJ9Um8DXgbjjnENLaa9G4nlWFAGHyEQaS75T13KnEACXV7OOTujipZF9evPFy/3o7M7COg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.5_1787315619171_0.38436498953809983","host":"s3://npm-registry-packages-npm-production"}},"1.7.6":{"name":"dsh-vision-router","version":"1.7.6","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.6","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"a0f9dbe2031a4089f1bda8ff2809b7e242b7ab4e","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.6.tgz","fileCount":89,"integrity":"sha512-9X3MxjZCbqJkCcR2nHFc/oZXDuFnCpBUUJaTaIjAdIDC34XFUrj4gLWnT9N64qdyXKCwsKloRdBjYyR2zHiw6Q==","signatures":[{"sig":"MEUCIBStdekDcLjQ6Z+uRkG/pdfpB1mPn1OEOmiz9qrD86T2AiEAzkYMyzsvJTaJRluzAwWaFZVhrB64ESEFD15jQSptd4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2839784},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.6.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/vision-backend-smoke-test.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.6.tgz","_integrity":"sha512-9X3MxjZCbqJkCcR2nHFc/oZXDuFnCpBUUJaTaIjAdIDC34XFUrj4gLWnT9N64qdyXKCwsKloRdBjYyR2zHiw6Q==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.6_1787328667707_0.5343578094459152","host":"s3://npm-registry-packages-npm-production"}},"1.7.7":{"name":"dsh-vision-router","version":"1.7.7","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@1.7.7","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"b9057166e9ea2ac5aec9d1c7bade3fdfc9f6006a","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-1.7.7.tgz","fileCount":91,"integrity":"sha512-cV8TT7oKW6UcPESQj3HEXXYron74P4tHUYSckJM0QE6prj3UemMlQhCUmVLsiW5xSjRoHbnl3lOSRSkefuWgTQ==","signatures":[{"sig":"MEUCIHQjC5heURryoCgTxE9Wr790BFQsW01rHemxLiSoS/hIAiEAvSFCn15W6XFN5yUXyzs9rHJ9vvxM8iQh1eUiPmhvQyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@1.7.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2882170},"main":"entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-1.7.7.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/vision-backend-smoke-test.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/provider-directory-fallback.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js && node --test tests/vision-backend-runtime-policy.test.js tests/vision-smoke-verifier-regression.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-1.7.7.tgz","_integrity":"sha512-cV8TT7oKW6UcPESQj3HEXXYron74P4tHUYSckJM0QE6prj3UemMlQhCUmVLsiW5xSjRoHbnl3lOSRSkefuWgTQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_1.7.7_1787413162793_0.8275276683030808","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"dsh-vision-router","version":"2.0.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.0.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"bcd6239d11d3f0a9726ed913c5bc44c9f474606e","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.0.0.tgz","fileCount":127,"integrity":"sha512-GUwnqDqjz4qxEzi+4vmr4yJDgGgneLthlCIJ7oXkixkao5J0pU4XrwZfCEv4N7tQ/SgcCyVD1weZhnrTwMxFVg==","signatures":[{"sig":"MEUCIQD5shSCPuZX4fYC6gf7NsqAb6lVhbn+AATzJlbYOcvUNQIgM3+ybfj5xMULyJ3Xu9M0faIGWnwF75bBNdS+qPAvOSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3372303},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.0.0.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-breaker-readonly.test.js tests/client.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.0.0.tgz","_integrity":"sha512-GUwnqDqjz4qxEzi+4vmr4yJDgGgneLthlCIJ7oXkixkao5J0pU4XrwZfCEv4N7tQ/SgcCyVD1weZhnrTwMxFVg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.0.0_1787638957849_0.6439383338132503","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"dsh-vision-router","version":"2.0.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.0.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d1cb3824885e0dd7e34eafe55a80b9c5b55637ce","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.0.1.tgz","fileCount":132,"integrity":"sha512-3+9AFt1HAIxAal7D2Piw5x7ESbi4oICyuKq/5lnOS49QgDADafHWu1dHp4dZ0y00gZZ3BVXVyBsy1SiLj6gnBg==","signatures":[{"sig":"MEUCIQDqHVUu2GbRjOJvBvfNlUtnYTeTdggCbTK1yK9UXbYNIQIgDEWsCDV8F3F06loFpFQIAL3Kg6yAcjA5rgAckqeIohw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3396673},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.0.1.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-breaker-readonly.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.0.1.tgz","_integrity":"sha512-3+9AFt1HAIxAal7D2Piw5x7ESbi4oICyuKq/5lnOS49QgDADafHWu1dHp4dZ0y00gZZ3BVXVyBsy1SiLj6gnBg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.0.1_1787678916099_0.018732705014161244","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"dsh-vision-router","version":"2.1.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d090a681e4f3f64dcdfa7b73b1dbe007a832068b","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.0.tgz","fileCount":181,"integrity":"sha512-SOPR+hwYlQBAmm6TiCJKBz9VXA++tMRWY9VDXMVzTXIe0S+By6BnVXSwenVVuRpBrwJ5uintONW+XSdx6mqJaw==","signatures":[{"sig":"MEYCIQDB89mj4MIm+kRzbuOHwV7KHkfaOtU2xDAmNL3R1bgwUQIhAPLmOfKe7mmWFSxJR0pUUbggd7S6dei5des6pEKJcVT9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3675212},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.0.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.0.tgz","_integrity":"sha512-SOPR+hwYlQBAmm6TiCJKBz9VXA++tMRWY9VDXMVzTXIe0S+By6BnVXSwenVVuRpBrwJ5uintONW+XSdx6mqJaw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.0_1788357548321_0.4039346157386756","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"dsh-vision-router","version":"2.1.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"89a07238cef19758f1a4b48f98de2ee41a2af082","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.1.tgz","fileCount":184,"integrity":"sha512-2u3gFzx3SIpfVLta48Q1Bg+YfhkulonuEjALUfbxquC5qxMWlEtPyjmQ324P2zNoNriBR3p7iOu6KDTg2nOjNg==","signatures":[{"sig":"MEUCIQCcUaHFjIbJsFiUovt6QkU9uAphQOPQxx3RnjGPFfF67QIgH6uH3oPRrFohdFVRhA45EhOcNzHo4bxvEDWHGspjugA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3691004},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.1.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.1.tgz","_integrity":"sha512-2u3gFzx3SIpfVLta48Q1Bg+YfhkulonuEjALUfbxquC5qxMWlEtPyjmQ324P2zNoNriBR3p7iOu6KDTg2nOjNg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.1_1788435011642_0.5748429400318247","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"dsh-vision-router","version":"2.1.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"c30b8aa49496660c1be89d13f9531775db4788fc","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.2.tgz","fileCount":191,"integrity":"sha512-aaF8qaCD0FOq09OEEz+Q9QCdcW1iUw6PTNE4a+yWWSyD/W1Yw1PkqsyY/YJHHRnXTelJU9k0ExF+od8e/MunBw==","signatures":[{"sig":"MEQCIEftq21OXIWLrZQbXOpUQmAp/+NQYEwfqKyhBV0t4Sv2AiBCMQwLPUJx9fm95Ag4cdJXbcckH0AwofXTEuPDJuI1fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3756659},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.2.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.2.tgz","_integrity":"sha512-aaF8qaCD0FOq09OEEz+Q9QCdcW1iUw6PTNE4a+yWWSyD/W1Yw1PkqsyY/YJHHRnXTelJU9k0ExF+od8e/MunBw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.2_1788564689620_0.10088892294827057","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"dsh-vision-router","version":"2.1.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"7ba5383b3a5c97288f5b3650ed3f1bec2d84af0c","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.3.tgz","fileCount":192,"integrity":"sha512-fr066kX6f0QhEHZFiIsSRI18NVNFaRxY0VxeEdHTCvnodAsqRwyvtsGJgJFZLUmAKNV70m4rRXEGywcLXpo6ow==","signatures":[{"sig":"MEYCIQDPcfp9U4Q4jRpAGEGUyaWsfYbzQbv1FudrrajEvU3cbAIhAKOss/8SuW9GURErUtlDmiRwA2JbsYI/fW/zVbyF42aO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3786003},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.3.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.3.tgz","_integrity":"sha512-fr066kX6f0QhEHZFiIsSRI18NVNFaRxY0VxeEdHTCvnodAsqRwyvtsGJgJFZLUmAKNV70m4rRXEGywcLXpo6ow==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.3_1788757413096_0.5253196020929272","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"dsh-vision-router","version":"2.1.4","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.4","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"86ca6eac03b54b89453e9f470e9f262f6ed6b609","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.4.tgz","fileCount":195,"integrity":"sha512-DgbJ0BxwRu0c/JPLO7u8+KMt4oC2WJN96TPNTCP7yy7Klrz+5lrQLzaaRwGOUcaOursxe4Yyb6yi8spH/XakjA==","signatures":[{"sig":"MEQCIAf8/nYZd2gyIdXPJTQw0ezBYX6QQo+Mfsbi0w4oVt5QAiBZCeDnN7BA5HeeQ/ZK56OfrzZfcOiVlld+GQV07FTd3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3817879},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.4.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.4.tgz","_integrity":"sha512-DgbJ0BxwRu0c/JPLO7u8+KMt4oC2WJN96TPNTCP7yy7Klrz+5lrQLzaaRwGOUcaOursxe4Yyb6yi8spH/XakjA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.3","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.4_1788866754902_0.8247389365699445","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"dsh-vision-router","version":"2.1.5","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.5","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"7fd465e5edc8c4bdb3662a2204091cf10768d148","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.5.tgz","fileCount":198,"integrity":"sha512-JAMpdXZ5PKJ4YnRyhOKSpuL7VP0qKLSv22YqII3kpRenlwbat5MXE0xFAWp3dUHoiBigBf3WpmBkhvWb4PL3Pw==","signatures":[{"sig":"MEQCIHyQipBPc4S/64cHLj0RH+zOxsdE2yoOR5XSIN9uRE8qAiAz5G5LEco7tf2MQWiNSQWEC8kLVYMUAUt7setuPzuC5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3837626},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.5.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.5.tgz","_integrity":"sha512-JAMpdXZ5PKJ4YnRyhOKSpuL7VP0qKLSv22YqII3kpRenlwbat5MXE0xFAWp3dUHoiBigBf3WpmBkhvWb4PL3Pw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.5_1789016527933_0.4958120124773866","host":"s3://npm-registry-packages-npm-production"}},"2.1.6":{"name":"dsh-vision-router","version":"2.1.6","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.6","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"4cc3bc44a569aa22064e6935727753a8af95b435","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.6.tgz","fileCount":203,"integrity":"sha512-kB7EJy5+bVFOw/eYDA/AfkshSu6aNm31e7GA2Jo3s49bXwzZpKqQAeBNoIOomCUZoLN4bHPXwIUZYlXJAKc3AA==","signatures":[{"sig":"MEUCIQD7sttmue+GX2LSPZV/hYWdX+7NtVINldma1z3vxSpfQAIgPM/9O0nncyIy4XNvQUkLRQlbv90dcbPiQcHflpUWx0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3866705},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.6.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.6.tgz","_integrity":"sha512-kB7EJy5+bVFOw/eYDA/AfkshSu6aNm31e7GA2Jo3s49bXwzZpKqQAeBNoIOomCUZoLN4bHPXwIUZYlXJAKc3AA==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.6_1789139773591_0.5555596265362772","host":"s3://npm-registry-packages-npm-production"}},"2.1.7":{"name":"dsh-vision-router","version":"2.1.7","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.1.7","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"62db8b140c2a92e6cbad2587f797afcffbdde0c1","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.1.7.tgz","fileCount":204,"integrity":"sha512-f5mew64P/uGPfcpdI2SBLCEphr7ib4QVliXH5RsFPTclw0ziQRBEy2k7v2qUzgtJTy074S8bjSuZZ5U96j51BQ==","signatures":[{"sig":"MEUCIQC0+nNdTYDofZnHHatesCmX0/SyocJlCjDIebbqZonZ5wIgWnMkyL9Xwcns0kUZOtjSN4ZcQUZf7/d3XVNAi5z8B/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3900918},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.1.7.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.1.7.tgz","_integrity":"sha512-f5mew64P/uGPfcpdI2SBLCEphr7ib4QVliXH5RsFPTclw0ziQRBEy2k7v2qUzgtJTy074S8bjSuZZ5U96j51BQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.1.7_1789376256146_0.509744301125665","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"dsh-vision-router","version":"2.2.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"bac0e5a4e3f1df12abbbed75e8aa78cedc4c690d","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.0.tgz","fileCount":211,"integrity":"sha512-LBEP1B43CLxHmH+EoQ9Dr7Y1CldumHESYBe4f7U+lC5JQbjH2bRfyFRagVmEKyNaBFdnVGtpS+6TLJwlps5Ahw==","signatures":[{"sig":"MEQCIEGGJP+pA94QekCA70QVZUuUS90H1RDUhAeHHPqBO4m1AiA4LuO1p49VGQzaK/NV6791pa++BKvLuXoVubLxDfjmuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCS9NvIqMj2DuKst/AY3yURe9K8moKfh1JIv5ymep70YgIhAO3tpzZgcuX0XnKnNOWPyEK9CfndA3tASqnXZOD9SzXB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3960785},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.0.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.0.tgz","_integrity":"sha512-LBEP1B43CLxHmH+EoQ9Dr7Y1CldumHESYBe4f7U+lC5JQbjH2bRfyFRagVmEKyNaBFdnVGtpS+6TLJwlps5Ahw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.0_1789746690391_0.15692845359123408","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"dsh-vision-router","version":"2.2.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d03ba1e119cf200b3565887b6cc14907d2a2e1ac","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.1.tgz","fileCount":213,"integrity":"sha512-T5dKXnp4y0e6srcUJqjQLGRuHY9Yy5GUkk4eqeSHiFJ0wVj+ML/5RKCbNf8x1t//OLLJ+6EmuUHjGtfOjocj2Q==","signatures":[{"sig":"MEUCIQDGq+ESx0XY+UplEWvMqn/G+SvggWcqGDVvnEXuKc5MJgIgOTPbrPdbyd3pATOSEreqkEd/lT1pALOtx0v/9meDN5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCWa8hssWH/D07PRtn4xDQEtsDy9zHbsWkKeuBgPkmBlQIgdr76rt5barbjYYdsgd2VtE2mxbLd+6gLsLA8I3E6NRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3977050},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.1.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.1.tgz","_integrity":"sha512-T5dKXnp4y0e6srcUJqjQLGRuHY9Yy5GUkk4eqeSHiFJ0wVj+ML/5RKCbNf8x1t//OLLJ+6EmuUHjGtfOjocj2Q==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.1_1790140256827_0.2839169068207996","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"dsh-vision-router","version":"2.2.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"f4f8f6694e05876db6901b8bf0550babeb81398b","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.2.tgz","fileCount":218,"integrity":"sha512-TKjmgE+DnXVL7zg/G0VdE6IKc8z9gKZmsARqRm/vqH7KHvDF8lYCTaZhuDdvmvxALNXkQY+/Nog95BQdK3LPYg==","signatures":[{"sig":"MEUCIQDgAnB2d6Pmh+XMJSZ2eTnJj4kxoSf35VX+sIhLht4qiAIgbynKByajC6bxxyUdk201wS5J9DPy4Y/ctdICF1Kw7uE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB9KnCppUhWcUXV8UaJlhlg2QuK851U7pXJ+37VNgKCCAiEA0DUX7YWUPElqN1Vc5btAoo3GE5/OWJ/6resYg0f7zfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4034109},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.2.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.2.tgz","_integrity":"sha512-TKjmgE+DnXVL7zg/G0VdE6IKc8z9gKZmsARqRm/vqH7KHvDF8lYCTaZhuDdvmvxALNXkQY+/Nog95BQdK3LPYg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.2_1790267293221_0.33450817460620264","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"dsh-vision-router","version":"2.2.3","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.3","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d4b12e518e98965d80fb84833b22df89d77eddb1","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.3.tgz","fileCount":219,"integrity":"sha512-UIlTTRNDQ8wnE3UrDCRb6ur0DfUncxTUL/qfpxp3Z5Rs87FC9z63YLYU1Ar2z2r7q6AzQVik3+iHAeMjcCcCdw==","signatures":[{"sig":"MEUCIHNBAr6BARL8Td4G9h5bJD3O6f6fjbKXnTjhkaaGJujzAiEAzh1oFx8d7zsfJ90Qc8Z8uS0MYfzhJeScyXEmvAqVKL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHGZMmL8Ha6ZLbY52fhybeTGl+lX3qLjUMgtlghdDy6OAiAYOlNQHXIylyjfJjku5bjMoKL9aezVGSq4ZC0tUQetjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4055277},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.3.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.3.tgz","_integrity":"sha512-UIlTTRNDQ8wnE3UrDCRb6ur0DfUncxTUL/qfpxp3Z5Rs87FC9z63YLYU1Ar2z2r7q6AzQVik3+iHAeMjcCcCdw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.3_1790355688495_0.8230499833042595","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"dsh-vision-router","version":"2.2.4","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.4","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"1924f51889023e07eb6e0000985b0828197e0da3","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.4.tgz","fileCount":220,"integrity":"sha512-fEsI1urk6ql+96OhZblcBe7D5+RF+va2EiSB31gNEXg5xRXB7uLo3pmJvwzJiTVSmrAfrttiomVbr44uxdI5Yg==","signatures":[{"sig":"MEYCIQCXfea3q09X2q6gsKocRoARIDCZrU/M/a7m36jHwj1EBwIhANSneGkzeGISXCkzVdCwAfUW4O3gpxUihOEkUYqtAvZH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCVMBzZcfarBhTrM4kPJi7xXejlWbXTubU28PciyNfkWQIhALG4yV3mfcNZkyTAXFfnMztBAieR4h0RZO8UxhH8gbXW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4058621},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.4.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.4.tgz","_integrity":"sha512-fEsI1urk6ql+96OhZblcBe7D5+RF+va2EiSB31gNEXg5xRXB7uLo3pmJvwzJiTVSmrAfrttiomVbr44uxdI5Yg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.4_1790417775205_0.9629804568185589","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"dsh-vision-router","version":"2.2.5","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.5","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"c3b4727e7ce07e7a7cc544fe08755d4f6890c496","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.5.tgz","fileCount":221,"integrity":"sha512-L9C/gtdwd9ERXVaxVYXQDphc8RuH5LulHS5u30qj0b5MLGoY6PRbwyLIdKHX5800S1vDgltp16ZblirUwbsrzQ==","signatures":[{"sig":"MEUCIQDPqJ0tGNi2O1JIeiDiZpTHlD7tYJz2LMQz5ls57uHGpwIgceKd6LBqmiRwzkRsl2dMdOdRGLXsi+zq6ooZDspYcrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCMPTZm5t1aXULINJtJarqNn+4mVCLFHx36FJkTNnRMvAIgYGPhBsyTqKZtXaer3vKBevcBJVS96dlYfUXctZZuoWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4075362},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.5.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.5.tgz","_integrity":"sha512-L9C/gtdwd9ERXVaxVYXQDphc8RuH5LulHS5u30qj0b5MLGoY6PRbwyLIdKHX5800S1vDgltp16ZblirUwbsrzQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.5_1790525912799_0.03093869974147445","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"dsh-vision-router","version":"2.2.6","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.6","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"75d4566df1cf032aa5b2acb5edab95b59fe080e1","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.6.tgz","fileCount":222,"integrity":"sha512-BICe08os2N4vKqD94lp0ac81T2cQz0rlHDXtng8/sHMR4NcL+f1KA3DHyWtJwdmWRRc/HEoCGlQRaWoMyS7oMQ==","signatures":[{"sig":"MEQCICVjNTOy4LuFld6Dr77c5YF6patLfGQDXDKOZBirJZXXAiBfc0jkcbKJOqnRuVW2+LFPsO93wQMQXo/eUb+0ErBNCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCSeHZ+TKYA45+CYaTqffWlc0W7Rm+gQsI6KDtYPGYpNAIgMSV63oRR6q5pBxr8gcVnfDg+HWKmX7lZ7Jka2idSwc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4083516},"main":"lib/public-entry.js","pnpm":{"onlyBuiltDependencies":["sharp"]},"type":"module","_from":"file:dsh-vision-router-2.2.6.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.6.tgz","_integrity":"sha512-BICe08os2N4vKqD94lp0ac81T2cQz0rlHDXtng8/sHMR4NcL+f1KA3DHyWtJwdmWRRc/HEoCGlQRaWoMyS7oMQ==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.6_1790612258554_0.33068543038864284","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"dsh-vision-router","version":"2.2.7","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.7","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"7f6aef4fc0887af0d8a2176c039597c2dea956a6","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.7.tgz","fileCount":223,"integrity":"sha512-ROP69raxPfJ5Bg2lLcDomV59c5405O2lPSd2q4AAvX+HtjkyiM+lVQgpBJ3sXPOmsG784PI+ae9InCxz/waDvw==","signatures":[{"sig":"MEUCIQDSSMuwPzQS6rtVSu6JLF7bOuPH1gLyXwOiTGcbfbJxXwIgQkIU7PLIi9Q4VnXCBinqO1+Ua+Ebu2szQhDquQY692U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDAf2uZJ2//F30ZsMRKKjdCZo8fOvQEG6DSt4eznrlF+gIgYcuaPdaTbuZuzWW354mrlehwGuDVyH0Qr4z+evpc9es=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4090423},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-2.2.7.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.7.tgz","_integrity":"sha512-ROP69raxPfJ5Bg2lLcDomV59c5405O2lPSd2q4AAvX+HtjkyiM+lVQgpBJ3sXPOmsG784PI+ae9InCxz/waDvw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.7_1790646139580_0.3697195971245457","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"dsh-vision-router","version":"2.2.8","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.2.8","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"e77f0a3bd61075f0c417349c9309e90793a426be","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.2.8.tgz","fileCount":226,"integrity":"sha512-tELPw9d0WvMF6n3lPrBTbmgn/qERCXmnpaTVrdiHQvxl/Hj6Y1Qs2OU29m3MCDUi3LYlViBurLlUUzdz5iRq4Q==","signatures":[{"sig":"MEQCIEiFZbYhvvioj1Sa6r+7k0+Q7jIuoUgrKlLsG7y9B8VuAiBHuBcTJEFs/CymKB7JIieCSzlMEKHjNzMr9ZDEXskOIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEyw5Jr8FgxN1OnclQEU0q5EwR9EEuzqPo5COKN7GwlyAiB+2BIZHyQy6XMgl6Z9a00mXhHn6aQQSI7NWyWKEsU5dQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4103027},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-2.2.8.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/rc6-real-settings-persistence.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/android-attachment-compat.test.js tests/free-cloud-first.test.js tests/rc6-rc7-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/rc6-rc7-compat.test.js tests/rc6-real-settings-persistence.test.js tests/android-attachment-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/rc6-rc7-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.2.8.tgz","_integrity":"sha512-tELPw9d0WvMF6n3lPrBTbmgn/qERCXmnpaTVrdiHQvxl/Hj6Y1Qs2OU29m3MCDUi3LYlViBurLlUUzdz5iRq4Q==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.6","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.6"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":"^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-alpha.2 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.6-alpha.1 || 0.1.7-rc.2 || >=0.2.0-rc.1 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.2.8_1790686157173_0.8401973526421005","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"dsh-vision-router","version":"2.3.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@2.3.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"500d2f14fef0ec60a5ac977a36e543f9b84838da","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-2.3.0.tgz","fileCount":237,"integrity":"sha512-NxBQufWZ5NZeWZQpgOUZW0e9DfyOlufgV7DyDr57hfp9HHRhAALWQc/3TNaA2IZqLnSZ4/i1PvIyml3kUUV8gg==","signatures":[{"sig":"MEQCIA04cbC21mkfJyru8oriuk553cF6biXESaDTq6anSz0dAiAZRLe5EtRgxLOJj3dI/hbgRlramA3pnom2v1lRfXvRLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHA7Z1PW4zETqSLQw8HkTkwQx3F4oN7gI7EBX1kGuAAiAiAwnVAM127Vcorr1fcvXtK8ALuT+HOwdKmXBWsFpl4cxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4194018},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-2.3.0.tgz","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":"./lib/public-entry.js","./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/architecture-2.3-gate.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && node --test tests/vision-backend-runtime-policy.test.js","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","client:sync":"node scripts/sync-client-embedded-modules.mjs","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","client:check":"node scripts/sync-client-embedded-modules.mjs --check","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/dsh-host-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","quality:round2:template":"node quality/vision-round2/make-run-template.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-2.3.0.tgz","_integrity":"sha512-NxBQufWZ5NZeWZQpgOUZW0e9DfyOlufgV7DyDr57hfp9HHRhAALWQc/3TNaA2IZqLnSZ4/i1PvIyml3kUUV8gg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","@deepseek-ai/dsh-llm-deepseek":"0.2.0-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.0-rc.2"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_2.3.0_1790825279689_0.502477586570993","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"dsh-vision-router","version":"3.0.0","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@3.0.0","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"d6cdf12572fcb0575fdc7bf37f0ecc96553464f4","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-3.0.0.tgz","fileCount":265,"integrity":"sha512-mki6af8cKAU0LmPpnR4897GroZ2e9tcFTJwt8dGwBUpZBzvYE12A0Dj0SHkWRReTTL45TTwJoyiSeo8wDseKuw==","signatures":[{"sig":"MEUCIQD/xSDq53ApPWxuVuRCmd5Y4bU0/Pp+W/3t5uEe0ALq0gIgKHdj0nJn1hpaxTEHDEleQYMM7RsMZsINl2mKRTFxQ0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBj52nutEEOpUFwrVExzJ21r0gSpSoe8lkJpQVdn4YNBAiEA1sfNIRPSSZeykLNv5fvtqGbQwl9PhksVZyxkGkQvmf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4388875},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-3.0.0.tgz","types":"lib/public-entry.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/public-entry.d.ts","default":"./lib/public-entry.js"},"./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"lint":"node scripts/lint-source-ownership.mjs && node scripts/lint-lifecycle-invariants.mjs","test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/architecture-2.3-gate.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js","build":"node scripts/build-source-artifacts.mjs","prepack":"pnpm build","prepare":"pnpm build","pretest":"pnpm build","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","typecheck":"pnpm typecheck:host && pnpm typecheck:client && pnpm typecheck:declaration","build:check":"node scripts/build-source-artifacts.mjs --check","client:sync":"node scripts/sync-client-embedded-modules.mjs && pnpm build","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","client:check":"node scripts/sync-client-embedded-modules.mjs --check && pnpm build:check","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-policy.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/session-vision-policy-domain.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/dsh-host-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","typecheck:host":"tsc -p tsconfig.host.json","typecheck:client":"tsc -p tsconfig.client.json","build:reproducible":"node scripts/verify-build-reproducibility.mjs","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","source:artifact:check":"node scripts/verify-source-artifact-map.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","typecheck:declaration":"tsc -p tsconfig.declaration.json","quality:round2:template":"node quality/vision-round2/make-run-template.mjs","test:regression-closure":"node --test tests/auto-wrap-model-removal.test.js tests/guard-stop-surface-shadow.test.js tests/release-package-content-identity.test.js tests/settings-card-race-safety.test.js tests/settings-guide-replay-safety.test.js tests/settings-ia-targeted-adversarial.test.js tests/v2-release-acceptance-regressions.test.js tests/vision-turn-budget-client-prelude.test.js tests/wrapper-scope-client-prelude.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-3.0.0.tgz","_integrity":"sha512-mki6af8cKAU0LmPpnR4897GroZ2e9tcFTJwt8dGwBUpZBzvYE12A0Dj0SHkWRReTTL45TTwJoyiSeo8wDseKuw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","typescript":"6.0.3","@types/node":"22.20.0","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-attachment":"0.2.0-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.0-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.0-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.0-rc.2"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-storage-domain":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-storage-domain":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_3.0.0_1790952837882_0.5020609820018413","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"dsh-vision-router","version":"3.0.1","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@3.0.1","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"dd8ae4c5a51255c13938da8ccd61a29af02c9e99","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-3.0.1.tgz","fileCount":266,"integrity":"sha512-VkDtG8C6Ml/ceKox+wnt9N/y5xwt9NEFPSBC5ddUBgLC/W9Uwim2Ljs0s6hjM0mA0smrRAmpAhrpxcDPVqdh8g==","signatures":[{"sig":"MEYCIQCbI9ShdX4bDNlyJQBjSLDTc8unomCKzLvkM4rLbGsBKwIhANWPCEfSPeYpXmBkTKDqNbu3vxNVDf4V6dcOfYzQEQAc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBEisBn5HNwlRpKp9vpWPS3Aj/LZIpAT+uSYzEFYIMnsAiEAjt2pZPNg4p4ThsBVaxaOYrZ2qPTUmEdnO95RTy1vY9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4396991},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-3.0.1.tgz","types":"lib/public-entry.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/public-entry.d.ts","default":"./lib/public-entry.js"},"./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"lint":"node scripts/lint-source-ownership.mjs && node scripts/lint-lifecycle-invariants.mjs","test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/architecture-2.3-gate.test.js tests/host-settings-seam.test.js tests/drift-canary-settings-seam.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js","build":"node scripts/build-source-artifacts.mjs","prepack":"pnpm build","prepare":"pnpm build","pretest":"pnpm build","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","typecheck":"pnpm typecheck:host && pnpm typecheck:client && pnpm typecheck:declaration","build:check":"node scripts/build-source-artifacts.mjs --check","client:sync":"node scripts/sync-client-embedded-modules.mjs && pnpm build","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","client:check":"node scripts/sync-client-embedded-modules.mjs --check && pnpm build:check","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-policy.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/session-vision-policy-domain.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/dsh-host-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","typecheck:host":"tsc -p tsconfig.host.json","typecheck:client":"tsc -p tsconfig.client.json","build:reproducible":"node scripts/verify-build-reproducibility.mjs","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","source:artifact:check":"node scripts/verify-source-artifact-map.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","typecheck:declaration":"tsc -p tsconfig.declaration.json","quality:round2:template":"node quality/vision-round2/make-run-template.mjs","test:regression-closure":"node --test tests/auto-wrap-model-removal.test.js tests/guard-stop-surface-shadow.test.js tests/release-package-content-identity.test.js tests/settings-card-race-safety.test.js tests/settings-guide-replay-safety.test.js tests/settings-ia-targeted-adversarial.test.js tests/v2-release-acceptance-regressions.test.js tests/vision-turn-budget-client-prelude.test.js tests/wrapper-scope-client-prelude.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-3.0.1.tgz","_integrity":"sha512-VkDtG8C6Ml/ceKox+wnt9N/y5xwt9NEFPSBC5ddUBgLC/W9Uwim2Ljs0s6hjM0mA0smrRAmpAhrpxcDPVqdh8g==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","typescript":"6.0.3","@types/node":"22.20.0","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-attachment":"0.2.0-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.0-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.0-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.0-rc.2"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-storage-domain":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-storage-domain":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_3.0.1_1791022891540_0.2114088870366444","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"dsh-vision-router","version":"3.0.2","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"license":"MIT","_id":"dsh-vision-router@3.0.2","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"homepage":"https://github.com/ysr666/dsh-vision-router","bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"6d6474b96bcac30de9c5332ceac8ddd6996e8744","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-3.0.2.tgz","fileCount":270,"integrity":"sha512-xOrwDaoJfABD3GsodobX5TU9oknMEsUYlfdUdJ7h9qKXiJa50Hg9UDyfd1N8SR/1kBndtTeVY2dAKjjil6WDkw==","signatures":[{"sig":"MEUCIA4SpnFvbsYmhBpjbAx3bFse0SZgSvJUcIKTzZXZ1VBgAiEA/sqGAcjtgi3czYlZFnQWVZp9gO+BqL96iRHhEWpZ4/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICvA1d0PhkpM64sb+hSFxSAgwDwbJd8TdQZtASpMIrv8AiA1RGTadNbJJ+/q2+5nah5rwMBj7tOluS5IUlLQn4ClXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4430111},"main":"lib/public-entry.js","type":"module","_from":"file:dsh-vision-router-3.0.2.tgz","types":"lib/public-entry.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/public-entry.d.ts","default":"./lib/public-entry.js"},"./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"lint":"node scripts/lint-source-ownership.mjs && node scripts/lint-lifecycle-invariants.mjs","test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/provider-transport-threading.test.js tests/architecture-2.3-gate.test.js tests/host-settings-seam.test.js tests/drift-canary-settings-seam.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js tests/vision-router-adversarial-review-fixes.test.js tests/web-panel-delegation.test.js","build":"node scripts/build-source-artifacts.mjs","prepack":"pnpm build","prepare":"pnpm build","pretest":"pnpm build","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","typecheck":"pnpm typecheck:host && pnpm typecheck:client && pnpm typecheck:declaration","build:check":"node scripts/build-source-artifacts.mjs --check","client:sync":"node scripts/sync-client-embedded-modules.mjs && pnpm build","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","client:check":"node scripts/sync-client-embedded-modules.mjs --check && pnpm build:check","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-policy.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/session-vision-policy-domain.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/dsh-host-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","typecheck:host":"tsc -p tsconfig.host.json","typecheck:client":"tsc -p tsconfig.client.json","build:reproducible":"node scripts/verify-build-reproducibility.mjs","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","source:artifact:check":"node scripts/verify-source-artifact-map.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","typecheck:declaration":"tsc -p tsconfig.declaration.json","quality:round2:template":"node quality/vision-round2/make-run-template.mjs","test:regression-closure":"node --test tests/auto-wrap-model-removal.test.js tests/guard-stop-surface-shadow.test.js tests/release-package-content-identity.test.js tests/settings-card-race-safety.test.js tests/settings-guide-replay-safety.test.js tests/settings-ia-targeted-adversarial.test.js tests/v2-release-acceptance-regressions.test.js tests/vision-turn-budget-client-prelude.test.js tests/wrapper-scope-client-prelude.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-3.0.2.tgz","_integrity":"sha512-xOrwDaoJfABD3GsodobX5TU9oknMEsUYlfdUdJ7h9qKXiJa50Hg9UDyfd1N8SR/1kBndtTeVY2dAKjjil6WDkw==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","typescript":"6.0.3","@types/node":"22.20.0","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-attachment":"0.2.0-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.0-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.0-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.0-rc.2"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-storage-domain":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-storage-domain":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-vision-router_3.0.2_1791200282075_0.4469534508783939","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"_id":"dsh-vision-router@3.0.3","bin":{"dsh-vision-router":"lib/doctor-cli-p0.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"dist":{"shasum":"bae02e9ecac1cc1be0fdd5765ee849b5669955d7","tarball":"https://registry.npmjs.org/dsh-vision-router/-/dsh-vision-router-3.0.3.tgz","fileCount":271,"integrity":"sha512-MfFThX4xXfh5cK2bKD06ku2RHzuhdrntmWcbHH8EeqdomGZeeKnXB19EGNzXhBuKIe3HyqPqadJsnQPEXFlzrg==","signatures":[{"sig":"MEUCIC5Utt1ywee9WLI9f+jHBo8XqzWtQL7JLF96dw7VxbVZAiEAwbOYM2/vwAWyRgKW2bR2tHIqYz+EwF1zmVI7a0FC5zE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCwQDWa9IrzzOquih/aHzflIAaRMmykGKcAqEItwVkEEgIgavl9qeITG2NKKABUZLBDqU9nOzLQEWAdxXETGSkELJw="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/dsh-vision-router@3.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4434203},"main":"lib/public-entry.js","name":"dsh-vision-router","type":"module","_from":"file:dsh-vision-router-3.0.3.tgz","types":"lib/public-entry.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/public-entry.d.ts","default":"./lib/public-entry.js"},"./client":"./lib/client.js","./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"license":"MIT","scripts":{"lint":"node scripts/lint-source-ownership.mjs && node scripts/lint-lifecycle-invariants.mjs","test":"node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/provider-transport-threading.test.js tests/architecture-2.3-gate.test.js tests/host-settings-seam.test.js tests/drift-canary-settings-seam.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js tests/vision-router-adversarial-review-fixes.test.js tests/web-panel-delegation.test.js","build":"node scripts/build-source-artifacts.mjs","prepack":"pnpm build","prepare":"pnpm build","pretest":"pnpm build","test:web":"node --test tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-acceptance-regression.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/local-remote-settings-permission.test.js tests/v2-settings-ia-integration.test.js tests/logging-ui.test.js","test:core":"node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js","typecheck":"pnpm typecheck:host && pnpm typecheck:client && pnpm typecheck:declaration","build:check":"node scripts/build-source-artifacts.mjs --check","client:sync":"node scripts/sync-client-embedded-modules.mjs && pnpm build","test:compat":"node --test tests/adapter-prepare-call-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-compat.test.js tests/http-compat.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/native-image-coexistence.test.js tests/tesseract-node24-boot.test.js tests/dsh-host-capabilities.test.js","test:stress":"node scripts/image-resource-stress.mjs && node --test tests/large-image-resource-integration.test.js tests/resource-retention-lifecycle.test.js","client:check":"node scripts/sync-client-embedded-modules.mjs --check && pnpm build:check","test:quality":"node --test tests/vision-quality-round2-baseline.test.js","test:routing":"node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js","test:session":"node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-policy.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/session-vision-policy-domain.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js","test:contract":"node --test tests/manifest-dependencies.test.js tests/bundle-defaults.test.js tests/zero-regression-gate.test.js tests/issue-289-native-nonintervention.test.js tests/issue-374-delegated-call-config.test.js tests/runtime-boundary-fixes.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/adapter-prepare-call-compat.test.js tests/dsh-host-compat.test.js tests/attachment-admission-policy.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js","test:grounding":"node --test tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/vision-capability-grounding-proof-contract.test.js","test:resources":"node --test tests/artifact-path-security.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js","typecheck:host":"tsc -p tsconfig.host.json","typecheck:client":"tsc -p tsconfig.client.json","build:reproducible":"node scripts/verify-build-reproducibility.mjs","quality:round2:run":"node quality/vision-round2/run-host-api.mjs","test:property-fuzz":"node --test tests/security-property-fuzz.test.js","quality:round2:render":"node quality/vision-round2/render-fixtures.mjs","quality:round2:report":"node quality/vision-round2/report-results.mjs","source:artifact:check":"node scripts/verify-source-artifact-map.mjs","test:adversarial-fuzz":"node scripts/security-adversarial-fuzz.mjs","typecheck:declaration":"tsc -p tsconfig.declaration.json","quality:round2:template":"node quality/vision-round2/make-run-template.mjs","test:regression-closure":"node --test tests/auto-wrap-model-removal.test.js tests/guard-stop-surface-shadow.test.js tests/release-package-content-identity.test.js tests/settings-card-race-safety.test.js tests/settings-guide-replay-safety.test.js tests/settings-ia-targeted-adversarial.test.js tests/v2-release-acceptance-regressions.test.js tests/vision-turn-budget-client-prelude.test.js tests/wrapper-scope-client-prelude.test.js"},"version":"3.0.3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"6a4d7157-1b0f-41ef-a194-5d66fee50f53"}},"homepage":"https://github.com/ysr666/dsh-vision-router","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"_resolved":"/home/runner/work/dsh-vision-router/dsh-vision-router/dsh-vision-router-3.0.3.tgz","_integrity":"sha512-MfFThX4xXfh5cK2bKD06ku2RHzuhdrntmWcbHH8EeqdomGZeeKnXB19EGNzXhBuKIe3HyqPqadJsnQPEXFlzrg==","repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"_npmVersion":"11.18.0","description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","directories":{},"maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","undici":"^7.29.0","potrace":"^2.1.8","puppeteer-core":"^25.6.0","@deepseek-ai/schemastery":">=3.18.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"sharp":"^0.35.4","fast-check":"4.10.0","typescript":"6.0.3","@types/node":"22.20.0","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-attachment":"0.2.0-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.0-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.0-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.0-rc.2"},"peerDependencies":{"sharp":">=0.35.3 <1","@deepseek-ai/dsh-llm-deepseek":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-storage-domain":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0","@deepseek-ai/dsh-anonymous-user-id":">=0.1.5-rc.1 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0"},"peerDependenciesMeta":{"sharp":{"optional":true},"@deepseek-ai/dsh-llm-deepseek":{"optional":true},"@deepseek-ai/dsh-storage-domain":{"optional":true},"@deepseek-ai/dsh-anonymous-user-id":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-vision-router_3.0.3_1791357367369_0.3745377460701562"}}},"time":{"created":"2026-08-14T15:47:58.090Z","modified":"2026-10-07T07:16:07.920Z","1.0.0":"2026-08-14T15:47:58.300Z","1.0.1":"2026-08-14T17:04:21.058Z","1.1.0":"2026-08-14T19:06:15.299Z","1.1.1":"2026-08-15T05:12:52.347Z","1.2.0":"2026-08-15T10:35:54.113Z","1.2.1":"2026-08-15T16:22:42.077Z","1.2.2":"2026-08-15T19:13:44.714Z","1.2.3":"2026-08-16T02:01:38.174Z","1.3.0":"2026-08-16T06:55:35.713Z","1.4.0":"2026-08-16T10:09:42.895Z","1.4.1":"2026-08-16T14:01:31.031Z","1.4.2":"2026-08-16T16:06:22.802Z","1.4.3":"2026-08-16T18:44:43.818Z","1.4.4":"2026-08-16T19:39:24.486Z","1.4.5":"2026-08-17T06:59:23.373Z","1.5.0":"2026-08-17T10:14:00.010Z","1.5.1":"2026-08-17T12:29:52.802Z","1.5.2":"2026-08-17T13:45:01.237Z","1.5.3":"2026-08-17T15:56:16.601Z","1.6.0":"2026-08-18T09:46:31.382Z","1.6.1":"2026-08-18T14:41:45.887Z","1.6.2":"2026-08-18T17:45:30.153Z","1.7.0":"2026-08-19T14:31:09.365Z","1.7.1":"2026-08-19T16:08:34.995Z","1.7.3":"2026-08-20T05:48:38.555Z","1.7.4":"2026-08-21T05:53:19.899Z","1.7.5":"2026-08-21T12:33:39.356Z","1.7.6":"2026-08-21T16:11:07.926Z","1.7.7":"2026-08-22T15:39:23.045Z","2.0.0":"2026-08-25T06:22:38.064Z","2.0.1":"2026-08-25T17:28:36.322Z","2.1.0":"2026-09-02T13:59:08.489Z","2.1.1":"2026-09-03T11:30:11.804Z","2.1.2":"2026-09-04T23:31:29.864Z","2.1.3":"2026-09-07T05:03:33.265Z","2.1.4":"2026-09-08T11:25:55.091Z","2.1.5":"2026-09-10T05:02:08.185Z","2.1.6":"2026-09-11T15:16:13.785Z","2.1.7":"2026-09-14T08:57:36.321Z","2.2.0":"2026-09-18T15:51:30.506Z","2.2.1":"2026-09-23T05:10:56.978Z","2.2.2":"2026-09-24T16:28:13.373Z","2.2.3":"2026-09-25T17:01:28.608Z","2.2.4":"2026-09-26T10:16:15.340Z","2.2.5":"2026-09-27T16:18:32.910Z","2.2.6":"2026-09-28T16:17:38.751Z","2.2.7":"2026-09-29T01:42:19.716Z","2.2.8":"2026-09-29T12:49:17.358Z","2.3.0":"2026-10-01T03:27:59.878Z","3.0.0":"2026-10-02T14:53:58.103Z","3.0.1":"2026-10-03T10:21:31.699Z","3.0.2":"2026-10-05T11:38:02.239Z","3.0.3":"2026-10-07T07:16:07.571Z"},"bugs":{"url":"https://github.com/ysr666/dsh-vision-router/issues"},"license":"MIT","homepage":"https://github.com/ysr666/dsh-vision-router","keywords":["deepseek-harness","dsh","vision","vision-tools","multimodal","openrouter","image","ocr","screenshot","plugin"],"repository":{"url":"git+https://github.com/ysr666/dsh-vision-router.git","type":"git"},"description":"Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.","maintainers":[{"name":"ysr182","email":"ysr182@qq.com"}],"readme":"<p align=\"center\">\n  <img src=\"assets/hero-zh.svg\" width=\"100%\" alt=\"DSH Vision Router——为 DeepSeek Harness 的纯文本 Agent 提供视觉能力\" />\n</p>\n\n<h1 align=\"center\">dsh-vision-router</h1>\n\n<p align=\"center\"><strong>一键开启识图：给 DeepSeek Harness 的纯文本 Agent 装上“眼睛”——开箱免费、免 Key、无 Python、一条命令安装。</strong></p>\n\n<p align=\"center\">DeepSeek 只负责思考，内置免费视觉链 + 14 个深看工具负责“看”；需要看图时开启输入框旁的「👁 识图」，图片轮次就像普通工具调用一样自然、可定位、可验证。</p>\n\n<p align=\"center\">\n  <a href=\"https://awesome-dsh-plugin.com\"><img src=\"https://awesome-dsh-plugin.com/badge.svg\" alt=\"awesome · DSH plugin\" /></a>\n  <a href=\"https://github.com/zp-home/dsh-recommend\"><img src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fzp-home%2Fdsh-recommend%2Fmain%2Fdata%2Fbadges%2Fysr666__dsh-vision-router.certified.json&amp;style=flat-square\" alt=\"dsh-recommend 🏅 精选认证\" /></a>\n  <a href=\"https://www.dshbase.com/plugins/dsh-vision-router/\"><img src=\"https://img.shields.io/badge/dshbase-install--tested-2EA44F?style=flat-square\" alt=\"dshbase 实机安装验证\" /></a>\n  <a href=\"https://github.com/SoberReport-AI/DeepGuard/blob/main/reports/dsh-vision-router/2.0.1/39c8f2b2d69aa398418fd6c8ab40b691a92a1a3d.json\"><img src=\"https://img.shields.io/badge/DeepGuard-audit%20clean-2EA44F?style=flat-square\" alt=\"DeepGuard 审计 clean\" /></a>\n  <a href=\"https://whyihaveyou.github.io/dsh-suite/\"><img src=\"https://img.shields.io/badge/featured%20on-dsh--suite-4d6bfe?style=flat-square\" alt=\"dsh-suite 精选收录\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ysr666/dsh-vision-router/releases/tag/v2.3.0\"><img src=\"https://img.shields.io/badge/release-v2.3.0-5B4CF0?style=flat-square\" alt=\"Release v2.3.0\" /></a>\n  <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>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-2EA44F?style=flat-square\" alt=\"MIT 许可证\" /></a>\n  <a href=\"package.json\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D22-339933?style=flat-square&amp;logo=nodedotjs&amp;logoColor=white\" alt=\"Node.js >=22\" /></a>\n  <img src=\"https://img.shields.io/badge/runtime-no%20Python-8A2BE2?style=flat-square\" alt=\"无需 Python\" />\n</p>\n\n<p align=\"center\">\n  <sub>生态收录：</sub>\n  <a href=\"https://dshplugin.app/plugins/dsh-vision-router\">DSHPlugin.app</a> ·\n  <a href=\"https://github.com/diegosouzapw/awesome-omni-dsh-plugins\">Awesome Omni DSH Plugins</a> ·\n  <a href=\"https://dshpluginhub.ai/plugins/dsh-vision-router\">dshpluginhub.ai</a> ·\n  <a href=\"https://www.dsh.plus/zh/plugins/dsh-vision-router/\">dsh.plus</a> ·\n  <a href=\"https://dshplugins.ai/\">dshplugins.ai</a> ·\n  <a href=\"https://dshmarket.com/p/ysr666/dsh-vision-router/\">dsh-market</a>\n</p>\n\n<p align=\"center\"><a href=\"README.md\">English</a> · 中文</p>\n\n<p align=\"center\">💬 <strong>QQ 用户交流群：1105463028</strong></p>\n\n> [!CAUTION]\n> **默认配置会让数据出网。** 使用云端视觉模型时，Vision Router 会将图片（或由它裁剪出的局部）、识图提示词及相关请求元数据发送给对应供应商。新安装默认开启 OVHcloud 匿名视觉兜底，因此“免费”和“免 Key”不等于离线。涉密、涉案、内部或其他受限材料请勿使用云端链路。详见[数据流向与严格纯本地配置](#数据流向与严格纯本地配置)。\n\n> [!WARNING]\n> 📌 **公告（v3.0.3）**\n>\n> **v3.0.3：修正图片呈现与代理边界。** 恢复历史会话和空的 `vision_present` 结果不再抢走滚动位置，\n> 新生成的图片仍会在新版 phase 生命周期与受支持的 DSH 0.1.5 旧生命周期上正确聚焦；\n> cookie-domain 风格的 `.example.com` 现在与 `*.example.com` 遵守同一套代理主机规则；\n> DSH 0.1.7 精确浏览器 smoke 也重新跟随两个 presentation-boundary owner。CI Action 固定版本同步更新，\n> 运行时依赖和 Host 支持范围均不变。[查看完整更新 →](docs/releases/v3.0.3.md)\n\n<p align=\"center\">\n  <img src=\"assets/vision-demo.gif\" width=\"640\" alt=\"演示：粘贴图片，Agent 用 vision_ground / vision_crop / vision_pixel_diff 定位发送按钮并给出坐标\" />\n</p>\n\n## 目录\n\n- [数据流向与严格纯本地配置](#数据流向与严格纯本地配置)\n- [为什么做这个](#为什么做这个)\n- [对比同类插件](#对比同类插件)\n- [设计来源](#设计来源)\n- [致谢](#致谢)\n- [快速开始](#快速开始)\n- [免费视觉 Key 渠道](#免费视觉-key-渠道)\n- [亮点](#亮点)\n- [工作原理](#工作原理)\n- [工具](#工具)\n- [配置项](#配置项)\n- [安装与生命周期](#安装与生命周期)\n- [故障排查](#故障排查)\n\n## 数据流向与严格纯本地配置\n\nVision Router 在默认配置下不是完全离线工具。具体边界取决于操作和当前选择的模型：\n\n| 操作 | 数据去向 |\n|---|---|\n| 裁剪、像素对比、取色、SVG 矢量化、抠图、文件实体化、HTML 截图等本地像素工具 | 在 DSH 所在机器处理，这些操作不调用视觉模型。 |\n| 使用 Tesseract 的 `vision_ocr` | 在 DSH 所在机器处理。默认 `auto` 引擎在本地 OCR 不可用或结果为空时，可能回退到视觉模型。 |\n| 图片轮路由及 describe、detect、ground、视觉 OCR 等模型工具 | 图片或局部裁剪、提示词和相关上下文会发送给当前视觉供应商。 |\n| 内置免费兜底 | 以匿名方式（无 API Key）发往 OVHcloud AI Endpoints `oai.endpoints.kepler.ai.cloud.ovh.net`；服务仍会收到请求内容和源 IP 等网络元数据。 |\n| 用户配置的云模型 / HTTP 供应商 | 发送到对应配置端点，并受该供应商的保留与隐私条款约束。 |\n| 本地 Ollama / LM Studio | 图像像素发送到配置的本地端点；识图结果文本仍会回到当前聊天模型，而聊天模型自身可能仍在云端。 |\n\n若要阻止 **Vision Router 本身**把图片发送给远程视觉端点，请开启 **设置 → Vision Router → 常规 → 仅本地视觉**。这是运行时策略，不会破坏性修改配置：已保存的云端识图行和 `freeFallback` 会保留，但开关开启期间无法执行；只有回环地址（`localhost`、`127.0.0.0/8`、`::1`）上的视觉端点可以运行，包括 Ollama、LM Studio 和自定义本机 HTTP 后端。若要求**整个工作流严格纯本地**，还必须同时使用本地聊天模型，因为识图结果文本仍会交给当前聊天模型。请在自己的环境中验证最终网络边界；Vision Router 无法把远程聊天模型、代理或 Host 集成变成本地服务。\n\n## 为什么做这个\n\n大多数 DSH 视觉插件把图片“翻译”成一段文字描述再喂给 DeepSeek——有损、一次性、看不见像素。本插件把**Host 规范化后的图像像素留在视觉模型侧**、把推理留在 DeepSeek 侧，并把“看图”变成一次**普通的工具调用**：\n\n- **一条命令安装。** 包自带组合补丁（`dsh.bundle.patch`）：`dsh plugin add` 自动完成插件行挂载、准入包装与附件限制放宽——不用手改任何文件。是否接管官方 DeepSeek 路由由「隐身模式」开关决定（默认关）。\n- **默认免费。** 视觉工具最终兜底为 5 个 OVHcloud 匿名视觉模型：免注册、免 Key，每 IP、每模型 2 次/分钟，独立限额理论合计约 10 次/分钟；用户自备视觉模型会优先调用。\n- **无 Python。** 整条管线——缩放、定位、裁剪、像素对比、取色、OCR、SVG 矢量化、抠图、HTML 截图——全部基于 sharp / potrace / tesseract / 系统 Chrome。\n- **可连续多步看图。** 图片轮 = 调用工具的文本轮：`vision_ground` → `vision_crop` → `vision_describe` → `vision_pixel_diff` → 修复 → 再截图，Agent 可以一直迭代到任务完成。\n- **DeepSeek 始终是大脑。** 文字轮在模型、成本、上下文上完全不动；视觉模型只当“眼睛”、按需调用，答案按图片内容缓存。\n- **界面无感。** 上传的图片在会话界面里照常显示为图片；指向视觉工具的改写只发生在模型输入层，从不写入会话日志。\n\n## 对比同类插件\n\n**一句话讲清区别**：其他 dsh 视觉插件大多\"把图片转成文字描述再喂给 DeepSeek\"（描述桥，有信息损耗）；\n本插件主打\"**图片轮直接交给视觉模型看图像像素**\"（路由桥，像素级），同时内置免 Key 免费模型兜底。\n\n> [!NOTE]\n> 在 DSH 0.1.2-alpha.1+ 上，附件仍由 Host 单一持有。Vision Router 消费的是 Host 持久化后的 canonical image：落在规范化限制内的单帧 8-bit sRGB/sRGBA 图片可以逐字节直通；需要旋转、色彩空间、元数据、动画或尺寸规范化的图片可能会被重新编码。因此像素工具承诺的是 Host canonical raster，而不是上传源文件编码字节逐字节不变。\n\n| | 手动切换模型 | MCP 视觉桥 | 本插件 |\n|---|---|---|---|\n| 图像像素 | ✅ 可用（切换后） | ❌ 只有文字描述 | ✅ Host 规范化栅格，图片轮内 |\n| 自动化 | ❌ | ✅ | ✅ |\n| 日常模型不受影响 | ❌（整会话被换） | ✅ | ✅ |\n| 供应商失败恢复 | ❌ | ❌ | ✅ 降级链 |\n| 可复用的结构化查询 | — | 部分 | ✅ JSON 模式 + 缓存 |\n| 免费开箱即用 | ❌ | ❌ | ✅ 内置免 Key 免费端点 |\n| 贴合 dsh 组合体系 | — | 外部服务器 | ✅ 一行插件行 |\n\n**与现有 dsh 社区方案的差异**（均为优秀项目，各有侧重；描述以各家 README 2026-08 状态为准）：\n\n| 项目 | 思路 | 本插件的差异 |\n|---|---|---|\n| [dsh-vision-sidecar](https://github.com/121103qwq/dsh-vision-sidecar) | 图片先经外部 VLM 做 OCR/描述，描述作为会话消息交给 DeepSeek；默认 LLM7.io 匿名端点（OVHcloud 为无 Key 备选） | 描述桥方案；本插件提供\"图像直看\"路由，描述能力由 `vision_describe` 按需替代 |\n| [dsh-vision-proxy](https://github.com/Flyvhidbwo/dsh-vision-proxy) | 包装 provider 路由，请求流里把图片转译成文本再交给 DeepSeek | 转译桥方案；本插件不包装 provider，通过 `agent/request` 瀑布改写路由 |\n| [dsh-vision-provider](https://github.com/libinyam/dsh-vision-provider) | 注册 `DeepSeek + Vision` 组合路由：图片先经所选视觉模型转成描述，再交给 DeepSeek | 双模型桥思路；本插件在此基础上增加自动路由、降级链与工具 |\n| [modlens](https://github.com/liustack/modlens) | 最早的 dsh 视觉插件；复用本机 Claude Code/Codex/OpenCode/Pi 等登录态作为视觉引擎 | 引擎复用思路；本插件自带供应商链，不依赖本机其他 CLI |\n| [dsh-vision-toolkit](https://github.com/Anionex/dsh-vision-toolkit) | 10 个意图化视觉工具（Q&A/OCR/像素校验/UI 还原），按需显式调用 | 工具集更全；本插件多出整轮自动路由与免 Key 免费兜底 |\n| [dsh-tool-vision](https://github.com/Scorp1o117/dsh-tool-vision) | `inspect_image` 工具 + `agent/pre-step` 瀑布图片桥（粘贴图入日志前转成工具提示） | 瀑布桥思路相近；本插件多出轮次路由、降级链、缓存与免费端点 |\n\n## 设计来源\n\n本项目的深度视觉工具层与 UI restoration 工作流参考并受到 [Anionex/agent-vision-toolkit](https://github.com/Anionex/agent-vision-toolkit) 及其 DSH 原生实现 [Anionex/dsh-vision-toolkit](https://github.com/Anionex/dsh-vision-toolkit) 的设计影响。具体包括意图驱动的工具选择、渐进式工具暴露、pixel-diff 验证闭环，以及部分视觉工具的职责划分与命名，包括长截图 OCR、前景提取和 HTML screenshot 等设计。\n\n`dsh-vision-router` 中相关代码均为独立实现。在这些设计参考基础上，本项目独立发展了 turn-level/tools-first vision routing、DSH 准入/包装集成、多视觉后端与故障 fallback chain、内置免费视觉模型链、附件/图片记忆、缓存与相关运行时容错机制。\n\n感谢 Anionex 的先行工作以及整个 DSH 社区的探索。清晰的设计归因与独立迭代并不冲突；二者都有助于维护开放、协作、健康的 DSH 生态。\n\n## 致谢\n\n本插件借鉴了以上全部社区项目的思路，特别是 [dsh-vision-sidecar](https://github.com/121103qwq/dsh-vision-sidecar)\n对免注册免 Key 视觉端点的探索（LLM7.io 与 OVHcloud 匿名层）。感谢\n[dsh-vision-proxy](https://github.com/Flyvhidbwo/dsh-vision-proxy)、\n[dsh-vision-provider](https://github.com/libinyam/dsh-vision-provider)、\n[modlens](https://github.com/liustack/modlens)、\n[dsh-vision-toolkit](https://github.com/Anionex/dsh-vision-toolkit)、\n[dsh-tool-vision](https://github.com/Scorp1o117/dsh-tool-vision) 作者们的探索。\n\n## 快速开始\n\n### 1. 安装插件\n\n普通 npm / npx 安装只需要一条命令：\n\n```sh\nnpx @deepseek-ai/dsh plugin --profile web add dsh-vision-router\n```\n\n> [!IMPORTANT]\n> **装到哪个 profile？** 请装进**已经存在、并且自带 Web 界面**的 profile：\n>\n> - 网页版 DSH：`--profile web`（默认数据目录 `~/.dsh`）；\n> - 官方 DeepSeek Harness 桌面应用：`--profile desktop`（同一个 `~/.dsh` 数据目录，装完在应用里重新加载插件或重启一次应用）；\n> - Oh-DSH Desktop：数据目录是 `~/.ohdsh`，见下方 [Oh-DSH Desktop](#oh-dsh-desktop)。\n>\n> `dsh plugin add` 只是把插件加进**指定** profile。**全新创建**的 profile 只含 `@deepseek-ai/dsh-base`，此时 `dsh web` 不会绑定端口（没有 Web 面）。请装进已有的 profile，或先让新 profile 具备 Web 面。\n\n> [!WARNING]\n> 如果这个 profile 里已经有通过 `cordis.patch.yml` **手动挂载**的社区插件，不要再把这种旧式加载方式与 `dsh plugin add` / `dsh plugin list` 混用：当前 DSH CLI 可能同时把带 bundle patch 的依赖追加到 `dsh.profile.bundles`，导致这些插件被重复注册。请先把原有手动插件迁移到 bundle 管理方式，或继续沿用手动安装路径。详见 [deepseek-harness Discussion #2889](https://github.com/deepseek-ai/deepseek-harness/discussions/2889)。\n\n> [!NOTE]\n> 第三方 `dsh-web-plugin-manager` / `dshpm` **v0.4.2+** 现已兼容：其质量门已正确放行作为运行时依赖的 `@deepseek-ai/schemastery`。上面的官方 DSH CLI 仍是推荐安装方式。\n\n如果你是从 DeepSeek Harness 源码仓库通过 pnpm 运行，`dsh` 不一定在系统 `PATH` 里，请改用工作区脚本：\n\n```sh\ncd deepseek-harness\npnpm dsh plugin --profile web add dsh-vision-router\n```\n\n如果你已经全局安装 DSH CLI，并且终端里能直接执行 `dsh`，也可以继续使用较短的 `dsh ...` 写法。安装完成后，按你平时的方式启动或重新加载 DSH Web 即可。\n\n> [!NOTE]\n> 如果你是把插件**首次安装进一个已经长期运行的 Web 进程**，需要让 DSH Web 进程重新加载一次插件本体。插件加载完成后，新增/删除模型、修改自动识图包装范围都会**热更新，无需再重启 DSH**。\n\n### 2. 选择日常模型，按需开启「👁 识图」\n\n聊天页右下角的原生模型选择器只负责选择你的**脑子/会话模型**，例如 DeepSeek、Qwen 或其他普通模型。Vision Router 生成的内部「+ 自动识图」wrapper 默认不会出现在原生模型列表和 `/model` 中。\n\n需要看图时，在输入框旁主动点击 **「👁 识图」**：\n\n- `👁 识图`：当前普通模型，识图关闭；\n- `👁 识图 ✓`：已切到该模型对应的 Vision Router 内部识图 route；\n- 开启后会持续生效，发送消息后**不会自动复位**；\n- 主动关闭会切回同一个普通模型；手动选择另一个普通模型会关闭识图；\n- 只修改当前模型的 reasoning effort 不会关闭识图。\n\n> [!IMPORTANT]\n> **上传 / 粘贴图片不会替你自动开启识图。发图前请先确认按钮处于 `👁 识图 ✓`。**\n>\n> Vision Router 仍保留真实 wrapper route 来通过 DSH 的图片准入，只是把它们作为内部实现隐藏起来。若浏览器端无法安全确认某个 route 属于 Vision Router，隐藏逻辑会 fail-open：宁可显示该 route，也不会误藏第三方模型。\n\n### 3. 粘贴或上传图片\n\n开启「👁 识图」后，直接往对话里贴图即可。默认情况下完整视觉工具表从会话开始就保持稳定，Agent 可直接调用 `vision_describe`、`vision_ground`、`vision_crop` 等工具看图，需要时连续多步操作。\n\n如果当前 session 已经包含图片，DSH 可能拒绝从识图 route 切回不接受图片的纯文本 route。此时 Vision Router 不绕过 Host 约束：会显示与原生模型选择器一致的临时错误提示，真实模型保持不变，`👁 识图 ✓` 也继续反映真实状态，可继续使用或稍后重试。\n\n默认已经有内置 OVH 匿名视觉兜底，无需注册、无需 Key。**聊天页右下角只选择“脑子/会话模型”**；视觉模型不要在那里选。高级配置在 **设置 → Vision Router**：视觉后端链每一行都可以选择 **设置 → 模型** 中任意可调用的生成式用户模型。DSH 的图片能力声明现在只作提示：未声明图片能力、甚至被标成仅文本的模型也会列出并给出警告。运行时永远先通过该供应商已注册的 DSH adapter 实际调用，因此 WebSocket、RPC 和私有协议都保留原生传输；只有明确识别为 http(s) OpenAI Chat Completions 的渠道才可能进入 HTTP 直连兼容兜底。实际调用失败后自动尝试下一后端；一行都不填也可以，OVH 免费链会固定在最后兜底。插件内部的 `Vision HTTP` 只是传输实现，不是用户需要选择的模型组。\n\n### 实际效果\n\n*左：一次图片轮——用户发图，Agent 通过免费链路调用 `vision_describe` 并作答。右：最终的结构化解读。*\n\n<p align=\"center\">\n  <img src=\"assets/dsh-conversation-image-qa.png\" width=\"49%\" alt=\"Agent 通过 vision_describe 查看上传图片的对话轮次。\" />\n  <img src=\"assets/dsh-conversation-image-qa-result.png\" width=\"49%\" alt=\"Agent 对图片内容的结构化解读。\" />\n</p>\n\n## 免费视觉 Key 渠道\n\n内置 OVH 兜底是匿名设计，OVH 对匿名访问的限制是**每 IP、每模型 2 次/分钟**。觉得不够用时，下面这些渠道都有**免费且额度大得多的视觉模型**——全部免费注册，无需为免费档付费。免费政策轮换频繁，下表是 2026 年 8 月快照，依赖前请以各家控制台为准。\n\n| 渠道 | 免费视觉模型 | 免费额度 | 大陆直连 | Key 领取 |\n|---|---|---|---|---|\n| OVHcloud AI Endpoints（access key） | `Qwen2.5-VL-72B-Instruct`——与内置兜底同一个端点 | **400 次/分钟**/项目/模型（对比匿名 2 次/分钟） | ✅ | 注册 OVH 账号 → Public Cloud 项目（需挂支付方式；免费模型不扣费）→ AI Endpoints access key |\n| 智谱（bigmodel.cn） | `glm-4.6v-flash` · `glm-4.1v-thinking-flash` · `glm-4v-flash`——三个永久免费模型，串起来容量 ×3 | token 不限量 | ✅ | open.bigmodel.cn → API keys |\n| 阿里云百炼 | `qwen3-vl-flash`（限免）与 Qwen-VL 系列 | 新用户每模型系列 100 万 token / 90 天 | ✅ | bailian.console.aliyun.com |\n| Intern AI（上海AI实验室） | `internvl-latest` · `internvl3.5-latest` | 30 RPM，**9000 万 token/月** | ✅ | chat.intern-ai.org.cn |\n| Groq | `meta-llama/llama-4-scout-17b-16e-instruct`（原生多模态，最多 5 张图） | 30 RPM / 14,400 次/天，免卡 | ❌ 需代理 | console.groq.com |\n| Google AI Studio | `gemini-2.5-flash` · `gemini-2.5-flash-lite` | 10–30 RPM / 500–1,500 次/天 | ❌ 需代理 | aistudio.google.com |\n| NVIDIA NIM | `meta/llama-3.2-11b-vision-instruct` · `nvidia/nemotron-nano-12b-v2-vl` | 40 RPM，免卡 | ⚠️ | build.nvidia.com |\n| OpenCode Zen | `mimo-v2.5-free`（视觉 + 代码） | 30 RPM / 500 次/天 | ⚠️ | opencode.ai/zen |\n| OpenRouter | `google/gemma-4-26b-a4b-it:free` · `google/gemma-4-31b-it:free` | 未充值账户 50 次/天 | ❌ 需代理 | openrouter.ai |\n\n以上渠道都能以 `httpProviders` 条目加入视觉链（Key 放对应环境变量或 `~/.dsh/.credentials.yaml`），链路会先尝试你的条目、再落到匿名兜底。\n\n> [!NOTE]\n> 免费政策随时可能调整——Cerebras 已在 2026 年 7 月取消免费档（改为一次性 $5 赠金），SambaNova 免费档收紧到 20 次/天，Hugging Face 只剩 $0.10/月。第三方“`:free` 中转”聚合站刻意不列入：轮换频繁、无 SLA，部分还存在违反上游条款的转售行为。\n\n## 亮点\n\n- **能力感知 Auto 路由。** 想要确定性就继续按配置顺序；想自动选择时再显式开启 Auto，只在已配置模型和已有实测证据上调整优先级。不会通过模型名猜能力，单纯开启 Auto 也不会自动发起测评。\n- **可验证的模型测评。** 「测试识图」只向当前精确模型发一次请求；Quick / Full 分别测 OCR、通用理解，以及结构化、文档、定位等能力。后台能力数据是独立授权，并会给真实前台识图让路。\n- **原图像素，真实答案。** 视觉链按原始分辨率读图（仅为保护延迟/额度自动缩放）；你的问题随图一起发送，答案围绕*你的问题*，而不是一段泛泛的描述。\n- **自动降级 + 分类报错。** 地区限制、ToS 风控、402 额度、429 限流、上下文超长、网络故障——链路逐供应商尝试，全部失败才报错并给出可操作的建议。遇到 429 会立即尝试下一后端，并按 Retry-After 开启冷却，不会在单次请求内睡眠等待。\n- **图片记忆。** 视觉答案按附件内容哈希缓存；后续文字轮用记录的描述替换历史图片（标注为不可信证据），DeepSeek 真正“记得”之前发过的图，且不重复消耗视觉调用。\n- **可验证的像素闭环。** 参照图 → `vision_html_screenshot` → `vision_pixel_diff`（差异率 + 红色热力图 + 最差区域排行）→ 修复 → 再对比，直到差异收敛。UI 还原从“目测”变成“实测”。\n- **稳定工具 schema。** 默认从会话开始就注册完整 14 个深看工具，避免图片轮中途扩展工具列表导致长上下文的 KV / prefix cache 失效。仍保留 `progressiveTools: true` 作为高级启动期 opt-in；开启后才使用 `vision_activate` 按需挂载。详见 [`docs/progressive-tools-cache.md`](docs/progressive-tools-cache.md)。\n- **选择性代理。** 只有配置的视觉供应商域名走本地代理；DeepSeek 保持直连。\n\n### 像素闭环实测\n\n[![参考设计与 Agent 最终复刻，通过 vision_pixel_diff 实测最终差异为 2.54%。](assets/pixel-loop-zh.png)](assets/pixel-loop-zh.png)\n\n<p align=\"center\"><sub>点击图片可查看完整原图。</sub></p>\n\nAgent 仅根据参考图复刻 UI，再用 `vision_pixel_diff` 验证最终结果：**最终差异 2.54%**（32,939 / 1,296,000 个差异像素，threshold 16/channel）。\n\n## 工作原理\n\n<p align=\"center\">\n  <img src=\"assets/how-it-works-zh.svg\" width=\"100%\" alt=\"DSH Vision Router 的工作原理：DeepSeek 作为大脑，视觉工具作为眼睛。\" />\n</p>\n\n视觉模型**只当眼睛**，DeepSeek **始终是大脑**。图片轮永远不会被一次性视觉答案“劫持”——Agent 自己驱动工具，可以跨多个步骤持续对同一张图操作。\n\n## 工具\n\n默认 `progressiveTools: false`：14 个深看工具从插件启动时就保持常驻，文本轮和图片轮都可直接调用。若你在 profile / composition 的 `cordis.patch.yml` 中显式开启 `progressiveTools: true`，才会恢复渐进模式：初始只暴露 `vision_activate`，首次需要时再挂载完整工具，并注册 `vision-tools` 技能。该开关是启动期配置，修改后需重启 DSH。全部工具基于 sharp / potrace / tesseract / 系统 Chrome——无 Python：\n\n<p align=\"center\">\n  <img src=\"assets/vision-tools-zh.svg\" width=\"100%\" alt=\"DSH Vision Router 的 11 个图像处理工具。\" />\n</p>\n\n图中展示 11 个图像处理工具；另有 `vision_materialize`、负责持久展示图片的 `vision_present` 与可选 1+x 结构化首遍识别的 `vision_bootstrap`，默认深看工具集共 14 个。若启动时显式开启隐私敏感的 `vision_screenshot`，则额外增加为第 15 个工具。\n\n| 工具 | 作用 | 产物 |\n|---|---|---|\n| `vision_bootstrap` | 可选 1+x 结构化首遍视觉识别；先建立任务无关证据底图，再至少进行 1 次后续视觉调用 | — |\n| `vision_describe` | 看图问答 / 多图对比 / 结构化证据 JSON 模式（摘要 + 布局区域 + 实体清单 + 原文转写） | — |\n| `vision_materialize` | 把已授权附件复制到稳定的内容寻址工作区交接文件，并返回绝对路径和较短的工作区相对路径，供本地 OCR/解析器降级使用；不调用视觉模型或网络 | image copy |\n| `vision_ground` | 定位目标 → **原图像素框 x1/y1/x2/y2** | 标注 PNG（可选） |\n| `vision_detect` | 盘点某类元素（按钮/输入框/链接…）→ 编号清单 + 原图像素框 | 编号标注 PNG |\n| `vision_crop` | 按像素框裁剪放大 | PNG |\n| `vision_present` | 把生成或编辑后的本地图片发布为持久聊天附件，供用户查看 | 图片附件 |\n| `vision_pixel_diff` | 逐像素对比：差异率 + 最差 8×8 网格区域 | 红色热力图 PNG + JSON 报告 |\n| `vision_colors` | 主色提取（十六进制 + 占比） | — |\n| `vision_ocr` | 文字转写：默认引擎可配置为 `auto` / 本地 Tesseract / 视觉模型；单次显式 engine 仍优先 | — |\n| `vision_trace` | SVG 矢量化（potrace 分色；图标/logo） | SVG |\n| `vision_extract_foreground` | 边界洪泛抠图（纯色背景） | 透明 PNG |\n| `vision_html_screenshot` | 给本地 HTML 文件截图（无头系统 Chrome）；`fullPage: true` 截整页并返回 `pageHeight` | PNG |\n| `vision_screenshot` | **默认关闭，必须显式开启隐私开关。** 截取 Windows 虚拟屏幕、macOS 主显示器或 Linux 根窗口；Windows 使用 PowerShell CopyFromScreen，macOS 使用 `screencapture`，Linux 需安装 ImageMagick `import` 或 `scrot`；`identify=true` 可按顺序尝试已启用的本地识别后端并返回路径+识别文本 | PNG / +描述文本 |\n| `vision_long_screenshot_ocr` | 长截图转写：重叠分片，tesseract 优先 / 视觉模型回退，按序拼接 Markdown | 分片 PNG + Markdown + manifest |\n\n图片格式按**魔数识别**，无扩展名的内容寻址附件文件也能直接用（不用再复制成 `.png`）。\n\n**常用流程**\n\n```text\nvision_ground image=\"ref.png\" target=\"发送按钮\"\nvision_detect image=\"page.png\" target=\"输入框\"\nvision_crop   image=\"ref.png\" region=\"1067,841,1108,881\"\nvision_present path=\"rebuilt.png\"\nvision_describe paths=[\"ref.png\",\"impl.png\"] question=\"列出两图的差异\" json=true\nvision_pixel_diff original=\"ref.png\" rebuilt=\"screenshot.png\"\nvision_ocr image=\"screenshot.png\"\nvision_colors image=\"ref.png\" top=8\nvision_trace image=\"icon.png\" steps=4\nvision_extract_foreground image=\"logo.png\"\nvision_html_screenshot source=\"page.html\" width=1200 height=720\nvision_html_screenshot source=\"page.html\" width=1200 height=720 fullPage=true\nvision_long_screenshot_ocr image=\"chat-log.png\" chunkHeight=1200 overlap=120\n```\n\n## 供应商降级链\n\n视觉工具按顺序逐个尝试，全部失败才报错：\n\n1. **用户视觉模型**：设置页里一行一个，从上到下；已启用供应商即使模型枚举部分失败也会保留在下拉中，可调用的生成式模型继续可选，图片能力声明只作提示，最终以运行时实际调用为准；\n2. **本地 Ollama（可选，默认关）**：`localOllama.enabled` 开启后，通过本机 Ollama 做免 Key、离线识别（例如 qwen2.5vl）；\n3. **本地 LM Studio（可选，默认关）**：`localLmStudio.enabled` 排在 Ollama 之后，模型名必须填写 LM Studio Developer 页或 `/v1/models` 返回的真实标识；\n4. **高级自定义 HTTP 视觉端点**：旧配置/高级配置中的 `httpProviders` 排在本地后端之后；\n5. **内置 OVH 匿名免费兜底**：固定最后尝试，不需要出现在任何模型选择器里。当前内置链按质量优先为 `Qwen3.5-397B-A17B` → `Qwen2.5-VL-72B-Instruct` → `Qwen3.6-27B` → `Mistral-Small-3.2-24B-Instruct-2506` → `Qwen3.5-9B`。OVH 匿名限额为 **每 IP、每模型 2 次/分钟**；5 个模型是独立限额，因此理论上分散请求可到约 **10 次/分钟**，实际仍以 OVH 当时的限流为准。免注册、免 Key。想提额度？详见[免费视觉 Key 渠道](#免费视觉-key-渠道)——同一个端点挂免费 access key 后是 400 次/分钟。\n\n> [!IMPORTANT]\n> 这里的“视觉链”是 Vision Router 调用的**眼睛**：设置页里每一行只选一个用户视觉模型；聊天页右下角选择的是**脑子/会话模型**，两者完全分开。纯文本 DeepSeek / opencode 不会出现在视觉后端下拉里；内部 `Vision HTTP` 也不会再暴露给用户。\n\n> 在旧版 `routing: true` 模式下，整轮链只走 `provider + fallbacks`——`httpProviders`（含免费兜底）不参与。默认的 `routing: false`（工具优先）会尝试全部。\n\n失败会分类（地区 / 风控 / 额度 / 限流 / 上下文 / 网络），最终报错附带建议；遇到 `429` 会立即尝试下一后端，并按 `Retry-After` 开启有上限的熔断冷却。超大上传图在调用前自动压缩（默认预算 400 万像素），保证工具调用不卡。\n\n## 隐身模式\n\n隐身模式默认**关闭**（issue #34 起显式 opt-in）：官方 `deepseek-official` 路由原样保留；需要看图时通过输入框旁的「👁 识图」切换到内部 DeepSeek wrapper。该 wrapper 默认从原生模型选择器和 `/model` 展示层隐藏。\n\n在 DVR 2.3 支持的所有 DSH Host 中，官方 DeepSeek provider 都由 Host 自己负责请求期的附件、Files API 与图片访问能力。因此 Vision Router **不会重建或复活 `deepseek-official`**。请保持 `llm-deepseek` 启用，通过内部「DeepSeek + 自动识图」wrapper /「👁 识图」处理图片；如果官方行被禁用或不可用，设置页会明确提示重新启用，而不是偷偷注册一个能力不完整的替代 provider。\n\n历史 `stealth` 字段仅为兼容已有 profile 而继续读取；在 DVR 2.3 支持窗口内，它不再具有接管 provider 的权限。\n\n> opencode 等自定义/第三方文本路由默认也会生成内部识图 wrapper，由「👁 识图」按需使用。\n\n## 自动识图包装与手动范围\n\n默认开启 `autoWrapProviders`：插件会自动发现 **设置 → 模型** 中当前已启用的 provider / model，并为它们注册内部识图 wrapper。**原模型组完全不变**；普通用户不需要在模型选择器里寻找或手工选择这些 wrapper，它们会在能确认归属时默认隐藏，由聊天输入框旁的「👁 识图」负责切换。DSH 的 `llm/adapters-updated` 变化会触发同步，所以新增/删除模型后无需重启。\n\n`wrappedProviders` 是**可选的手动范围控制**，不是普通用户必须配置的步骤。只有两种情况需要它：\n\n1. 关闭了自动包装，想手动指定哪些 provider / model 可以使用「👁 识图」；\n2. 自动包装保持开启，但只想让某个 provider 的部分模型生成内部识图 wrapper。\n\n设置页里用两个下拉（provider + 模型）配置；模型留空 = 包装该路由的全部模型，同一 provider 要限定多个模型就添加多行。修改即时生效，无需重启。若客户端无法确认 wrapper 归属或镜像关系不完整，展示层会 fail-open，不会为了“干净”而误隐藏第三方 route。\n\n## Web 设置\n\nWeb profile 现在提供一级 **设置 → Vision Router** 页面。常规页把识图模型与 v2 路由授权放在一起；「识图策略 / 本地与设备 / 高级 / 诊断」分别承载工具行为、本地后端、敏感/性能设置和排障。\n\n- **识图模型链**：`vision_describe` 等视觉工具真正调用的图片模型，内置免费链固定作为最终兜底；\n- **模型选择方式**：继续按配置顺序，或显式开启能力感知 Auto，并选择「综合 / 质量 / 速度 / 本地」偏好；\n- **后台补充能力数据**：`关闭 / 仅本地与免费 / 所有模型`，独立授权，不会因开启 Auto 自动开启；\n- **测试识图 / 测评**：一次精确图片验证，以及 Quick（约3次，OCR+通用）/ Full（约6次，结构化+OCR+文档+定位+通用）能力测评；关闭设置页后任务仍继续；\n- **本地与设备**：Ollama / LM Studio 与隐私敏感的桌面截屏开关；\n- **高级 / 诊断**：超时、wrapper范围、代理/网络、兼容、版本、运行状态与排障。\n\n<p align=\"center\">\n  <img src=\"assets/vision-settings.png\" width=\"72%\" alt=\"Vision Router 一级设置页面。\" />\n</p>\n\n## 配置项\n\n全部可选，默认即可用。优先使用 **设置 → Vision Router**；高级部署仍可通过 profile 补丁覆盖：\n\n| 字段 | 默认值 | 含义 |\n|---|---|---|\n| `routingMode` | `ordered` | `ordered` 按配置模型链执行；`auto` 把优先级委托给实测能力证据。升级不会自动开启 Auto |\n| `routingPreference` | `balanced` | Auto 偏好：`balanced` / `quality` / `speed` / `local`；只在已授权候选之间改变顺序 |\n| `backgroundBenchmarking` | `off` | 后台能力测评授权：`off` / `local-free` / `all`；开启 Auto 不会改变它，已授权后台任务只在 Auto 激活时运行 |\n| `provider` / `model` | `vision-http` / `ovh/Qwen2.5-VL-72B-Instruct` | 简写视觉后端链路（有适配器且真正支持图片输入的供应商 + 模型） |\n| `fallbacks` | `[]` | 简写视觉供应商的备用图片模型 |\n| `providers` | 内置免费 `vision-http` 条目 | 多供应商视觉后端链 `{ provider, model, fallbacks[] }`，按序尝试；不要填写纯文本模型 |\n| `httpProviders` | 内置 OVH 条目 | OpenAI 兼容直连端点 `{ name, baseURL, model, apiKeyEnv, maxTokens }` |\n| `autoWrapProviders` | `true` | 自动发现当前已启用 provider / model，并热更新对应内部识图 wrapper；能确认归属时从原生模型选择器隐藏，原模型组不变 |\n| `wrappedProviders` | `[{ provider: 'deepseek-official', models: [] }]` | 可选手动包装范围 `{ provider, models[] }`；用于关闭自动包装后手动指定，或限制某个 provider 只有部分模型可通过「👁 识图」进入 wrapper |\n| `routing` | `false` | 旧版整轮链路由（一次性整轮回答）。`false` = 工具优先流程（推荐） |\n| `reverseRouting` | `true` | 开启 `routing` 时，文字轮路由回 `textProvider` |\n| `wrapperRoute` / `chainRoute` | `deepseek-vision` / `vision-chain` | 开发者路由名。当前设置页留空会清除覆盖并恢复默认值；显式空字符串仅作为旧版/手工持久化配置兼容保留。 |\n| `stealth` | `false` | 接管官方 `deepseek-official` 路由（仅官方行；自定义路由默认由自动包装处理） |\n| `textProvider` | `deepseek-official` / `deepseek-v4-pro` | 负责思考的模型（你的日常模型） |\n| `tool` / `progressiveTools` / `autoActivateOnImage` | `true` / `false` / `true` | 视觉工具总开关 / 渐进式挂载（默认关闭以稳定工具 schema）/ 渐进模式下图片轮自动挂载；`progressiveTools` 为启动期配置 |\n| `rewriteImages` | `true` | 模型输入层改写图片块（缓存描述或工具提示标记）；界面日志保留图片 |\n| `desktopScreenshot` | `false` | 模型可调用的 `vision_screenshot` 桌面截屏隐私开关；每次截屏前实时检查 |\n| `localOnlyVision` | `false` | 视觉端点隐私策略：只有回环地址上的视觉端点可执行，Vision Router 不会把图片/裁剪发给云端视觉服务；描述、OCR、坐标等识图结果文本仍会交给当前聊天模型，因此严格端到端纯本地还需同时使用本地聊天模型 |\n| `freeFallback` | `true` | 在显式本地/自定义 HTTP 后端之后追加匿名 OVH 模型；`localOnlyVision` 开启期间不会执行 |\n| `localOllama` | `{ enabled: false, baseURL: 'http://127.0.0.1:11434/v1', model: 'qwen2.5vl', format: 'openai', maxTokens: 4096, reasoningEffort: 'none' }` | 本地视觉后端；OpenAI 模式默认关闭受支持模型的推理，把输出预算留给正文 |\n| `localLmStudio` | `{ enabled: false, baseURL: 'http://localhost:1234/v1', model: '', format: 'openai', maxTokens: 4096, reasoningEffort: 'none' }` | Ollama 之后的本地 LM Studio 后端；LM Studio 0.4+ 可选 `format: 'lmstudio'` 使用官方原生推理控制 |\n| `visionTurnBudgetMs` | `0` | 整轮视觉总墙钟预算；`0` = 不设整轮上限。具体 provider调用/工具仍有自己的硬超时 |\n| `downscale` / `downscaleMaxPixels` | `true` / `4000000` | 调用前压缩及其像素预算（延迟保护） |\n| `cache` / `cacheTtlSeconds` / `cacheMaxEntries` | `true` / `3600` / `200` | 视觉答案缓存 |\n| `timeoutMs` | `120000` | 单次视觉调用超时 |\n| `artifactsDir` | `.dsh-vision-router/artifacts` | 产物目录（相对会话工作区） |\n| `proxy` / `proxyHosts` | `''` / openrouter 域名 | **高级覆盖**：留空沿用 DSH/Host 网络路径；仅显式填写时让指定视觉域名使用插件代理 |\n| `catalogCorrections` | `true` | 内置目录纠错：当已安装目录把已知模型路由到错误协议时按正确协议应答；上游修复后对应纠错自动失效 |\n\n\n### 网络代理：默认跟随 DSH/Host\n\nVision Router 默认**不接管网络出口**。`proxy` 留空时，Router-owned 视觉 HTTP 不注入自有 dispatcher，Host-owned 兼容层也保持透明，因此请求继续沿用 DSH/Host 当前网络路径。显式填写覆盖时，Host-owned adapter 也只会在 Vision Router 正在执行该已配置视觉模型的调用作用域内被代理；并发的其他 Host 请求仍沿用 Host 路径。\n\n在 DSH 0.1.5 系列（rc.1+）中，Host 已提供统一出网代理：`HTTP_PROXY` / `HTTPS_PROXY` / `ALL_PROXY` / `NO_PROXY` 在启动时解析并应用；TUN 模式也会在更底层透明生效。DSH 本身不会自动读取 macOS/Windows 的“系统代理”开关，所以仅打开代理软件的 System Proxy 并不等价于 CLI 已经走代理。\n\n只有在你确实需要“**视觉请求单独走另一条代理**”时才填写 `proxy`。这仍保留给旧 Host、SOCKS5 用户和按视觉域名定向覆盖的高级场景；`proxyHosts` 只约束这一插件级覆盖，不会重定义 Host 的全局代理策略。 Redirect 也不会扩大这个范围：已进入 DVR 代理的请求一旦跳转到 `proxyHosts` 之外，该跳立即回到请求原本继承的 Host/caller dispatcher；首个 URL 不在 `proxyHosts` 的请求则全程保持 Host-owned，即使后续跳转进入名单也不会临时加载 DVR 代理。\n\n### 本地 Ollama 视觉后端（并入自 dsh-vision）\n\n> **增量开发作者**：[shaoqiuyuavailable](https://github.com/shaoqiuyuavailable)（router 本地视觉增量）\n>\n> **思路来源**：Ollama / LM Studio 双本地后端、结构化识别、截屏识别、同图记忆、失败降级、并发保护与超时防护等设计继承自 [dsh-vision](https://github.com/shaoqiuyuavailable/text-llm-vision/tree/dsh-vision)；本项目将其并入 HTTP 视觉链，并扩展逐级 fallback 与双协议支持。\n\n可选的本地优先视觉路径：不需要 Key，适合隐私、零费用、离线识别。它作为 HTTP 视觉链里的 `local-ollama` 接入；若本地识别失败，除非用户明确配置纯本地链，否则仍可能继续尝试已配置的云后端。\n\n**1. 安装 Ollama 并拉取视觉模型**\n\n```sh\n# https://ollama.com —— 然后：\nollama pull qwen2.5vl\n```\n\n**2. 开启** —— **设置 → Vision Router → 本地与设备**，或 profile patch：\n\n```yaml\n- id: vision-router\n  config:\n    localOllama:\n      enabled: true\n      baseURL: 'http://127.0.0.1:11434/v1'\n      model: 'qwen2.5vl'\n      temperature: 0.5\n      top_p: 0.8\n```\n\n**3. 行为说明**\n\n- 开启后 `local-ollama` 排在 HTTP 视觉链前部。若要在不删除已保存云端配置的情况下硬阻止远程视觉出网，请开启 **常规 → 仅本地视觉**；策略开启期间只有回环地址上的视觉端点可执行。\n- 选中的本机 loopback Ollama 模型会通过原生 API 预热并保持 30 分钟驻留。如果模型在 Ollama 作为首个图片后端时已经冷却，加载会在正常视觉任务预算开始之前完成；短 `/api/ps` 探测保证服务未运行/挂死时仍快速进入 fallback。远程 Ollama URL 不会自动预热。\n- **LM Studio 同理**——开启 `localLmStudio`，填 OpenAI 兼容端点（默认 `http://localhost:1234/v1`），并使用 Developer 页或 `/v1/models` 返回的真实模型标识。它排在 `local-ollama` 之后、自定义/云 HTTP 后端之前。\n- 本地后端继续以 **OpenAI** 为兼容默认，也可选 **Anthropic**。LM Studio 额外提供 **LM Studio 原生**模式（`format: 'lmstudio'`，需 LM Studio 0.4+），走 `/api/v1/chat`；需要稳定关闭推理时推荐该模式，因为官方 API 明确支持 `reasoning: off`。`maxTokens` 可配置，默认 4096。\n- 任一本地后端未运行或调用超时时自动跳过。正常模式下可继续降级到云链；开启 **仅本地视觉** 后，所有远程兜底继续保持阻断，视觉调用会 fail closed。\n- `vision_screenshot` 默认关闭。单独开启「桌面截屏」隐私开关后，`identify=true` 使用同样的 Ollama → LM Studio 降级顺序。\n\n## 环境要求\n\n- DeepSeek Harness 的 Web profile。普通安装可用 `npx @deepseek-ai/dsh ...`；从源码仓库运行时用 `pnpm dsh ...`。只有 CLI 已经进入系统 `PATH` 时才能直接写 `dsh ...`。\n- **DSH Host 支持策略：** DVR 3.0.x 从 `0.1.5-rc.1` 起连续支持 DSH 0.1.x（当前稳定证据为 `0.1.5-rc.3`），并从已验证的 `0.2.0-rc.2` 起支持 0.2.x；精确 `0.2.0-rc.2` 同时作为 3.0 默认开发 Host。低于 0.1.5 的 Host 不再支持，也不再维护旧的 0.1.x 锯齿式例外列表。运行时仍按能力判断，而不是按版本字符串分支。详见 [DSH Host 支持窗口](docs/architecture/dsh-support-window.md)。\n- Node ≥ 22（宿主侧）。\n- 默认免费链路无需 API Key；付费 `httpProviders` 只需一个凭据引用（`apiKeyEnv`）。\n- 只有 `vision_html_screenshot` 需要 Chrome / Chromium / Edge；其余工具无浏览器也能用。\n- 桌面截屏必须显式开启。Windows/macOS 使用系统截屏能力；Linux 需安装 ImageMagick `import` 或 `scrot`，且必须处于可截取的桌面会话（Wayland 支持取决于环境）。\n- tesseract 可选。`vision_ocr` 默认使用 `ocrEngine: auto`（本地 Tesseract 优先、失败或空结果再回退视觉模型）；也可在「设置 → 高级 → OCR 默认引擎」强制仅 Tesseract 或直接使用视觉模型，无需卸载 Tesseract。单次调用显式 `engine=tesseract|vision` 始终覆盖默认设置。\n\n## 安装与生命周期\n\n### 安装\n\n普通 npm / npx 安装——一条命令：\n\n```sh\nnpx @deepseek-ai/dsh plugin --profile web add dsh-vision-router\n```\n\n> [!NOTE]\n> 如果 profile 混用了旧式 `cordis.patch.yml` 手动插件行与 bundle 管理方式，请先阅读[快速开始](#1-安装插件)里的兼容警告，再执行 DSH plugin 命令。\n\n从 DeepSeek Harness 源码仓库运行：\n\n```sh\npnpm dsh plugin --profile web add dsh-vision-router\n```\n\n可选验证：\n\n```sh\nnpx @deepseek-ai/dsh --profile web --dump-config | grep vision-router\n# 源码仓库：pnpm dsh --profile web --dump-config | grep vision-router\n```\n\n首次把插件装进已经长期运行的 Web profile 时，需要让 Web 进程重新加载插件本体；宿主在启动时通过 `dsh.client` 声明发现浏览器端包。**插件加载完成后，模型目录与包装范围的变化会热更新，不需要为这些变化重启。**\n\n### Oh-DSH Desktop\n\n[Oh-DSH Desktop](https://github.com/hust-open-atom-club/oh-dsh) 自带一套独立打包的 DSH 运行时和独立的数据目录：桌面端实际运行的是 `~/.ohdsh` 下的 `desktop` profile，**不会**加载普通 `~/.dsh` 的 profile。因此上面 `--profile web` 的命令在 Oh-DSH Desktop 上会装错环境。\n\n把 `DSH_HOME` 指向 Oh-DSH 的数据目录再安装即可：\n\n```sh\nDSH_HOME=~/.ohdsh npx @deepseek-ai/dsh plugin --profile desktop add dsh-vision-router\n```\n\n（Windows PowerShell 先执行 `$env:DSH_HOME = \"$env:USERPROFILE\\.ohdsh\"`，再运行同一命令。）\n\n> [!WARNING]\n> Oh-DSH Desktop ≤ 0.1.5 内置的是 DSH `0.1.0-rc.5`。`dsh-vision-router` v1.4.1 及更早版本会让该运行时在启动时崩溃（报 `configurable provider \"deepseek-official\" is already declared`，在 Oh-DSH Desktop 里表现为 `DSH runtime exited before readiness`）。请安装 v1.4.2+。\n\n如果错误安装已经导致 Desktop 无法启动：打开 `~/.ohdsh/profiles/desktop/package.json`，从 `dependencies` 和 `dsh.profile.bundles` 中删掉 `dsh-vision-router` 条目，保存后重启 Desktop。\n\nOh-DSH Desktop 内置的插件市场（搜索 → 准备 → 隔离预览 → 应用，并保留 `previous` 快照用于恢复）在社区目录收录本插件后同样可用；不要与上面的直接安装命令混用。其内置的 `@oh-dsh/vision`（`view_image`）与本插件可共存，工具名不冲突。\n\n### 禁用 / 恢复\n\n```yaml\n- id: vision-router\n  disabled: true\n```\n\n改回 `false` 即恢复。卸载会移除包装路由、工具、技能与设置卡片；已生成的产物文件保留。\n\n### 升级\n\n```sh\n# 普通 npm / npx 安装 —— 显式安装目标版本；裸 `update` 会被 pnpm v11\n# 静默拦下发布不足 24 小时的新版本\nnpx @deepseek-ai/dsh plugin --profile web add dsh-vision-router@<版本号>\n\n# DeepSeek Harness 源码仓库\npnpm dsh plugin --profile web add dsh-vision-router@<版本号>\n```\n\n设置存放在 profile 的设置提供方里，升级不丢失。设置页的一键更新会自动显式安装 registry 已确认的版本，并在命令结束后核对实际安装版本——绝不只凭包管理器退出码就报成功。\n\n> **新版本一直不生效（`downloaded 0` / `added 0`）：** pnpm v11 会拦下发布不足 24 小时的版本；按上面方式显式安装目标版本（pnpm 会自动写入豁免），或运行 `npx dsh-vision-router repair` 修复过期的带版本号豁免条目后，更新立即生效。\n\n> **从 bundle 补丁之前（v0.x）升级：** 现在插件由自带的 bundle 补丁自动挂载，\n> 若 `~/.dsh/profiles/<profile>/cordis.patch.yml` 里还残留旧版手动行，会与之\n> 重复，`dsh web` 启动即报 `duplicate loader entry id: vision-router`。删除\n> 旧块：\n>\n> ```yaml\n> - insert:            # 删除整块\n>     - id: vision-router\n>       name: dsh-vision-router\n> ```\n>\n> 若要保留自定义配置，改为不带 insert 的按 id 覆盖行：\n>\n> ```yaml\n> - id: vision-router\n>   config:\n>     # 你的配置…\n> ```\n\n> **从 v1.1.x 升级后像素工具报 `colourspace: parameter space not set`：**\n> 这是 v1.1.0 时代自带的 sharp 0.34.0 残留在 profile 里、与宿主 sharp 0.35.3\n> 同进程 DLL 冲突所致（issue #42 / #75）。删除\n> `~/.dsh/profiles/<profile>/node_modules/sharp` 与\n> `~/.dsh/profiles/<profile>/node_modules/@img` 后重启，或在 profile 目录执行\n> `pnpm install` 重装依赖即可。v1.2.2 起插件会在检测到残留版本时直接告警并\n> 给出同样的指引。\n\n### 卸载\n\n```sh\n# 普通 npm / npx 安装\nnpx @deepseek-ai/dsh plugin --profile web remove dsh-vision-router\n\n# DeepSeek Harness 源码仓库\npnpm dsh plugin --profile web remove dsh-vision-router\n```\n\n同时移除依赖与 bundle 层。若你曾手动禁用官方 DeepSeek 行，记得在 profile 补丁里恢复。\n\n## 故障排查\n\n### 与 dsh-web-ui / dsh-web-ui-all 共存\n\n如果同时安装了 `dsh-web-ui` / `@linxin666/dsh-web-ui-all`，其中的 `dsh-tool-describe-image` 发送钩子可能会在 Vision Router 拿到原始 image block 之前，先把图片改写成 `describe-image` 引用。\n\n`dsh-web-ui` 现在已经提供显式兼容开关：进入 **设置 → 插件配置 → 图像理解**，关闭「**发送时改写图片为 describe-image 引用**」，或配置 `interceptImageSend: false`。关闭后，带图发送会原样放行，`dsh-vision-router` 就能继续收到原始 image block。该开关每次发送都会动态读取，因此无需重装/卸载 hook，也不需要重启 DSH。\n\n上游兼容改动见 [dsh-web-ui#301](https://github.com/zhu1090093659/dsh-web-ui/issues/301)。\n\n### 启动报错 `Unexpected token ... is not valid JSON`（UTF-8 BOM）\n\n**现象**：`dsh web` / `pnpm dsh web` 启动时直接退出：\n\n```\nSyntaxError: Unexpected token ...\nis not valid JSON\nat JSON.parse (<anonymous>)\nat readProfileManifest (packages/boot/app-boot/src/profile.ts)\n```\n\n**原因**：`~/.dsh/profiles/<profile>/package.json` 被某些编辑器保存成了 **UTF-8 with BOM**。文件最前面多了一个不可见的 `\\uFEFF` 字符，dsh 读取 manifest 时直接 `JSON.parse`，而 JSON 不允许在开头出现这个字符，于是解析失败。\n\n**推荐修复**：直接运行 Vision Router 自带的独立修复命令。它不需要 DSH 先成功启动，会定位 profile、检测 UTF-8 BOM，只删除开头的三个 BOM 字节，然后重新验证 JSON：\n\n```sh\nnpx dsh-vision-router repair --profile web\n```\n\n只想检查、不修改文件时：\n\n```sh\nnpx dsh-vision-router doctor --profile web\n```\n\n如果你使用的不是 `web` profile，把 `web` 换成对应名称；也可以不传 `--profile`，让 doctor 扫描全部 profile。\n\n手动兜底方式：VS Code 右下角编码 → “通过编码保存” → 选择 `UTF-8`（无 BOM）。若 `repair` 去掉 BOM 后仍提示 JSON 非法，它不会猜测或重写其他 JSON 内容，请再手动检查文件。\n\n## 安全说明\n\n- 图片中的文字是**不可信证据**：描述、OCR 输出与自动挂载提示都要求 Agent 绝不执行图片内出现的指令。\n- 工具输入经由 `ctx.fs`（沙盒感知）解析；视觉上传只发送选中的图片与问题本身。\n- 产物只写入 `<workspace>/.dsh-vision-router/artifacts`；结果返回绝对路径与字节数。\n- 密钥不上线：`apiKeyEnv` 只指向 DSH 凭据引用，值按调用解析、永不写入日志。\n- 设置写入走设置服务（schema 校验 + 修订号检查）——过期或非法的保存会被拒绝，不会半截生效。\n\n## License\n\n[MIT](LICENSE)\n\n<!-- star-history-chart -->\n## Star 趋势\n\n<p align=\"center\">\n  <a href=\"https://www.star-history.com/?repos=ysr666%2Fdsh-vision-router&type=date&legend=top-left\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=ysr666/dsh-vision-router&type=date&theme=dark&legend=top-left&sealed_token=bl3whaniTB54-d4wMda4a454thk48mT71wkNh8VrSD8OhCKWdBOOQpVKGUXzoEq4kx0_0jhQzEimHIqKAaGftFVV48sqgJ1niBfGy51AX5k_soGw_e7-5Nea6ZY5To0iz7jY9ORc5a_P5N6Qlfm32G2pdHf8_5dZeuHMn5NOZCyTgFcmq2eK1Jwg8ILe\" />\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=ysr666/dsh-vision-router&type=date&legend=top-left&sealed_token=bl3whaniTB54-d4wMda4a454thk48mT71wkNh8VrSD8OhCKWdBOOQpVKGUXzoEq4kx0_0jhQzEimHIqKAaGftFVV48sqgJ1niBfGy51AX5k_soGw_e7-5Nea6ZY5To0iz7jY9ORc5a_P5N6Qlfm32G2pdHf8_5dZeuHMn5NOZCyTgFcmq2eK1Jwg8ILe\" />\n      <img alt=\"Star 历史趋势图\" src=\"https://api.star-history.com/chart?repos=ysr666/dsh-vision-router&type=date&legend=top-left&sealed_token=bl3whaniTB54-d4wMda4a454thk48mT71wkNh8VrSD8OhCKWdBOOQpVKGUXzoEq4kx0_0jhQzEimHIqKAaGftFVV48sqgJ1niBfGy51AX5k_soGw_e7-5Nea6ZY5To0iz7jY9ORc5a_P5N6Qlfm32G2pdHf8_5dZeuHMn5NOZCyTgFcmq2eK1Jwg8ILe\" width=\"100%\" />\n    </picture>\n  </a>\n</p>\n","readmeFilename":"README.zh.md"}