@iblai/iblai-js 2.25.0 → 2.27.0

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.
@@ -2701,6 +2701,7 @@ var apiTabLabels$3 = {
2701
2701
  title: "API",
2702
2702
  description: "Manage API keys and integrations."
2703
2703
  },
2704
+ infoBox: "Use this agent from your own apps. Create API keys here to call it programmatically and build it into your product or workflow.",
2704
2705
  disclaimer: {
2705
2706
  lineOne: "Your secret API keys are listed below. Please note that we do not display your secret API keys again after you generate them.",
2706
2707
  lineTwo: "Do not share your API key with others, or expose it in the browser or other client-side code. In order to protect the security of your account, IBL may also automatically rotate any API key that we’ve found has leaked publicly."
@@ -2713,14 +2714,15 @@ var apiTabLabels$3 = {
2713
2714
  actionsColumn: "Actions",
2714
2715
  emptyState: "No API keys found",
2715
2716
  noPermission: "You do not have permission to view API keys",
2716
- deleteAriaLabel: "Delete API Key"
2717
+ deleteAriaLabel: "Delete API Key",
2718
+ notAvailable: "N/A"
2717
2719
  },
2718
2720
  actions: {
2719
2721
  createNew: "Create New"
2720
2722
  },
2721
2723
  createModal: {
2722
2724
  title: "Create API Key",
2723
- description: "Create API Key",
2725
+ description: "Name your key and optionally set an expiry date. You'll only see the key once.",
2724
2726
  nameLabel: "API Key Name",
2725
2727
  namePlaceholder: "API Key Name",
2726
2728
  nameRequired: "API Key name is required",
@@ -2729,12 +2731,14 @@ var apiTabLabels$3 = {
2729
2731
  expirationPlaceholder: "Pick a date",
2730
2732
  submit: "Submit",
2731
2733
  submitting: "Submitting...",
2734
+ cancel: "Cancel",
2732
2735
  successToast: "API Key created successfully",
2733
2736
  errorToast: "Failed to create API Key"
2734
2737
  },
2735
2738
  deleteModal: {
2736
2739
  title: "Delete API Key",
2737
2740
  confirmation: "Are you sure you want to delete the API Key with the name {name}? This action cannot be undone.",
2741
+ warning: "Any app or integration using this key will stop working immediately.",
2738
2742
  cancel: "Cancel",
2739
2743
  confirm: "Delete",
2740
2744
  confirming: "Deleting...",
@@ -2744,7 +2748,10 @@ var apiTabLabels$3 = {
2744
2748
  apiKeyModal: {
2745
2749
  title: "API Key",
2746
2750
  descriptionLineOne: "Please copy your API key and store it in a secure location. For security reasons, this key will only be displayed once and cannot be retrieved again after you leave this page.",
2747
- descriptionLineTwo: "If you lose your API key, you'll need to generate a new one."
2751
+ descriptionLineTwo: "If you lose your API key, you'll need to generate a new one.",
2752
+ description: "Copy and paste the API key.",
2753
+ copyAriaLabel: "Copy API key",
2754
+ copiedAriaLabel: "Copied"
2748
2755
  }
2749
2756
  };
2750
2757
  var apiTabTokenPolicies$3 = {
@@ -7015,6 +7022,11 @@ var toolsTabLabels$3 = {
7015
7022
  title: "Tools",
7016
7023
  description: "Configure tools and integrations for your agent."
7017
7024
  },
7025
+ infoBox: "Give your agent hands. Tools let it do things beyond chatting — look something up, call an API, trigger an action — so it can actually get work done for people.",
7026
+ moreInfoAbout: "More info about {name}",
7027
+ switchAriaLabel: "{name} {state}",
7028
+ enabled: "enabled",
7029
+ disabled: "disabled",
7018
7030
  toasts: {
7019
7031
  toggleSuccess: "Agent updated successfully",
7020
7032
  toggleError: "Failed to update tool"
@@ -10217,6 +10229,7 @@ var apiTabLabels$2 = {
10217
10229
  title: "API",
10218
10230
  description: "Gérez les clés API et les intégrations."
10219
10231
  },
10232
+ infoBox: "Utilisez cet agent depuis vos propres applications. Créez ici des clés API pour l'appeler par programmation et l'intégrer à votre produit ou à votre flux de travail.",
10220
10233
  disclaimer: {
10221
10234
  lineOne: "Vos clés API secrètes sont listées ci-dessous. Veuillez noter que nous n’affichons plus vos clés API secrètes après leur génération.",
10222
10235
  lineTwo: "Ne partagez pas votre clé API avec d’autres personnes et ne l’exposez pas dans le navigateur ou dans un autre code côté client. Pour protéger la sécurité de votre compte, IBL peut également faire pivoter automatiquement toute clé API que nous avons détectée comme publiquement exposée."
@@ -10229,14 +10242,15 @@ var apiTabLabels$2 = {
10229
10242
  actionsColumn: "Actions",
10230
10243
  emptyState: "Aucune clé API trouvée",
10231
10244
  noPermission: "Vous n’avez pas la permission de consulter les clés API",
10232
- deleteAriaLabel: "Supprimer la clé API"
10245
+ deleteAriaLabel: "Supprimer la clé API",
10246
+ notAvailable: "N/A"
10233
10247
  },
10234
10248
  actions: {
10235
10249
  createNew: "Créer nouveau"
10236
10250
  },
10237
10251
  createModal: {
10238
10252
  title: "Créer une clé API",
10239
- description: "Créer une clé API",
10253
+ description: "Nommez votre clé et définissez éventuellement une date d’expiration. La clé ne s’affichera qu’une seule fois.",
10240
10254
  nameLabel: "Nom de la clé API",
10241
10255
  namePlaceholder: "Nom de la clé API",
10242
10256
  nameRequired: "Le nom de la clé API est requis",
@@ -10245,12 +10259,14 @@ var apiTabLabels$2 = {
10245
10259
  expirationPlaceholder: "Choisir une date",
10246
10260
  submit: "Soumettre",
10247
10261
  submitting: "Envoi en cours...",
10262
+ cancel: "Annuler",
10248
10263
  successToast: "Clé API créée avec succès",
10249
10264
  errorToast: "Impossible de créer la clé API"
10250
10265
  },
10251
10266
  deleteModal: {
10252
10267
  title: "Supprimer la clé API",
10253
10268
  confirmation: "Voulez-vous vraiment supprimer la clé API nommée {name} ? Cette action est irréversible.",
10269
+ warning: "Toute application ou intégration utilisant cette clé cessera immédiatement de fonctionner.",
10254
10270
  cancel: "Annuler",
10255
10271
  confirm: "Supprimer",
10256
10272
  confirming: "Suppression en cours...",
@@ -10260,7 +10276,10 @@ var apiTabLabels$2 = {
10260
10276
  apiKeyModal: {
10261
10277
  title: "Clé API",
10262
10278
  descriptionLineOne: "Veuillez copier votre clé API et la conserver dans un endroit sécurisé. Pour des raisons de sécurité, cette clé ne sera affichée qu’une seule fois et ne pourra pas être récupérée après avoir quitté cette page.",
10263
- descriptionLineTwo: "Si vous perdez votre clé API, vous devrez en générer une nouvelle."
10279
+ descriptionLineTwo: "Si vous perdez votre clé API, vous devrez en générer une nouvelle.",
10280
+ description: "Copiez et collez la clé API.",
10281
+ copyAriaLabel: "Copier la clé API",
10282
+ copiedAriaLabel: "Copiée"
10264
10283
  }
10265
10284
  };
10266
10285
  var apiTabTokenPolicies$2 = {
@@ -14697,6 +14716,11 @@ var toolsTabLabels$2 = {
14697
14716
  title: "Outils",
14698
14717
  description: "Configurez les outils et les intégrations pour votre agent."
14699
14718
  },
14719
+ infoBox: "Donnez des mains à votre agent. Les outils lui permettent d'aller au-delà de la simple conversation — rechercher une information, appeler une API, déclencher une action — pour qu'il accomplisse réellement des tâches pour les utilisateurs.",
14720
+ moreInfoAbout: "Plus d'informations sur {name}",
14721
+ switchAriaLabel: "{name} {state}",
14722
+ enabled: "activé",
14723
+ disabled: "désactivé",
14700
14724
  toasts: {
14701
14725
  toggleSuccess: "Agent mis à jour avec succès",
14702
14726
  toggleError: "Échec de la mise à jour de l'outil"
@@ -17733,6 +17757,7 @@ var apiTabLabels$1 = {
17733
17757
  title: "API",
17734
17758
  description: "Administre las claves API y las integraciones."
17735
17759
  },
17760
+ infoBox: "Usa este agente desde tus propias aplicaciones. Crea aquí claves de API para llamarlo mediante programación e integrarlo en tu producto o flujo de trabajo.",
17736
17761
  disclaimer: {
17737
17762
  lineOne: "Sus claves API secretas se enumeran a continuación. Tenga en cuenta que no mostramos sus claves API secretas nuevamente después de generarlas.",
17738
17763
  lineTwo: "No comparta su clave API con otros ni la exponga en el navegador u otro código del lado del cliente. Para proteger la seguridad de su cuenta, IBL también puede rotar automáticamente cualquier clave API que hayamos detectado que se ha filtrado públicamente."
@@ -17745,14 +17770,15 @@ var apiTabLabels$1 = {
17745
17770
  actionsColumn: "Acciones",
17746
17771
  emptyState: "No se encontraron claves API",
17747
17772
  noPermission: "No tiene permiso para ver las claves API",
17748
- deleteAriaLabel: "Eliminar clave API"
17773
+ deleteAriaLabel: "Eliminar clave API",
17774
+ notAvailable: "N/A"
17749
17775
  },
17750
17776
  actions: {
17751
17777
  createNew: "Crear nuevo"
17752
17778
  },
17753
17779
  createModal: {
17754
17780
  title: "Crear clave API",
17755
- description: "Crear clave API",
17781
+ description: "Asigna un nombre a tu clave y, opcionalmente, una fecha de vencimiento. Solo verás la clave una vez.",
17756
17782
  nameLabel: "Nombre de la clave API",
17757
17783
  namePlaceholder: "Nombre de la clave API",
17758
17784
  nameRequired: "El nombre de la clave API es obligatorio",
@@ -17761,12 +17787,14 @@ var apiTabLabels$1 = {
17761
17787
  expirationPlaceholder: "Seleccionar una fecha",
17762
17788
  submit: "Enviar",
17763
17789
  submitting: "Enviando...",
17790
+ cancel: "Cancelar",
17764
17791
  successToast: "Clave API creada correctamente",
17765
17792
  errorToast: "Error al crear la clave API"
17766
17793
  },
17767
17794
  deleteModal: {
17768
17795
  title: "Eliminar clave API",
17769
17796
  confirmation: "¿Está seguro de que desea eliminar la clave API con el nombre {name}? Esta acción no se puede deshacer.",
17797
+ warning: "Cualquier aplicación o integración que use esta clave dejará de funcionar de inmediato.",
17770
17798
  cancel: "Cancelar",
17771
17799
  confirm: "Eliminar",
17772
17800
  confirming: "Eliminando...",
@@ -17776,7 +17804,10 @@ var apiTabLabels$1 = {
17776
17804
  apiKeyModal: {
17777
17805
  title: "Clave API",
17778
17806
  descriptionLineOne: "Copie su clave API y guárdela en un lugar seguro. Por razones de seguridad, esta clave solo se mostrará una vez y no podrá recuperarse después de salir de esta página.",
17779
- descriptionLineTwo: "Si pierde su clave API, deberá generar una nueva."
17807
+ descriptionLineTwo: "Si pierde su clave API, deberá generar una nueva.",
17808
+ description: "Copie y pegue la clave API.",
17809
+ copyAriaLabel: "Copiar clave API",
17810
+ copiedAriaLabel: "Copiada"
17780
17811
  }
17781
17812
  };
17782
17813
  var apiTabTokenPolicies$1 = {
@@ -22213,6 +22244,11 @@ var toolsTabLabels$1 = {
22213
22244
  title: "Herramientas",
22214
22245
  description: "Configure las herramientas e integraciones para su agente."
22215
22246
  },
22247
+ infoBox: "Dale manos a tu agente. Las herramientas le permiten hacer cosas más allá de conversar —buscar información, llamar a una API, activar una acción— para que realmente pueda hacer el trabajo por las personas.",
22248
+ moreInfoAbout: "Más información sobre {name}",
22249
+ switchAriaLabel: "{name} {state}",
22250
+ enabled: "habilitado",
22251
+ disabled: "deshabilitado",
22216
22252
  toasts: {
22217
22253
  toggleSuccess: "Agente actualizado correctamente",
22218
22254
  toggleError: "Error al actualizar la herramienta"
@@ -25249,6 +25285,7 @@ var apiTabLabels = {
25249
25285
  title: "API",
25250
25286
  description: "管理 API 密钥和集成。"
25251
25287
  },
25288
+ infoBox: "在您自己的应用中使用该智能体。在此创建 API 密钥,以便通过编程方式调用它,并将其集成到您的产品或工作流程中。",
25252
25289
  disclaimer: {
25253
25290
  lineOne: "您的秘密 API 密钥列表如下。请注意,生成密钥后,我们将不再显示您的秘密 API 密钥。",
25254
25291
  lineTwo: "请勿将您的 API 密钥共享给他人,也勿将其暴露在浏览器或其他客户端代码中。为了保护您账户的安全,IBL 也可能会自动轮换我们发现已公开泄露的任何 API 密钥。"
@@ -25261,14 +25298,15 @@ var apiTabLabels = {
25261
25298
  actionsColumn: "操作",
25262
25299
  emptyState: "未找到 API 密钥",
25263
25300
  noPermission: "您没有查看 API 密钥的权限",
25264
- deleteAriaLabel: "删除 API 密钥"
25301
+ deleteAriaLabel: "删除 API 密钥",
25302
+ notAvailable: "N/A"
25265
25303
  },
25266
25304
  actions: {
25267
25305
  createNew: "新建"
25268
25306
  },
25269
25307
  createModal: {
25270
25308
  title: "创建 API 密钥",
25271
- description: "创建 API 密钥",
25309
+ description: "为密钥命名,并可选择设置过期日期。密钥仅显示一次。",
25272
25310
  nameLabel: "API 密钥名称",
25273
25311
  namePlaceholder: "API 密钥名称",
25274
25312
  nameRequired: "API 密钥名称为必填项",
@@ -25277,12 +25315,14 @@ var apiTabLabels = {
25277
25315
  expirationPlaceholder: "选择日期",
25278
25316
  submit: "提交",
25279
25317
  submitting: "提交中……",
25318
+ cancel: "取消",
25280
25319
  successToast: "API 密钥创建成功",
25281
25320
  errorToast: "创建 API 密钥失败"
25282
25321
  },
25283
25322
  deleteModal: {
25284
25323
  title: "删除 API 密钥",
25285
25324
  confirmation: "您确定要删除名为「{name}」的 API 密钥吗?此操作无法撤销。",
25325
+ warning: "任何使用此密钥的应用或集成都将立即停止工作。",
25286
25326
  cancel: "取消",
25287
25327
  confirm: "删除",
25288
25328
  confirming: "删除中……",
@@ -25292,7 +25332,10 @@ var apiTabLabels = {
25292
25332
  apiKeyModal: {
25293
25333
  title: "API 密钥",
25294
25334
  descriptionLineOne: "请复制您的 API 密钥并将其保存在安全的位置。出于安全原因,该密钥仅显示一次,离开此页面后将无法再次获取。",
25295
- descriptionLineTwo: "如果您丢失了 API 密钥,将需要重新生成一个新的。"
25335
+ descriptionLineTwo: "如果您丢失了 API 密钥,将需要重新生成一个新的。",
25336
+ description: "复制并粘贴 API 密钥。",
25337
+ copyAriaLabel: "复制 API 密钥",
25338
+ copiedAriaLabel: "已复制"
25296
25339
  }
25297
25340
  };
25298
25341
  var apiTabTokenPolicies = {
@@ -29729,6 +29772,11 @@ var toolsTabLabels = {
29729
29772
  title: "工具",
29730
29773
  description: "为您的智能体配置工具和集成。"
29731
29774
  },
29775
+ infoBox: "为您的智能体赋予“双手”。工具让它能够超越单纯的聊天——查找信息、调用 API、触发操作——从而真正为用户完成工作。",
29776
+ moreInfoAbout: "关于 {name} 的更多信息",
29777
+ switchAriaLabel: "{name} {state}",
29778
+ enabled: "已启用",
29779
+ disabled: "已禁用",
29732
29780
  toasts: {
29733
29781
  toggleSuccess: "智能体已成功更新",
29734
29782
  toggleError: "更新工具失败"
@@ -148756,7 +148804,7 @@ function MemoryTab({ org, username }) {
148756
148804
  }
148757
148805
  // Hide memory UI when platform has disabled memsearch (skip check if API errored)
148758
148806
  if (!isConfigError && memsearchStatus && !memsearchStatus.enable_memsearch) {
148759
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryMemoryTab.memoryFeatureDisabled') }) }) }));
148807
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryMemoryTab.memoryFeatureDisabled') }) }) }));
148760
148808
  }
148761
148809
  return (jsxs("div", { className: "space-y-8", children: [(!isPreview || settings) && (jsxs("div", { className: "space-y-4", children: [jsx("h4", { className: "text-sm font-semibold text-gray-700 dark:text-gray-300 tracking-wide", children: t('memoryMemoryTab.sectionMemoryPersonalization') }), jsxs("div", { className: "flex items-center justify-between rounded-lg border px-6 py-5", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsxs("div", { className: "flex-1 mr-4", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: t('memoryMemoryTab.autoCaptureLabelTitle') }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: t('memoryMemoryTab.autoCaptureLabelDesc') })] }), jsx(Switch, { checked: (_a = settings === null || settings === void 0 ? void 0 : settings.auto_capture_enabled) !== null && _a !== void 0 ? _a : false, onCheckedChange: (checked) => handleToggleSetting('auto_capture_enabled', checked), disabled: isUpdatingSettings, "aria-label": t('memoryMemoryTab.autoCaptureAriaLabel', {
148762
148810
  state: (settings === null || settings === void 0 ? void 0 : settings.auto_capture_enabled)
@@ -152869,7 +152917,7 @@ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffs
152869
152917
  var _a;
152870
152918
  const portalContainer = useFloatingPortalContainer();
152871
152919
  const resolvedContainer = (_a = container !== null && container !== void 0 ? container : portalContainer) !== null && _a !== void 0 ? _a : undefined;
152872
- const content = (jsx(Content2$1, { ref: ref, "data-iblai-dialog-interaction-layer": true, align: align, sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', className), ...props }));
152920
+ const content = (jsx(Content2$1, { ref: ref, "data-iblai-dialog-interaction-layer": true, align: align, sideOffset: sideOffset, className: cn('pointer-events-auto bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', className), ...props }));
152873
152921
  if (!portalled) {
152874
152922
  return content;
152875
152923
  }
@@ -189130,7 +189178,7 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
189130
189178
  if (isReadOnly)
189131
189179
  return;
189132
189180
  basicForm.handleSubmit();
189133
- }, className: "max-w-3xl space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 gap-x-5 gap-y-5 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx("label", { htmlFor: "fullName", className: LABEL_CLASS, children: t('profileIndex.labelFullName') }), basicForm.Field({
189181
+ }, className: "space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 gap-x-5 gap-y-5 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx("label", { htmlFor: "fullName", className: LABEL_CLASS, children: t('profileIndex.labelFullName') }), basicForm.Field({
189134
189182
  name: 'fullName',
189135
189183
  validators: {
189136
189184
  onChange: basicValidators.fullName,
@@ -189154,11 +189202,14 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
189154
189202
  children: (field) => (jsxs(Select$1, { defaultValue: field.state.value, onValueChange: (value) => field.handleChange(value), disabled: isBusyBasic, children: [jsx(SelectTrigger, { id: "language", className: FIELD_CLASS, "aria-label": t('profileIndex.selectLanguagePlaceholder'), children: jsx(SelectValue, { placeholder: t('profileIndex.selectLanguagePlaceholder') }) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "en", children: t('profileIndex.langEnglish') }), jsx(SelectItem, { value: "es", children: t('profileIndex.langSpanish') }), jsx(SelectItem, { value: "fr", children: t('profileIndex.langFrench') })] })] })),
189155
189203
  })] }), jsxs("div", { className: "space-y-1.5 md:col-span-2", children: [jsx("label", { htmlFor: "about", className: LABEL_CLASS, children: t('profileIndex.labelAbout') }), basicForm.Field({
189156
189204
  name: 'about',
189157
- children: (field) => (jsx(Textarea, { id: "about", placeholder: t('profileIndex.placeholderAbout'), className: cn(FIELD_CLASS, 'h-auto resize-none py-2.5 leading-relaxed'), rows: 4, value: field.state.value, onChange: (e) => field.handleChange(e.target.value), disabled: isBusyBasic })),
189205
+ children: (field) => (jsx(Textarea, { id: "about", placeholder: t('profileIndex.placeholderAbout'), className: cn(FIELD_CLASS, 'h-auto resize-none py-2.5 leading-relaxed'),
189206
+ // Without the Features section below, the extra rows use
189207
+ // the space it would have taken.
189208
+ rows: customization.showMentorAIDisplayCheckbox ? 4 : 8, value: field.state.value, onChange: (e) => field.handleChange(e.target.value), disabled: isBusyBasic })),
189158
189209
  })] })] }), customization.showMentorAIDisplayCheckbox && (jsxs("section", { className: "space-y-2.5", "aria-labelledby": "profile-features-heading", children: [jsx("h4", { id: "profile-features-heading", className: "text-sm font-semibold text-gray-900 dark:text-gray-100", children: t('profileIndex.sectionFeatures') }), jsx("div", { className: "divide-y divide-gray-200 rounded-xl border border-gray-200 dark:divide-gray-800 dark:border-gray-800", children: jsxs("div", { className: "flex items-center justify-between gap-4 px-4 py-3.5", children: [jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [jsx("label", { htmlFor: "display-mentor", className: "text-sm font-medium text-gray-700 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-gray-300", children: t('profileIndex.checkboxDisplayMentorAI') }), jsx(CardInfoIcon, { description: t('profileIndex.tooltipDisplayMentorAI') })] }), basicForm.Field({
189159
189210
  name: 'displayMentor',
189160
189211
  children: (field) => (jsx(Switch, { className: "data-[state=checked]:bg-blue-600", onCheckedChange: (checked) => field.handleChange(checked), checked: field.state.value, disabled: isBusyBasic, id: "display-mentor" })),
189161
- })] }) })] }))] })), activeTab === 'social' && (jsxs("form", { className: "max-w-2xl space-y-5", onSubmit: (formEvent) => {
189212
+ })] }) })] }))] })), activeTab === 'social' && (jsxs("form", { className: "space-y-5", onSubmit: (formEvent) => {
189162
189213
  formEvent.preventDefault();
189163
189214
  formEvent.stopPropagation();
189164
189215
  if (isReadOnly)
@@ -201093,7 +201144,7 @@ function MemoryAdminTab({ tenantKey, username }) {
201093
201144
  return (jsxs("div", { className: "space-y-6", children: [jsx(Skeleton, { className: "h-10 w-full max-w-sm rounded-lg" }), jsx(Skeleton, { className: "h-40 w-full rounded-lg" })] }));
201094
201145
  }
201095
201146
  if (!isError && memsearchStatus && !memsearchStatus.enable_memsearch) {
201096
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryAdminTab.featureDisabled') }) }) }));
201147
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryAdminTab.featureDisabled') }) }) }));
201097
201148
  }
201098
201149
  return (jsxs(Tabs, { defaultValue: "global-memories", "aria-label": t('memoryAdminTab.tabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('memoryAdminTab.tabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [jsx(TabsTrigger, { "data-testid": "memory-admin-sub-tab-global", value: "global-memories", children: t('memoryAdminTab.tabGlobalMemories') }), jsx(TabsTrigger, { "data-testid": "memory-admin-sub-tab-agent", value: "agent-memories", children: t('memoryAdminTab.tabAgentMemories') })] }), jsx(TabsContent, { className: "mt-4", value: "global-memories", children: jsx(GlobalMemoriesSection, { tenantKey: tenantKey, username: username }) }), jsx(TabsContent, { className: "mt-4", value: "agent-memories", children: jsx(AgentMemoriesSection, { tenantKey: tenantKey, username: username }) })] }));
201099
201150
  }
@@ -201770,7 +201821,7 @@ function VirtualMachineAdminTab({ tenantKey, username, defaultTab = 'network-pol
201770
201821
  return (jsxs("div", { className: "space-y-6", "data-testid": "vm-admin-loading", children: [jsx(Skeleton, { className: "h-10 w-full max-w-sm rounded-lg" }), jsx(Skeleton, { className: "h-40 w-full rounded-lg" })] }));
201771
201822
  }
201772
201823
  if (policiesForbidden && secretsForbidden) {
201773
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, "data-testid": "vm-admin-forbidden", children: jsx("p", { className: "text-sm text-gray-500", children: t('virtualMachineAdminTab.forbidden') }) }) }));
201824
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, "data-testid": "vm-admin-forbidden", children: jsx("p", { className: "text-sm text-gray-500", children: t('virtualMachineAdminTab.forbidden') }) }) }));
201774
201825
  }
