feat(ai-chat): implement AI Chat Assistant with MCP tool integration
Full-stack AI Chat feature for shop management:
Backend (BFF Server - 6 new files):
- IAiChatProvider: provider interface + shared DTOs for messages/tools
- OpenAiChatProvider: handles OpenAI + OpenRouter APIs (function calling)
- ClaudeChatProvider: handles Anthropic Claude Messages API (tool_use)
- McpToolRegistry: 12 MCP tool definitions as LLM function schemas
(list_products, check_inventory, popular_items, etc.)
- McpToolExecutor: routes tool calls to microservices via named HttpClients
- AiChatController: POST /api/bff/ai/chat with tool execution loop
(max 5 iterations), GET/PUT /api/bff/ai/config for settings
- Supports 3 providers: OpenAI, OpenRouter, Claude (Anthropic)
- API keys server-side only, in-memory config store (v1)
Frontend (Blazor WASM - 1 new + 6 modified):
- ShopAiChat.razor: chat UI with message bubbles, suggested prompts,
tool usage badges, typing indicator, Enter key support
- ShopSidebarConfig: added "AI Assistant" menu item (bot icon)
- ShopPage: added "ai-chat" route case
- PosDataService: AI chat DTOs + SendAiChatAsync/GetConfig/UpdateConfig
- Locale files: added Shop_Menu_AiChat key (vi-VN + en-US)
- Program.cs: registered McpToolExecutor + LLM provider HttpClients
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>