feat(admin): show the MCP tools a plugin will advertise

The manifest declaration only becomes an admin-visible control if the
admin can actually read it. Nothing rendered capabilities.mcpTools, so
approving mcp:tools meant approving text you would first meet inside a
chat.

The pre-install dialog now lists the tool names and descriptions, beside
the existing access and egress sections, and the grant gets an
at-a-glance chip like every other capability.

Desktop and mobile both, since the panels are parallel copies.
This commit is contained in:
Renzo Beux
2026-08-28 14:08:19 -03:00
committed by Maurice
parent 957cdffa7b
commit eb7d595203
25 changed files with 129 additions and 4 deletions
@@ -6,7 +6,7 @@ import {
ArrowUpCircle, Github, ExternalLink, ChevronDown, Check, Lock, Search, Link2, KeyRound, ShieldAlert,
SlidersHorizontal, ArrowUpDown, CircleDot, MoreHorizontal, RotateCw, ArrowRight, Database, Users, LayoutDashboard,
Radio, Luggage, Globe, Image, CalendarDays, Bell, Info, History, PauseCircle,
Wallet, Puzzle, MapPin, ListChecks, Pencil, Tag, FileText, Route, Navigation, Clock, LocateFixed, Palette,
Wallet, Puzzle, MapPin, ListChecks, Pencil, Tag, FileText, Route, Navigation, Clock, LocateFixed, Palette, Bot,
} from 'lucide-react'
import PluginIcon from '../shared/PluginIcon'
import { adminApi } from '../../api/client'
@@ -123,7 +123,12 @@ interface RegistryDetail extends RegistryItem {
requiredAddons?: string[]
pluginDependencies?: PluginDep[]
/** Display slice of the manifest's capabilities — drives the same chips as an installed row. */
capabilities?: { widget?: { slot?: string }; tripPage?: { replaces?: string[] } }
capabilities?: {
widget?: { slot?: string }
tripPage?: { replaces?: string[] }
/** Tools the plugin will publish on the MCP server once mcp:tools is granted. */
mcpTools?: Array<{ name: string; title?: string; description: string }>
}
} | null
}
@@ -241,6 +246,7 @@ function deriveCaps(perms: string[], caps: { widget?: { slot?: string }; tripPag
}
// Replacing planner tabs is the one capability that HIDES core UI — always chip it.
if (caps.tripPage?.replaces?.length) out.push({ icon: LayoutDashboard, label: t('admin.plugins.cap.replacesTabs') })
if (perms.includes('mcp:tools')) out.push({ icon: Bot, label: t('admin.plugins.cap.mcpTools') })
if (perms.some(p => p.startsWith('ws:broadcast'))) out.push({ icon: Radio, label: t('admin.plugins.cap.realtime') })
if (perms.includes('hook:photo-provider')) out.push({ icon: Image, label: t('admin.plugins.cap.photos') })
if (perms.includes('hook:calendar-source')) out.push({ icon: CalendarDays, label: t('admin.plugins.cap.calendar') })
@@ -1568,6 +1574,28 @@ function PluginDetailModal({ item, installed, busy, onInstall, onClose, t, local
</div>
)}
{/* The tool text a plugin publishes goes straight into every user's
assistant context once mcp:tools is granted, and nothing else in
this dialog shows it. An admin approving the grant should read the
names and descriptions first, not discover them in a chat. */}
{manifest && (manifest.capabilities?.mcpTools?.length ?? 0) > 0 && (
<div className="mt-5">
<h4 className="text-[11px] font-semibold uppercase tracking-wider text-content-muted">{t('admin.plugins.mcpToolsTitle')}</h4>
<ul className="mt-2 space-y-1.5">
{(manifest.capabilities?.mcpTools ?? []).map(tool => (
<li key={tool.name} className="flex items-start gap-2.5 py-0.5">
<Bot size={15} className="text-accent mt-0.5 shrink-0" />
<div className="min-w-0">
<code className="text-[12px] font-mono text-content">{tool.name}</code>
<p className="text-[12.5px] text-content-secondary leading-snug">{tool.title || tool.description}</p>
</div>
</li>
))}
</ul>
<p className="text-[11.5px] text-content-faint mt-2">{t('admin.plugins.mcpToolsHint')}</p>
</div>
)}
{manifest && (egress.length > 0 || manifest.operatorEgress) && (
<div className="mt-5">
<h4 className="text-[11px] font-semibold uppercase tracking-wider text-content-muted">{t('admin.plugins.connectsTitle')}</h4>
@@ -5,7 +5,7 @@ import {
ArrowUpCircle, Github, ExternalLink, ChevronDown, Check, Lock, Search, Link2, KeyRound, ShieldAlert,
SlidersHorizontal, ArrowUpDown, CircleDot, MoreHorizontal, RotateCw, ArrowRight, Database, Users, LayoutDashboard,
Radio, Luggage, Globe, Image, CalendarDays, Bell, Info, History, PauseCircle,
Wallet, Puzzle, MapPin, ListChecks, Pencil, Tag, FileText, Route, Navigation, Clock, LocateFixed, Palette,
Wallet, Puzzle, MapPin, ListChecks, Pencil, Tag, FileText, Route, Navigation, Clock, LocateFixed, Palette, Bot,
} from 'lucide-react'
import PluginIcon from '../../../components/shared/PluginIcon'
import { adminApi } from '../../../api/client'
@@ -123,7 +123,12 @@ interface RegistryDetail extends RegistryItem {
requiredAddons?: string[]
pluginDependencies?: PluginDep[]
/** Display slice of the manifest's capabilities — drives the same chips as an installed row. */
capabilities?: { widget?: { slot?: string }; tripPage?: { replaces?: string[] } }
capabilities?: {
widget?: { slot?: string }
tripPage?: { replaces?: string[] }
/** Tools the plugin will publish on the MCP server once mcp:tools is granted. */
mcpTools?: Array<{ name: string; title?: string; description: string }>
}
} | null
}
@@ -241,6 +246,7 @@ function deriveCaps(perms: string[], caps: { widget?: { slot?: string }; tripPag
}
// Replacing planner tabs is the one capability that HIDES core UI — always chip it.
if (caps.tripPage?.replaces?.length) out.push({ icon: LayoutDashboard, label: t('admin.plugins.cap.replacesTabs') })
if (perms.includes('mcp:tools')) out.push({ icon: Bot, label: t('admin.plugins.cap.mcpTools') })
if (perms.some(p => p.startsWith('ws:broadcast'))) out.push({ icon: Radio, label: t('admin.plugins.cap.realtime') })
if (perms.includes('hook:photo-provider')) out.push({ icon: Image, label: t('admin.plugins.cap.photos') })
if (perms.includes('hook:calendar-source')) out.push({ icon: CalendarDays, label: t('admin.plugins.cap.calendar') })
@@ -1611,6 +1617,28 @@ function PluginDetailSheet({ item, installed, busy, onInstall, onClose, t, local
</div>
)}
{/* The tool text a plugin publishes goes straight into every user's
assistant context once mcp:tools is granted, and nothing else in
this dialog shows it. An admin approving the grant should read the
names and descriptions first, not discover them in a chat. */}
{manifest && (manifest.capabilities?.mcpTools?.length ?? 0) > 0 && (
<div className="mt-5">
<h4 className="text-[11px] font-semibold uppercase tracking-wider text-content-muted">{t('admin.plugins.mcpToolsTitle')}</h4>
<ul className="mt-2 space-y-1.5">
{(manifest.capabilities?.mcpTools ?? []).map(tool => (
<li key={tool.name} className="flex items-start gap-2.5 py-0.5">
<Bot size={15} className="text-accent mt-0.5 shrink-0" />
<div className="min-w-0">
<code className="text-[12px] font-mono text-content">{tool.name}</code>
<p className="text-[12.5px] text-content-secondary leading-snug">{tool.title || tool.description}</p>
</div>
</li>
))}
</ul>
<p className="text-[11.5px] text-content-faint mt-2">{t('admin.plugins.mcpToolsHint')}</p>
</div>
)}
{manifest && (manifest.egress.length > 0 || manifest.operatorEgress) && (
<div className="mt-5">
<h4 className={sectionH}>{t('admin.plugins.connectsTitle')}</h4>
+3
View File
@@ -338,6 +338,9 @@ const admin: TranslationStrings = {
'admin.plugins.perm.hook:day-schedule-provider': 'إلحاق مدخلات زمنية بخطة اليوم (توقفات للشحن، هوامش احتياطية)',
'admin.plugins.perm.hook:day-tint-provider':
'تلوين الأيام في خطة اليوم (مثلاً تحديد المرحلة التي ينتمي إليها كل يوم)',
'admin.plugins.cap.mcpTools': 'ينشر أدوات ذكاء اصطناعي',
'admin.plugins.mcpToolsTitle': 'أدوات الذكاء الاصطناعي المنشورة',
'admin.plugins.mcpToolsHint': 'يمكن لمساعد ذكي تشغيلها نيابة عن المستخدم. وتعمل كل أداة بالصلاحيات الممنوحة أعلاه.',
'admin.plugins.perm.mcp:tools':
'نشر أدوات يمكن لمساعد ذكاء اصطناعي تشغيلها نيابة عنك (يعمل بالصلاحيات التي تمنحها للإضافة هنا، وليس بصلاحياته هو)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -324,6 +324,9 @@ const admin: TranslationStrings = {
'Anexar entradas de horário ao plano do dia (paradas de recarga, margens de segurança)',
'admin.plugins.perm.hook:day-tint-provider':
'Colorir os dias no plano do dia (por exemplo, a qual trecho da viagem um dia pertence)',
'admin.plugins.cap.mcpTools': 'Publica ferramentas de IA',
'admin.plugins.mcpToolsTitle': 'Ferramentas de IA publicadas',
'admin.plugins.mcpToolsHint': 'Um assistente pode executá-las em nome de um usuário. Cada uma age com o acesso concedido acima.',
'admin.plugins.perm.mcp:tools':
'Publicar ferramentas que um assistente de IA pode executar em seu nome (ele age com o acesso que você concede ao plugin aqui, não com o dele)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -471,6 +471,9 @@ const admin: TranslationStrings = {
'Afegir entrades horàries al pla del dia (parades de recàrrega, marges de seguretat)',
'admin.plugins.perm.hook:day-tint-provider':
'Acolorir els dies del pla del dia (per exemple, a quin tram del viatge pertany un dia)',
'admin.plugins.cap.mcpTools': 'Publica eines d’IA',
'admin.plugins.mcpToolsTitle': 'Eines d’IA que publica',
'admin.plugins.mcpToolsHint': 'Un assistent pot executar-les en nom d’un usuari. Cadascuna actua amb els permisos concedits a dalt.',
'admin.plugins.perm.mcp:tools':
"Publicar eines que un assistent d'IA pot executar en nom teu (actua amb els permisos que concedeixes aquí al connector, no amb els seus)",
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -325,6 +325,9 @@ const admin: TranslationStrings = {
'Připojovat časové položky k dennímu plánu (zastávky na nabíjení, časové rezervy)',
'admin.plugins.perm.hook:day-tint-provider':
'Barevně odlišovat dny v denním plánu (například ke které části cesty den patří)',
'admin.plugins.cap.mcpTools': 'Zveřejňuje AI nástroje',
'admin.plugins.mcpToolsTitle': 'Zveřejněné AI nástroje',
'admin.plugins.mcpToolsHint': 'Asistent je může spustit jménem uživatele. Každý jedná s oprávněními udělenými výše.',
'admin.plugins.perm.mcp:tools':
'Zveřejňovat nástroje, které může AI asistent spustit vaším jménem (jedná s oprávněními, která zde pluginu udělíte, ne se svými)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -330,6 +330,9 @@ const admin: TranslationStrings = {
'admin.plugins.perm.hook:day-schedule-provider': 'Zeiteinträge an den Tagesplan anhängen (Ladestopps, Puffer)',
'admin.plugins.perm.hook:day-tint-provider':
'Tage im Tagesplan farblich markieren (z. B. zu welchem Reiseabschnitt ein Tag gehört)',
'admin.plugins.cap.mcpTools': 'Veröffentlicht KI-Tools',
'admin.plugins.mcpToolsTitle': 'Veröffentlichte KI-Tools',
'admin.plugins.mcpToolsHint': 'Ein Assistent kann sie im Namen eines Nutzers ausführen. Jedes handelt mit den oben erteilten Rechten.',
'admin.plugins.perm.mcp:tools':
'Tools veröffentlichen, die ein KI-Assistent in deinem Namen ausführen kann (es handelt mit den Rechten, die du dem Plugin hier erteilst, nicht mit denen des Assistenten)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -371,6 +371,9 @@ const admin: TranslationStrings = {
'Attach time entries to the day plan (charging stops, security buffers)',
'admin.plugins.perm.hook:day-tint-provider':
'Colour-code days in the day plan (e.g. which leg of the trip a day belongs to)',
'admin.plugins.cap.mcpTools': 'Publishes AI tools',
'admin.plugins.mcpToolsTitle': 'AI tools it publishes',
'admin.plugins.mcpToolsHint': 'An assistant can run these on a user’s behalf. Each one acts with the access granted above.',
'admin.plugins.perm.mcp:tools':
'Publish tools that an AI assistant can run on your behalf (it acts with the access you grant the plugin here, not with the assistant’s own)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -333,6 +333,9 @@ const admin: TranslationStrings = {
'Añadir entradas de tiempo al plan del día (paradas de carga, márgenes de seguridad)',
'admin.plugins.perm.hook:day-tint-provider':
'Colorear los días del plan del día (por ejemplo, a qué tramo del viaje pertenece un día)',
'admin.plugins.cap.mcpTools': 'Publica herramientas de IA',
'admin.plugins.mcpToolsTitle': 'Herramientas de IA que publica',
'admin.plugins.mcpToolsHint': 'Un asistente puede ejecutarlas en nombre de un usuario. Cada una actúa con los permisos concedidos arriba.',
'admin.plugins.perm.mcp:tools':
'Publicar herramientas que un asistente de IA puede ejecutar en tu nombre (actúa con el acceso que concedes aquí al complemento, no con el del asistente)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -335,6 +335,9 @@ const admin: TranslationStrings = {
'Ajouter des entrées horaires au plan de la journée (arrêts de recharge, marges de sécurité)',
'admin.plugins.perm.hook:day-tint-provider':
'Colorer les jours du plan de la journée (par exemple, à quelle étape du voyage appartient un jour)',
'admin.plugins.cap.mcpTools': 'Publie des outils IA',
'admin.plugins.mcpToolsTitle': 'Outils IA publiés',
'admin.plugins.mcpToolsHint': "Un assistant peut les exécuter au nom d'un utilisateur. Chacun agit avec les accès accordés ci-dessus.",
'admin.plugins.perm.mcp:tools':
"Publier des outils qu'un assistant IA peut exécuter en votre nom (il agit avec les accès que vous accordez ici à l'extension, pas avec les siens)",
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -383,6 +383,9 @@ const admin: TranslationStrings = {
'Προσθήκη χρονικών καταχωρίσεων στο πλάνο της ημέρας (στάσεις φόρτισης, περιθώρια ασφαλείας)',
'admin.plugins.perm.hook:day-tint-provider':
'Χρωματική σήμανση ημερών στο πλάνο της ημέρας (π.χ. σε ποιο σκέλος του ταξιδιού ανήκει μια ημέρα)',
'admin.plugins.cap.mcpTools': 'Δημοσιεύει εργαλεία AI',
'admin.plugins.mcpToolsTitle': 'Δημοσιευμένα εργαλεία AI',
'admin.plugins.mcpToolsHint': 'Ένας βοηθός μπορεί να τα εκτελέσει εκ μέρους ενός χρήστη. Καθένα ενεργεί με τα δικαιώματα που δόθηκαν παραπάνω.',
'admin.plugins.perm.mcp:tools':
'Δημοσίευση εργαλείων που μπορεί να εκτελέσει ένας βοηθός AI εκ μέρους σας (ενεργεί με τα δικαιώματα που δίνετε εδώ στο πρόσθετο, όχι με τα δικά του)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -336,6 +336,9 @@ const admin: TranslationStrings = {
'Időbejegyzések hozzáadása a napi tervhez (töltőmegállók, biztonsági ráhagyások)',
'admin.plugins.perm.hook:day-tint-provider':
'A napok színezése a napi tervben (például hogy az út melyik szakaszához tartozik egy nap)',
'admin.plugins.cap.mcpTools': 'MI-eszközöket tesz közzé',
'admin.plugins.mcpToolsTitle': 'Közzétett MI-eszközök',
'admin.plugins.mcpToolsHint': 'Egy asszisztens futtathatja őket a felhasználó nevében. Mindegyik a fent megadott jogosultságokkal működik.',
'admin.plugins.perm.mcp:tools':
'Olyan eszközök közzététele, amelyeket egy MI-asszisztens futtathat a nevedben (a bővítménynek itt adott jogosultságokkal működik, nem a sajátjával)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -380,6 +380,9 @@ const admin: TranslationStrings = {
'Melampirkan entri waktu ke rencana hari (pemberhentian pengisian daya, jeda keamanan)',
'admin.plugins.perm.hook:day-tint-provider':
'Memberi warna pada hari di rencana hari (misalnya bagian perjalanan mana yang memuat suatu hari)',
'admin.plugins.cap.mcpTools': 'Menerbitkan alat AI',
'admin.plugins.mcpToolsTitle': 'Alat AI yang diterbitkan',
'admin.plugins.mcpToolsHint': 'Asisten dapat menjalankannya atas nama pengguna. Masing-masing bertindak dengan akses yang diberikan di atas.',
'admin.plugins.perm.mcp:tools':
'Menerbitkan alat yang dapat dijalankan asisten AI atas nama Anda (bertindak dengan akses yang Anda berikan ke plugin di sini, bukan milik asisten)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -332,6 +332,9 @@ const admin: TranslationStrings = {
'Aggiungere voci orarie al piano della giornata (soste di ricarica, margini di sicurezza)',
'admin.plugins.perm.hook:day-tint-provider':
'Colorare i giorni nel piano della giornata (ad esempio a quale tratta del viaggio appartiene un giorno)',
'admin.plugins.cap.mcpTools': 'Pubblica strumenti IA',
'admin.plugins.mcpToolsTitle': 'Strumenti IA pubblicati',
'admin.plugins.mcpToolsHint': 'Un assistente può eseguirli per conto di un utente. Ognuno agisce con i permessi concessi sopra.',
'admin.plugins.perm.mcp:tools':
'Pubblicare strumenti che un assistente IA può eseguire per tuo conto (agisce con i permessi che concedi qui al plugin, non con i propri)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -347,6 +347,9 @@ const admin: TranslationStrings = {
'admin.plugins.perm.hook:day-schedule-provider':
'日程プランに時間エントリーを追加(充電ストップ、保安検査のバッファ)',
'admin.plugins.perm.hook:day-tint-provider': '日程プランの日付を色分け(例:その日が旅程のどの区間に属するか)',
'admin.plugins.cap.mcpTools': 'AI ツールを公開',
'admin.plugins.mcpToolsTitle': '公開する AI ツール',
'admin.plugins.mcpToolsHint': 'アシスタントがユーザーの代わりに実行できます。各ツールは上記で付与した権限で動作します。',
'admin.plugins.perm.mcp:tools':
'AI アシスタントがあなたの代わりに実行できるツールを公開する(ここでプラグインに付与した権限で動作し、アシスタント自身の権限ではありません)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -348,6 +348,9 @@ const admin: TranslationStrings = {
'플래너가 일자 경로 계산에 사용할 라우팅 프로필 제공(예: 충전소 경유 전기차 라우팅)',
'admin.plugins.perm.hook:day-schedule-provider': '일자 계획에 시간 항목 추가(충전 정차, 보안 검색 여유 시간)',
'admin.plugins.perm.hook:day-tint-provider': '일자 계획에서 날짜를 색으로 구분(예: 해당 날짜가 여행의 어느 구간인지)',
'admin.plugins.cap.mcpTools': 'AI 도구 게시',
'admin.plugins.mcpToolsTitle': '게시하는 AI 도구',
'admin.plugins.mcpToolsHint': '어시스턴트가 사용자를 대신해 실행할 수 있습니다. 각 도구는 위에서 부여한 권한으로 동작합니다.',
'admin.plugins.perm.mcp:tools':
'AI 어시스턴트가 사용자를 대신해 실행할 수 있는 도구 게시 (여기서 플러그인에 부여한 권한으로 동작하며, 어시스턴트 자신의 권한이 아닙니다)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -331,6 +331,9 @@ const admin: TranslationStrings = {
'admin.plugins.perm.hook:day-schedule-provider': 'Tijdsitems aan het dagplan koppelen (laadstops, buffertijden)',
'admin.plugins.perm.hook:day-tint-provider':
'Dagen in het dagplan een kleur geven (bijvoorbeeld bij welk deel van de reis een dag hoort)',
'admin.plugins.cap.mcpTools': 'Publiceert AI-tools',
'admin.plugins.mcpToolsTitle': 'Gepubliceerde AI-tools',
'admin.plugins.mcpToolsHint': 'Een assistent kan deze namens een gebruiker uitvoeren. Elke tool handelt met de hierboven verleende rechten.',
'admin.plugins.perm.mcp:tools':
'Tools publiceren die een AI-assistent namens jou kan uitvoeren (die handelt met de rechten die je de plug-in hier geeft, niet met die van de assistent)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -327,6 +327,9 @@ const admin: TranslationStrings = {
'Dołączanie wpisów czasowych do planu dnia (postoje na ładowanie, bufory czasowe)',
'admin.plugins.perm.hook:day-tint-provider':
'Oznaczanie dni w planie dnia kolorami (na przykład do którego etapu podróży należy dany dzień)',
'admin.plugins.cap.mcpTools': 'Publikuje narzędzia AI',
'admin.plugins.mcpToolsTitle': 'Publikowane narzędzia AI',
'admin.plugins.mcpToolsHint': 'Asystent może je uruchomić w imieniu użytkownika. Każde działa z uprawnieniami nadanymi powyżej.',
'admin.plugins.perm.mcp:tools':
'Publikowanie narzędzi, które asystent AI może uruchomić w Twoim imieniu (działa z uprawnieniami nadanymi tutaj wtyczce, nie z własnymi)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -332,6 +332,9 @@ const admin: TranslationStrings = {
'Добавлять записи времени в план дня (остановки для зарядки, запас времени на контроль)',
'admin.plugins.perm.hook:day-tint-provider':
'Отмечать дни в плане цветом (например, к какому этапу поездки относится день)',
'admin.plugins.cap.mcpTools': 'Публикует ИИ-инструменты',
'admin.plugins.mcpToolsTitle': 'Публикуемые ИИ-инструменты',
'admin.plugins.mcpToolsHint': 'Ассистент может запускать их от имени пользователя. Каждый действует с правами, выданными выше.',
'admin.plugins.perm.mcp:tools':
'Публиковать инструменты, которые ИИ-ассистент может запускать от вашего имени (он действует с правами, выданными плагину здесь, а не со своими)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -389,6 +389,9 @@ const admin: TranslationStrings = {
'Lägga till tidsposter i dagsplanen (laddstopp, säkerhetsmarginaler)',
'admin.plugins.perm.hook:day-tint-provider':
'Färgkoda dagar i dagsplanen (till exempel vilken etapp av resan en dag tillhör)',
'admin.plugins.cap.mcpTools': 'Publicerar AI-verktyg',
'admin.plugins.mcpToolsTitle': 'Publicerade AI-verktyg',
'admin.plugins.mcpToolsHint': 'En assistent kan köra dem åt en användare. Varje verktyg agerar med de rättigheter som getts ovan.',
'admin.plugins.perm.mcp:tools':
'Publicera verktyg som en AI-assistent kan köra åt dig (det agerar med de rättigheter du ger tillägget här, inte med assistentens egna)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -376,6 +376,9 @@ const admin: TranslationStrings = {
'Gün planına zaman girişleri ekler (şarj durakları, güvenlik tamponları)',
'admin.plugins.perm.hook:day-tint-provider':
'Gün planındaki günleri renklendirir (örneğin bir günün yolculuğun hangi etabına ait olduğu)',
'admin.plugins.cap.mcpTools': 'Yapay zekâ araçları yayımlar',
'admin.plugins.mcpToolsTitle': 'Yayımlanan yapay zekâ araçları',
'admin.plugins.mcpToolsHint': 'Bir asistan bunları kullanıcı adına çalıştırabilir. Her biri yukarıda verilen yetkilerle çalışır.',
'admin.plugins.perm.mcp:tools':
'Bir yapay zekâ asistanının sizin adınıza çalıştırabileceği araçlar yayımlamak (burada eklentiye verdiğiniz yetkilerle çalışır, asistanın kendi yetkileriyle değil)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -329,6 +329,9 @@ const admin: TranslationStrings = {
'Додавати часові записи до плану дня (зупинки для заряджання, буфери часу)',
'admin.plugins.perm.hook:day-tint-provider':
'Позначати дні в плані дня кольором (наприклад, до якого етапу подорожі належить день)',
'admin.plugins.cap.mcpTools': 'Публікує ШІ-інструменти',
'admin.plugins.mcpToolsTitle': 'Опубліковані ШІ-інструменти',
'admin.plugins.mcpToolsHint': 'Асистент може запускати їх від імені користувача. Кожен діє з правами, наданими вище.',
'admin.plugins.perm.mcp:tools':
'Публікувати інструменти, які ШІ-асистент може запускати від вашого імені (він діє з правами, наданими плаґіну тут, а не зі своїми)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -332,6 +332,9 @@ const admin: TranslationStrings = {
'Gắn các mục thời gian vào kế hoạch ngày (điểm dừng sạc, thời gian đệm an ninh)',
'admin.plugins.perm.hook:day-tint-provider':
'Tô màu các ngày trong kế hoạch ngày (ví dụ ngày đó thuộc chặng nào của chuyến đi)',
'admin.plugins.cap.mcpTools': 'Xuất bản công cụ AI',
'admin.plugins.mcpToolsTitle': 'Công cụ AI được xuất bản',
'admin.plugins.mcpToolsHint': 'Trợ lý có thể chạy chúng thay cho người dùng. Mỗi công cụ hoạt động với quyền được cấp ở trên.',
'admin.plugins.perm.mcp:tools':
'Xuất bản các công cụ mà trợ lý AI có thể chạy thay bạn (nó hoạt động với quyền bạn cấp cho tiện ích tại đây, không phải quyền của trợ lý)',
'admin.plugins.perm.geolocation:read':
+3
View File
@@ -335,6 +335,9 @@ const admin: TranslationStrings = {
'提供路線規劃設定檔,供規劃工具計算每日路線(例如含充電停靠站的電動車路線規劃)',
'admin.plugins.perm.hook:day-schedule-provider': '向每日行程附加時間項目(充電停靠站、緩衝時間)',
'admin.plugins.perm.hook:day-tint-provider': '為每日行程中的日期標示顏色(例如某天屬於旅程的哪一段)',
'admin.plugins.cap.mcpTools': '發布 AI 工具',
'admin.plugins.mcpToolsTitle': '發布的 AI 工具',
'admin.plugins.mcpToolsHint': '助理可以代用戶執行這些工具。每個工具都以上方授予的權限運作。',
'admin.plugins.perm.mcp:tools':
'發布 AI 助理可以代你執行的工具(它以你在此處授予外掛的權限運作,而非助理自身的權限)',
'admin.plugins.perm.geolocation:read': '在其任一檢視開啟時查詢你的即時位置(由 TREK 使用本站台既有的位置權限讀取,不會另外為外掛詢問)',
+3
View File
@@ -293,6 +293,9 @@ const admin: TranslationStrings = {
'admin.plugins.perm.hook:route-provider': '提供路线规划方案,供规划器计算每日路线(例如带充电停靠点的电动车路线)',
'admin.plugins.perm.hook:day-schedule-provider': '向当日计划添加时间条目(充电停靠点、安全缓冲时间)',
'admin.plugins.perm.hook:day-tint-provider': '为当日计划中的日期标注颜色(例如某天属于行程的哪一段)',
'admin.plugins.cap.mcpTools': '发布 AI 工具',
'admin.plugins.mcpToolsTitle': '发布的 AI 工具',
'admin.plugins.mcpToolsHint': '助手可以代用户运行这些工具。每个工具都以上方授予的权限运行。',
'admin.plugins.perm.mcp:tools':
'发布 AI 助手可以代你运行的工具(它以你在此处授予插件的权限运行,而非助手自身的权限)',
'admin.plugins.perm.geolocation:read': '在其某个视图打开时请求你的实时位置(由 TREK 使用本站点已有的位置权限读取,不会单独为插件询问)',