201775
201826
  const initialTab = (defaultTab === 'secrets' && !secretsForbidden) || policiesForbidden
201776
201827
  ? 'secrets'
@@ -97244,6 +97244,7 @@ var apiTabLabels$3 = {
97244
97244
  title: "API",
97245
97245
  description: "Manage API keys and integrations."
97246
97246
  },
97247
+ infoBox: "Use this agent from your own apps. Create API keys here to call it programmatically and build it into your product or workflow.",
97247
97248
  disclaimer: {
97248
97249
  lineOne: "Your secret API keys are listed below. Please note that we do not display your secret API keys again after you generate them.",
97249
97250
  lineTwo: "Do not share your API key with others, or expose it in the browser or other client-side code. In order to protect the security of your account, IBL may also automatically rotate any API key that we’ve found has leaked publicly."
@@ -97256,14 +97257,15 @@ var apiTabLabels$3 = {
97256
97257
  actionsColumn: "Actions",
97257
97258
  emptyState: "No API keys found",
97258
97259
  noPermission: "You do not have permission to view API keys",
97259
- deleteAriaLabel: "Delete API Key"
97260
+ deleteAriaLabel: "Delete API Key",
97261
+ notAvailable: "N/A"
97260
97262
  },
97261
97263
  actions: {
97262
97264
  createNew: "Create New"
97263
97265
  },
97264
97266
  createModal: {
97265
97267
  title: "Create API Key",
97266
- description: "Create API Key",
97268
+ description: "Name your key and optionally set an expiry date. You'll only see the key once.",
97267
97269
  nameLabel: "API Key Name",
97268
97270
  namePlaceholder: "API Key Name",
97269
97271
  nameRequired: "API Key name is required",
@@ -97272,12 +97274,14 @@ var apiTabLabels$3 = {
97272
97274
  expirationPlaceholder: "Pick a date",
97273
97275
  submit: "Submit",
97274
97276
  submitting: "Submitting...",
97277
+ cancel: "Cancel",
97275
97278
  successToast: "API Key created successfully",
97276
97279
  errorToast: "Failed to create API Key"
97277
97280
  },
97278
97281
  deleteModal: {
97279
97282
  title: "Delete API Key",
97280
97283
  confirmation: "Are you sure you want to delete the API Key with the name {name}? This action cannot be undone.",
97284
+ warning: "Any app or integration using this key will stop working immediately.",
97281
97285
  cancel: "Cancel",
97282
97286
  confirm: "Delete",
97283
97287
  confirming: "Deleting...",
@@ -97287,7 +97291,10 @@ var apiTabLabels$3 = {
97287
97291
  apiKeyModal: {
97288
97292
  title: "API Key",
97289
97293
  descriptionLineOne: "Please copy your API key and store it in a secure location. For security reasons, this key will only be displayed once and cannot be retrieved again after you leave this page.",
97290
- descriptionLineTwo: "If you lose your API key, you'll need to generate a new one."
97294
+ descriptionLineTwo: "If you lose your API key, you'll need to generate a new one.",
97295
+ description: "Copy and paste the API key.",
97296
+ copyAriaLabel: "Copy API key",
97297
+ copiedAriaLabel: "Copied"
97291
97298
  }
97292
97299
  };
97293
97300
  var apiTabTokenPolicies$3 = {
@@ -101558,6 +101565,11 @@ var toolsTabLabels$3 = {
101558
101565
  title: "Tools",
101559
101566
  description: "Configure tools and integrations for your agent."
101560
101567
  },
101568
+ infoBox: "Give your agent hands. Tools let it do things beyond chatting — look something up, call an API, trigger an action — so it can actually get work done for people.",
101569
+ moreInfoAbout: "More info about {name}",
101570
+ switchAriaLabel: "{name} {state}",
101571
+ enabled: "enabled",
101572
+ disabled: "disabled",
101561
101573
  toasts: {
101562
101574
  toggleSuccess: "Agent updated successfully",
101563
101575
  toggleError: "Failed to update tool"
@@ -104760,6 +104772,7 @@ var apiTabLabels$2 = {
104760
104772
  title: "API",
104761
104773
  description: "Gérez les clés API et les intégrations."
104762
104774
  },
104775
+ infoBox: "Utilisez cet agent depuis vos propres applications. Créez ici des clés API pour l'appeler par programmation et l'intégrer à votre produit ou à votre flux de travail.",
104763
104776
  disclaimer: {
104764
104777
  lineOne: "Vos clés API secrètes sont listées ci-dessous. Veuillez noter que nous n’affichons plus vos clés API secrètes après leur génération.",
104765
104778
  lineTwo: "Ne partagez pas votre clé API avec d’autres personnes et ne l’exposez pas dans le navigateur ou dans un autre code côté client. Pour protéger la sécurité de votre compte, IBL peut également faire pivoter automatiquement toute clé API que nous avons détectée comme publiquement exposée."
@@ -104772,14 +104785,15 @@ var apiTabLabels$2 = {
104772
104785
  actionsColumn: "Actions",
104773
104786
  emptyState: "Aucune clé API trouvée",
104774
104787
  noPermission: "Vous n’avez pas la permission de consulter les clés API",
104775
- deleteAriaLabel: "Supprimer la clé API"
104788
+ deleteAriaLabel: "Supprimer la clé API",
104789
+ notAvailable: "N/A"
104776
104790
  },
104777
104791
  actions: {
104778
104792
  createNew: "Créer nouveau"
104779
104793
  },
104780
104794
  createModal: {
104781
104795
  title: "Créer une clé API",
104782
- description: "Créer une clé API",
104796
+ description: "Nommez votre clé et définissez éventuellement une date d’expiration. La clé ne s’affichera qu’une seule fois.",
104783
104797
  nameLabel: "Nom de la clé API",
104784
104798
  namePlaceholder: "Nom de la clé API",
104785
104799
  nameRequired: "Le nom de la clé API est requis",
@@ -104788,12 +104802,14 @@ var apiTabLabels$2 = {
104788
104802
  expirationPlaceholder: "Choisir une date",
104789
104803
  submit: "Soumettre",
104790
104804
  submitting: "Envoi en cours...",
104805
+ cancel: "Annuler",
104791
104806
  successToast: "Clé API créée avec succès",
104792
104807
  errorToast: "Impossible de créer la clé API"
104793
104808
  },
104794
104809
  deleteModal: {
104795
104810
  title: "Supprimer la clé API",
104796
104811
  confirmation: "Voulez-vous vraiment supprimer la clé API nommée {name} ? Cette action est irréversible.",
104812
+ warning: "Toute application ou intégration utilisant cette clé cessera immédiatement de fonctionner.",
104797
104813
  cancel: "Annuler",
104798
104814
  confirm: "Supprimer",
104799
104815
  confirming: "Suppression en cours...",
@@ -104803,7 +104819,10 @@ var apiTabLabels$2 = {
104803
104819
  apiKeyModal: {
104804
104820
  title: "Clé API",
104805
104821
  descriptionLineOne: "Veuillez copier votre clé API et la conserver dans un endroit sécurisé. Pour des raisons de sécurité, cette clé ne sera affichée qu’une seule fois et ne pourra pas être récupérée après avoir quitté cette page.",
104806
- descriptionLineTwo: "Si vous perdez votre clé API, vous devrez en générer une nouvelle."
104822
+ descriptionLineTwo: "Si vous perdez votre clé API, vous devrez en générer une nouvelle.",
104823
+ description: "Copiez et collez la clé API.",
104824
+ copyAriaLabel: "Copier la clé API",
104825
+ copiedAriaLabel: "Copiée"
104807
104826
  }
104808
104827
  };
104809
104828
  var apiTabTokenPolicies$2 = {
@@ -109240,6 +109259,11 @@ var toolsTabLabels$2 = {
109240
109259
  title: "Outils",
109241
109260
  description: "Configurez les outils et les intégrations pour votre agent."
109242
109261
  },
109262
+ infoBox: "Donnez des mains à votre agent. Les outils lui permettent d'aller au-delà de la simple conversation — rechercher une information, appeler une API, déclencher une action — pour qu'il accomplisse réellement des tâches pour les utilisateurs.",
109263
+ moreInfoAbout: "Plus d'informations sur {name}",
109264
+ switchAriaLabel: "{name} {state}",
109265
+ enabled: "activé",
109266
+ disabled: "désactivé",
109243
109267
  toasts: {
109244
109268
  toggleSuccess: "Agent mis à jour avec succès",
109245
109269
  toggleError: "Échec de la mise à jour de l'outil"
@@ -112276,6 +112300,7 @@ var apiTabLabels$1 = {
112276
112300
  title: "API",
112277
112301
  description: "Administre las claves API y las integraciones."
112278
112302
  },
112303
+ infoBox: "Usa este agente desde tus propias aplicaciones. Crea aquí claves de API para llamarlo mediante programación e integrarlo en tu producto o flujo de trabajo.",
112279
112304
  disclaimer: {
112280
112305
  lineOne: "Sus claves API secretas se enumeran a continuación. Tenga en cuenta que no mostramos sus claves API secretas nuevamente después de generarlas.",
112281
112306
  lineTwo: "No comparta su clave API con otros ni la exponga en el navegador u otro código del lado del cliente. Para proteger la seguridad de su cuenta, IBL también puede rotar automáticamente cualquier clave API que hayamos detectado que se ha filtrado públicamente."
@@ -112288,14 +112313,15 @@ var apiTabLabels$1 = {
112288
112313
  actionsColumn: "Acciones",
112289
112314
  emptyState: "No se encontraron claves API",
112290
112315
  noPermission: "No tiene permiso para ver las claves API",
112291
- deleteAriaLabel: "Eliminar clave API"
112316
+ deleteAriaLabel: "Eliminar clave API",
112317
+ notAvailable: "N/A"
112292
112318
  },
112293
112319
  actions: {
112294
112320
  createNew: "Crear nuevo"
112295
112321
  },
112296
112322
  createModal: {
112297
112323
  title: "Crear clave API",
112298
- description: "Crear clave API",
112324
+ description: "Asigna un nombre a tu clave y, opcionalmente, una fecha de vencimiento. Solo verás la clave una vez.",
112299
112325
  nameLabel: "Nombre de la clave API",
112300
112326
  namePlaceholder: "Nombre de la clave API",
112301
112327
  nameRequired: "El nombre de la clave API es obligatorio",
@@ -112304,12 +112330,14 @@ var apiTabLabels$1 = {
112304
112330
  expirationPlaceholder: "Seleccionar una fecha",
112305
112331
  submit: "Enviar",
112306
112332
  submitting: "Enviando...",
112333
+ cancel: "Cancelar",
112307
112334
  successToast: "Clave API creada correctamente",
112308
112335
  errorToast: "Error al crear la clave API"
112309
112336
  },
112310
112337
  deleteModal: {
112311
112338
  title: "Eliminar clave API",
112312
112339
  confirmation: "¿Está seguro de que desea eliminar la clave API con el nombre {name}? Esta acción no se puede deshacer.",
112340
+ warning: "Cualquier aplicación o integración que use esta clave dejará de funcionar de inmediato.",
112313
112341
  cancel: "Cancelar",
112314
112342
  confirm: "Eliminar",
112315
112343
  confirming: "Eliminando...",
@@ -112319,7 +112347,10 @@ var apiTabLabels$1 = {
112319
112347
  apiKeyModal: {
112320
112348
  title: "Clave API",
112321
112349
  descriptionLineOne: "Copie su clave API y guárdela en un lugar seguro. Por razones de seguridad, esta clave solo se mostrará una vez y no podrá recuperarse después de salir de esta página.",
112322
- descriptionLineTwo: "Si pierde su clave API, deberá generar una nueva."
112350
+ descriptionLineTwo: "Si pierde su clave API, deberá generar una nueva.",
112351
+ description: "Copie y pegue la clave API.",
112352
+ copyAriaLabel: "Copiar clave API",
112353
+ copiedAriaLabel: "Copiada"
112323
112354
  }
112324
112355
  };
112325
112356
  var apiTabTokenPolicies$1 = {
@@ -116756,6 +116787,11 @@ var toolsTabLabels$1 = {
116756
116787
  title: "Herramientas",
116757
116788
  description: "Configure las herramientas e integraciones para su agente."
116758
116789
  },
116790
+ infoBox: "Dale manos a tu agente. Las herramientas le permiten hacer cosas más allá de conversar —buscar información, llamar a una API, activar una acción— para que realmente pueda hacer el trabajo por las personas.",
116791
+ moreInfoAbout: "Más información sobre {name}",
116792
+ switchAriaLabel: "{name} {state}",
116793
+ enabled: "habilitado",
116794
+ disabled: "deshabilitado",
116759
116795
  toasts: {
116760
116796
  toggleSuccess: "Agente actualizado correctamente",
116761
116797
  toggleError: "Error al actualizar la herramienta"
@@ -119792,6 +119828,7 @@ var apiTabLabels = {
119792
119828
  title: "API",
119793
119829
  description: "管理 API 密钥和集成。"
119794
119830
  },
119831
+ infoBox: "在您自己的应用中使用该智能体。在此创建 API 密钥,以便通过编程方式调用它,并将其集成到您的产品或工作流程中。",
119795
119832
  disclaimer: {
119796
119833
  lineOne: "您的秘密 API 密钥列表如下。请注意,生成密钥后,我们将不再显示您的秘密 API 密钥。",
119797
119834
  lineTwo: "请勿将您的 API 密钥共享给他人,也勿将其暴露在浏览器或其他客户端代码中。为了保护您账户的安全,IBL 也可能会自动轮换我们发现已公开泄露的任何 API 密钥。"
@@ -119804,14 +119841,15 @@ var apiTabLabels = {
119804
119841
  actionsColumn: "操作",
119805
119842
  emptyState: "未找到 API 密钥",
119806
119843
  noPermission: "您没有查看 API 密钥的权限",
119807
- deleteAriaLabel: "删除 API 密钥"
119844
+ deleteAriaLabel: "删除 API 密钥",
119845
+ notAvailable: "N/A"
119808
119846
  },
119809
119847
  actions: {
119810
119848
  createNew: "新建"
119811
119849
  },
119812
119850
  createModal: {
119813
119851
  title: "创建 API 密钥",
119814
- description: "创建 API 密钥",
119852
+ description: "为密钥命名,并可选择设置过期日期。密钥仅显示一次。",
119815
119853
  nameLabel: "API 密钥名称",
119816
119854
  namePlaceholder: "API 密钥名称",
119817
119855
  nameRequired: "API 密钥名称为必填项",
@@ -119820,12 +119858,14 @@ var apiTabLabels = {
119820
119858
  expirationPlaceholder: "选择日期",
119821
119859
  submit: "提交",
119822
119860
  submitting: "提交中……",
119861
+ cancel: "取消",
119823
119862
  successToast: "API 密钥创建成功",
119824
119863
  errorToast: "创建 API 密钥失败"
119825
119864
  },
119826
119865
  deleteModal: {
119827
119866
  title: "删除 API 密钥",
119828
119867
  confirmation: "您确定要删除名为「{name}」的 API 密钥吗?此操作无法撤销。",
119868
+ warning: "任何使用此密钥的应用或集成都将立即停止工作。",
119829
119869
  cancel: "取消",
119830
119870
  confirm: "删除",
119831
119871
  confirming: "删除中……",
@@ -119835,7 +119875,10 @@ var apiTabLabels = {
119835
119875
  apiKeyModal: {
119836
119876
  title: "API 密钥",
119837
119877
  descriptionLineOne: "请复制您的 API 密钥并将其保存在安全的位置。出于安全原因,该密钥仅显示一次,离开此页面后将无法再次获取。",
119838
- descriptionLineTwo: "如果您丢失了 API 密钥,将需要重新生成一个新的。"
119878
+ descriptionLineTwo: "如果您丢失了 API 密钥,将需要重新生成一个新的。",
119879
+ description: "复制并粘贴 API 密钥。",
119880
+ copyAriaLabel: "复制 API 密钥",
119881
+ copiedAriaLabel: "已复制"
119839
119882
  }
119840
119883
  };
119841
119884
  var apiTabTokenPolicies = {
@@ -124272,6 +124315,11 @@ var toolsTabLabels = {
124272
124315
  title: "工具",
124273
124316
  description: "为您的智能体配置工具和集成。"
124274
124317
  },
124318
+ infoBox: "为您的智能体赋予“双手”。工具让它能够超越单纯的聊天——查找信息、调用 API、触发操作——从而真正为用户完成工作。",
124319
+ moreInfoAbout: "关于 {name} 的更多信息",
124320
+ switchAriaLabel: "{name} {state}",
124321
+ enabled: "已启用",
124322
+ disabled: "已禁用",
124275
124323
  toasts: {
124276
124324
  toggleSuccess: "智能体已成功更新",
124277
124325
  toggleError: "更新工具失败"
@@ -180982,7 +181030,7 @@ function MemoryTab({ org, username }) {
180982
181030
  }
180983
181031
  // Hide memory UI when platform has disabled memsearch (skip check if API errored)
180984
181032
  if (!isConfigError && memsearchStatus && !memsearchStatus.enable_memsearch) {
180985
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryMemoryTab.memoryFeatureDisabled') }) }) }));
181033
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryMemoryTab.memoryFeatureDisabled') }) }) }));
180986
181034
  }
180987
181035
  return (jsxs("div", { className: "space-y-8", children: [(!isPreview || settings) && (jsxs("div", { className: "space-y-4", children: [jsx("h4", { className: "text-sm font-semibold text-gray-700 dark:text-gray-300 tracking-wide", children: t('memoryMemoryTab.sectionMemoryPersonalization') }), jsxs("div", { className: "flex items-center justify-between rounded-lg border px-6 py-5", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsxs("div", { className: "flex-1 mr-4", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: t('memoryMemoryTab.autoCaptureLabelTitle') }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: t('memoryMemoryTab.autoCaptureLabelDesc') })] }), jsx(Switch, { checked: (_a = settings === null || settings === void 0 ? void 0 : settings.auto_capture_enabled) !== null && _a !== void 0 ? _a : false, onCheckedChange: (checked) => handleToggleSetting('auto_capture_enabled', checked), disabled: isUpdatingSettings, "aria-label": t('memoryMemoryTab.autoCaptureAriaLabel', {
180988
181036
  state: (settings === null || settings === void 0 ? void 0 : settings.auto_capture_enabled)
@@ -185137,7 +185185,7 @@ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffs
185137
185185
  var _a;
185138
185186
  const portalContainer = useFloatingPortalContainer();
185139
185187
  const resolvedContainer = (_a = container !== null && container !== void 0 ? container : portalContainer) !== null && _a !== void 0 ? _a : undefined;
185140
- const content = (jsx(Content2$2, { ref: ref, "data-iblai-dialog-interaction-layer": true, align: align, sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', className), ...props }));
185188
+ const content = (jsx(Content2$2, { ref: ref, "data-iblai-dialog-interaction-layer": true, align: align, sideOffset: sideOffset, className: cn('pointer-events-auto bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', className), ...props }));
185141
185189
  if (!portalled) {
185142
185190
  return content;
185143
185191
  }
@@ -221444,7 +221492,7 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
221444
221492
  if (isReadOnly)
221445
221493
  return;
221446
221494
  basicForm.handleSubmit();
221447
- }, className: "max-w-3xl space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 gap-x-5 gap-y-5 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx("label", { htmlFor: "fullName", className: LABEL_CLASS, children: t('profileIndex.labelFullName') }), basicForm.Field({
221495
+ }, className: "space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 gap-x-5 gap-y-5 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx("label", { htmlFor: "fullName", className: LABEL_CLASS, children: t('profileIndex.labelFullName') }), basicForm.Field({
221448
221496
  name: 'fullName',
221449
221497
  validators: {
221450
221498
  onChange: basicValidators.fullName,
@@ -221468,11 +221516,14 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
221468
221516
  children: (field) => (jsxs(Select$1, { defaultValue: field.state.value, onValueChange: (value) => field.handleChange(value), disabled: isBusyBasic, children: [jsx(SelectTrigger, { id: "language", className: FIELD_CLASS, "aria-label": t('profileIndex.selectLanguagePlaceholder'), children: jsx(SelectValue, { placeholder: t('profileIndex.selectLanguagePlaceholder') }) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "en", children: t('profileIndex.langEnglish') }), jsx(SelectItem, { value: "es", children: t('profileIndex.langSpanish') }), jsx(SelectItem, { value: "fr", children: t('profileIndex.langFrench') })] })] })),
221469
221517
  })] }), jsxs("div", { className: "space-y-1.5 md:col-span-2", children: [jsx("label", { htmlFor: "about", className: LABEL_CLASS, children: t('profileIndex.labelAbout') }), basicForm.Field({
221470
221518
  name: 'about',
221471
- children: (field) => (jsx(Textarea, { id: "about", placeholder: t('profileIndex.placeholderAbout'), className: cn(FIELD_CLASS, 'h-auto resize-none py-2.5 leading-relaxed'), rows: 4, value: field.state.value, onChange: (e) => field.handleChange(e.target.value), disabled: isBusyBasic })),
221519
+ children: (field) => (jsx(Textarea, { id: "about", placeholder: t('profileIndex.placeholderAbout'), className: cn(FIELD_CLASS, 'h-auto resize-none py-2.5 leading-relaxed'),
221520
+ // Without the Features section below, the extra rows use
221521
+ // the space it would have taken.
221522
+ rows: customization.showMentorAIDisplayCheckbox ? 4 : 8, value: field.state.value, onChange: (e) => field.handleChange(e.target.value), disabled: isBusyBasic })),
221472
221523
  })] })] }), customization.showMentorAIDisplayCheckbox && (jsxs("section", { className: "space-y-2.5", "aria-labelledby": "profile-features-heading", children: [jsx("h4", { id: "profile-features-heading", className: "text-sm font-semibold text-gray-900 dark:text-gray-100", children: t('profileIndex.sectionFeatures') }), jsx("div", { className: "divide-y divide-gray-200 rounded-xl border border-gray-200 dark:divide-gray-800 dark:border-gray-800", children: jsxs("div", { className: "flex items-center justify-between gap-4 px-4 py-3.5", children: [jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [jsx("label", { htmlFor: "display-mentor", className: "text-sm font-medium text-gray-700 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-gray-300", children: t('profileIndex.checkboxDisplayMentorAI') }), jsx(CardInfoIcon, { description: t('profileIndex.tooltipDisplayMentorAI') })] }), basicForm.Field({
221473
221524
  name: 'displayMentor',
221474
221525
  children: (field) => (jsx(Switch, { className: "data-[state=checked]:bg-blue-600", onCheckedChange: (checked) => field.handleChange(checked), checked: field.state.value, disabled: isBusyBasic, id: "display-mentor" })),
221475
- })] }) })] }))] })), activeTab === 'social' && (jsxs("form", { className: "max-w-2xl space-y-5", onSubmit: (formEvent) => {
221526
+ })] }) })] }))] })), activeTab === 'social' && (jsxs("form", { className: "space-y-5", onSubmit: (formEvent) => {
221476
221527
  formEvent.preventDefault();
221477
221528
  formEvent.stopPropagation();
221478
221529
  if (isReadOnly)
@@ -233535,7 +233586,7 @@ function MemoryAdminTab({ tenantKey, username }) {
233535
233586
  return (jsxs("div", { className: "space-y-6", children: [jsx(Skeleton, { className: "h-10 w-full max-w-sm rounded-lg" }), jsx(Skeleton, { className: "h-40 w-full rounded-lg" })] }));
233536
233587
  }
233537
233588
  if (!isError && memsearchStatus && !memsearchStatus.enable_memsearch) {
233538
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryAdminTab.featureDisabled') }) }) }));
233589
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("p", { className: "text-sm text-gray-500", children: t('memoryAdminTab.featureDisabled') }) }) }));
233539
233590
  }
233540
233591
  return (jsxs(Tabs, { defaultValue: "global-memories", "aria-label": t('memoryAdminTab.tabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('memoryAdminTab.tabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [jsx(TabsTrigger, { "data-testid": "memory-admin-sub-tab-global", value: "global-memories", children: t('memoryAdminTab.tabGlobalMemories') }), jsx(TabsTrigger, { "data-testid": "memory-admin-sub-tab-agent", value: "agent-memories", children: t('memoryAdminTab.tabAgentMemories') })] }), jsx(TabsContent, { className: "mt-4", value: "global-memories", children: jsx(GlobalMemoriesSection, { tenantKey: tenantKey, username: username }) }), jsx(TabsContent, { className: "mt-4", value: "agent-memories", children: jsx(AgentMemoriesSection, { tenantKey: tenantKey, username: username }) })] }));
233541
233592
  }
