{"_id":"@bismawy/pi-vision-watcher","_rev":"9-330e723fa75558dc367a4509b68aff7c","name":"@bismawy/pi-vision-watcher","dist-tags":{"latest":"1.0.15"},"versions":{"1.0.7":{"name":"@bismawy/pi-vision-watcher","version":"1.0.7","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.7","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.png","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"b430ab9aa3e9a96172fe7692a4016f86a3feda58","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.7.tgz","fileCount":14,"integrity":"sha512-nH5eS+CT9OWW4tyWf76bx1G1QSZFNp7mH0vsXzbbHsQhvzahZa9DaanSi/Oj8y2l6Y4KYNUAJfq8v0mxJDApyQ==","signatures":[{"sig":"MEYCIQDVdx/peUFCZTIKLUQErVUYGykP3G+YGkXMcvKH7NsAyQIhALtTt9awnFQGfFX/dgulnUzk4eoXNu5NYZ/iB3KYiIkS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175979},"type":"module","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.17.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.7_1787890591476_0.16833823939588588","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@bismawy/pi-vision-watcher","version":"1.0.8","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.8","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.png","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"398ba01a4f2b36097a7edeff47a2611a9b182672","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.8.tgz","fileCount":14,"integrity":"sha512-KgPgbchBQS8epNaqXAuVHMg6kjOE3KuVh0pjVBj94MvOLmcBMjpD2w+EiwR4eJFt4WzUHAwUrD7wXZVFaT4/Fw==","signatures":[{"sig":"MEQCIAo4MQoX2zACzzyGFxZndxEjtNVz/Z2VzKYRsprFGzy/AiBabhtonCC6sa18MEr0OdRvRmJiuv5EB7aaljnukAjU6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184876},"type":"module","gitHead":"ab7809ff2b74fa059b7580971e38afb3880c8ea1","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.17.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.8_1787990479212_0.5947963277384887","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@bismawy/pi-vision-watcher","version":"1.0.9","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.9","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"f2f7b011f7d0c4efe8ff39019464d6ae2ebd4f15","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.9.tgz","fileCount":14,"integrity":"sha512-bvjk19mE+JxutZW8IlrcrHXhU6rP/BivfOyk90tz7/JrdMUCSw1+lhiklKTS3GL35lipFe0aV6PGpTGayHkvCA==","signatures":[{"sig":"MEQCIC8XamPgDa8CD6236RPLHggOIxPvUbIfudK13dQkDLq2AiALMx8Dmh3Iq+ZCBpbB3mdg2o32uJ62Nub4iWQWC8gLqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184617},"type":"module","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.19.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.9_1788069615726_0.02984457980580224","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@bismawy/pi-vision-watcher","version":"1.0.10","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.10","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"306a096a3b3fb685d5082ece1c6db4d69f3721c4","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.10.tgz","fileCount":14,"integrity":"sha512-yDdyh/xd9q6raSfmslTrX4BJJkAR37MYENPVTygCo1IMrMLhKT86vlpiADMdvUjQouZK6Qe6zgtk9V1kh5vpTA==","signatures":[{"sig":"MEUCIQCR0ft6mEuwgzMRrY30RprrhTayEzEcnn62ZuiqI5HCkAIgbmlpC1hGO7OepvM2Zuil95vHE9k9Jc5a1QPagGWLOp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185078},"type":"module","gitHead":"b96982a7d30de69333b807a7e28156519fde64f1","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.17.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.10_1788425611909_0.08930587586670513","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@bismawy/pi-vision-watcher","version":"1.0.11","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.11","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"39a3fa319980116446601e68eb6ac7b3e7f0e1d1","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.11.tgz","fileCount":14,"integrity":"sha512-wZIxHE3UlxYF9/3PfB+JQJWyT/IGri1UFf9OWbinXcvrwA20FmO7KAAqfPUuW3hSrQL5a0EU2f/hUarw0sMrhw==","signatures":[{"sig":"MEUCIEKhXyC26TDgYWg4Z4ir7HWE+BSt3SOQh4X4VbcdJRV6AiEAsK53BYdtPI0XEFeMqwjwLx+HJ1l6u5L44RgORiVn5i0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDnbFPy1wLNVuxOfvC047x1o2EKYnDOFRdEf2uRx4ABZgIgZjkEfWvoZaXLzdR2q3aA7GF9D+QdXslUBwMOEEzIKG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189371},"type":"module","gitHead":"ad1ab8988ae89a56cef2543d6b348f657a593521","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.17.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.11_1789217258522_0.553009903561744","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@bismawy/pi-vision-watcher","version":"1.0.12","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.12","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"d5013258d60c5f0cc9f69a6fb057997462f930e4","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.12.tgz","fileCount":14,"integrity":"sha512-oPxGVA000X5xJEZ8+MEqTevfo1SM8LX2Mcbilj5INzXmqlXjOqgebY0oh0NSJMIBxx4fr+Vyajv/E6P+ll4yuw==","signatures":[{"sig":"MEUCIHspYVa0tkeuhksPDYpH3dFt7nEvI8TQnft+5Le4s9AHAiEAjK9gcAaSfSNpdQW00OSLukPdMz6uM6q+U/5Fb42IuzY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICQfeSPT1VfcLQSz9aHzemwR0lhYFK33FZyRV9rVaHkcAiBmjWHdIs1Qt7Gz/G7TrJpkeGPdrNwb8t2mxORoKZ8ANA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189404},"type":"module","gitHead":"83f7ecb638813a6c08888d97bf89b2e93a7a638f","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.19.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.12_1790070009979_0.7077877450715084","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@bismawy/pi-vision-watcher","version":"1.0.13","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.13","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"e7dde79e130945db6d9807649ce78dcc6a3648a0","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.13.tgz","fileCount":14,"integrity":"sha512-iInj2mHnIcUg+BgaGFPSXsUct5aAIoywxXoHqq9VMk4q2xjfVEtYcuHocmwYg5eWo7HMguJjLfaGL0QIe87N1A==","signatures":[{"sig":"MEQCIHu1Wdz7Mx4Qc5hParbBgsxfHKe1/JeoGlOaqI3ADGbDAiB9xRUh+Srw+YBM2Da1DFQ5j83aMkCVVdfQWwoUC0NX+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBpnf4iuK8roNlHNonupkrOIhXgzlyrvZxpSTU3OaZFAAiEA4PuQfl3uEnBU3bfz35AEaCU+SHPoMsNJ0CgkTY461Sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189784},"type":"module","gitHead":"9c3d70bfab8c93e60b1fbb3c8094dccc8a81e8fc","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.19.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.13_1790073103092_0.8540587555287749","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@bismawy/pi-vision-watcher","version":"1.0.14","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"author":{"name":"bismawy"},"license":"MIT","_id":"@bismawy/pi-vision-watcher@1.0.14","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp","extensions":["./vision-watcher.ts"]},"dist":{"shasum":"2e2d8dafcf9e3daf1d3f671bde4655711afe100f","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.14.tgz","fileCount":14,"integrity":"sha512-8/gl4xiK38+ojBjMaJUjkzWbemsbFKAEO5jHrfJLXMFfzVrlfsb9clgh1Jv6kR8jCaTIDquzwWNhnUJyxvQ1vw==","signatures":[{"sig":"MEUCIEqvej2DKCtd8SEdzPgL42v47zVqUoqFfCaDuQcIi1VqAiEAw7OtqcIjiV5q+XWcKc6leoKfAskCBJzE77+P7fCR+9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDZlkAJ4eTD6lt/BBpSHL9Y/xAPuMHHPAjBwuM8mfz1uAIgEpJhH4QGsvx5ZycOTjvM7pNTsnHNZ1bOKCMGxn0dZIc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189917},"type":"module","gitHead":"6e6a3122df6e72e5735db6dd40d3385e14ece6e8","scripts":{"test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.19.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vision-watcher_1.0.14_1790074416988_0.06084564093657785","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"pi":{"image":"https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/banner.webp","extensions":["./vision-watcher.ts"]},"_id":"@bismawy/pi-vision-watcher@1.0.15","bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"dist":{"shasum":"e4a6108ae85b248e759f544bb19b3098a7553c5b","tarball":"https://registry.npmjs.org/@bismawy/pi-vision-watcher/-/pi-vision-watcher-1.0.15.tgz","fileCount":15,"integrity":"sha512-rBxnsaC1syBGXq5zWxxnYl18rfVlQZG+Qcpqeqdl7SpkFGGBtIlXjs4eJp/m1+2FZ2T64Yxca2oGrwxI8r2Vrw==","signatures":[{"sig":"MEUCIQDzM/7cLCZznFJnWwxv3EUYgj6MuavFqwoxH8MOanFkYQIgQqI2FZkxiqrno7Fn/r2psTb2hZyOETIOYdSQ2OV4F3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCY6vuz269NIQ2YZs7HalNWhJAN69qswipn6SSIFuHpNAIgZzXSdspucbPdp2bc7OOqFM73fPRCA6YrVaoGiGRAW1Y="}],"unpackedSize":194055},"name":"@bismawy/pi-vision-watcher","type":"module","author":{"name":"bismawy"},"gitHead":"43be9ef3850c88e3266af8fece89093a3dd970fa","license":"MIT","scripts":{"dev":"pi --extension ./vision-watcher.ts","test":"vitest run","lint:dead":"knip --no-gitignore","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"version":"1.0.15","_npmUser":{"name":"bismawy","email":"byztma@gmail.com"},"homepage":"https://github.com/bismawy/pi-vision-watcher#readme","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"_npmVersion":"11.17.0","description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","directories":{},"maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.20.0","devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"25.9.1","@vitest/coverage-v8":"4.1.7","@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-vision-watcher_1.0.15_1790576713682_0.9569749338215388"}}},"time":{"created":"2026-08-28T04:16:31.239Z","modified":"2026-09-28T06:25:13.931Z","1.0.7":"2026-08-28T04:16:31.630Z","1.0.8":"2026-08-29T08:01:19.445Z","1.0.9":"2026-08-30T06:00:15.904Z","1.0.10":"2026-09-03T08:53:32.036Z","1.0.11":"2026-09-12T12:47:38.618Z","1.0.12":"2026-09-22T09:40:10.077Z","1.0.13":"2026-09-22T10:31:43.176Z","1.0.14":"2026-09-22T10:53:37.063Z","1.0.15":"2026-09-28T06:25:13.783Z"},"bugs":{"url":"https://github.com/bismawy/pi-vision-watcher/issues"},"author":{"name":"bismawy"},"license":"MIT","homepage":"https://github.com/bismawy/pi-vision-watcher#readme","keywords":["pi-package","pi-extension","pi-vision-watcher","pi-vision-handoff","pi","pi-coding-agent","extension","vision","image","handoff","multimodal","model-selector","accessibility"],"repository":{"url":"git+https://github.com/bismawy/pi-vision-watcher.git","type":"git"},"description":"Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models","maintainers":[{"name":"bismawy","email":"byztma@gmail.com"}],"readme":"# Vision Watcher\n\nGive text-only models vision. Seamless multimodal handoff. Built for Pi.\n\n[![Custom badge](https://shieldcn.dev/badge/pi-%20Packages.svg?variant=outline&size=xs&logo=ri%3APiPiBold)](https://pi.dev/packages/@bismawy/pi-vision-watcher)\n[![badge](https://shieldcn.dev/npm/@bismawy/pi-vision-watcher.svg?variant=outline&size=xs)](https://www.npmjs.com/package/@bismawy/pi-vision-watcher)\n[![license](https://shieldcn.dev/github/bismawy/pi-vision-watcher/license.svg?variant=outline&size=xs)](https://github.com/bismawy/pi-vision-watcher)\n\n![Vision Watcher: intelligent vision handoff for text-only coding models in Pi](https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/banner.webp)\n\n## Overview\n\npi-vision-watcher gives text-only pi models vision — images are described in the background by a vision model you pick, then handed off to text-only coding models without interrupting your workflow.\n\n- Connected-only Picker: `/vision-watcher` shows only vision-capable models from providers where you actually have credentials.\n- Batching & Cache: Multiple images across parallel tool calls are batched into one describer request; cached images (SHA-256) are never re-described.\n- False-Vision Healing: Aggregator providers sometimes flag text-only models as multimodal, causing HTTP 400s. The extension proactively forces handoff for them and auto-heals `models.json` in-process.\n- Thinking Controls: Adjust reasoning effort (`off` – `max`) for reasoning-capable vision models.\n- Fallback Chains: Automatically falls back to backup vision models when the primary is rate-limited or down.\n\n## Install\n\n```bash\npi install npm:@bismawy/pi-vision-watcher\n```\n\nRun `/vision-watcher` to pick your vision model (or set it directly: `/vision-watcher model openai/gpt-4o`). Handoff is on by default — switch to any text-only model and work as usual.\n\nTo test locally without installing:\n```bash\npi --extension ./vision-watcher.ts\n```\n\n## Shortcuts\n\n| Key | Action |\n| --- | --- |\n| `space` | Select highlighted model as primary describer (press again to clear) |\n| `ctrl+q` · `f2` | Toggle highlighted model in/out of failover chain (marked 🔗, max 3) |\n| `ctrl+t` | Walk thinking ladder (`off` → `minimal` → `low` → `medium` → `high` → `xhigh` → `max`) |\n| `ctrl+a` | Toggle async paste handoff |\n| `enter` · `ctrl+s` | Save configuration (primary describer and chain) |\n| `esc` | Cancel and exit picker |\n\n> **Notes:**\n> - `ctrl+q` toggles backup models safely; `f2` is also available as a fallback key.\n> - While filtering models in search, `space` enters a space character so multi-word queries (e.g. `gemini 3.8`) stay typeable.\n> - The detail pane shows live configuration — primary, chain, thinking, and async handoff — so every keypress previews what will be saved.\n\n## Commands\n\n| Command | Action |\n| --- | --- |\n| `/vision-watcher` | Interactive picker for connected vision models |\n| `/vision-watcher model <provider/id>` | Set primary vision describer directly |\n| `/vision-watcher status` | View current configuration |\n| `/vision-watcher auto <on\\|off>` | Toggle automatic handoff (default: `on`) |\n| `/vision-watcher add <provider/id>` | Force handoff on a specific model |\n| `/vision-watcher remove <provider/id>` | Remove model from forced handoff list |\n| `/vision-watcher thinking <level>` | Configure reasoning effort (`off` – `max`) |\n| `/vision-watcher timeout <ms>` | Set per-image description timeout (default `45000`) |\n| `/vision-watcher prewarm <on\\|off>` | Describe pasted images at paste-time (opt-in) |\n| `/vision-watcher async <on\\|off>` | Inject pasted-image descriptions asynchronously when no matching `read` wins |\n| `/vision-watcher clear` | Clear configured vision model |\n| `/vision-watcher enable` · `disable` | Toggle extension active state |\n| `/vision-watcher help` | List all subcommands |\n\n## Architecture\n\n<details>\n<summary><b>Configuration</b> (<code>~/.pi/agent/extensions/pi-vision-watcher.json</code>)</summary>\n\n```json\n{\n  \"enabled\": true,\n  \"visionModel\": \"openai/gpt-4o\",\n  \"fallbackModels\": [],\n  \"autoHandoff\": true,\n  \"handoffModels\": [],\n  \"thinking\": false,\n  \"thinkingLevel\": \"medium\",\n  \"describeTimeoutMs\": 45000,\n  \"prewarmPastedImages\": false,\n  \"asyncClipboardHandoff\": false,\n  \"maxTokens\": null,\n  \"cacheMax\": 50,\n  \"maxDescriptionLines\": 0\n}\n```\n\nMost fields have sane defaults — `visionModel` is the only one you normally set.\n\n`fallbackModels` is the failover chain: when the primary describer fails (timeout, rate limit, auth), each entry is tried **in order** until one returns a description. The picker caps the chain at 3 entries (`ctrl+q`). Set it from the picker instead of hand-editing the file.\n\n</details>\n\n<details>\n<summary><b>Diagnostics & Recovery</b></summary>\n\n- Failed vision calls log with stack traces to `~/.pi/agent/logs/pi-vision-watcher/errors.log` and degrade gracefully to `[Image: description unavailable]`.\n- When a model falsely advertises image capability and 400s, the error is captured on `message_end`, `modelOverrides.<model>.input = [\"text\"]` is written to `models.json`, and the registry refreshes in-process.\n\n</details>\n\n<details>\n<summary><b>Components</b></summary>\n\n| File | Role |\n| --- | --- |\n| `vision-watcher.ts` | Extension entry point, lifecycle hooks, and CLI command handlers |\n| `src/vision-model-selector.ts` | Interactive TUI model picker with connected-only filtering |\n| `src/describer.ts` | Vision API request orchestration, multi-image batching, and failover chains |\n| `src/dataloader.ts` | Batched image loader to prevent redundant parallel requests |\n| `src/image.ts` | Image hashing (SHA-256), memory caching, and MIME detection |\n| `src/prewarm-editor.ts` | Paste-time image prewarming and async clipboard injection |\n| `src/error-log.ts` | Structured logging and error capture |\n\n</details>\n\n<details>\n<summary><b>Development</b></summary>\n\n```bash\nnpm test          # Vitest suite (250+ unit tests)\nnpm run typecheck # TypeScript checks\nnpm run lint:dead # Knip dead code analysis\n```\n\n</details>\n\n## License\n\nDistributed under the **MIT** license.\n\n## Author\n\n[Bisma](https://github.com/bismawy)\n","readmeFilename":"README.md"}