Both ai-planner.ts and gemini.ts now use LiteLLM's OpenAI-compatible
API (http://litellm:4000) which proxies to Gemini Flash. Falls back
to direct Gemini API if LITELLM_API_KEY not set.
- docker-compose joins ai-internal network for LiteLLM access
- LITELLM_URL and LITELLM_API_KEY env vars added
- GEMINI_API_KEY kept as optional fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace simple NL→JSON parse with Gemini function-calling agent that
geocodes destinations (Nominatim), searches flights (Kiwi Tequila),
finds Airbnb listings, and computes routes (ORS/OSRM) during planning.
- New ai-tools.ts with 4 tool functions (geocode, flights, accommodation, routes)
- New ai-planner.ts with Gemini 2.0 Flash agentic loop (max 8 iterations)
- New /api/trips/plan endpoint (60s timeout for external API calls)
- Enhanced ParsedTripPreview with flight/accommodation carousels, route summary, mini map
- Trip creation now persists lat/lng, route segments, and selected bookings
- NLInput shows rotating status messages during planning
- Kiwi flight search gracefully degrades when API key not configured
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Part of the ridentity.online branding migration. The EncryptID auth
server is now accessible at auth.ridentity.online (with the legacy
encryptid.jeffemmett.com kept as a backward-compatible alias).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>