@@ -234210,7 +234261,7 @@ function VirtualMachineAdminTab({ tenantKey, username, defaultTab = 'network-pol
234210
234261
  return (jsxs("div", { className: "space-y-6", "data-testid": "vm-admin-loading", children: [jsx(Skeleton, { className: "h-10 w-full max-w-sm rounded-lg" }), jsx(Skeleton, { className: "h-40 w-full rounded-lg" })] }));
234211
234262
  }
234212
234263
  if (policiesForbidden && secretsForbidden) {
234213
- return (jsx("div", { className: "max-w-2xl", children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, "data-testid": "vm-admin-forbidden", children: jsx("p", { className: "text-sm text-gray-500", children: t('virtualMachineAdminTab.forbidden') }) }) }));
234264
+ return (jsx("div", { children: jsx("div", { className: "rounded-lg border px-6 py-8 text-center", style: { borderColor: 'oklch(.922 0 0)' }, "data-testid": "vm-admin-forbidden", children: jsx("p", { className: "text-sm text-gray-500", children: t('virtualMachineAdminTab.forbidden') }) }) }));
234214
234265
  }
234215
234266
  const initialTab = (defaultTab === 'secrets' && !secretsForbidden) || policiesForbidden
234216
234267
  ? 'secrets'
@@ -275758,6 +275809,9 @@ const AGENT_TOOLS_TAB_LABELS = {
275758
275809
  title: 'Tools',
275759
275810
  description: 'Configure tools and integrations for your agent.',
275760
275811
  },
