768bcd4356
Image recognition and the chat model shared DEEPSEEK_API_KEY: the image-recognition bundle defaulted apiKeyEnv to the model key, so saving one overwrote the other. Point the bundle at IMAGE_RECOGNITION_API_KEY and guard both the provider and the settings card against a stale model ref, so vision never reads or writes the chat key. Also add a clear-key button, default the model to qwen3-vl-flash on the DashScope compatible-mode endpoint, and send file images as base64 with a normalized base URL. Co-Authored-By: Claude <noreply@anthropic.com>
vision/
Image-recognition capability family over the DeepSeek Harness: a Service Definition seam, a user-configurable HTTP vision provider, and the model-facing recognition consumer (tool + skill + deterministic image-task injection). The opt-in bundle composes them for a profile.
| Package | Role |
|---|---|
image-recognition/ |
Service Definition: ctx.imageRecognition provider registry + selection + ImageRecognitionError |
image-recognition-http/ |
Provider: user-configured OpenAI-compatible chat-completions vision endpoint |
tool-image-recognition/ |
Consumer: recognize_image tool, image-recognition skill, deterministic image-task injection |
../bundle/image-recognition |
Opt-in bundle mounting the seam, provider, and consumer |
A capability seam keeps Service Definition / Provider / Consumer roles separate (capability seams); the opt-in bundle is how a deployment turns image recognition on per profile.