feat(ui): console d assistant pour l administration

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
This commit is contained in:
David 2026-09-07 21:40:54 +02:00
parent 177b70ea96
commit 8957eeb511
5 changed files with 74 additions and 4 deletions

View File

@ -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 <AssistantWorkspace starterKeys={ADMIN_STARTER_KEYS} welcomeKey="adminWelcome" />;
}

View File

@ -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"
}
}
}

View File

@ -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"
}
}
}

View File

@ -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',
]);
});

View File

@ -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 },
],
},
];
}