feat(mcp): WhatsApp connector, archivable catalog, MCP connector config endpoint
This commit is contained in:
+53
-22
@@ -153,6 +153,22 @@ export default {
|
||||
'config.loading': 'Loading…',
|
||||
'config.developer': 'Developer',
|
||||
'config.error_save':'Error saving "{name}": {msg}',
|
||||
'config.enabled': 'Enabled',
|
||||
'config.disabled': 'Disabled',
|
||||
|
||||
'config.set.interface.name': 'Interface',
|
||||
'config.set.interface.desc': 'Look and feel of the web interface.',
|
||||
'config.set.tic_agent.name': 'TIC Agent',
|
||||
'config.set.tic_agent.desc': 'TIC is a background agent that monitors all async events generated by connected MCP servers (new emails, calendar updates, WhatsApp messages, etc.). It reads your notification rules from data/notifications.md and your memory to decide — via an LLM call — which events are worth surfacing. Relevant notifications are forwarded to the home agent set via /sethome.',
|
||||
|
||||
'config.prop.ui_locale.name': 'Language',
|
||||
'config.prop.ui_locale.desc': 'Default interface language for the whole instance. Each user can override it on their profile.',
|
||||
'config.prop.tic__enabled.name': 'Enabled',
|
||||
'config.prop.tic__enabled.desc': 'Enable or disable the TIC agent. When disabled, no MCP events are processed.',
|
||||
'config.prop.tic__security_group.name': 'Security Group',
|
||||
'config.prop.tic__security_group.desc': 'Tool permission group applied to each TIC agent session. Leave empty to use the default group.',
|
||||
'config.prop.tic__interval_minutes.name': 'Check Interval (minutes)',
|
||||
'config.prop.tic__interval_minutes.desc': 'How often TIC runs, in minutes. Leave empty to use the value from config.yml (tic.interval_secs).',
|
||||
|
||||
// ── Projects ────────────────────────────────────────────────────────────────
|
||||
'projects.title': 'Projects',
|
||||
@@ -799,6 +815,16 @@ export default {
|
||||
'connectors.detail.oauth.cancel': 'Cancel',
|
||||
'connectors.detail.oauth.deactivate': 'Deactivate',
|
||||
|
||||
'connectors.detail.qr.title': 'Link your phone',
|
||||
'connectors.detail.qr.desc': 'Scan a QR code with your phone to link this device. The session stays on this box — no password is stored.',
|
||||
'connectors.detail.qr.connected': 'Connected and active.',
|
||||
'connectors.detail.qr.scan': 'Scan this code with your phone:',
|
||||
'connectors.detail.qr.hint': 'WhatsApp → Settings → Linked Devices → Link a Device.',
|
||||
'connectors.detail.qr.connecting': 'Connecting…',
|
||||
'connectors.detail.qr.btn_start': 'Start sign-in',
|
||||
'connectors.detail.qr.btn_starting': 'Preparing… (this can take a minute the first time)',
|
||||
'connectors.detail.qr.btn_relink': 'Re-link (new QR)',
|
||||
|
||||
'connectors.detail.test.running': 'Testing credentials…',
|
||||
'connectors.detail.test.skipped': 'No verification step for this connector.',
|
||||
'connectors.detail.test.ok_label': 'OK',
|
||||
@@ -891,6 +917,9 @@ export default {
|
||||
'marketplace.grid.no_match': 'No connector matches these filters.',
|
||||
|
||||
'marketplace.card.installed': 'installed',
|
||||
'marketplace.card.update_available': 'update available',
|
||||
'marketplace.card.installed_version': 'installed v{v}',
|
||||
'marketplace.card.update': 'Update',
|
||||
'marketplace.card.scope_global': 'global',
|
||||
'marketplace.card.scope_per_user': 'per-user',
|
||||
'marketplace.card.type_script': 'local script',
|
||||
@@ -986,28 +1015,29 @@ export default {
|
||||
|
||||
'catalog.action.remove': 'Remove from catalog',
|
||||
|
||||
'catalog.modal.title': 'Add connector manually',
|
||||
'catalog.modal.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>A local script runs code on this box. Nothing verifies it — unlike the marketplace path, there is no digest to check.',
|
||||
'catalog.modal.name': 'Name',
|
||||
'catalog.modal.name_hint': 'slug',
|
||||
'catalog.modal.scope': 'Scope',
|
||||
'catalog.modal.type': 'Type',
|
||||
'catalog.modal.transport': 'Transport',
|
||||
'catalog.modal.command': 'Command',
|
||||
'catalog.modal.command_ph': 'python3',
|
||||
'catalog.modal.script_path': 'Script path',
|
||||
'catalog.modal.script_path_hint': 'as <connector>/<file>, under ./connectors',
|
||||
'catalog.modal.url': 'URL',
|
||||
'catalog.modal.args': 'Args',
|
||||
'catalog.modal.args_hint': 'one per line',
|
||||
'catalog.modal.config_schema': 'Required secret/env keys',
|
||||
'catalog.modal.config_schema_hint': 'comma/newline',
|
||||
'catalog.modal.auth': 'Auth',
|
||||
'catalog.modal.friendly': 'Friendly name',
|
||||
'catalog.modal.desc': 'Description',
|
||||
'catalog.modal.desc_hint': 'the LLM reads this when deciding to activate the connector',
|
||||
'catalog.modal.cancel': 'Cancel',
|
||||
'catalog.modal.save': 'Add to catalog',
|
||||
'catalog.new.back': 'Back',
|
||||
'catalog.new.title': 'Add connector manually',
|
||||
'catalog.new.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>A local script runs code on this box. Nothing verifies it — unlike the marketplace path, there is no digest to check.',
|
||||
'catalog.new.name': 'Name',
|
||||
'catalog.new.name_hint': 'slug',
|
||||
'catalog.new.scope': 'Scope',
|
||||
'catalog.new.type': 'Type',
|
||||
'catalog.new.transport': 'Transport',
|
||||
'catalog.new.command': 'Command',
|
||||
'catalog.new.command_ph': 'python3',
|
||||
'catalog.new.script_path': 'Script path',
|
||||
'catalog.new.script_path_hint': 'as <connector>/<file>, under ./connectors',
|
||||
'catalog.new.url': 'URL',
|
||||
'catalog.new.args': 'Args',
|
||||
'catalog.new.args_hint': 'one per line',
|
||||
'catalog.new.config_schema': 'Required secret/env keys',
|
||||
'catalog.new.config_schema_hint': 'comma/newline',
|
||||
'catalog.new.auth': 'Auth',
|
||||
'catalog.new.friendly': 'Friendly name',
|
||||
'catalog.new.desc': 'Description',
|
||||
'catalog.new.desc_hint': 'the LLM reads this when deciding to activate the connector',
|
||||
'catalog.new.cancel': 'Cancel',
|
||||
'catalog.new.save': 'Add to catalog',
|
||||
|
||||
'catalog.error.name': 'Name is required.',
|
||||
'catalog.confirm.delete': 'Remove "{name}" from the catalog?\n\nAnything already activated from it keeps running.',
|
||||
@@ -1039,6 +1069,7 @@ export default {
|
||||
'common.saving': 'Saving…',
|
||||
'common.cancel': 'Cancel',
|
||||
'common.loading': 'Loading…',
|
||||
'common.saved': 'Saved',
|
||||
|
||||
// ── Shared Folders (blueprint §6) ────────────────────────────────────────────
|
||||
'nav.shared_folders': 'Shared Folders',
|
||||
|
||||
+40
-22
@@ -153,6 +153,22 @@ export default {
|
||||
'config.loading': 'Chargement…',
|
||||
'config.developer': 'Développeur',
|
||||
'config.error_save':'Erreur lors de l\'enregistrement de "{name}" : {msg}',
|
||||
'config.enabled': 'Activé',
|
||||
'config.disabled': 'Désactivé',
|
||||
|
||||
'config.set.interface.name': 'Interface',
|
||||
'config.set.interface.desc': 'Aspect et style de l\'interface web.',
|
||||
'config.set.tic_agent.name': 'Agent TIC',
|
||||
'config.set.tic_agent.desc': 'TIC est un agent d\'arrière-plan qui surveille tous les événements asynchrones générés par les serveurs MCP connectés (nouveaux e-mails, mises à jour du calendrier, messages WhatsApp, etc.). Il lit vos règles de notification dans data/notifications.md et votre mémoire pour décider — via un appel LLM — quels événements méritent d\'être signalés. Les notifications pertinentes sont transmises à l\'agent d\'accueil défini via /sethome.',
|
||||
|
||||
'config.prop.ui_locale.name': 'Langue',
|
||||
'config.prop.ui_locale.desc': 'Langue d\'interface par défaut pour l\'ensemble de l\'instance. Chaque utilisateur peut la modifier dans son profil.',
|
||||
'config.prop.tic__enabled.name': 'Activé',
|
||||
'config.prop.tic__enabled.desc': 'Activer ou désactiver l\'agent TIC. Lorsqu\'il est désactivé, aucun événement MCP n\'est traité.',
|
||||
'config.prop.tic__security_group.name': 'Groupe de sécurité',
|
||||
'config.prop.tic__security_group.desc': 'Groupe de permissions d\'outils appliqué à chaque session de l\'agent TIC. Laissez vide pour utiliser le groupe par défaut.',
|
||||
'config.prop.tic__interval_minutes.name': 'Intervalle de vérification (minutes)',
|
||||
'config.prop.tic__interval_minutes.desc': 'Fréquence d\'exécution de TIC, en minutes. Laissez vide pour utiliser la valeur de config.yml (tic.interval_secs).',
|
||||
|
||||
// ── Projects ────────────────────────────────────────────────────────────────
|
||||
'projects.title': 'Projets',
|
||||
@@ -986,28 +1002,29 @@ export default {
|
||||
|
||||
'catalog.action.remove': 'Retirer du catalogue',
|
||||
|
||||
'catalog.modal.title': 'Ajouter un connecteur manuellement',
|
||||
'catalog.modal.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>Un script local exécute du code sur cette machine. Rien ne le vérifie — contrairement au Marketplace, il n\'y a pas de condensé à contrôler.',
|
||||
'catalog.modal.name': 'Nom',
|
||||
'catalog.modal.name_hint': 'slug',
|
||||
'catalog.modal.scope': 'Portée',
|
||||
'catalog.modal.type': 'Type',
|
||||
'catalog.modal.transport': 'Transport',
|
||||
'catalog.modal.command': 'Commande',
|
||||
'catalog.modal.command_ph': 'python3',
|
||||
'catalog.modal.script_path': 'Chemin du script',
|
||||
'catalog.modal.script_path_hint': 'comme <connecteur>/<fichier>, sous ./connectors',
|
||||
'catalog.modal.url': 'URL',
|
||||
'catalog.modal.args': 'Arguments',
|
||||
'catalog.modal.args_hint': 'un par ligne',
|
||||
'catalog.modal.config_schema': 'Clés secrètes/env requises',
|
||||
'catalog.modal.config_schema_hint': 'virgule/nouvelle ligne',
|
||||
'catalog.modal.auth': 'Auth',
|
||||
'catalog.modal.friendly': 'Nom convivial',
|
||||
'catalog.modal.desc': 'Description',
|
||||
'catalog.modal.desc_hint': 'le LLM lit ceci pour décider d\'activer le connecteur',
|
||||
'catalog.modal.cancel': 'Annuler',
|
||||
'catalog.modal.save': 'Ajouter au catalogue',
|
||||
'catalog.new.back': 'Retour',
|
||||
'catalog.new.title': 'Ajouter un connecteur manuellement',
|
||||
'catalog.new.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>Un script local exécute du code sur cette machine. Rien ne le vérifie — contrairement au Marketplace, il n\'y a pas de condensé à contrôler.',
|
||||
'catalog.new.name': 'Nom',
|
||||
'catalog.new.name_hint': 'slug',
|
||||
'catalog.new.scope': 'Portée',
|
||||
'catalog.new.type': 'Type',
|
||||
'catalog.new.transport': 'Transport',
|
||||
'catalog.new.command': 'Commande',
|
||||
'catalog.new.command_ph': 'python3',
|
||||
'catalog.new.script_path': 'Chemin du script',
|
||||
'catalog.new.script_path_hint': 'comme <connecteur>/<fichier>, sous ./connectors',
|
||||
'catalog.new.url': 'URL',
|
||||
'catalog.new.args': 'Arguments',
|
||||
'catalog.new.args_hint': 'un par ligne',
|
||||
'catalog.new.config_schema': 'Clés secrètes/env requises',
|
||||
'catalog.new.config_schema_hint': 'virgule/nouvelle ligne',
|
||||
'catalog.new.auth': 'Auth',
|
||||
'catalog.new.friendly': 'Nom convivial',
|
||||
'catalog.new.desc': 'Description',
|
||||
'catalog.new.desc_hint': 'le LLM lit ceci pour décider d\'activer le connecteur',
|
||||
'catalog.new.cancel': 'Annuler',
|
||||
'catalog.new.save': 'Ajouter au catalogue',
|
||||
|
||||
'catalog.error.name': 'Le nom est requis.',
|
||||
'catalog.confirm.delete': 'Retirer "{name}" du catalogue ?\n\nTout ce qui a déjà été activé continuera de fonctionner.',
|
||||
@@ -1039,6 +1056,7 @@ export default {
|
||||
'common.saving': 'Enregistrement…',
|
||||
'common.cancel': 'Annuler',
|
||||
'common.loading': 'Chargement…',
|
||||
'common.saved': 'Enregistré',
|
||||
|
||||
// ── Shared Folders (blueprint §6) ────────────────────────────────────────────
|
||||
'nav.shared_folders': 'Dossiers partagés',
|
||||
|
||||
+40
-22
@@ -177,6 +177,22 @@ export default {
|
||||
'config.loading': 'Caricamento…',
|
||||
'config.developer': 'Sviluppatore',
|
||||
'config.error_save':'Errore durante il salvataggio di "{name}": {msg}',
|
||||
'config.enabled': 'Attivato',
|
||||
'config.disabled': 'Disattivato',
|
||||
|
||||
'config.set.interface.name': 'Interfaccia',
|
||||
'config.set.interface.desc': 'Aspetto e stile dell\'interfaccia web.',
|
||||
'config.set.tic_agent.name': 'Agente TIC',
|
||||
'config.set.tic_agent.desc': 'TIC è un agente in background che monitora tutti gli eventi asincroni generati dai server MCP connessi (nuove email, aggiornamenti del calendario, messaggi WhatsApp, ecc.). Legge le regole di notifica da data/notifications.md e la memoria per decidere — tramite una chiamata LLM — quali eventi vale la pena segnalare. Le notifiche rilevanti vengono inoltrate all\'agente predefinito impostato tramite /sethome.',
|
||||
|
||||
'config.prop.ui_locale.name': 'Lingua',
|
||||
'config.prop.ui_locale.desc': 'Lingua predefinita per l\'intera istanza. Ogni utente può modificarla nel proprio profilo.',
|
||||
'config.prop.tic__enabled.name': 'Attivo',
|
||||
'config.prop.tic__enabled.desc': 'Attiva o disattiva l\'agente TIC. Quando disattivato, nessun evento MCP viene elaborato.',
|
||||
'config.prop.tic__security_group.name': 'Gruppo di sicurezza',
|
||||
'config.prop.tic__security_group.desc': 'Gruppo di permessi strumenti applicato a ogni sessione dell\'agente TIC. Lascia vuoto per usare il gruppo predefinito.',
|
||||
'config.prop.tic__interval_minutes.name': 'Intervallo di controllo (minuti)',
|
||||
'config.prop.tic__interval_minutes.desc': 'Ogni quanto TIC viene eseguito, in minuti. Lascia vuoto per usare il valore da config.yml (tic.interval_secs).',
|
||||
|
||||
// ── Projects ────────────────────────────────────────────────────────────────
|
||||
'projects.title': 'Progetti',
|
||||
@@ -986,28 +1002,29 @@ export default {
|
||||
|
||||
'catalog.action.remove': 'Rimuovi dal catalogo',
|
||||
|
||||
'catalog.modal.title': 'Aggiungi connettore manualmente',
|
||||
'catalog.modal.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>Uno script locale esegue codice su questo computer. Niente lo verifica — a differenza del marketplace, non c\'è un digest da controllare.',
|
||||
'catalog.modal.name': 'Nome',
|
||||
'catalog.modal.name_hint': 'slug',
|
||||
'catalog.modal.scope': 'Ambito',
|
||||
'catalog.modal.type': 'Tipo',
|
||||
'catalog.modal.transport': 'Trasporto',
|
||||
'catalog.modal.command': 'Comando',
|
||||
'catalog.modal.command_ph': 'python3',
|
||||
'catalog.modal.script_path': 'Percorso script',
|
||||
'catalog.modal.script_path_hint': 'come <connettore>/<file>, sotto ./connectors',
|
||||
'catalog.modal.url': 'URL',
|
||||
'catalog.modal.args': 'Argomenti',
|
||||
'catalog.modal.args_hint': 'uno per riga',
|
||||
'catalog.modal.config_schema': 'Chiavi segrete/env richieste',
|
||||
'catalog.modal.config_schema_hint': 'virgola/nuova riga',
|
||||
'catalog.modal.auth': 'Auth',
|
||||
'catalog.modal.friendly': 'Nome visualizzato',
|
||||
'catalog.modal.desc': 'Descrizione',
|
||||
'catalog.modal.desc_hint': 'l\'LLM legge questo quando decide se attivare il connettore',
|
||||
'catalog.modal.cancel': 'Annulla',
|
||||
'catalog.modal.save': 'Aggiungi al catalogo',
|
||||
'catalog.new.back': 'Indietro',
|
||||
'catalog.new.title': 'Aggiungi connettore manualmente',
|
||||
'catalog.new.script_warn': '<i class="bi bi-exclamation-triangle me-1"></i>Uno script locale esegue codice su questo computer. Niente lo verifica — a differenza del marketplace, non c\'è un digest da controllare.',
|
||||
'catalog.new.name': 'Nome',
|
||||
'catalog.new.name_hint': 'slug',
|
||||
'catalog.new.scope': 'Ambito',
|
||||
'catalog.new.type': 'Tipo',
|
||||
'catalog.new.transport': 'Trasporto',
|
||||
'catalog.new.command': 'Comando',
|
||||
'catalog.new.command_ph': 'python3',
|
||||
'catalog.new.script_path': 'Percorso script',
|
||||
'catalog.new.script_path_hint': 'come <connettore>/<file>, sotto ./connectors',
|
||||
'catalog.new.url': 'URL',
|
||||
'catalog.new.args': 'Argomenti',
|
||||
'catalog.new.args_hint': 'uno per riga',
|
||||
'catalog.new.config_schema': 'Chiavi segrete/env richieste',
|
||||
'catalog.new.config_schema_hint': 'virgola/nuova riga',
|
||||
'catalog.new.auth': 'Auth',
|
||||
'catalog.new.friendly': 'Nome visualizzato',
|
||||
'catalog.new.desc': 'Descrizione',
|
||||
'catalog.new.desc_hint': 'l\'LLM legge questo quando decide se attivare il connettore',
|
||||
'catalog.new.cancel': 'Annulla',
|
||||
'catalog.new.save': 'Aggiungi al catalogo',
|
||||
|
||||
'catalog.error.name': 'Il nome è obbligatorio.',
|
||||
'catalog.confirm.delete': 'Rimuovere "{name}" dal catalogo?\n\nTutto ciò che è già stato attivato continuerà a funzionare.',
|
||||
@@ -1039,6 +1056,7 @@ export default {
|
||||
'common.saving': 'Salvataggio…',
|
||||
'common.cancel': 'Annulla',
|
||||
'common.loading': 'Caricamento…',
|
||||
'common.saved': 'Salvato',
|
||||
|
||||
// ── Cartelle condivise (blueprint §6) ────────────────────────────────────────
|
||||
'nav.shared_folders': 'Cartelle condivise',
|
||||
|
||||
Reference in New Issue
Block a user