275812
+ infoBox: 'Give your agent hands. Tools let it do things beyond chatting — look something up, call an API, trigger an action — so it can actually get work done for people.',
275813
+ moreInfoAbout: (name) => `More info about ${name}`,
275814
+ switchAriaLabel: (name, isEnabled) => `${name} ${isEnabled ? 'enabled' : 'disabled'}`,
275761
275815
  toasts: {
275762
275816
  toggleSuccess: 'Agent updated successfully',
275763
275817
  toggleError: 'Failed to update tool',
@@ -275769,6 +275823,12 @@ function buildToolsTabLabels(t) {
275769
275823
  title: t('toolsTabLabels.header.title'),
275770
275824
  description: t('toolsTabLabels.header.description'),
275771
275825
  },
275826
+ infoBox: t('toolsTabLabels.infoBox'),
275827
+ moreInfoAbout: (name) => t('toolsTabLabels.moreInfoAbout', { name }),
275828
+ switchAriaLabel: (name, isEnabled) => t('toolsTabLabels.switchAriaLabel', {
275829
+ name,
275830
+ state: isEnabled ? t('toolsTabLabels.enabled') : t('toolsTabLabels.disabled'),
275831
+ }),
275772
275832
  toasts: {
275773
275833
  toggleSuccess: t('toolsTabLabels.toasts.toggleSuccess'),
275774
275834
  toggleError: t('toolsTabLabels.toasts.toggleError'),
@@ -275788,19 +275848,53 @@ function AgentToolsTab({ labels: labelsOverride }) {
275788
275848
  const labels = React__default.useMemo(() => resolveToolsTabLabels(labelsOverride, t), [labelsOverride, t]);
275789
275849
  const { enableRBAC } = useAgentSettings();
275790
275850
  const { tools, mentorSettings, mentorTools, toggleTool, isDisabled } = useTools({ labels });
275791
- return (jsxs(Fragment$1, { children: [jsx("div", { className: "flex hidden h-[73px] flex-shrink-0 items-center border-b border-gray-200 bg-white p-4 lg:block", children: jsxs("div", { children: [jsx("h3", { className: "mb-1 text-base font-medium text-gray-900", children: labels.header.title }), jsx("p", { className: "text-xs text-gray-700", children: labels.header.description })] }) }), jsx("div", { className: "flex-1 space-y-4 p-3", style: {
275851
+ return (jsxs(Fragment$1, { children: [jsx("div", { className: "flex hidden h-[73px] flex-shrink-0 items-center border-b border-gray-200 bg-white p-4 lg:block", children: jsxs("div", { children: [jsx("h3", { className: "mb-1 text-base font-medium text-gray-900", children: labels.header.title }), jsx("p", { className: "text-xs text-gray-700", children: labels.header.description })] }) }), jsxs("div", { className: "flex-1 space-y-4 p-3", style: {
275792
275852
  overflowY: 'auto',
275793
275853
  overflowX: 'hidden',
275794
- }, children: jsx(WithFormPermissions, { name: "mentor_tools",
275795
- // @ts-ignore
275796
- permissions: (_a = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _a === void 0 ? void 0 : _a.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsx("div", { className: "space-y-6", children: tools === null || tools === void 0 ? void 0 : tools.map((tool) => {
275797
- var _a, _b;
275798
- const isEnabled = mentorTools.includes((_a = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _a !== void 0 ? _a : '');
275799
- return (jsxs("div", { className: "flex items-center justify-between rounded-lg border p-6", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-gray-700", children: tool === null || tool === void 0 ? void 0 : tool.display_name }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { "aria-label": `More info about ${tool === null || tool === void 0 ? void 0 : tool.display_name}`, children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: jsx("p", { children: tool === null || tool === void 0 ? void 0 : tool.description }) })] }) })] }), jsx(CustomSwitch, { checked: isEnabled, onCheckedChange: async () => {
275800
- var _a;
275801
- await toggleTool((_a = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _a !== void 0 ? _a : '');
275802
- }, disabled: isDisabled || disabled, "aria-label": `${tool === null || tool === void 0 ? void 0 : tool.display_name} ${isEnabled ? 'enabled' : 'disabled'}` })] }, (_b = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _b !== void 0 ? _b : tool === null || tool === void 0 ? void 0 : tool.name));
275803
- }) })) }) })] }));
275854
+ }, children: [jsx("div", { className: "rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-600", "data-testid": "tools-info-box", children: labels.infoBox }), jsx(WithFormPermissions, { name: "mentor_tools",
275855
+ // @ts-ignore
275856
+ permissions: (_a = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _a === void 0 ? void 0 : _a.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsx("div", { className: "space-y-6", children: tools === null || tools === void 0 ? void 0 : tools.map((tool) => {
275857
+ var _a, _b, _c, _d;
275858
+ const isEnabled = mentorTools.includes((_a = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _a !== void 0 ? _a : '');
275859
+ return (jsxs("div", { className: "flex items-center justify-between rounded-lg border p-6", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-gray-700", children: tool === null || tool === void 0 ? void 0 : tool.display_name }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { "aria-label": labels.moreInfoAbout((_b = tool === null || tool === void 0 ? void 0 : tool.display_name) !== null && _b !== void 0 ? _b : ''), children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: jsx("p", { children: tool === null || tool === void 0 ? void 0 : tool.description }) })] }) })] }), jsx(CustomSwitch, { checked: isEnabled, onCheckedChange: async () => {
275860
+ var _a;
275861
+ await toggleTool((_a = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _a !== void 0 ? _a : '');
275862
+ }, disabled: isDisabled || disabled, "aria-label": labels.switchAriaLabel((_c = tool === null || tool === void 0 ? void 0 : tool.display_name) !== null && _c !== void 0 ? _c : '', isEnabled) })] }, (_d = tool === null || tool === void 0 ? void 0 : tool.slug) !== null && _d !== void 0 ? _d : tool === null || tool === void 0 ? void 0 : tool.name));
275863
+ }) })) })] })] }));
275864
+ }
275865
+
275866
+ function useToggleTools({ activeMentorId, tenantKey, username, tools = [] }) {
275867
+ const [editMentor, { isLoading }] = useEditMentorMutation();
275868
+ async function toggleTools(toolSlug, callback, labels) {
275869
+ var _a, _b, _c, _d;
275870
+ const mentorTools = tools;
275871
+ const newMentorTools = mentorTools.includes(toolSlug)
275872
+ ? mentorTools.filter((tool) => tool !== toolSlug)
275873
+ : [...mentorTools, toolSlug];
275874
+ try {
275875
+ await editMentor({
275876
+ mentor: activeMentorId,
275877
+ org: tenantKey,
275878
+ formData: {
275879
+ tool_slugs: newMentorTools,
275880
+ can_use_tools: newMentorTools.length > 0 ? true : false,
275881
+ },
275882
+ // @ts-expect-error userId is not in the typed args but the API accepts it
275883
+ userId: username !== null && username !== void 0 ? username : '',
275884
+ }).unwrap();
275885
+ toast.success((_a = labels === null || labels === void 0 ? void 0 : labels.success) !== null && _a !== void 0 ? _a : 'Agent updated successfully');
275886
+ callback === null || callback === void 0 ? void 0 : callback();
275887
+ }
275888
+ catch (error) {
275889
+ const errorMessage = ((_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.error) || ((_c = error === null || error === void 0 ? void 0 : error.error) === null || _c === void 0 ? void 0 : _c.error) || ((_d = labels === null || labels === void 0 ? void 0 : labels.error) !== null && _d !== void 0 ? _d : 'Failed to update tool');
275890
+ toast.error(errorMessage);
275891
+ console.error('Failed to toggle tools:', error);
275892
+ }
275893
+ }
275894
+ return {
275895
+ toggleTools,
275896
+ isLoading,
275897
+ };
275804
275898
  }
275805
275899
 
275806
275900
  const AGENT_MEMORY_TAB_LABELS = {
@@ -280688,7 +280782,7 @@ function SpendCapUsage({ tenantKey, userId, mentorId, showWhenOk = false, classN
280688
280782
  function ApiKeyModal({ isOpen, onClose, apiKey, labels }) {
280689
280783
  const { copy, status } = useCopyToClipboard(800);
280690
280784
  const Icon = status === 'success' ? Check : Copy;
280691
- return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { className: "ibl-dialog-title", children: labels.title }) }), jsx(DialogDescription, { className: "sr-only", children: "Copy and paste the API key." }), jsxs("div", { className: "grid gap-6", children: [jsxs("p", { className: "text-muted-foreground grid gap-2 text-sm", children: [jsx("span", { children: labels.descriptionLineOne }), jsx("span", { children: labels.descriptionLineTwo })] }), jsxs("div", { className: "flex items-center gap-4", children: [jsx(Input, { defaultValue: apiKey, readOnly: true }), jsx(Button$1, { size: "icon", className: "ibl-button-primary cursor-pointer", onClick: () => copy(apiKey), "aria-label": status === 'success' ? 'Copied' : 'Copy API key', children: jsx(Icon, { className: "h-4 w-4" }) })] })] })] }) }));
280785
+ return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { className: "ibl-dialog-title", children: labels.title }) }), jsx(DialogDescription, { className: "sr-only", children: labels.description }), jsxs("div", { className: "grid gap-6", children: [jsxs("p", { className: "text-muted-foreground grid gap-2 text-sm", children: [jsx("span", { children: labels.descriptionLineOne }), jsx("span", { children: labels.descriptionLineTwo })] }), jsxs("div", { className: "flex items-center gap-4", children: [jsx(Input, { defaultValue: apiKey, readOnly: true }), jsx(Button$1, { size: "icon", className: "ibl-button-primary cursor-pointer", onClick: () => copy(apiKey), "aria-label": status === 'success' ? labels.copiedAriaLabel : labels.copyAriaLabel, children: jsx(Icon, { className: "h-4 w-4" }) })] })] })] }) }));
280692
280786
  }
