From 5628a0fcbacee53123470a7c687702549e19b458 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 17 Nov 2025 14:02:35 +0000 Subject: [PATCH 1/4] Add image asset for the application Attached a new image file to the project assets. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 5fd143fc-1d88-40f0-be86-d1ddecae7b5a Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/YZ4cngz --- ...FC0-4540-95E0-A6F045D802E9}_1763388140785.png | Bin 0 -> 9577 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 attached_assets/{73BD5BFF-8FC0-4540-95E0-A6F045D802E9}_1763388140785.png diff --git a/attached_assets/{73BD5BFF-8FC0-4540-95E0-A6F045D802E9}_1763388140785.png b/attached_assets/{73BD5BFF-8FC0-4540-95E0-A6F045D802E9}_1763388140785.png new file mode 100644 index 0000000000000000000000000000000000000000..8befa0b32da1f8e5fa2f5f3070ce22eaa531e6e0 GIT binary patch literal 9577 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 literal 0 HcmV?d00001 From 8dcc3b2fcab272aeeb23ab2fbb355b83021aeb74 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 17 Nov 2025 14:07:14 +0000 Subject: [PATCH 2/4] Transitioned from Plan to Build mode Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: b405a677-ff46-4399-8f34-8a043c7f5cc8 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/YZ4cngz From 54cb7acb640e185b4633b63ad727b6394c111e99 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 17 Nov 2025 14:14:15 +0000 Subject: [PATCH 3/4] Update AI chat to use correct API endpoint for fetching models Change query key and data access for OpenRouter models in AiChat component. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: 30146ff9-f3f2-44ad-aebf-af4a55a7e960 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/f2EnhiB --- client/src/components/ai-chat.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/components/ai-chat.tsx b/client/src/components/ai-chat.tsx index 55320bd..d56d334 100644 --- a/client/src/components/ai-chat.tsx +++ b/client/src/components/ai-chat.tsx @@ -36,11 +36,11 @@ export default function AiChat() { const { toast } = useToast(); // Fetch available models from OpenRouter - const { data: modelsData, isLoading: modelsLoading } = useQuery<{ models: OpenRouterModel[] }>({ - queryKey: ['/api/ai/models'], + const { data: modelsData, isLoading: modelsLoading } = useQuery<{ data: OpenRouterModel[] }>({ + queryKey: ['/api/openrouter/models'], }); - const availableModels = modelsData?.models || []; + const availableModels = modelsData?.data || []; const generateMutation = useMutation({ mutationFn: async (productInfo: any) => { From 70ce475b40bbd17445a6bed1b88d5f43f11d1369 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 17 Nov 2025 14:15:21 +0000 Subject: [PATCH 4/4] Enable all users to access the AI assistant feature Fix bug preventing non-admin users from accessing the AI assistant feature by changing the API endpoint from `/api/ai/models` to `/api/openrouter/models` and updating data structure access. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 746a4c84-0125-483f-8902-bc49a1000fc3 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/f2EnhiB --- replit.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/replit.md b/replit.md index 261645d..073508f 100644 --- a/replit.md +++ b/replit.md @@ -10,6 +10,9 @@ Preferred communication style: Simple, everyday language. ## Recent Changes +### November 17, 2025 +- **AI Assistant Model Loading Fix**: Fixed bug preventing non-admin users from accessing the AI assistant feature. Problem: The AI chat component (`ai-chat.tsx`) was querying `/api/ai/models` which requires admin privileges (`requireAdmin`), causing model list to fail loading for regular users. Solution: Changed the component to use `/api/openrouter/models` endpoint instead, which only requires authentication (`requireAuth`). Updated data structure access from `modelsData?.models` to `modelsData?.data` to match the OpenRouter API response format `{ data: OpenRouterModel[] }`. This fix enables all authenticated users to load the model list and use the AI assistant feature. The endpoint `/api/openrouter/models` was already being used in Settings page for the same purpose, ensuring consistency across the application. + ### November 5, 2025 - **New Post Media Grid Optimization**: Optimized the "Nouvelle publication" media grid for better performance and usability. Changes: (1) Limited display to 12 most recent media items sorted by createdAt descending, (2) Removed infinite scroll functionality, (3) Implemented useMemo with spread copy to prevent React Query cache mutation during sorting, (4) Added conditional rendering for videos using `