@iblai/iblai-js 1.25.1 → 1.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61101,11 +61101,16 @@ var clawSandboxAgentConfigPrompts$3 = {
61101
61101
  updateSuccess: "{label} updated successfully",
61102
61102
  updateError: "Failed to update {label}",
61103
61103
  moreInfoAriaLabel: "More info about {label}",
61104
- edit: "Edit"
61104
+ edit: "Edit",
61105
+ connectSandboxPrompt: "Connect a sandbox instance in the Sandbox tab to manage agent prompts.",
61106
+ enableSandboxPrompt: "Enable the dedicated sandbox on the Sandbox tab and connect it to an instance to manage agent prompts.",
61107
+ sandboxTabLabel: "Sandbox tab"
61105
61108
  };
61106
61109
  var clawSandboxAgentSkills$3 = {
61107
61110
  loadingSkills: "Loading skills...",
61108
61111
  connectSandboxPrompt: "Connect a sandbox instance in the Sandbox tab to manage skills.",
61112
+ enableSandboxPrompt: "Enable the dedicated sandbox on the Sandbox tab and connect it to an instance to manage skills.",
61113
+ sandboxTabLabel: "Sandbox tab",
61109
61114
  newSkill: "New Skill",
61110
61115
  noSkillsAvailable: "No skills available for this platform. Create one to get started.",
61111
61116
  moreInfoAbout: "More info about {name}",
@@ -62624,6 +62629,11 @@ var privacyTabLabels$3 = {
62624
62629
  title: "Privacy",
62625
62630
  description: "Detect and filter personally identifiable information from chat messages."
62626
62631
  },
62632
+ capability: {
62633
+ title: "PII filtering",
62634
+ description: "Automatically find and hide personal information — names, emails, phone numbers and more — in messages before the agent sees them. When on, choose what to detect and how to handle it below.",
62635
+ offHint: "Turn it on to detect and hide personal information in messages."
62636
+ },
62627
62637
  fields: {
62628
62638
  enableRouter: {
62629
62639
  label: "Enable Privacy Router",
@@ -62635,12 +62645,14 @@ var privacyTabLabels$3 = {
62635
62645
  options: {
62636
62646
  redact: "Redact",
62637
62647
  mask: "Mask",
62638
- block: "Block"
62648
+ block: "Block",
62649
+ allow: "Allow"
62639
62650
  },
62640
62651
  descriptions: {
62641
62652
  redact: "PII is replaced with its type — e.g. \"Email [EMAIL_ADDRESS]\".",
62642
62653
  mask: "PII is hidden behind asterisks — e.g. \"Email ***********\".",
62643
- block: "The message is rejected and your block message is shown to the user."
62654
+ block: "The message is rejected and your block message is shown to the user.",
62655
+ allow: "PII is detected but left untouched — the message passes through unchanged. Use this to monitor or audit personal information without altering messages."
62644
62656
  }
62645
62657
  },
62646
62658
  blockMessage: {
@@ -63330,6 +63342,11 @@ var screenshareTabLabels$3 = {
63330
63342
  title: "Screen Share",
63331
63343
  description: "How your agent behaves when a user shares their screen during a voice call."
63332
63344
  },
63345
+ capability: {
63346
+ title: "Screen sharing",
63347
+ description: "Let people share their screen during a voice call so the agent can see what they're doing and guide them step by step. When on, set the screen-sharing prompts below.",
63348
+ offHint: "Turn it on to let people share their screen during a call and edit these prompts."
63349
+ },
63333
63350
  disabledHint: "Screen sharing is currently turned off for this agent. These prompts will be saved but only take effect once it’s turned on.",
63334
63351
  fields: {
63335
63352
  systemPrompt: {
@@ -64096,7 +64113,8 @@ var tabsVoiceTab$3 = {
64096
64113
  var tasksTabLabels$3 = {
64097
64114
  header: {
64098
64115
  title: "Tasks",
64099
- description: "Configure automated tasks for your agent."
64116
+ description: "Configure automated tasks for your agent.",
64117
+ infoBox: "Let your agent work on its own schedule. Set up recurring tasks it runs automatically — like daily summaries or reminders — without anyone having to ask."
64100
64118
  },
64101
64119
  toolbar: {
64102
64120
  searchPlaceholder: "Search all tasks...",
@@ -64238,11 +64256,54 @@ var voiceTabCallConfigSection$3 = {
64238
64256
  refreshingAriaLabel: "Refreshing",
64239
64257
  moreInfoAbout: "More info about {label}"
64240
64258
  };
64259
+ var analyticsTabLabels$3 = {
64260
+ header: {
64261
+ title: "Analytics",
64262
+ description: "Usage reports and insights for this agent."
64263
+ },
64264
+ infoBox: "See how this agent is being used — who's chatting with it, what they talk about, what it costs, and more. Pick a report below to dive in.",
64265
+ openAria: "Open {label}",
64266
+ tabs: {
64267
+ overview: {
64268
+ label: "Overview",
64269
+ description: "A high-level snapshot of usage and engagement over time."
64270
+ },
64271
+ users: {
64272
+ label: "Users",
64273
+ description: "See who's chatting with this agent and how active they are."
64274
+ },
64275
+ topics: {
64276
+ label: "Topics",
64277
+ description: "The subjects people bring up most across conversations."
64278
+ },
64279
+ transcripts: {
64280
+ label: "Transcripts",
64281
+ description: "Read full conversation transcripts message by message."
64282
+ },
64283
+ financial: {
64284
+ label: "Costs",
64285
+ description: "Track token usage and what this agent is costing you."
64286
+ },
64287
+ audit: {
64288
+ label: "Audit",
64289
+ description: "Review the log of changes and activity for this agent."
64290
+ },
64291
+ reports: {
64292
+ label: "Data Reports",
64293
+ description: "Generate and download detailed reports to share or archive."
64294
+ }
64295
+ }
64296
+ };
64241
64297
  var voiceTabLabels$3 = {
64242
64298
  header: {
64243
64299
  title: "Voice",
64244
64300
  description: "Choose the voice your agent uses and how voice calls work."
64245
64301
  },
64302
+ capability: {
64303
+ title: "Voice calls",
64304
+ description: "Let people talk to this agent out loud and hear it reply, like a phone call. When on, pick the voice and fine-tune how calls behave below.",
64305
+ offHint: "Turn it on to let people start voice conversations with this agent."
64306
+ },
64246
64307
  subTabs: {
64247
64308
  voice: "Voice",
64248
64309
  callConfig: "Voice call"
@@ -64490,6 +64551,13 @@ var ltiTabLabels$3 = {
64490
64551
  title: "LTI",
64491
64552
  description: "Manage LTI agent links, signing keys, tools, and platform endpoints."
64492
64553
  },
64554
+ capability: {
64555
+ title: "LTI launches",
64556
+ description: "Let this agent be added to a Learning Management System (Canvas, Brightspace, Blackboard or Moodle) so students can open it right inside their course. When on, create the links, signing keys, and tools your LMS needs below.",
64557
+ offHint: "Turn it on to let this agent be embedded in an LMS and set up its links and keys.",
64558
+ toggleSuccess: "LTI setting updated",
64559
+ toggleError: "Couldn't update LTI setting"
64560
+ },
64493
64561
  subTabs: {
64494
64562
  agentLinks: "Links",
64495
64563
  keys: "Keys",
@@ -64893,6 +64961,7 @@ var en = {
64893
64961
  userProfileDropdownIndex: userProfileDropdownIndex$3,
64894
64962
  version: version$4,
64895
64963
  voiceTabCallConfigSection: voiceTabCallConfigSection$3,
64964
+ analyticsTabLabels: analyticsTabLabels$3,
64896
64965
  voiceTabLabels: voiceTabLabels$3,
64897
64966
  voiceTabVoicePicker: voiceTabVoicePicker$3,
64898
64967
  welcomeChatConversationStarters: welcomeChatConversationStarters$3,
@@ -66411,11 +66480,16 @@ var clawSandboxAgentConfigPrompts$2 = {
66411
66480
  updateSuccess: "{label} mis à jour avec succès",
66412
66481
  updateError: "Échec de la mise à jour de {label}",
66413
66482
  moreInfoAriaLabel: "Plus d'informations sur {label}",
66414
- edit: "Modifier"
66483
+ edit: "Modifier",
66484
+ connectSandboxPrompt: "Connectez une instance de sandbox dans l'onglet Sandbox pour gérer les invites de l'agent.",
66485
+ enableSandboxPrompt: "Activez le bac à sable dédié dans l'onglet Sandbox et connectez-le à une instance pour gérer les invites de l'agent.",
66486
+ sandboxTabLabel: "onglet Sandbox"
66415
66487
  };
66416
66488
  var clawSandboxAgentSkills$2 = {
66417
66489
  loadingSkills: "Chargement des compétences...",
66418
66490
  connectSandboxPrompt: "Connectez une instance sandbox dans l'onglet Sandbox pour gérer les compétences.",
66491
+ enableSandboxPrompt: "Activez le bac à sable dédié dans l'onglet Sandbox et connectez-le à une instance pour gérer les compétences.",
66492
+ sandboxTabLabel: "onglet Sandbox",
66419
66493
  newSkill: "Nouvelle compétence",
66420
66494
  noSkillsAvailable: "Aucune compétence disponible pour cette plateforme. Créez-en une pour commencer.",
66421
66495
  moreInfoAbout: "Plus d'informations sur {name}",
@@ -67934,6 +68008,11 @@ var privacyTabLabels$2 = {
67934
68008
  title: "Confidentialité",
67935
68009
  description: "Détectez et filtrez les informations personnellement identifiables des messages de chat."
67936
68010
  },
68011
+ capability: {
68012
+ title: "Filtrage des données personnelles",
68013
+ description: "Détectez et masquez automatiquement les informations personnelles — noms, e-mails, numéros de téléphone et plus — dans les messages avant que l'agent ne les voie. Une fois activé, choisissez ci-dessous ce qu'il faut détecter et comment le traiter.",
68014
+ offHint: "Activez-le pour détecter et masquer les informations personnelles dans les messages."
68015
+ },
67937
68016
  fields: {
67938
68017
  enableRouter: {
67939
68018
  label: "Activer le routeur de confidentialité",
@@ -67945,12 +68024,14 @@ var privacyTabLabels$2 = {
67945
68024
  options: {
67946
68025
  redact: "Masquer",
67947
68026
  mask: "Flouter",
67948
- block: "Bloquer"
68027
+ block: "Bloquer",
68028
+ allow: "Autoriser"
67949
68029
  },
67950
68030
  descriptions: {
67951
68031
  redact: "Les PII sont remplacées par leur type — ex. \"Email [EMAIL_ADDRESS]\".",
67952
68032
  mask: "Les PII sont masquées par des astérisques — ex. \"Email ***********\".",
67953
- block: "Le message est rejeté et votre message de blocage est affiché à l'utilisateur."
68033
+ block: "Le message est rejeté et votre message de blocage est affiché à l'utilisateur.",
68034
+ allow: "Les PII sont détectées mais laissées intactes — le message passe sans modification. Utilisez cette option pour surveiller ou auditer les informations personnelles sans altérer les messages."
67954
68035
  }
67955
68036
  },
67956
68037
  blockMessage: {
@@ -68640,6 +68721,11 @@ var screenshareTabLabels$2 = {
68640
68721
  title: "Partage d’écran",
68641
68722
  description: "Comment votre agent se comporte lorsqu’un utilisateur partage son écran pendant un appel vocal."
68642
68723
  },
68724
+ capability: {
68725
+ title: "Partage d’écran",
68726
+ description: "Permettez aux utilisateurs de partager leur écran pendant un appel vocal afin que l'agent voie ce qu'ils font et les guide étape par étape. Une fois activé, définissez les invites de partage d'écran ci-dessous.",
68727
+ offHint: "Activez-le pour permettre le partage d'écran pendant un appel et modifier ces invites."
68728
+ },
68643
68729
  disabledHint: "Le partage d’écran est actuellement désactivé pour cet agent. Ces invites seront enregistrées mais ne prendront effet qu’une fois activé.",
68644
68730
  fields: {
68645
68731
  systemPrompt: {
@@ -69406,7 +69492,8 @@ var tabsVoiceTab$2 = {
69406
69492
  var tasksTabLabels$2 = {
69407
69493
  header: {
69408
69494
  title: "Tâches",
69409
- description: "Configurez les tâches automatisées pour votre agent."
69495
+ description: "Configurez les tâches automatisées pour votre agent.",
69496
+ infoBox: "Laissez votre agent travailler selon son propre calendrier. Configurez des tâches récurrentes qu'il exécute automatiquement — comme des résumés quotidiens ou des rappels — sans que personne ait à le demander."
69410
69497
  },
69411
69498
  toolbar: {
69412
69499
  searchPlaceholder: "Rechercher toutes les tâches...",
@@ -69548,11 +69635,54 @@ var voiceTabCallConfigSection$2 = {
69548
69635
  refreshingAriaLabel: "Actualisation en cours",
69549
69636
  moreInfoAbout: "Plus d'infos sur {label}"
69550
69637
  };
69638
+ var analyticsTabLabels$2 = {
69639
+ header: {
69640
+ title: "Analytique",
69641
+ description: "Rapports d'utilisation et insights pour cet agent."
69642
+ },
69643
+ infoBox: "Découvrez comment cet agent est utilisé — qui discute avec lui, de quoi les gens parlent, combien il coûte, et plus encore. Choisissez un rapport ci-dessous pour approfondir.",
69644
+ openAria: "Ouvrir {label}",
69645
+ tabs: {
69646
+ overview: {
69647
+ label: "Vue d’ensemble",
69648
+ description: "Un aperçu global de l'utilisation et de l'engagement dans le temps."
69649
+ },
69650
+ users: {
69651
+ label: "Utilisateurs",
69652
+ description: "Voyez qui discute avec cet agent et à quel point ils sont actifs."
69653
+ },
69654
+ topics: {
69655
+ label: "Sujets",
69656
+ description: "Les sujets que les gens abordent le plus dans les conversations."
69657
+ },
69658
+ transcripts: {
69659
+ label: "Transcriptions",
69660
+ description: "Lisez les transcriptions complètes des conversations, message par message."
69661
+ },
69662
+ financial: {
69663
+ label: "Coûts",
69664
+ description: "Suivez l'utilisation des jetons et ce que cet agent vous coûte."
69665
+ },
69666
+ audit: {
69667
+ label: "Audit",
69668
+ description: "Consultez le journal des modifications et de l'activité de cet agent."
69669
+ },
69670
+ reports: {
69671
+ label: "Rapports de données",
69672
+ description: "Générez et téléchargez des rapports détaillés à partager ou à archiver."
69673
+ }
69674
+ }
69675
+ };
69551
69676
  var voiceTabLabels$2 = {
69552
69677
  header: {
69553
69678
  title: "Voix",
69554
69679
  description: "Choisissez la voix utilisée par votre agent et le fonctionnement des appels vocaux."
69555
69680
  },
69681
+ capability: {
69682
+ title: "Appels vocaux",
69683
+ description: "Permettez aux utilisateurs de parler à cet agent à voix haute et d'entendre sa réponse, comme lors d'un appel téléphonique. Une fois activé, choisissez la voix et affinez le comportement des appels ci-dessous.",
69684
+ offHint: "Activez-le pour permettre aux utilisateurs de démarrer des conversations vocales avec cet agent."
69685
+ },
69556
69686
  subTabs: {
69557
69687
  voice: "Voix",
69558
69688
  callConfig: "Appel vocal"
@@ -69800,6 +69930,13 @@ var ltiTabLabels$2 = {
69800
69930
  title: "LTI",
69801
69931
  description: "Gérez les liens LTI de l'agent, les clés de signature, les outils et les endpoints de la plateforme."
69802
69932
  },
69933
+ capability: {
69934
+ title: "Lancements LTI",
69935
+ description: "Permettez d'ajouter cet agent à un système de gestion de l'apprentissage (Canvas, Brightspace, Blackboard ou Moodle) afin que les étudiants puissent l'ouvrir directement dans leur cours. Une fois activé, créez ci-dessous les liens, les clés de signature et les outils dont votre LMS a besoin.",
69936
+ offHint: "Activez-le pour permettre l'intégration de cet agent dans un LMS et configurer ses liens et ses clés.",
69937
+ toggleSuccess: "Paramètre LTI mis à jour",
69938
+ toggleError: "Impossible de mettre à jour le paramètre LTI"
69939
+ },
69803
69940
  subTabs: {
69804
69941
  agentLinks: "Liens",
69805
69942
  keys: "Clés",
@@ -70203,6 +70340,7 @@ var fr = {
70203
70340
  userProfileDropdownIndex: userProfileDropdownIndex$2,
70204
70341
  version: version$3,
70205
70342
  voiceTabCallConfigSection: voiceTabCallConfigSection$2,
70343
+ analyticsTabLabels: analyticsTabLabels$2,
70206
70344
  voiceTabLabels: voiceTabLabels$2,
70207
70345
  voiceTabVoicePicker: voiceTabVoicePicker$2,
70208
70346
  welcomeChatConversationStarters: welcomeChatConversationStarters$2,
@@ -71721,11 +71859,16 @@ var clawSandboxAgentConfigPrompts$1 = {
71721
71859
  updateSuccess: "{label} actualizado correctamente",
71722
71860
  updateError: "Error al actualizar {label}",
71723
71861
  moreInfoAriaLabel: "Más información sobre {label}",
71724
- edit: "Editar"
71862
+ edit: "Editar",
71863
+ connectSandboxPrompt: "Conecta una instancia de sandbox en la pestaña Sandbox para gestionar las indicaciones del agente.",
71864
+ enableSandboxPrompt: "Activa el sandbox dedicado en la pestaña Sandbox y conéctalo a una instancia para gestionar las indicaciones del agente.",
71865
+ sandboxTabLabel: "pestaña Sandbox"
71725
71866
  };
71726
71867
  var clawSandboxAgentSkills$1 = {
71727
71868
  loadingSkills: "Cargando habilidades...",
71728
71869
  connectSandboxPrompt: "Conecta una instancia de sandbox en la pestaña Sandbox para gestionar habilidades.",
71870
+ enableSandboxPrompt: "Activa el sandbox dedicado en la pestaña Sandbox y conéctalo a una instancia para gestionar habilidades.",
71871
+ sandboxTabLabel: "pestaña Sandbox",
71729
71872
  newSkill: "Nueva habilidad",
71730
71873
  noSkillsAvailable: "No hay habilidades disponibles para esta plataforma. Crea una para empezar.",
71731
71874
  moreInfoAbout: "Más información sobre {name}",
@@ -73244,6 +73387,11 @@ var privacyTabLabels$1 = {
73244
73387
  title: "Privacidad",
73245
73388
  description: "Detecta y filtra información de identificación personal de los mensajes del chat."
73246
73389
  },
73390
+ capability: {
73391
+ title: "Filtrado de datos personales",
73392
+ description: "Detecta y oculta automáticamente la información personal — nombres, correos, números de teléfono y más — en los mensajes antes de que el agente los vea. Cuando esté activado, elige a continuación qué detectar y cómo tratarlo.",
73393
+ offHint: "Actívalo para detectar y ocultar la información personal en los mensajes."
73394
+ },
73247
73395
  fields: {
73248
73396
  enableRouter: {
73249
73397
  label: "Activar enrutador de privacidad",
@@ -73255,12 +73403,14 @@ var privacyTabLabels$1 = {
73255
73403
  options: {
73256
73404
  redact: "Redactar",
73257
73405
  mask: "Enmascarar",
73258
- block: "Bloquear"
73406
+ block: "Bloquear",
73407
+ allow: "Permitir"
73259
73408
  },
73260
73409
  descriptions: {
73261
73410
  redact: "La PII se reemplaza por su tipo — ej. \"Email [EMAIL_ADDRESS]\".",
73262
73411
  mask: "La PII se oculta con asteriscos — ej. \"Email ***********\".",
73263
- block: "El mensaje es rechazado y se muestra al usuario el mensaje de bloqueo."
73412
+ block: "El mensaje es rechazado y se muestra al usuario el mensaje de bloqueo.",
73413
+ allow: "La PII se detecta pero se deja intacta — el mensaje pasa sin cambios. Use esta opción para supervisar o auditar la información personal sin alterar los mensajes."
73264
73414
  }
73265
73415
  },
73266
73416
  blockMessage: {
@@ -73950,6 +74100,11 @@ var screenshareTabLabels$1 = {
73950
74100
  title: "Pantalla compartida",
73951
74101
  description: "Cómo se comporta tu agente cuando un usuario comparte su pantalla durante una llamada de voz."
73952
74102
  },
74103
+ capability: {
74104
+ title: "Pantalla compartida",
74105
+ description: "Permite que las personas compartan su pantalla durante una llamada de voz para que el agente vea lo que hacen y las guíe paso a paso. Cuando esté activado, define las indicaciones de pantalla compartida a continuación.",
74106
+ offHint: "Actívalo para permitir compartir la pantalla durante una llamada y editar estas indicaciones."
74107
+ },
73953
74108
  disabledHint: "El uso compartido de pantalla está actualmente desactivado para este agente. Estas instrucciones se guardarán, pero solo surtirán efecto una vez que se active.",
73954
74109
  fields: {
73955
74110
  systemPrompt: {
@@ -74716,7 +74871,8 @@ var tabsVoiceTab$1 = {
74716
74871
  var tasksTabLabels$1 = {
74717
74872
  header: {
74718
74873
  title: "Tareas",
74719
- description: "Configure las tareas automatizadas para su agente."
74874
+ description: "Configure las tareas automatizadas para su agente.",
74875
+ infoBox: "Deja que tu agente trabaje según su propio calendario. Configura tareas recurrentes que ejecuta automáticamente —como resúmenes diarios o recordatorios— sin que nadie tenga que pedírselo."
74720
74876
  },
74721
74877
  toolbar: {
74722
74878
  searchPlaceholder: "Buscar todas las tareas...",
@@ -74858,11 +75014,54 @@ var voiceTabCallConfigSection$1 = {
74858
75014
  refreshingAriaLabel: "Actualizando",
74859
75015
  moreInfoAbout: "Más información sobre {label}"
74860
75016
  };
75017
+ var analyticsTabLabels$1 = {
75018
+ header: {
75019
+ title: "Analíticas",
75020
+ description: "Informes de uso e insights para este agente."
75021
+ },
75022
+ infoBox: "Descubre cómo se usa este agente: quién chatea con él, de qué hablan, cuánto cuesta y más. Elige un informe a continuación para profundizar.",
75023
+ openAria: "Abrir {label}",
75024
+ tabs: {
75025
+ overview: {
75026
+ label: "Resumen",
75027
+ description: "Una vista general del uso y la participación a lo largo del tiempo."
75028
+ },
75029
+ users: {
75030
+ label: "Usuarios",
75031
+ description: "Mira quién chatea con este agente y qué tan activos son."
75032
+ },
75033
+ topics: {
75034
+ label: "Temas",
75035
+ description: "Los temas que la gente menciona más en las conversaciones."
75036
+ },
75037
+ transcripts: {
75038
+ label: "Transcripciones",
75039
+ description: "Lee las transcripciones completas de las conversaciones, mensaje a mensaje."
75040
+ },
75041
+ financial: {
75042
+ label: "Costos",
75043
+ description: "Controla el uso de tokens y lo que te cuesta este agente."
75044
+ },
75045
+ audit: {
75046
+ label: "Auditoría",
75047
+ description: "Revisa el registro de cambios y actividad de este agente."
75048
+ },
75049
+ reports: {
75050
+ label: "Informes de datos",
75051
+ description: "Genera y descarga informes detallados para compartir o archivar."
75052
+ }
75053
+ }
75054
+ };
74861
75055
  var voiceTabLabels$1 = {
74862
75056
  header: {
74863
75057
  title: "Voz",
74864
75058
  description: "Elige la voz que usa tu agente y cómo funcionan las llamadas de voz."
74865
75059
  },
75060
+ capability: {
75061
+ title: "Llamadas de voz",
75062
+ description: "Permite que las personas hablen con este agente en voz alta y escuchen su respuesta, como en una llamada telefónica. Cuando esté activado, elige la voz y ajusta el comportamiento de las llamadas a continuación.",
75063
+ offHint: "Actívalo para permitir que las personas inicien conversaciones de voz con este agente."
75064
+ },
74866
75065
  subTabs: {
74867
75066
  voice: "Voz",
74868
75067
  callConfig: "Llamada de voz"
@@ -75110,6 +75309,13 @@ var ltiTabLabels$1 = {
75110
75309
  title: "LTI",
75111
75310
  description: "Gestiona los enlaces LTI del agente, las claves de firma, las herramientas y los endpoints de la plataforma."
75112
75311
  },
75312
+ capability: {
75313
+ title: "Lanzamientos LTI",
75314
+ description: "Permite añadir este agente a un sistema de gestión del aprendizaje (Canvas, Brightspace, Blackboard o Moodle) para que los estudiantes puedan abrirlo directamente en su curso. Cuando esté activado, crea a continuación los enlaces, las claves de firma y las herramientas que necesita tu LMS.",
75315
+ offHint: "Actívalo para permitir que este agente se integre en un LMS y configurar sus enlaces y claves.",
75316
+ toggleSuccess: "Ajuste de LTI actualizado",
75317
+ toggleError: "No se pudo actualizar el ajuste de LTI"
75318
+ },
75113
75319
  subTabs: {
75114
75320
  agentLinks: "Enlaces",
75115
75321
  keys: "Claves",
@@ -75513,6 +75719,7 @@ var es = {
75513
75719
  userProfileDropdownIndex: userProfileDropdownIndex$1,
75514
75720
  version: version$2,
75515
75721
  voiceTabCallConfigSection: voiceTabCallConfigSection$1,
75722
+ analyticsTabLabels: analyticsTabLabels$1,
75516
75723
  voiceTabLabels: voiceTabLabels$1,
75517
75724
  voiceTabVoicePicker: voiceTabVoicePicker$1,
75518
75725
  welcomeChatConversationStarters: welcomeChatConversationStarters$1,
@@ -77031,11 +77238,16 @@ var clawSandboxAgentConfigPrompts = {
77031
77238
  updateSuccess: "{label} 更新成功",
77032
77239
  updateError: "更新 {label} 失败",
77033
77240
  moreInfoAriaLabel: "关于 {label} 的更多信息",
77034
- edit: "编辑"
77241
+ edit: "编辑",
77242
+ connectSandboxPrompt: "在沙盒选项卡中连接沙盒实例以管理智能体提示词。",
77243
+ enableSandboxPrompt: "在沙盒选项卡中启用专用沙盒并连接到实例,以管理智能体提示词。",
77244
+ sandboxTabLabel: "沙盒选项卡"
77035
77245
  };
77036
77246
  var clawSandboxAgentSkills = {
77037
77247
  loadingSkills: "正在加载技能...",
77038
77248
  connectSandboxPrompt: "在 Sandbox 标签页中连接一个 sandbox 实例以管理技能。",
77249
+ enableSandboxPrompt: "在 Sandbox 标签页中启用专用沙盒并连接到实例,以管理技能。",
77250
+ sandboxTabLabel: "Sandbox 标签页",
77039
77251
  newSkill: "新建技能",
77040
77252
  noSkillsAvailable: "该平台暂无可用技能。创建一个以开始使用。",
77041
77253
  moreInfoAbout: "关于 {name} 的更多信息",
@@ -78554,6 +78766,11 @@ var privacyTabLabels = {
78554
78766
  title: "隐私",
78555
78767
  description: "检测并过滤聊天消息中的个人身份信息。"
78556
78768
  },
78769
+ capability: {
78770
+ title: "个人信息过滤",
78771
+ description: "在智能体看到消息之前,自动查找并隐藏其中的个人信息——姓名、电子邮件、电话号码等。开启后,可在下方选择要检测的内容及处理方式。",
78772
+ offHint: "开启后可检测并隐藏消息中的个人信息。"
78773
+ },
78557
78774
  fields: {
78558
78775
  enableRouter: {
78559
78776
  label: "启用隐私路由",
@@ -78565,12 +78782,14 @@ var privacyTabLabels = {
78565
78782
  options: {
78566
78783
  redact: "编辑",
78567
78784
  mask: "遮蔽",
78568
- block: "拦截"
78785
+ block: "拦截",
78786
+ allow: "允许"
78569
78787
  },
78570
78788
  descriptions: {
78571
78789
  redact: "PII 将被替换为其类型,例如:「Email [EMAIL_ADDRESS]」。",
78572
78790
  mask: "PII 将被星号隐藏,例如:「Email ***********」。",
78573
- block: "消息将被拒绝,并向用户显示您的拦截消息。"
78791
+ block: "消息将被拒绝,并向用户显示您的拦截消息。",
78792
+ allow: "检测到 PII 但不做处理——消息将原样通过。适用于在不修改消息的情况下监控或审计个人信息。"
78574
78793
  }
78575
78794
  },
78576
78795
  blockMessage: {
@@ -79260,6 +79479,11 @@ var screenshareTabLabels = {
79260
79479
  title: "屏幕共享",
79261
79480
  description: "当用户在语音通话中共享屏幕时,您的智能体的表现方式。"
79262
79481
  },
79482
+ capability: {
79483
+ title: "屏幕共享",
79484
+ description: "允许用户在语音通话中共享屏幕,以便智能体看到他们的操作并逐步引导。开启后,可在下方设置屏幕共享提示词。",
79485
+ offHint: "开启后可允许在通话中共享屏幕并编辑这些提示词。"
79486
+ },
79263
79487
  disabledHint: "屏幕共享当前已为该智能体关闭。这些提示将被保存,但开启后才会生效。",
79264
79488
  fields: {
79265
79489
  systemPrompt: {
@@ -80026,7 +80250,8 @@ var tabsVoiceTab = {
80026
80250
  var tasksTabLabels = {
80027
80251
  header: {
80028
80252
  title: "任务",
80029
- description: "为您的智能体配置自动化任务。"
80253
+ description: "为您的智能体配置自动化任务。",
80254
+ infoBox: "让您的智能体按自己的日程工作。设置它自动运行的周期性任务——例如每日摘要或提醒——无需任何人主动提出。"
80030
80255
  },
80031
80256
  toolbar: {
80032
80257
  searchPlaceholder: "搜索所有任务...",
@@ -80168,11 +80393,54 @@ var voiceTabCallConfigSection = {
80168
80393
  refreshingAriaLabel: "刷新中",
80169
80394
  moreInfoAbout: "关于 {label} 的更多信息"
80170
80395
  };
80396
+ var analyticsTabLabels = {
80397
+ header: {
80398
+ title: "分析",
80399
+ description: "该智能体的使用报告和数据洞察。"
80400
+ },
80401
+ infoBox: "了解该智能体的使用情况——谁在与它对话、大家在谈论什么、花费多少等等。在下方选择一份报告即可深入查看。",
80402
+ openAria: "打开{label}",
80403
+ tabs: {
80404
+ overview: {
80405
+ label: "概览",
80406
+ description: "随时间变化的使用情况和参与度的总体快照。"
80407
+ },
80408
+ users: {
80409
+ label: "用户",
80410
+ description: "查看谁在与该智能体对话以及他们的活跃程度。"
80411
+ },
80412
+ topics: {
80413
+ label: "主题",
80414
+ description: "对话中人们最常提及的主题。"
80415
+ },
80416
+ transcripts: {
80417
+ label: "对话记录",
80418
+ description: "逐条阅读完整的对话记录。"
80419
+ },
80420
+ financial: {
80421
+ label: "费用",
80422
+ description: "跟踪令牌用量以及该智能体的花费。"
80423
+ },
80424
+ audit: {
80425
+ label: "审计",
80426
+ description: "查看该智能体的更改和活动日志。"
80427
+ },
80428
+ reports: {
80429
+ label: "数据报告",
80430
+ description: "生成并下载详细报告以供分享或存档。"
80431
+ }
80432
+ }
80433
+ };
80171
80434
  var voiceTabLabels = {
80172
80435
  header: {
80173
80436
  title: "语音",
80174
80437
  description: "选择您的智能体使用的声音以及语音通话的工作方式。"
80175
80438
  },
80439
+ capability: {
80440
+ title: "语音通话",
80441
+ description: "让用户可以与该智能体语音交谈并听到其回复,就像打电话一样。开启后,可在下方选择声音并微调通话行为。",
80442
+ offHint: "开启后可让用户与该智能体开始语音对话。"
80443
+ },
80176
80444
  subTabs: {
80177
80445
  voice: "语音",
80178
80446
  callConfig: "语音通话"
@@ -80420,6 +80688,13 @@ var ltiTabLabels = {
80420
80688
  title: "LTI",
80421
80689
  description: "管理此智能体的 LTI 链接、签名密钥、工具和平台端点。"
80422
80690
  },
80691
+ capability: {
80692
+ title: "LTI 启动",
80693
+ description: "允许将此智能体添加到学习管理系统(Canvas、Brightspace、Blackboard 或 Moodle),以便学生可以直接在课程中打开它。开启后,可在下方创建您的 LMS 所需的链接、签名密钥和工具。",
80694
+ offHint: "开启后可将此智能体嵌入 LMS 并设置其链接和密钥。",
80695
+ toggleSuccess: "LTI 设置已更新",
80696
+ toggleError: "无法更新 LTI 设置"
80697
+ },
80423
80698
  subTabs: {
80424
80699
  agentLinks: "链接",
80425
80700
  keys: "密钥",
@@ -80823,6 +81098,7 @@ var zh = {
80823
81098
  userProfileDropdownIndex: userProfileDropdownIndex,
80824
81099
  version: version$1,
80825
81100
  voiceTabCallConfigSection: voiceTabCallConfigSection,
81101
+ analyticsTabLabels: analyticsTabLabels,
80826
81102
  voiceTabLabels: voiceTabLabels,
80827
81103
  voiceTabVoicePicker: voiceTabVoicePicker,
80828
81104
  welcomeChatConversationStarters: welcomeChatConversationStarters,
@@ -222278,30 +222554,21 @@ function SandboxConfig({ platformKey, mentorUniqueId, username }) {
222278
222554
  ? t('clawSandboxSandboxConfig.noInstancesMatchSearch')
222279
222555
  : t('clawSandboxSandboxConfig.noInstancesAvailable') }) })) : (pagedInstances.map((inst) => {
222280
222556
  var _a;
222281
- return (jsxs(TableRow, { className: "border-b last:border-0", children: [jsx(TableCell, { className: "p-3 font-medium whitespace-nowrap text-[#646464]", children: inst.name }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464] truncate max-w-[250px]", children: jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { className: "text-blue-600 hover:text-blue-800 cursor-default", children: inst.server_url }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium text-white shadow-sm", children: jsx("p", { children: inst.server_url }) })] }) }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: inst.claw_type }), jsx(TableCell, { className: "p-3 whitespace-nowrap", children: jsx(StatusDot, { value: inst.status, kind: "status" }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap", children: jsx(StatusDot, { value: inst.last_health_status, kind: "health" }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: (_a = inst.claw_version) !== null && _a !== void 0 ? _a : '—' }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: timeAgo(inst.last_health_check, t('clawSandboxSandboxConfig.never')) }), jsx(TableCell, { className: "p-3 text-right", children: jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", size: "sm", disabled: connectingInstanceId === inst.id, "aria-label": connectingInstanceId === inst.id
222282
- ? t('clawSandboxSandboxConfig.connectingInstance')
222283
- : t('clawSandboxSandboxConfig.actions'), children: [connectingInstanceId === inst.id ? (jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" })) : (jsx(Ellipsis, { className: "h-4 w-4" })), jsx("span", { className: "sr-only", children: connectingInstanceId === inst.id
222284
- ? t('clawSandboxSandboxConfig.connecting')
222285
- : t('clawSandboxSandboxConfig.actions') })] }) }), jsxs(DropdownMenuContent, { align: "end", children: [(() => {
222286
- const unhealthy = isInstanceUnhealthy(inst.status);
222287
- // Don't use the `disabled` prop Radix sets
222288
- // pointer-events:none on disabled items, which
222289
- // also kills the Tooltip hover. Instead block the
222290
- // action via onSelect and dim with opacity.
222291
- const connectItem = (jsxs(DropdownMenuItem, { className: cn('cursor-pointer', (unhealthy || isCreating || connectingInstanceId !== null) &&
222292
- 'opacity-50 cursor-not-allowed'), onSelect: (e) => {
222293
- if (unhealthy ||
222294
- isCreating ||
222295
- connectingInstanceId !== null) {
222296
- e.preventDefault();
222297
- return;
222298
- }
222299
- handleConnect(inst.id);
222300
- }, children: [jsx(Link2, { className: "mr-2 h-4 w-4" }), t('clawSandboxSandboxConfig.connect')] }));
222301
- if (!unhealthy)
222302
- return connectItem;
222303
- return (jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: connectItem }), jsx(TooltipContent, { side: "left", collisionPadding: 12, className: "max-w-[260px] whitespace-normal break-words rounded-lg bg-gray-700 px-3 py-2 text-xs font-medium leading-snug text-white shadow-sm", children: t('clawSandboxSandboxConfig.instanceUnhealthyTooltip') })] }) }));
222304
- })(), jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => runInstanceChecks(inst.id), disabled: checkingInstanceId !== null, children: [checkingInstanceId === inst.id ? (jsx(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" })) : (jsx(Activity, { className: "mr-2 h-4 w-4" })), t('clawSandboxSandboxConfig.runChecks')] }), jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => setEditingInstance(inst), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxSandboxConfig.edit')] }), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingInstanceId(inst.id), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxSandboxConfig.delete')] })] })] }) })] }, inst.id));
222557
+ return (jsxs(TableRow, { className: "border-b last:border-0", children: [jsx(TableCell, { className: "p-3 font-medium whitespace-nowrap text-[#646464]", children: inst.name }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464] truncate max-w-[250px]", children: jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { className: "text-blue-600 hover:text-blue-800 cursor-default", children: inst.server_url }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium text-white shadow-sm", children: jsx("p", { children: inst.server_url }) })] }) }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: inst.claw_type }), jsx(TableCell, { className: "p-3 whitespace-nowrap", children: jsx(StatusDot, { value: inst.status, kind: "status" }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap", children: jsx(StatusDot, { value: inst.last_health_status, kind: "health" }) }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: (_a = inst.claw_version) !== null && _a !== void 0 ? _a : '—' }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: timeAgo(inst.last_health_check, t('clawSandboxSandboxConfig.never')) }), jsx(TableCell, { className: "p-3 text-right", children: (() => {
222558
+ const unhealthy = isInstanceUnhealthy(inst.status);
222559
+ const isThisConnecting = connectingInstanceId === inst.id;
222560
+ const connectDisabled = unhealthy || isCreating || connectingInstanceId !== null;
222561
+ // Surfaced as a first-class button (not tucked in the
222562
+ // three-dot menu) so connecting is one click. A
222563
+ // disabled button swallows pointer events, so wrap it
222564
+ // in a span when we need the unhealthy tooltip to show.
222565
+ const connectButton = (jsxs(Button$1, { variant: "outline", size: "sm", className: "cursor-pointer", disabled: connectDisabled, onClick: () => handleConnect(inst.id), "aria-label": isThisConnecting
222566
+ ? t('clawSandboxSandboxConfig.connectingInstance')
222567
+ : t('clawSandboxSandboxConfig.connect'), "data-testid": `connect-instance-${inst.id}`, children: [isThisConnecting ? (jsx(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" })) : (jsx(Link2, { className: "mr-2 h-4 w-4" })), isThisConnecting
222568
+ ? t('clawSandboxSandboxConfig.connecting')
222569
+ : t('clawSandboxSandboxConfig.connect')] }));
222570
+ return (jsxs("div", { className: "flex items-center justify-end gap-2", children: [unhealthy ? (jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { tabIndex: 0, children: connectButton }) }), jsx(TooltipContent, { side: "left", collisionPadding: 12, className: "max-w-[260px] rounded-lg bg-gray-700 px-3 py-2 text-xs leading-snug font-medium break-words whitespace-normal text-white shadow-sm", children: t('clawSandboxSandboxConfig.instanceUnhealthyTooltip') })] }) })) : (connectButton), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxSandboxConfig.actions'), children: [jsx(Ellipsis, { className: "h-4 w-4" }), jsx("span", { className: "sr-only", children: t('clawSandboxSandboxConfig.actions') })] }) }), jsxs(DropdownMenuContent, { align: "end", children: [jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => runInstanceChecks(inst.id), disabled: checkingInstanceId !== null, children: [checkingInstanceId === inst.id ? (jsx(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" })) : (jsx(Activity, { className: "mr-2 h-4 w-4" })), t('clawSandboxSandboxConfig.runChecks')] }), jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => setEditingInstance(inst), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxSandboxConfig.edit')] }), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingInstanceId(inst.id), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxSandboxConfig.delete')] })] })] })] }));
222571
+ })() })] }, inst.id));
222305
222572
  })) })] }) }) }) }), jsx(IblPagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: setCurrentPage, disabled: false }), jsx(OverlayModal, { open: showNewInstanceForm, onClose: () => setShowNewInstanceForm(false), title: t('clawSandboxSandboxConfig.newInstanceTitle'), className: "max-w-lg", children: jsxs("div", { className: "grid gap-4", children: [jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "new-instance-name", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxSandboxConfig.fieldName') }), jsx(Input, { id: "new-instance-name", name: "new-instance-name", value: newInstance.name, onChange: (e) => setNewInstance({ ...newInstance, name: e.target.value }), placeholder: t('clawSandboxSandboxConfig.namePlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "new-instance-type", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxSandboxConfig.fieldType') }), jsxs(Select$1, { value: newInstance.claw_type, onValueChange: (value) => setNewInstance({ ...newInstance, claw_type: value }), children: [jsx(SelectTrigger, { id: "new-instance-type", className: "py-6", children: jsx(SelectValue, {}) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "openclaw", children: "OpenClaw" }), jsx(SelectItem, { value: "ironclaw", children: "IronClaw" })] })] })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "new-instance-url", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxSandboxConfig.fieldServerUrl') }), jsx(Input, { id: "new-instance-url", name: "new-instance-url", value: newInstance.server_url, onChange: (e) => setNewInstance({ ...newInstance, server_url: e.target.value }), placeholder: t('clawSandboxSandboxConfig.serverUrlPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "new-instance-token", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxSandboxConfig.fieldGatewayToken') }), jsx(Input, { id: "new-instance-token", name: "new-instance-token", value: newInstance.gateway_token, onChange: (e) => setNewInstance({ ...newInstance, gateway_token: e.target.value }), placeholder: t('clawSandboxSandboxConfig.gatewayTokenPlaceholder'), type: "password", className: "py-6", required: true })] }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: () => setShowNewInstanceForm(false), children: t('clawSandboxSandboxConfig.cancel') }), jsx(Button$1, { onClick: handleCreateInstance, disabled: isCreatingInstance ||
222306
222573
  !newInstance.name ||
222307
222574
  !newInstance.server_url ||
@@ -222471,12 +222738,14 @@ function AgentConfigPrompts({ platformKey, mentorUniqueId }) {
222471
222738
  if (isLoading) {
222472
222739
  return (jsx("div", { className: "flex items-center justify-center py-10", children: jsx(LoaderCircle, { className: "h-5 w-5 animate-spin text-blue-500" }) }));
222473
222740
  }
222474
- // Sandbox not connected or disabled agent config prompts only apply when
222475
- // the mentor has an active sandbox to push them to.
222741
+ // Agent config prompts only apply once a Claw instance is connected. The
222742
+ // host (Prompts tab) already only renders this section for a connected
222743
+ // sandbox, but we guard here too so the component is safe to drop in
222744
+ // anywhere.
222476
222745
  if (!isSandboxActive) {
222477
222746
  return null;
222478
222747
  }
222479
- return (jsxs(Fragment$1, { children: [jsx("div", { className: "space-y-6", children: AGENT_WORKSPACE_FIELDS.map(({ key, labelKey, descriptionKey }) => {
222748
+ return (jsxs(Fragment$1, { children: [jsx("div", { className: "space-y-6", "data-testid": "agent-config-prompts-fields", children: AGENT_WORKSPACE_FIELDS.map(({ key, labelKey, descriptionKey }) => {
222480
222749
  var _a;
222481
222750
  const label = t(labelKey);
222482
222751
  const description = t(descriptionKey);
@@ -222495,11 +222764,16 @@ const EMPTY_SKILL_FORM = {
222495
222764
  function AgentSkills({ platformKey, mentorUniqueId }) {
222496
222765
  var _a;
222497
222766
  const t = useT();
222498
- // Gate skills on having a connected sandbox config.
222499
- const { data: clawConfig, isError: isClawConfigError, isLoading: isLoadingClawConfig, } = useGetClawMentorConfigQuery({ org: platformKey, mentorUniqueId });
222500
- const isSandboxActive = !isClawConfigError && Boolean(clawConfig);
222501
- const { data: availableSkills, isLoading: isLoadingSkills } = useGetAgentSkillsQuery({ org: platformKey }, { skip: !isSandboxActive });
222502
- const { data: assignments, isLoading: isLoadingAssignments } = useGetMentorSkillAssignmentsQuery({ org: platformKey, mentorUniqueId }, { skip: !isSandboxActive });
222767
+ // Skills are managed independently of the sandbox connection — org-level
222768
+ // skills and the mentor's assignments both resolve without a wired Claw
222769
+ // instance, so we always fetch and let admins add/assign skills freely.
222770
+ const { data: availableSkills, isLoading: isLoadingSkills } = useGetAgentSkillsQuery({
222771
+ org: platformKey,
222772
+ });
222773
+ const { data: assignments, isLoading: isLoadingAssignments } = useGetMentorSkillAssignmentsQuery({
222774
+ org: platformKey,
222775
+ mentorUniqueId,
222776
+ });
222503
222777
  // Assignment mutations (toggle on mentor)
222504
222778
  const [createAssignment, { isLoading: isCreatingAssignment }] = useCreateMentorSkillAssignmentMutation();
222505
222779
  const [updateAssignment, { isLoading: isUpdatingAssignment }] = useUpdateMentorSkillAssignmentMutation();
@@ -222512,7 +222786,7 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
222512
222786
  const [editingSkill, setEditingSkill] = useState(null);
222513
222787
  const [deletingSkill, setDeletingSkill] = useState(null);
222514
222788
  const [form, setForm] = useState(EMPTY_SKILL_FORM);
222515
- const isLoading = isLoadingClawConfig || (isSandboxActive && (isLoadingSkills || isLoadingAssignments));
222789
+ const isLoading = isLoadingSkills || isLoadingAssignments;
222516
222790
  const isTogglingMentorSkill = isCreatingAssignment || isUpdatingAssignment || isDeletingAssignment;
222517
222791
  const skills = (availableSkills !== null && availableSkills !== void 0 ? availableSkills : []).filter((s) => s.enabled);
222518
222792
  // Skill assignments are now keyed by skill UUID (the new stable identifier).
@@ -222635,12 +222909,7 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
222635
222909
  if (isLoading) {
222636
222910
  return (jsxs("div", { className: "flex items-center gap-2 p-4", children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin text-blue-500" }), jsx("span", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.loadingSkills') })] }));
222637
222911
  }
222638
- // Sandbox not connected or disabled skills are runtime sandbox features and
222639
- // can't be assigned to a mentor that has no active sandbox to run them.
222640
- if (!isSandboxActive) {
222641
- return (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.connectSandboxPrompt') }) }));
222642
- }
222643
- return (jsxs("div", { className: "space-y-4", children: [jsx("div", { className: "flex items-center justify-end", children: jsxs(Button$1, { onClick: openNewSkillDialog, size: "sm", className: "cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.newSkill')] }) }), skills.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noSkillsAvailable') }) })) : (jsx("div", { className: "space-y-6", children: skills.map((skill) => {
222912
+ return (jsxs("div", { className: "space-y-4", "data-testid": "agent-skills-content", children: [jsx("div", { className: "flex items-center justify-end", children: jsxs(Button$1, { onClick: openNewSkillDialog, size: "sm", className: "cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.newSkill')] }) }), skills.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noSkillsAvailable') }) })) : (jsx("div", { className: "space-y-6", children: skills.map((skill) => {
222644
222913
  var _a;
222645
222914
  const assignment = assignmentsBySkillUniqueId.get(skill.unique_id);
222646
222915
  const isEnabled = (_a = assignment === null || assignment === void 0 ? void 0 : assignment.enabled) !== null && _a !== void 0 ? _a : false;
@@ -222648,7 +222917,9 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
222648
222917
  name: skill.name,
222649
222918
  }), children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: jsx("p", { children: skill.description }) })] }) })), jsxs("span", { className: "hidden sm:inline text-xs text-gray-400", children: ["v", skill.version] })] }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Switch, { checked: isEnabled, onCheckedChange: (checked) => handleToggle(skill, checked), disabled: isTogglingMentorSkill, className: "cursor-pointer data-[state=checked]:bg-blue-500", "aria-label": t(isEnabled
222650
222919
  ? 'clawSandboxAgentSkills.skillEnabledLabel'
222651
- : 'clawSandboxAgentSkills.skillDisabledLabel', { name: skill.name }) }), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxAgentSkills.skillActions', { name: skill.name }), children: jsx(Ellipsis, { className: "h-4 w-4" }) }) }), jsxs(DropdownMenuContent, { align: "end", children: [jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => openEditSkillDialog(skill), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.edit')] }), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingSkill(skill), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.delete')] })] })] })] })] }, skill.id));
222920
+ : 'clawSandboxAgentSkills.skillDisabledLabel', { name: skill.name }) }), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxAgentSkills.skillActions', {
222921
+ name: skill.name,
222922
+ }), children: jsx(Ellipsis, { className: "h-4 w-4" }) }) }), jsxs(DropdownMenuContent, { align: "end", children: [jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => openEditSkillDialog(skill), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.edit')] }), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingSkill(skill), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.delete')] })] })] })] })] }, skill.id));
222652
222923
  }) })), jsxs(OverlayModal, { open: showNewDialog, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.newSkillDialogTitle'), className: "max-w-2xl", children: [jsx(SkillForm, { form: form, onChange: setForm }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleCreateSkill, disabled: isCreatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isCreatingSkill
222653
222924
  ? t('clawSandboxAgentSkills.creating')
222654
222925
  : t('clawSandboxAgentSkills.create') })] })] }), jsxs(OverlayModal, { open: !!editingSkill, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.editSkillDialogTitle'), className: "max-w-2xl", children: [jsx(SkillForm, { form: form, onChange: setForm }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleUpdateSkill, disabled: isUpdatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isUpdatingSkill