280693
280787
 
280694
280788
  const createApiFormDefaultValues = {
@@ -280702,9 +280796,10 @@ function daysFromCurrentDate(targetDate) {
280702
280796
  const daysDifference = Math.ceil(timeDifference / oneDay);
280703
280797
  return daysDifference * 24 * 3600;
280704
280798
  }
280705
- function CreateApiModal({ isOpen, onClose, tenantKey, username, executeGatedAction, labels, apiKeyModalLabels, }) {
280799
+ function CreateApiModal({ isOpen, onClose, tenantKey, username, executeGatedAction, onCreated, labels, apiKeyModalLabels, }) {
280706
280800
  const [apiKey, setApiKey] = React__default.useState(null);
280707
280801
  const [createApiKey, { isLoading }] = useCreateApiKeyMutation();
280802
+ const nameInputId = React__default.useId();
280708
280803
  const createApiFormSchema = React__default.useMemo(() => z$2.object({
280709
280804
  name: z$2
280710
280805
  .string()
@@ -280736,6 +280831,7 @@ function CreateApiModal({ isOpen, onClose, tenantKey, username, executeGatedActi
280736
280831
  toast.success(labels.successToast);
280737
280832
  form.reset();
280738
280833
  setApiKey(response.key);
280834
+ onCreated === null || onCreated === void 0 ? void 0 : onCreated();
280739
280835
  }
280740
280836
  catch (error) {
280741
280837
  console.error(JSON.stringify(error));
@@ -280752,21 +280848,21 @@ function CreateApiModal({ isOpen, onClose, tenantKey, username, executeGatedActi
280752
280848
  form.handleSubmit();
280753
280849
  }
280754
280850
  };
280755
- return (jsxs(Fragment$1, { children: [jsx(Dialog, { open: isOpen, onOpenChange: isLoading ? undefined : onClose, children: jsxs(DialogContent, { "aria-describedby": "api-key-creation-description", className: "w-full max-w-md", children: [jsx(DialogDescription, { className: "sr-only", children: labels.description }), jsx(DialogHeader, { children: jsx(DialogTitle, { className: "ibl-dialog-title", children: labels.title }) }), jsxs("form", { onSubmit: (formEvent) => {
280851
+ return (jsxs(Fragment$1, { children: [jsx(Dialog, { open: isOpen, onOpenChange: isLoading ? undefined : onClose, children: jsxs(DialogContent, { className: "flex max-h-[80vh] w-full max-w-lg flex-col gap-0 overflow-hidden p-0", children: [jsxs(DialogHeader, { className: "flex-shrink-0 space-y-1 border-b border-gray-200 bg-white px-4 pt-4 pr-10 pb-3 text-left", children: [jsx(DialogTitle, { className: "text-sm font-semibold text-gray-900", children: labels.title }), jsx(DialogDescription, { className: "text-xs text-gray-600", children: labels.description })] }), jsxs("form", { onSubmit: (formEvent) => {
280756
280852
  formEvent.preventDefault();
280757
280853
  formEvent.stopPropagation();
280758
280854
  handleSubmit();
280759
- }, className: "mt-5 grid gap-5", children: [jsx(form.Field, { name: "name", children: (field) => {
280760
- var _a, _b;
280761
- const hasError = ((_a = field.state.meta.errors) === null || _a === void 0 ? void 0 : _a.length) > 0;
280762
- const isDirty = field.state.meta.isDirty;
280763
- const hasErrorAndIsDirty = hasError && isDirty;
280764
- return (jsxs("div", { className: "space-y-1.5", children: [jsxs(Label$1, { className: "flex items-center text-sm font-medium text-[#646464]", children: [labels.nameLabel, jsx("span", { className: "ml-1 text-red-500", children: "*" })] }), jsx(Input, { placeholder: labels.namePlaceholder, value: field.state.value, onChange: (event) => field.handleChange(event.target.value), autoComplete: "off" }), hasErrorAndIsDirty && (jsx("p", { className: "text-xs text-red-500", children: (_b = field.state.meta.errors[0]) === null || _b === void 0 ? void 0 : _b.message }))] }));
280765
- } }), jsx(form.Field, { name: "expiration_date", children: (field) => (jsxs("div", { className: "space-y-1.5", children: [jsx(Label$1, { className: "flex items-center text-sm font-medium text-[#646464]", children: labels.expirationLabel }), jsxs(Popover, { children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button$1, { type: "button", variant: "outline", className: cn('w-full pl-3 text-left font-normal', !field.state.value && 'text-muted-foreground'), children: [field.state.value ? (format$1(field.state.value, 'PPP')) : (jsx("span", { children: labels.expirationPlaceholder })), jsx(Calendar$1, { className: "ml-auto h-4 w-4 opacity-50" })] }) }), jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: jsx(Calendar, { mode: "single",
280766
- // @ts-ignore - Calendar selected prop expects Date but form field may be null
280767
- selected: field.state.value, onSelect: field.handleChange, disabled: (date) => date && date < new Date() }) })] })] })) }), jsx(DialogFooter, { className: "justify-end", children: jsx(form.Subscribe, { selector: (state) => ({
280768
- canSubmit: state.canSubmit,
280769
- }), children: ({ canSubmit }) => (jsx(Button$1, { type: "submit", disabled: !canSubmit || isLoading, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isLoading ? labels.submitting : labels.submit })) }) })] })] }) }), apiKey && (jsx(ApiKeyModal, { isOpen: true, onClose: () => setApiKey(null), apiKey: apiKey, labels: apiKeyModalLabels }))] }));
280855
+ }, children: [jsxs("div", { className: "space-y-4 p-4", children: [jsx(form.Field, { name: "name", children: (field) => {
280856
+ var _a, _b;
280857
+ const hasError = ((_a = field.state.meta.errors) === null || _a === void 0 ? void 0 : _a.length) > 0;
280858
+ const isDirty = field.state.meta.isDirty;
280859
+ const hasErrorAndIsDirty = hasError && isDirty;
280860
+ return (jsxs("div", { className: "space-y-1.5", children: [jsxs(Label$1, { htmlFor: nameInputId, className: "flex items-center text-sm font-medium text-gray-700", children: [labels.nameLabel, jsx("span", { className: "ml-1 text-red-500", children: "*" })] }), jsx(Input, { id: nameInputId, placeholder: labels.namePlaceholder, value: field.state.value, onChange: (event) => field.handleChange(event.target.value), autoComplete: "off" }), hasErrorAndIsDirty && (jsx("p", { className: "text-xs text-red-500", children: (_b = field.state.meta.errors[0]) === null || _b === void 0 ? void 0 : _b.message }))] }));
280861
+ } }), jsx(form.Field, { name: "expiration_date", children: (field) => (jsxs("div", { className: "space-y-1.5", children: [jsx(Label$1, { className: "flex items-center text-sm font-medium text-gray-700", children: labels.expirationLabel }), jsxs(Popover, { children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button$1, { type: "button", variant: "outline", className: cn('w-full pl-3 text-left font-normal', !field.state.value && 'text-muted-foreground'), children: [field.state.value ? (format$1(field.state.value, 'PPP')) : (jsx("span", { children: labels.expirationPlaceholder })), jsx(Calendar$1, { className: "ml-auto h-4 w-4 opacity-50" })] }) }), jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: jsx(Calendar, { mode: "single",
280862
+ // @ts-ignore - Calendar selected prop expects Date but form field may be null
280863
+ selected: field.state.value, onSelect: field.handleChange, disabled: (date) => date && date < new Date() }) })] })] })) })] }), jsxs("div", { className: "flex flex-shrink-0 justify-end gap-2 border-t border-gray-200 bg-white px-4 py-3", children: [jsx(Button$1, { type: "button", variant: "outline", onClick: onClose, disabled: isLoading, children: labels.cancel }), jsx(form.Subscribe, { selector: (state) => ({
280864
+ canSubmit: state.canSubmit,
280865
+ }), children: ({ canSubmit }) => (jsx(Button$1, { type: "submit", disabled: !canSubmit || isLoading, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-sm text-white hover:text-white hover:opacity-90", children: isLoading ? labels.submitting : labels.submit })) })] })] })] }) }), apiKey && (jsx(ApiKeyModal, { isOpen: true, onClose: () => setApiKey(null), apiKey: apiKey, labels: apiKeyModalLabels }))] }));
280770
280866
  }
280771
280867
 
280772
280868
  function DeleteApiModal({ isOpen, onClose, apiKey, tenantKey, labels }) {
@@ -280788,7 +280884,7 @@ function DeleteApiModal({ isOpen, onClose, apiKey, tenantKey, labels }) {
280788
280884
  }
280789
280885
  }
280790
280886
  const confirmation = labels.confirmation.split('{name}');
280791
- return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsxs(DialogContent, { "aria-describedby": "delete-api-key-description", children: [jsx(DialogHeader, { children: jsx(DialogTitle, { className: "ibl-dialog-title", children: labels.title }) }), jsx("div", { className: "my-5", children: jsxs("p", { className: "text-sm text-[#646464]", children: [confirmation[0], jsx("span", { className: "font-bold italic", children: apiKey.name }), (_a = confirmation[1]) !== null && _a !== void 0 ? _a : ''] }) }), jsxs(DialogFooter, { className: "gap-3", children: [jsx(Button$1, { variant: "outline", onClick: onClose, children: labels.cancel }), jsx(Button$1, { className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", onClick: handleDeleteApiKey, disabled: isLoading, children: isLoading ? labels.confirming : labels.confirm })] })] }) }));
280887
+ return (jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && !isLoading && onClose(), children: jsxs(DialogContent, { className: "flex max-h-[80vh] w-full max-w-lg flex-col gap-0 overflow-hidden p-0", children: [jsxs(DialogHeader, { className: "flex-shrink-0 space-y-1 border-b border-gray-200 bg-white px-4 pt-4 pr-10 pb-3 text-left", children: [jsx(DialogTitle, { className: "text-sm font-semibold text-gray-900", children: labels.title }), jsx(DialogDescription, { className: "text-xs text-gray-600", children: labels.warning })] }), jsx("div", { className: "px-4 py-6", children: jsxs("p", { className: "text-sm leading-relaxed text-gray-700", children: [confirmation[0], jsx("code", { className: "rounded bg-gray-100 px-1.5 py-0.5 font-mono text-gray-900", children: apiKey.name }), (_a = confirmation[1]) !== null && _a !== void 0 ? _a : ''] }) }), jsxs("div", { className: "flex flex-shrink-0 justify-end gap-2 border-t border-gray-200 bg-white px-4 py-3", children: [jsx(Button$1, { variant: "outline", onClick: onClose, disabled: isLoading, children: labels.cancel }), jsx(Button$1, { className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-sm text-white hover:text-white hover:opacity-90", onClick: handleDeleteApiKey, disabled: isLoading, children: isLoading ? labels.confirming : labels.confirm })] })] }) }));
280792
280888
  }
280793
280889
 
280794
280890
  const AGENT_API_TAB_LABELS = {
@@ -280796,6 +280892,7 @@ const AGENT_API_TAB_LABELS = {
280796
280892
  title: 'API',
280797
280893
  description: 'Manage API keys and integrations.',
280798
280894
  },
280895
+ infoBox: 'Use this agent from your own apps. Create API keys here to call it programmatically and build it into your product or workflow.',
280799
280896
  disclaimer: {
280800
280897
  lineOne: 'Your secret API keys are listed below. Please note that we do not display your secret API keys again after you generate them.',
280801
280898
  lineTwo: 'Do not share your API key with others, or expose it in the browser or other client-side code. In order to protect the security of your account, IBL may also automatically rotate any API key that we\u2019ve found has leaked publicly.',
@@ -280808,13 +280905,14 @@ const AGENT_API_TAB_LABELS = {
280808
280905
  emptyState: 'No API keys found',
280809
280906
  noPermission: 'You do not have permission to view API keys',
280810
280907
  deleteAriaLabel: 'Delete API Key',
280908
+ notAvailable: 'N/A',
280811
280909
  },
280812
280910
  actions: {
280813
280911
  createNew: 'Create New',
280814
280912
  },
280815
280913
  createModal: {
280816
280914
  title: 'Create API Key',
280817
- description: 'Create API Key',
280915
+ description: "Name your key and optionally set an expiry date. You'll only see the key once.",
280818
280916
  nameLabel: 'API Key Name',
280819
280917
  namePlaceholder: 'API Key Name',
280820
280918
  nameRequired: 'API Key name is required',
@@ -280823,12 +280921,14 @@ const AGENT_API_TAB_LABELS = {
280823
280921
  expirationPlaceholder: 'Pick a date',
280824
280922
  submit: 'Submit',
280825
280923
  submitting: 'Submitting...',
280924
+ cancel: 'Cancel',
280826
280925
  successToast: 'API Key created successfully',
280827
280926
  errorToast: 'Failed to create API Key',
280828
280927
  },
280829
280928
  deleteModal: {
280830
280929
  title: 'Delete API Key',
280831
280930
  confirmation: 'Are you sure you want to delete the API Key with the name {name}? This action cannot be undone.',
280931
+ warning: 'Any app or integration using this key will stop working immediately.',
280832
280932
  cancel: 'Cancel',
280833
280933
  confirm: 'Delete',
280834
280934
  confirming: 'Deleting...',
@@ -280839,6 +280939,9 @@ const AGENT_API_TAB_LABELS = {
280839
280939
  title: 'API Key',
280840
280940
  descriptionLineOne: 'Please copy your API key and store it in a secure location. For security reasons, this key will only be displayed once and cannot be retrieved again after you leave this page.',
280841
280941
  descriptionLineTwo: "If you lose your API key, you'll need to generate a new one.",
280942
+ description: 'Copy and paste the API key.',
280943
+ copyAriaLabel: 'Copy API key',
280944
+ copiedAriaLabel: 'Copied',
280842
280945
  },
280843
280946
  };
280844
280947
  function buildApiTabLabels(t) {
@@ -280847,6 +280950,7 @@ function buildApiTabLabels(t) {
280847
280950
  title: t('apiTabLabels.header.title'),
280848
280951
  description: t('apiTabLabels.header.description'),
280849
280952
  },
280953
+ infoBox: t('apiTabLabels.infoBox'),
280850
280954
  disclaimer: {
280851
280955
  lineOne: t('apiTabLabels.disclaimer.lineOne'),
280852
280956
  lineTwo: t('apiTabLabels.disclaimer.lineTwo'),
@@ -280859,6 +280963,7 @@ function buildApiTabLabels(t) {
280859
280963
  emptyState: t('apiTabLabels.table.emptyState'),
280860
280964
  noPermission: t('apiTabLabels.table.noPermission'),
280861
280965
  deleteAriaLabel: t('apiTabLabels.table.deleteAriaLabel'),
280966
+ notAvailable: t('apiTabLabels.table.notAvailable'),
280862
280967
  },
280863
280968
  actions: {
280864
280969
  createNew: t('apiTabLabels.actions.createNew'),
@@ -280874,12 +280979,14 @@ function buildApiTabLabels(t) {
280874
280979
  expirationPlaceholder: t('apiTabLabels.createModal.expirationPlaceholder'),
280875
280980
  submit: t('apiTabLabels.createModal.submit'),
280876
280981
  submitting: t('apiTabLabels.createModal.submitting'),
280982
+ cancel: t('apiTabLabels.createModal.cancel'),
280877
280983
  successToast: t('apiTabLabels.createModal.successToast'),
280878
280984
  errorToast: t('apiTabLabels.createModal.errorToast'),
280879
280985
  },
280880
280986
  deleteModal: {
280881
280987
  title: t('apiTabLabels.deleteModal.title'),
280882
280988
  confirmation: t('apiTabLabels.deleteModal.confirmation'),
280989
+ warning: t('apiTabLabels.deleteModal.warning'),
280883
280990
  cancel: t('apiTabLabels.deleteModal.cancel'),
280884
280991
  confirm: t('apiTabLabels.deleteModal.confirm'),
280885
280992
  confirming: t('apiTabLabels.deleteModal.confirming'),
@@ -280890,6 +280997,9 @@ function buildApiTabLabels(t) {
280890
280997
  title: t('apiTabLabels.apiKeyModal.title'),
280891
280998
  descriptionLineOne: t('apiTabLabels.apiKeyModal.descriptionLineOne'),
280892
280999
  descriptionLineTwo: t('apiTabLabels.apiKeyModal.descriptionLineTwo'),
281000
+ description: t('apiTabLabels.apiKeyModal.description'),
281001
+ copyAriaLabel: t('apiTabLabels.apiKeyModal.copyAriaLabel'),
281002
+ copiedAriaLabel: t('apiTabLabels.apiKeyModal.copiedAriaLabel'),
280893
281003
  },
280894
281004
  };
280895
281005
  }
@@ -280900,14 +281010,36 @@ function resolveApiTabLabels(override, t) {
280900
281010
  return deepMerge(base, override);
280901
281011
  }
280902
281012
 
281013
+ /**
281014
+ * An out-of-range `page` (e.g. after deleting the last key on the last page)
281015
+ * comes back as a 404 `{"detail": "Invalid page."}`.
281016
+ */
281017
+ function isInvalidPageError(error) {
281018
+ const { status, data } = (error !== null && error !== void 0 ? error : {});
281019
+ if (status === 404)
281020
+ return true;
281021
+ const body = typeof data === 'string' ? data : JSON.stringify(data !== null && data !== void 0 ? data : '');
281022
+ return body.includes('Invalid page');
281023
+ }
280903
281024
  function AgentApiTab({ labels: labelsOverride }) {
280904
281025
  const { tenantKey, username, rbacPermissions, executeGatedAction } = useAgentSettings();
280905
281026
  const t = useT();
280906
281027
  const labels = React__default.useMemo(() => resolveApiTabLabels(labelsOverride, t), [labelsOverride, t]);
280907
- const { data: apiKeysResponse, isLoading: isApiKeysLoading } = useGetApiKeysQuery({
281028
+ const [page, setPage] = React__default.useState(1);
281029
+ const { data: apiKeysResponse, isLoading: isApiKeysLoading, isFetching: isApiKeysFetching, isError, error, } = useGetApiKeysQuery({
280908
281030
  platformKey: tenantKey,
281031
+ page,
281032
+ pageSize: API_KEYS_PAGE_SIZE,
280909
281033
  });
280910
- const { tokens: apiKeys } = unwrapApiTokenList(apiKeysResponse);
281034
+ const { tokens: apiKeys, count } = unwrapApiTokenList(apiKeysResponse);
281035
+ const totalPages = Math.ceil(count / API_KEYS_PAGE_SIZE);
281036
+ // Step back a page when the current one no longer exists (e.g. its last key
281037
+ // was deleted): the backend answers "Invalid page." or an empty page.
281038
+ const isPageGone = page > 1 && !isApiKeysFetching && (isError ? isInvalidPageError(error) : apiKeys.length === 0);
281039
+ React__default.useEffect(() => {
281040
+ if (isPageGone)
281041
+ setPage((current) => Math.max(1, current - 1));
281042
+ }, [isPageGone]);
280911
281043
  const [showCreateApiModal, setShowCreateApiModal] = React__default.useState(false);
280912
281044
  const [apiKeyToDelete, setApiKeyToDelete] = React__default.useState(null);
280913
281045
  function closeCreateApiModal() {
@@ -280931,14 +281063,18 @@ function AgentApiTab({ labels: labelsOverride }) {
280931
281063
  action();
280932
281064
  }
280933
281065
  };
280934
- return (jsxs(Fragment$1, { children: [jsx("div", { className: "flex hidden h-[73px] flex-shrink-0 items-center border-b border-gray-200 bg-white p-4 lg:block", children: jsxs("div", { children: [jsx("h3", { className: "mb-1 text-base font-medium text-gray-900", children: labels.header.title }), jsx("p", { className: "text-xs text-gray-700", children: labels.header.description })] }) }), jsx("div", { className: "flex-1 space-y-4 p-3 lg:p-4", style: {
281066
+ return (jsxs(Fragment$1, { children: [jsx("div", { className: "flex hidden h-[73px] flex-shrink-0 items-center border-b border-gray-200 bg-white p-4 lg:block", children: jsxs("div", { children: [jsx("h3", { className: "mb-1 text-base font-medium text-gray-900", children: labels.header.title }), jsx("p", { className: "text-xs text-gray-700", children: labels.header.description })] }) }), jsxs("div", { className: "flex-1 space-y-4 p-3 lg:p-4", style: {
280935
281067
  overflowY: 'auto',
280936
281068
  overflowX: 'hidden',
280937
- }, children: jsxs("div", { className: "space-y-6", children: [jsxs("div", { className: "space-y-4", children: [jsx("p", { className: "text-sm text-gray-700", children: labels.disclaimer.lineOne }), jsx("p", { className: "text-sm text-gray-700", children: labels.disclaimer.lineTwo })] }), isApiKeysLoading ? (jsx("div", { className: "flex w-full items-center justify-center py-10", children: jsx(Spinner, {}) })) : (jsx("div", { className: "rounded-md border", children: jsxs(Table$1, { className: "w-full", children: [jsx(TableHeader$1, { children: jsxs(TableRow$1, { children: [jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.nameColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.createdColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.expiresColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", "aria-label": labels.table.actionsColumn, children: jsx("span", { className: "sr-only", children: labels.table.actionsColumn }) })] }) }), jsx(TableBody, { children: apiKeys.length === 0 ? (jsx(TableRow$1, { children: jsx(TableCell$1, { colSpan: 5, className: "p-4 text-center text-sm text-gray-700", children: labels.table.emptyState }) })) : (jsx(WithPermissions, { rbacResource: "/apitokens/#list", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => {
280938
- if (!hasPermission)
280939
- return (jsx(TableRow$1, { children: jsx(TableCell$1, { colSpan: 5, className: "p-4 text-center text-sm text-gray-700", children: labels.table.noPermission }) }));
280940
- return (jsx(Fragment$1, { children: apiKeys.map((apiKey) => (jsxs(TableRow$1, { className: "text-sm hover:bg-blue-50", children: [jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.name }), jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.created ? format$1(apiKey.created, 'PPP') : 'N/A' }), jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.expires ? format$1(apiKey.expires, 'PPP') : 'N/A' }), jsx(TableCell$1, { className: "p-2", children: jsx(WithPermissions, { rbacResource: "/apitokens/#create", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => hasPermission && (jsxs(Button$1, { variant: "ghost", size: "sm", className: "cursor-pointer", onClick: () => handleDeleteClick(apiKey.name), children: [jsx(Trash, { className: "h-4 w-4" }), jsx("span", { className: "sr-only", children: labels.table.deleteAriaLabel })] })) }) })] }, apiKey.name))) }));
280941
- } })) })] }) })), jsx(WithPermissions, { rbacResource: "/apitokens/#create", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => hasPermission && (jsx(Button$1, { onClick: openCreateApiModal, className: "cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: labels.actions.createNew })) }), jsx(CreateApiModal, { isOpen: showCreateApiModal, onClose: closeCreateApiModal, tenantKey: tenantKey, username: username !== null && username !== void 0 ? username : '', executeGatedAction: executeGatedAction, labels: labels.createModal, apiKeyModalLabels: labels.apiKeyModal }), apiKeyToDelete && (jsx(DeleteApiModal, { isOpen: !!apiKeyToDelete, onClose: closeDeleteApiModal, apiKey: apiKeyToDelete, tenantKey: tenantKey, labels: labels.deleteModal }))] }) })] }));
281069
+ }, children: [jsxs("div", { className: "space-y-2 rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-600", "data-testid": "api-info-box", children: [jsx("p", { children: labels.infoBox }), jsx("p", { children: labels.disclaimer.lineOne }), jsx("p", { children: labels.disclaimer.lineTwo })] }), jsxs("div", { className: "space-y-4", children: [jsx("div", { className: "flex justify-end", children: jsx(WithPermissions, { rbacResource: "/apitokens/#create", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => hasPermission && (jsxs(Button$1, { onClick: openCreateApiModal, size: "sm", "data-testid": "api-key-create-button", className: "cursor-pointer whitespace-nowrap bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), labels.actions.createNew] })) }) }), isApiKeysLoading ? (jsx("div", { className: "flex w-full items-center justify-center py-10", children: jsx(Spinner, {}) })) : (jsx("div", { className: "rounded-md border", children: jsxs(Table$1, { className: "w-full", children: [jsx(TableHeader$1, { children: jsxs(TableRow$1, { children: [jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.nameColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.createdColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", children: labels.table.expiresColumn }), jsx(TableHead, { className: "p-2 text-left text-sm text-gray-700", "aria-label": labels.table.actionsColumn, children: jsx("span", { className: "sr-only", children: labels.table.actionsColumn }) })] }) }), jsx(TableBody, { children: apiKeys.length === 0 ? (jsx(TableRow$1, { children: jsx(TableCell$1, { colSpan: 5, className: "p-4 text-center text-sm text-gray-700", children: labels.table.emptyState }) })) : (jsx(WithPermissions, { rbacResource: "/apitokens/#list", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => {
281070
+ if (!hasPermission)
281071
+ return (jsx(TableRow$1, { children: jsx(TableCell$1, { colSpan: 5, className: "p-4 text-center text-sm text-gray-700", children: labels.table.noPermission }) }));
281072
+ return (jsx(Fragment$1, { children: apiKeys.map((apiKey) => (jsxs(TableRow$1, { className: "text-sm hover:bg-blue-50", children: [jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.name }), jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.created
281073
+ ? format$1(apiKey.created, 'PPP')
281074
+ : labels.table.notAvailable }), jsx(TableCell$1, { className: "p-2 whitespace-nowrap text-gray-700", children: apiKey.expires
281075
+ ? format$1(apiKey.expires, 'PPP')
281076
+ : labels.table.notAvailable }), jsx(TableCell$1, { className: "p-2", children: jsx(WithPermissions, { rbacResource: "/apitokens/#create", rbacPermissions: rbacPermissions !== null && rbacPermissions !== void 0 ? rbacPermissions : {}, children: ({ hasPermission }) => hasPermission && (jsxs(Button$1, { variant: "ghost", size: "sm", className: "cursor-pointer", onClick: () => handleDeleteClick(apiKey.name), children: [jsx(Trash, { className: "h-4 w-4" }), jsx("span", { className: "sr-only", children: labels.table.deleteAriaLabel })] })) }) })] }, apiKey.name))) }));
281077
+ } })) })] }) })), totalPages > 1 && (jsx(IblPagination, { currentPage: page, totalPages: totalPages, onPageChange: setPage, disabled: isApiKeysFetching })), jsx(CreateApiModal, { isOpen: showCreateApiModal, onClose: closeCreateApiModal, tenantKey: tenantKey, username: username !== null && username !== void 0 ? username : '', executeGatedAction: executeGatedAction, onCreated: () => setPage(1), labels: labels.createModal, apiKeyModalLabels: labels.apiKeyModal }), apiKeyToDelete && (jsx(DeleteApiModal, { isOpen: !!apiKeyToDelete, onClose: closeDeleteApiModal, apiKey: apiKeyToDelete, tenantKey: tenantKey, labels: labels.deleteModal }))] })] })] }));
280942
281078
  }
280943
281079
 
280944
281080
  const ANONYMOUS_USERNAME$2 = 'anonymous';
@@ -342802,5 +342938,5 @@ var index_es = /*#__PURE__*/Object.freeze({
342802
342938
  vectorsRatio: vectorsRatio
342803
342939
  });
342804
342940
 
342805
- export { AGENT_ACCESS_TAB_LABELS, AGENT_ANALYTICS_TAB_LABELS, AGENT_API_TAB_LABELS, AGENT_DATASETS_TAB_LABELS, AGENT_DISCLAIMERS_TAB_LABELS, AGENT_EMBED_TAB_LABELS, AGENT_EVALUATION_TAB_LABELS, AGENT_GRADER_TAB_LABELS, AGENT_HISTORY_TAB_LABELS, AGENT_HUMAN_SUPPORT_TAB_LABELS, AGENT_LLM_TAB_LABELS, AGENT_LTI_TAB_LABELS, AGENT_MEMORY_TAB_LABELS, AGENT_PICKER_LABELS, AGENT_PRIVACY_TAB_LABELS, AGENT_PROMPTS_TAB_LABELS, AGENT_SAFETY_TAB_LABELS, AGENT_SCREENSHARE_TAB_LABELS, AGENT_SEARCH_LABELS, AGENT_SETTINGS_TAB_LABELS, AGENT_SKILLS_TAB_LABELS, AGENT_SPEND_CAPS_TAB_LABELS, AGENT_TASKS_TAB_LABELS, AGENT_TOOLS_TAB_LABELS, AGENT_VOICE_TAB_LABELS, Account, AgentAccessTab, AgentAnalyticsTab, AgentApiTab, AgentCard, AgentDatasetsTab, AgentDisclaimersTab, AgentEmbedTab, AgentEmptyState, AgentEvaluationTab, AgentGraderTab, AgentHistoryTab, AgentHumanSupportTab, AgentLLMTab, AgentLtiTab, AgentMemoryTab, AgentPrivacyTab, AgentPromptsTab, AgentSafetyTab, AgentScreenShareTab, AgentSearch, AgentSearchFilters, AgentSearchInput, AgentSettingsProvider, AgentSettingsTab, AgentSkillsTab, AgentSpendCapsTab, AgentTasksTab, AgentToolsTab, AgentVoiceTab, AppSidebar, CATALOGS, Chat, ClientErrorPage, ConversationStarters$1 as ConversationStarters, CopyButton, CopyMentorModal, CourseBox, CourseContentLayout, CourseContentTabPage, CreatePathwayModal, CredentialDetailModal, CredentialMiniBox, DEFAULT_ANALYTICS_HUB_TABS, DEFAULT_LOCALE, DeleteMentorModal, EMPTY_PROGRAM_SETTINGS_FORM, EdxIframe, ErrorPage, GRADING_TOOL_NAME, GreetingMethod, LLMProviderModal, LocalModelRow, McpTab, MediaBox, MentorSelectionGrid, NavBar, OrganizationTab, PLATFORM_SIDEBAR_FLYOUT_ITEM_COLOR, PLATFORM_SIDEBAR_FLYOUT_TITLE_COLOR, PLATFORM_SIDEBAR_NAV_ACTIVE_BG_OPEN, PLATFORM_SIDEBAR_NAV_MUTED, PathwayDetailModal, PlatformAccountSheet, PlatformSidebar, PlatformSidebarCollapsedLabelFlyout, PlatformSidebarCollapsedNavFlyout, PlatformSidebarFooter, PlatformSidebarNavDivider, PlatformSidebarNavSection, PlatformSidebarSubNavItem, ProfileInfoCards, ProfileTabs, ProgramDetailModal, ProjectsSidebarDropdown, SPEND_CAPS_SUB_TABS, SUPPORTED_LOCALES, SidebarInset, SidebarProvider, SidebarTrigger, SpendCapUsage, SsoLogin, StarButton, UserProfileDropdown, UserProfileModal, WebContainersI18nProvider, formatDateString, getCatalog, getProviderName, initializeLocalStorageWithObject, isValidLocale, resolveAgentPickerLabels, resolveAgentSearchLabels, resolveLLMTabLabels, resolveSettingsTabLabels, useAgentSearch, useAgentSearchWithPagination, useAgentSettings, useAgentStar, useGetChatDetails, usePlatformSidebarFooterActions, usePlatformSidebarNavCallback, useSidebar, useT, useTimeTracker, useWebContainersI18n, useWebContainersLocale };
342941
+ export { AGENT_ACCESS_TAB_LABELS, AGENT_ANALYTICS_TAB_LABELS, AGENT_API_TAB_LABELS, AGENT_DATASETS_TAB_LABELS, AGENT_DISCLAIMERS_TAB_LABELS, AGENT_EMBED_TAB_LABELS, AGENT_EVALUATION_TAB_LABELS, AGENT_GRADER_TAB_LABELS, AGENT_HISTORY_TAB_LABELS, AGENT_HUMAN_SUPPORT_TAB_LABELS, AGENT_LLM_TAB_LABELS, AGENT_LTI_TAB_LABELS, AGENT_MEMORY_TAB_LABELS, AGENT_PICKER_LABELS, AGENT_PRIVACY_TAB_LABELS, AGENT_PROMPTS_TAB_LABELS, AGENT_SAFETY_TAB_LABELS, AGENT_SCREENSHARE_TAB_LABELS, AGENT_SEARCH_LABELS, AGENT_SETTINGS_TAB_LABELS, AGENT_SKILLS_TAB_LABELS, AGENT_SPEND_CAPS_TAB_LABELS, AGENT_TASKS_TAB_LABELS, AGENT_TOOLS_TAB_LABELS, AGENT_VOICE_TAB_LABELS, Account, AgentAccessTab, AgentAnalyticsTab, AgentApiTab, AgentCard, AgentDatasetsTab, AgentDisclaimersTab, AgentEmbedTab, AgentEmptyState, AgentEvaluationTab, AgentGraderTab, AgentHistoryTab, AgentHumanSupportTab, AgentLLMTab, AgentLtiTab, AgentMemoryTab, AgentPrivacyTab, AgentPromptsTab, AgentSafetyTab, AgentScreenShareTab, AgentSearch, AgentSearchFilters, AgentSearchInput, AgentSettingsProvider, AgentSettingsTab, AgentSkillsTab, AgentSpendCapsTab, AgentTasksTab, AgentToolsTab, AgentVoiceTab, AppSidebar, CATALOGS, Chat, ClientErrorPage, ConversationStarters$1 as ConversationStarters, CopyButton, CopyMentorModal, CourseBox, CourseContentLayout, CourseContentTabPage, CreatePathwayModal, CredentialDetailModal, CredentialMiniBox, DEFAULT_ANALYTICS_HUB_TABS, DEFAULT_LOCALE, DeleteMentorModal, EMPTY_PROGRAM_SETTINGS_FORM, EdxIframe, ErrorPage, GRADING_TOOL_NAME, GreetingMethod, LLMProviderModal, LocalModelRow, McpTab, MediaBox, MentorSelectionGrid, NavBar, OrganizationTab, PLATFORM_SIDEBAR_FLYOUT_ITEM_COLOR, PLATFORM_SIDEBAR_FLYOUT_TITLE_COLOR, PLATFORM_SIDEBAR_NAV_ACTIVE_BG_OPEN, PLATFORM_SIDEBAR_NAV_MUTED, PathwayDetailModal, PlatformAccountSheet, PlatformSidebar, PlatformSidebarCollapsedLabelFlyout, PlatformSidebarCollapsedNavFlyout, PlatformSidebarFooter, PlatformSidebarNavDivider, PlatformSidebarNavSection, PlatformSidebarSubNavItem, ProfileInfoCards, ProfileTabs, ProgramDetailModal, ProjectsSidebarDropdown, SPEND_CAPS_SUB_TABS, SUPPORTED_LOCALES, SidebarInset, SidebarProvider, SidebarTrigger, SpendCapUsage, SsoLogin, StarButton, UserProfileDropdown, UserProfileModal, WebContainersI18nProvider, formatDateString, getCatalog, getProviderName, initializeLocalStorageWithObject, isValidLocale, resolveAgentPickerLabels, resolveAgentSearchLabels, resolveLLMTabLabels, resolveSettingsTabLabels, useAgentSearch, useAgentSearchWithPagination, useAgentSettings, useAgentStar, useGetChatDetails, usePlatformSidebarFooterActions, usePlatformSidebarNavCallback, useSidebar, useT, useTimeTracker, useToggleTools, useWebContainersI18n, useWebContainersLocale };
342806
342942
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iblai/iblai-js",
3
- "version": "2.25.0",
3
+ "version": "2.27.0",
4
4
  "description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
5
5
  "type": "module",
6
6
  "engines": {
@@ -76,10 +76,10 @@
76
76
  "axios": "1.13.6",
77
77
  "dotenv": "16.6.1",
78
78
  "winston": "3.19.0",
79
- "@iblai/data-layer": "1.23.0",
80
- "@iblai/mcp": "1.21.0",
81
- "@iblai/web-containers": "1.31.0",
82
- "@iblai/web-utils": "2.6.0"
79
+ "@iblai/mcp": "1.23.0",
80
+ "@iblai/web-containers": "1.33.0",
81
+ "@iblai/web-utils": "2.6.0",
82
+ "@iblai/data-layer": "1.24.0"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "@iblai/iblai-api": "4.166.0-ai",