diff --git a/apps/frontend/app/[locale]/admin/assistant/page.tsx b/apps/frontend/app/[locale]/admin/assistant/page.tsx new file mode 100644 index 0000000..fafc15c --- /dev/null +++ b/apps/frontend/app/[locale]/admin/assistant/page.tsx @@ -0,0 +1,16 @@ +'use client'; + +import { AssistantWorkspace } from '@/components/assistant/assistant-workspace'; +import { ADMIN_STARTER_KEYS } from '@/components/assistant/starters'; + +/** + * Console d'assistant de l'administration. + * + * Le meme ecran que l'espace produit, avec des amorces tournees vers le + * pilotage de la plateforme. Ce qu'un administrateur peut faire ne vient pas + * de cette page : le serveur ouvre les capacites `admin_*` sur la foi de son + * role, ici comme depuis un client MCP. + */ +export default function AdminAssistantPage() { + return ; +} diff --git a/apps/frontend/messages/en.json b/apps/frontend/messages/en.json index 1df4c55..59b5395 100644 --- a/apps/frontend/messages/en.json +++ b/apps/frontend/messages/en.json @@ -3255,7 +3255,8 @@ "blog": "Blog", "blogDesc": "Create and manage blog articles", "logs": "System logs", - "logsDesc": "View and download application logs" + "logsDesc": "View and download application logs", + "assistant": "AI assistant" } }, "csvUpload": { @@ -4798,6 +4799,7 @@ "conversations": "Conversations", "newConversation": "New conversation", "noConversations": "No conversations yet.", + "actions": "Actions", "rename": "Rename", "delete": "Delete", "deleteConfirm": "Delete this conversation?", @@ -4805,6 +4807,11 @@ "save": "Save", "cancel": "Cancel", "sources": "Sources in the Xpeditis wiki", + "groups": { + "today": "Today", + "lastWeek": "Last 7 days", + "older": "Older" + }, "starters": { "lclFcl": "I have 4 m³ to ship from Shanghai to Marseille: LCL or FCL?", "documents": "Which documents do I need to export wine to the United States?", @@ -4831,6 +4838,24 @@ "title": "Booking or account issue", "answer": "Which booking or step is causing trouble? Note the booking reference and describe the expected result, then email support@xpeditis.com. Never share passwords or API keys." } + }, + "actionsLabel": "Actions taken", + "adminWelcome": "What would you like to manage?", + "capabilities": { + "whoami": "Checked your permissions", + "get_subscription": "Read your subscription", + "search_documentation": "Searched the wiki", + "search_rates": "Searched rates", + "list_carriers": "Listed carriers", + "list_my_bookings": "Read your bookings", + "list_organization_bookings": "Organisation bookings", + "get_booking": "Booking details", + "booking_statistics": "Booking statistics", + "cancel_booking": "Cancelled a booking", + "delete_unpaid_booking": "Deleted an unpaid booking", + "admin_list_users": "Listed platform accounts", + "admin_list_organizations": "Listed organisations", + "admin_rate_grid_overview": "Rate grid overview" } } } diff --git a/apps/frontend/messages/fr.json b/apps/frontend/messages/fr.json index ba2b85c..0932d43 100644 --- a/apps/frontend/messages/fr.json +++ b/apps/frontend/messages/fr.json @@ -3255,7 +3255,8 @@ "blog": "Blog", "blogDesc": "Créer et gérer les articles du blog", "logs": "Logs système", - "logsDesc": "Visualiser et télécharger les logs applicatifs" + "logsDesc": "Visualiser et télécharger les logs applicatifs", + "assistant": "Assistant IA" } }, "csvUpload": { @@ -4798,6 +4799,7 @@ "conversations": "Conversations", "newConversation": "Nouvelle conversation", "noConversations": "Aucune conversation pour le moment.", + "actions": "Actions", "rename": "Renommer", "delete": "Supprimer", "deleteConfirm": "Supprimer cette conversation ?", @@ -4805,6 +4807,11 @@ "save": "Enregistrer", "cancel": "Annuler", "sources": "Sources dans le wiki Xpeditis", + "groups": { + "today": "Aujourd'hui", + "lastWeek": "7 derniers jours", + "older": "Plus ancien" + }, "starters": { "lclFcl": "J'ai 4 m³ à expédier de Shanghai à Marseille : LCL ou FCL ?", "documents": "Quels documents préparer pour exporter du vin vers les États-Unis ?", @@ -4831,6 +4838,24 @@ "title": "Réservation ou problème de compte", "answer": "Quelle réservation ou quelle étape pose problème ? Notez la référence du dossier et décrivez le résultat attendu, puis écrivez à support@xpeditis.com. Ne transmettez jamais votre mot de passe ou vos clés API." } + }, + "actionsLabel": "Actions effectuées", + "adminWelcome": "Que voulez-vous piloter ?", + "capabilities": { + "whoami": "Vérification de vos droits", + "get_subscription": "Lecture de votre abonnement", + "search_documentation": "Recherche dans le wiki", + "search_rates": "Recherche de tarifs", + "list_carriers": "Liste des transporteurs", + "list_my_bookings": "Lecture de vos réservations", + "list_organization_bookings": "Réservations de l'organisation", + "get_booking": "Détail d'une réservation", + "booking_statistics": "Statistiques de réservations", + "cancel_booking": "Annulation d'une réservation", + "delete_unpaid_booking": "Suppression d'une réservation impayée", + "admin_list_users": "Liste des comptes de la plateforme", + "admin_list_organizations": "Liste des organisations", + "admin_rate_grid_overview": "État des grilles tarifaires" } } } diff --git a/apps/frontend/src/__tests__/components/nav-config.test.ts b/apps/frontend/src/__tests__/components/nav-config.test.ts index 0475ca5..298749d 100644 --- a/apps/frontend/src/__tests__/components/nav-config.test.ts +++ b/apps/frontend/src/__tests__/components/nav-config.test.ts @@ -66,7 +66,7 @@ describe('buildAppNav', () => { }); describe('buildAdminNav', () => { - it('expose les sept destinations d administration', () => { + it('expose les huit destinations d administration', () => { const groups = buildAdminNav({ t, tShell }); const keys = groups.flatMap(g => g.items).map(i => i.key); expect(keys).toEqual([ @@ -76,6 +76,7 @@ describe('buildAdminNav', () => { 'documents', 'csvRates', 'blog', + 'assistant', 'logs', ]); }); diff --git a/apps/frontend/src/components/shell/nav-config.ts b/apps/frontend/src/components/shell/nav-config.ts index dabe2bb..17fa150 100644 --- a/apps/frontend/src/components/shell/nav-config.ts +++ b/apps/frontend/src/components/shell/nav-config.ts @@ -175,7 +175,10 @@ export function buildAdminNav({ t, tShell }: AdminNavParams): NavGroup[] { { key: 'system', label: tShell('groups.system'), - items: [{ key: 'logs', label: t('items.logs'), href: '/admin/logs', icon: ScrollText }], + items: [ + { key: 'assistant', label: t('items.assistant'), href: '/admin/assistant', icon: Bot }, + { key: 'logs', label: t('items.logs'), href: '/admin/logs', icon: ScrollText }, + ], }, ]; }