- Add WebSearchInterface + TavilyWebSearch (POST /search, max 5 results)
- SpecsResearchAgent now fetches search results first, injects them as
{{searchResults}} context into the prompt, then calls plain generate()
— no dependency on model-specific web_search tool support
- Update specs_research prompt template (PHP default + DB migration) to
use the new {{searchResults}} variable
- Wire TAVILY_API_KEY env var; register TavilyWebSearch in services.yaml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AI_TEXT_MODEL and AI_VISION_MODEL now point to the Mistral vars by default.
SERP_API_KEY removed. All docker-compose services load .env.local as an
optional overlay so local credentials don't have to go into .env.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements OllamaClientInterface against the Mistral Cloud API
(/v1/chat/completions). Switch by toggling the alias in services.yaml
and pointing AI_TEXT_MODEL / AI_VISION_MODEL env vars at the MISTRAL_*
or OLLAMA_* counterparts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>