@iblai/iblai-js 2.30.0 → 2.32.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.
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { useState, useEffect, forwardRef, createElement as createElement$1, useLayoutEffect, createContext, useContext, useMemo, useReducer, useRef, useImperativeHandle, useCallback, isValidElement, Children, PureComponent, cloneElement, Component as Component$1, useDebugValue, Fragment as Fragment$2, useId as useId$2, lazy, Suspense } from 'react';
4
4
  import * as dataLayer from '@iblai/data-layer';
5
- import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useGetUserProfileSummaryQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerCourseOutlineQuery, getSections, findResumeBlock, flattenOutline, normalizeLearnerCompletionError, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useUpdateGlobalMemoryMutation, useUpdateMentorMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useGetAllMentorMemoriesQuery, useDeleteGlobalMemoryMutation, useDeleteMentorMemoryMutation, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation, useListArtifactsQuery, useLazyGetSessionIdQuery, useGetAiSearchMentorsQuery, useStarMentorMutation, useUnstarMentorMutation, useGetUserChatHistoryReportsQuery, USER_CHAT_HISTORY_REPORT_ACTIVE_STATES, useCreateUserChatHistoryReportMutation, useLazyGetDownloadReportFromURLQuery, useGetUserChatHistoryReportStatusQuery, userChatHistoryApiSlice, USER_CHAT_HISTORY_QUERY_KEYS, useGetUserChatHistoryQuery, useGetUserChatHistoryFilterQuery, useGetMentorsQuery, useGetUserChatHistorySessionQuery, useUserLlmUsageSummary, useUserLlmSpendOverTime, useUserLlmCostByModel, useUserLlmRecentActivity, USER_LLM_RECENT_ACTIVITY_PAGE_SIZE, useUserLlmTraceObservations, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetVectorDocumentsQuery, useGetLlmsQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, useGetAccessibleUsersQuery, isPoliciesResponse, platformApiSlice, featureTags, useLazyGetRbacTeamsAccessListQuery, useCreateRbacTeamsAccessMutation, useGetRbacGroupsQuery, usePlatformUserGroupsQuery, useCreateRbacGroupMutation, useUpdateRbacGroupMutation, useDeleteRbacGroupMutation, useCreatePlatformUserGroupMutation, useUpdatePlatformUserGroupMutation, useDeletePlatformUserGroupMutation, useGetRbacGroupDetailsQuery, useGetPlatformUserGroupDetailsQuery, useGetRbacPermissionsMutation, useGetRbacRolesQuery, useCreateRbacRoleMutation, useUpdateRbacRoleMutation, useDeleteRbacRoleMutation, useGetRbacRoleDetailsQuery, useGetRbacActionsDefinitionQuery, useGetRbacResourceDiscoveryQuery, useGetRbacResourceListQuery, useGetRbacPoliciesQuery, useCreateRbacPolicyMutation, useUpdateRbacPolicyMutation, useDeleteRbacPolicyMutation, useGetRbacPolicyDetailsQuery, useGetWatchedGroupsQuery, useCreateWatchedGroupMutation, useUpdateWatchedGroupMutation, useDeleteWatchedGroupMutation, useAddWatchedUserMutation, useRemoveWatchedUserMutation, useAddWatcherMutation, useUpdateWatcherMutation, useDeleteWatcherMutation, useGetWatchedUsersQuery, useGetWatchersQuery, WATCHER_NOTIFICATION_EVENTS, WATCHER_NOTIFICATION_EVENT_LABELS, useGetApplicationFormsQuery, useGetApplicationFormDetailQuery, useCreateApplicationFormMutation, useUpdateApplicationFormMutation, useGetApplicationAdminDetailQuery, useInviteApplicationCandidateMutation, useLazyGetApplicationAttachmentFileQuery, useCreateApplicationWaiverMutation, useDeleteApplicationWaiverMutation, useSubmitApplicationOverrideMutation, useUpdateApplicationPlacementMutation, useDeleteApplicationCourseAssignmentMutation, useCreateApplicationNoteMutation, useUpdateApplicationNoteMutation, useDeleteApplicationNoteMutation, useTransitionApplicationMutation, useLinkApplicationCandidateMutation, useCreateApplicationPlacementsMutation, useGetCustomMentorsQuery, useCreateApplicationCourseAssignmentsMutation, useGetApplicationBlocksQuery, useDeleteApplicationBlockMutation, useGetApplicationsPipelineStatsQuery, useGetApplicationsPipelineQuery, useGetTenantMetadataQuery, useUpdateTenantMetadataMutation, useLazyGetTenantMetadataQuery, useDeleteApiKeyMutation, useGetApiKeyQuery, useGetApiKeyFieldPermissionsQuery, useUpdateApiKeyMutation, useGetApiKeysQuery, unwrapApiTokenList, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useGetAgentSpendCapQuery, useGetTenantSpendCapQuery, useListAgentUserSpendCapsQuery, useUpsertAgentSpendCapMutation, useDeleteAgentSpendCapMutation, useUpsertTenantSpendCapMutation, useDeleteTenantSpendCapMutation, useUpsertUserSpendCapMutation, useDeleteUserSpendCapMutation, useGetLlmUsageMetricsQuery, useListAgentSpendCapsQuery, useGetCreditTransactionsQuery, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, VERCEL_SPA, useGetCustomDomainsQuery, useGetHostingProjectsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useCreateHostingProjectDomainMutation, useUpdateHostingDomainMutation, useDeleteHostingDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useCreateMentorMemoryMutation, splitHostPortInput, validateHostPort, useCreateVirtualMachineNetworkPolicyMutation, useUpdateVirtualMachineNetworkPolicyMutation, VIRTUAL_MACHINE_MAX_POLICY_HOSTS, getVirtualMachineApiError, useDeleteVirtualMachineNetworkPolicyMutation, extractBoundMentorIds, useCreateVirtualMachineSecretMutation, useUpdateVirtualMachineSecretMutation, VIRTUAL_MACHINE_SECRET_VALUE_MIN_LENGTH, VIRTUAL_MACHINE_ENV_VAR_PATTERN, useDeleteVirtualMachineSecretMutation, useGetIntegrationCredentialsQuery, useListVirtualMachineNetworkPoliciesQuery, useListVirtualMachineSecretsQuery, getVirtualMachineErrorStatus, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useGetTenantChatPrivacyConfigQuery as useGetTenantChatPrivacyConfigQuery$1, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, chatPrivacyApiSlice, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, useGetVoicesQuery, useGetVoiceQuery, isBaseAgentMentor, useGetGradeResultQuery, useOverrideGradeResultMutation, useGetChatHistoryFilterQuery, useListGradeResultsQuery, useGetMentorGraderConfigurationQuery, useListGraderCriteriaQuery, useCreateMentorGraderConfigurationMutation, useUpdateMentorGraderConfigurationMutation, useCreateGraderCriterionMutation, useUpdateGraderCriterionMutation, useDeleteGraderCriterionMutation, useGetSpendCapStatusQuery, useGetMentorPublicSettingsQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useGetSupportTicketsQuery, useGetSupportTicketMessagesQuery, useCreateSupportTicketMessageMutation, usePatchSupportTicketMutation, useCloseSupportTicketMutation, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useDeleteLtiMentorMutation, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useGetDisclaimerAgreementsQuery } from '@iblai/data-layer';
5
+ import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useGetUserProfileSummaryQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerCourseOutlineQuery, getSections, findResumeBlock, flattenOutline, normalizeLearnerCompletionError, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useUpdateGlobalMemoryMutation, useUpdateMentorMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useGetAllMentorMemoriesQuery, useDeleteGlobalMemoryMutation, useDeleteMentorMemoryMutation, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation, useListArtifactsQuery, useLazyGetSessionIdQuery, useGetAiSearchMentorsQuery, useStarMentorMutation, useUnstarMentorMutation, useGetUserChatHistoryReportsQuery, USER_CHAT_HISTORY_REPORT_ACTIVE_STATES, useCreateUserChatHistoryReportMutation, useLazyGetDownloadReportFromURLQuery, useGetUserChatHistoryReportStatusQuery, userChatHistoryApiSlice, USER_CHAT_HISTORY_QUERY_KEYS, useGetUserChatHistoryQuery, useGetUserChatHistoryFilterQuery, useGetMentorsQuery, useGetUserChatHistorySessionQuery, useUserLlmUsageSummary, useUserLlmSpendOverTime, useUserLlmCostByModel, useUserLlmRecentActivity, USER_LLM_RECENT_ACTIVITY_PAGE_SIZE, useUserLlmTraceObservations, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetVectorDocumentsQuery, useGetLlmsQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, useGetAccessibleUsersQuery, isPoliciesResponse, platformApiSlice, featureTags, useLazyGetRbacTeamsAccessListQuery, useCreateRbacTeamsAccessMutation, useGetRbacGroupsQuery, usePlatformUserGroupsQuery, useCreateRbacGroupMutation, useUpdateRbacGroupMutation, useDeleteRbacGroupMutation, useCreatePlatformUserGroupMutation, useUpdatePlatformUserGroupMutation, useDeletePlatformUserGroupMutation, useGetRbacGroupDetailsQuery, useGetPlatformUserGroupDetailsQuery, useGetRbacPermissionsMutation, useGetRbacRolesQuery, useCreateRbacRoleMutation, useUpdateRbacRoleMutation, useDeleteRbacRoleMutation, useGetRbacRoleDetailsQuery, useGetRbacActionsDefinitionQuery, useGetRbacResourceDiscoveryQuery, useGetRbacResourceListQuery, useGetRbacPoliciesQuery, useCreateRbacPolicyMutation, useUpdateRbacPolicyMutation, useDeleteRbacPolicyMutation, useGetRbacPolicyDetailsQuery, useGetWatchedGroupsQuery, useCreateWatchedGroupMutation, useUpdateWatchedGroupMutation, useDeleteWatchedGroupMutation, useAddWatchedUserMutation, useRemoveWatchedUserMutation, useAddWatcherMutation, useUpdateWatcherMutation, useDeleteWatcherMutation, useGetWatchedUsersQuery, useGetWatchersQuery, WATCHER_NOTIFICATION_EVENTS, WATCHER_NOTIFICATION_EVENT_LABELS, useGetApplicationFormsQuery, useGetApplicationFormDetailQuery, useCreateApplicationFormMutation, useUpdateApplicationFormMutation, useGetApplicationAdminDetailQuery, useInviteApplicationCandidateMutation, useLazyGetApplicationAttachmentFileQuery, useCreateApplicationWaiverMutation, useDeleteApplicationWaiverMutation, useSubmitApplicationOverrideMutation, useUpdateApplicationPlacementMutation, useDeleteApplicationCourseAssignmentMutation, useCreateApplicationNoteMutation, useUpdateApplicationNoteMutation, useDeleteApplicationNoteMutation, useTransitionApplicationMutation, useLinkApplicationCandidateMutation, useCreateApplicationPlacementsMutation, useGetCustomMentorsQuery, useCreateApplicationCourseAssignmentsMutation, useGetApplicationBlocksQuery, useDeleteApplicationBlockMutation, useGetApplicationsPipelineStatsQuery, useGetApplicationsPipelineQuery, useGetTenantMetadataQuery, useUpdateTenantMetadataMutation, useLazyGetTenantMetadataQuery, useDeleteApiKeyMutation, useGetApiKeyQuery, useGetApiKeyFieldPermissionsQuery, useUpdateApiKeyMutation, useGetApiKeysQuery, unwrapApiTokenList, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useGetAgentSpendCapQuery, useGetTenantSpendCapQuery, useListAgentUserSpendCapsQuery, useUpsertAgentSpendCapMutation, useDeleteAgentSpendCapMutation, useUpsertTenantSpendCapMutation, useDeleteTenantSpendCapMutation, useUpsertUserSpendCapMutation, useDeleteUserSpendCapMutation, useGetLlmUsageMetricsQuery, useListAgentSpendCapsQuery, useGetCreditTransactionsQuery, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, VERCEL_SPA, useGetCustomDomainsQuery, useGetHostingProjectsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useCreateHostingProjectDomainMutation, useUpdateHostingDomainMutation, useDeleteHostingDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useCreateMentorMemoryMutation, splitHostPortInput, validateHostPort, useCreateVirtualMachineNetworkPolicyMutation, useUpdateVirtualMachineNetworkPolicyMutation, VIRTUAL_MACHINE_MAX_POLICY_HOSTS, getVirtualMachineApiError, useDeleteVirtualMachineNetworkPolicyMutation, extractBoundMentorIds, useCreateVirtualMachineSecretMutation, useUpdateVirtualMachineSecretMutation, VIRTUAL_MACHINE_SECRET_VALUE_MIN_LENGTH, VIRTUAL_MACHINE_ENV_VAR_PATTERN, useDeleteVirtualMachineSecretMutation, useGetIntegrationCredentialsQuery, useListVirtualMachineNetworkPoliciesQuery, useListVirtualMachineSecretsQuery, getVirtualMachineErrorStatus, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, mentorApiSlice, useGetVoicesQuery, useGetVoiceQuery, isBaseAgentMentor, useGetGradeResultQuery, useOverrideGradeResultMutation, useGetChatHistoryFilterQuery, useListGradeResultsQuery, useGetMentorGraderConfigurationQuery, useListGraderCriteriaQuery, useCreateMentorGraderConfigurationMutation, useUpdateMentorGraderConfigurationMutation, useCreateGraderCriterionMutation, useUpdateGraderCriterionMutation, useDeleteGraderCriterionMutation, useGetSpendCapStatusQuery, useGetMentorPublicSettingsQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useGetSupportTicketsQuery, useGetSupportTicketMessagesQuery, useCreateSupportTicketMessageMutation, usePatchSupportTicketMutation, useCloseSupportTicketMutation, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useDeleteLtiMentorMutation, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useGetDisclaimerAgreementsQuery } from '@iblai/data-layer';
6
6
  import { removeAuthItem, setAuthItem, isTauriEmbeddedLLMHost, selectRbacPermissions, useCurrentTenant, canViewOtherUsersChatHistory, isPureWatcher, getInitials, useTenantMetadata, useUsername, selectStreaming, isLoggedIn, TOOL_NAME_MAP, WRITE_TODOS_TOOL, WithPermissions, canWriteField, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, selectNumberOfActiveChatMessages, TOOLS, hasRemoteAiConfig, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, removeFile, chatInputSliceActions, chatActions, WithFormPermissions, useTenantContext, TimeTracker, advancedTabsProperties, defaultSessionIds, pickWritableFields, ANONYMOUS_USERNAME as ANONYMOUS_USERNAME$3, redirectToAuthSpaJoinTenant, selectActiveTab, useAxdToken, useWelcomeMessage, markdownToPlainText, useCachedSessionId, use402ErrorCheck, use401TokenRefresh, selectTokenEnabled, selectToken, useServiceWorker, useUserAgreement, useAdvancedChat, sendMessageToParentWebsite, useMentorTools, useFileDragDrop, eventBus, RemoteEvents, selectEnableChatActionsPopup, advancedTabs, isInIframe, getAuthSpaJoinUrl, addMessage, clearFiles, MENTOR_VISIBILITY } from '@iblai/web-utils';
7
7
  import { useDispatch, useSelector } from 'react-redux';
8
8
  import { toast } from 'sonner';
@@ -48065,7 +48065,7 @@ function formatRelativeDate(date) {
48065
48065
  }
48066
48066
  }
48067
48067
 
48068
- const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", {
48068
+ const buttonVariants$1 = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", {
48069
48069
  variants: {
48070
48070
  variant: {
48071
48071
  default: "bg-primary text-primary-foreground hover:bg-primary/90",
@@ -48089,7 +48089,7 @@ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whites
48089
48089
  });
48090
48090
  const Button$1 = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
48091
48091
  const Comp = asChild ? Slot$4 : "button";
48092
- return (jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref: ref, ...props }));
48092
+ return (jsx(Comp, { className: cn(buttonVariants$1({ variant, size, className })), ref: ref, ...props }));
48093
48093
  });
48094
48094
  Button$1.displayName = "Button";
48095
48095
 
@@ -48376,7 +48376,7 @@ const __iconNode$pf = [
48376
48376
  ];
48377
48377
  const Accessibility = createLucideIcon("accessibility", __iconNode$pf);
48378
48378
 
48379
- var accessibility = /*#__PURE__*/Object.freeze({
48379
+ var accessibility$4 = /*#__PURE__*/Object.freeze({
48380
48380
  __proto__: null,
48381
48381
  __iconNode: __iconNode$pf,
48382
48382
  default: Accessibility
@@ -97832,33 +97832,33 @@ var chatInputFormVoiceChatButton$3 = {
97832
97832
  voiceRecord: "Voice Record"
97833
97833
  };
97834
97834
  var chatPrivacyChatPrivacyToggle$3 = {
97835
- toastPrivateModeOff: "Private Mode is off.",
97836
- toastCouldNotTurnOff: "Could not turn Private Mode off. Please try again.",
97837
- toastPrivateModeOnNoHistory: "Private Mode is on. This chat won't be saved to history or used for memory.",
97838
- toastCouldNotEnable: "Could not enable Private Mode. Please try again.",
97839
- toastPrivateModeOnRemovedHistory: "Private Mode is on. This conversation has been removed from your history.",
97840
- toastFailedToEnable: "Failed to enable Private Mode. Please try again.",
97835
+ toastPrivateModeOff: "Incognito is off.",
97836
+ toastCouldNotTurnOff: "Could not turn Incognito off. Please try again.",
97837
+ toastPrivateModeOnNoHistory: "Incognito is on. This chat won't be saved to history or used for memory.",
97838
+ toastCouldNotEnable: "Could not enable Incognito. Please try again.",
97839
+ toastPrivateModeOnRemovedHistory: "Incognito is on. This conversation has been removed from your history.",
97840
+ toastFailedToEnable: "Failed to enable Incognito. Please try again.",
97841
97841
  working: "Working…",
97842
- ariaLockedByAgent: "Private Mode is locked on by this agent. No chat history is recorded.",
97843
- ariaPrivateOnForConversation: "Private Mode is on for this conversation. This chat isn't saved or used for memory.",
97844
- ariaTurnOffPrivateMode: "Turn off Private Mode for this chat.",
97845
- ariaTurnOnMidConversation: "Turn on Private Mode for this conversation. This cannot be undone.",
97846
- ariaTurnOnEmpty: "Turn on Private Mode. This chat won't be saved to history or used for memory.",
97847
- tooltipLockedByMentor: "This agent always runs in Private Mode — no chat history or memory is kept for conversations with it.",
97848
- tooltipLockedByTenant: "Your organization has Private Mode enabled by default — no chat history or memory is kept.",
97849
- tooltipLockedGeneric: "Private Mode is locked on — no chat history or memory is kept.",
97850
- tooltipPrivateOnPostSend: "Private Mode is on for this conversation — this chat isn't saved or used for memory. Start a new chat to leave Private Mode.",
97851
- tooltipTurnOff: "Turn off Private Mode — your next chat will be saved to history again.",
97852
- tooltipTurnOnMidConversation: "Turn on Private Mode for the rest of this conversation. Once on, you can't turn it off — start a new chat to resume saving history.",
97853
- tooltipTurnOnEmpty: "Turn on Private Mode — this chat won't be saved to history or used for memory.",
97854
- privateMode: "Private Mode",
97855
- dialogTitle: "Enable Private Mode for this chat?",
97842
+ ariaLockedByAgent: "Incognito is locked on by this agent. No chat history is recorded.",
97843
+ ariaPrivateOnForConversation: "Incognito is on for this conversation. This chat isn't saved or used for memory.",
97844
+ ariaTurnOffPrivateMode: "Turn off Incognito for this chat.",
97845
+ ariaTurnOnMidConversation: "Turn on Incognito for this conversation. This cannot be undone.",
97846
+ ariaTurnOnEmpty: "Turn on Incognito. This chat won't be saved to history or used for memory.",
97847
+ tooltipLockedByMentor: "This agent always runs in Incognito — no chat history or memory is kept for conversations with it.",
97848
+ tooltipLockedByTenant: "Your organization has Incognito enabled by default — no chat history or memory is kept.",
97849
+ tooltipLockedGeneric: "Incognito is locked on — no chat history or memory is kept.",
97850
+ tooltipPrivateOnPostSend: "Incognito is on for this conversation — this chat isn't saved or used for memory. Start a new chat to leave Incognito.",
97851
+ tooltipTurnOff: "Turn off Incognito — your next chat will be saved to history again.",
97852
+ tooltipTurnOnMidConversation: "Turn on Incognito for the rest of this conversation. Once on, you can't turn it off — start a new chat to resume saving history.",
97853
+ tooltipTurnOnEmpty: "Turn on Incognito — this chat won't be saved to history or used for memory.",
97854
+ privateMode: "Incognito",
97855
+ dialogTitle: "Enable Incognito for this chat?",
97856
97856
  dialogDescription: "This conversation will be removed from your history and the assistant will stop using earlier turns from it.",
97857
- dialogDescriptionBold: "Once on, you can't turn Private Mode off for this chat",
97857
+ dialogDescriptionBold: "Once on, you can't turn Incognito off for this chat",
97858
97858
  dialogDescriptionSuffix: "start a new conversation if you want history saved again.",
97859
97859
  cancel: "Cancel",
97860
97860
  enabling: "Enabling…",
97861
- enablePrivateMode: "Enable Private Mode"
97861
+ enablePrivateMode: "Enable Incognito"
97862
97862
  };
97863
97863
  var chatStopStreamingButton$3 = {
97864
97864
  stopStreaming: "Stop streaming"
@@ -99743,7 +99743,7 @@ var pipChat$3 = {
99743
99743
  var privacyTabLabels$3 = {
99744
99744
  header: {
99745
99745
  title: "Privacy",
99746
- description: "Detect and filter personally identifiable information from chat messages."
99746
+ description: "Control what personal information the agent sees and how Incognito works for its conversations."
99747
99747
  },
99748
99748
  capability: {
99749
99749
  title: "PII filtering",
@@ -99800,6 +99800,29 @@ var privacyTabLabels$3 = {
99800
99800
  tooltip: "Scrub PII from AI-generated responses. May add slight latency to streamed responses."
99801
99801
  }
99802
99802
  },
99803
+ subTabs: {
99804
+ piiFiltering: "PII Filtering",
99805
+ incognito: "Incognito"
99806
+ },
99807
+ incognito: {
99808
+ description: "Incognito keeps a conversation out of chat history and memory. Choose how it works for this agent.",
99809
+ groupAriaLabel: "Incognito policy",
99810
+ options: {
99811
+ users: {
99812
+ title: "Users Decide",
99813
+ description: "Users can turn Incognito on for any conversation. Otherwise, their chats are saved to history as usual."
99814
+ },
99815
+ always: {
99816
+ title: "Always Incognito",
99817
+ description: "Every conversation with this agent is incognito. Nothing is saved to chat history or memory — for anyone."
99818
+ },
99819
+ never: {
99820
+ title: "Never Incognito",
99821
+ description: "Incognito isn't available for this agent. Every conversation is saved to chat history; users who normally keep their chats incognito are saved anonymously instead."
99822
+ }
99823
+ }
99824
+ },
99825
+ noAccess: "You don't have permission to view this agent's privacy settings.",
99803
99826
  toasts: {
99804
99827
  updateSuccess: "Privacy settings updated",
99805
99828
  updateError: "Failed to update privacy settings"
@@ -99961,16 +99984,16 @@ var profileCatalogInviteModal$3 = {
99961
99984
  sendInvitationsFailed: "Failed to send invitations. Please try again."
99962
99985
  };
99963
99986
  var profileChatPrivacyTab$3 = {
99964
- sectionHeading: "Default Private Mode",
99965
- sectionDescription: "Choose how conversations with AI agents are recorded by default. You can switch any individual chat into Private Mode from the chat header — and an agent or your organization can override this for specific conversations.",
99987
+ sectionHeading: "Default Incognito Setting",
99988
+ sectionDescription: "Choose how conversations with AI agents are recorded by default. You can switch any individual chat into Incognito from the chat header — and an agent or your organization can override this for specific conversations.",
99966
99989
  modeNormalLabel: "Normal",
99967
99990
  modeNormalDescription: "Conversations are saved to your history and linked to your account. Agents use prior turns in the same conversation for context.",
99968
99991
  modeAnonymizedLabel: "Anonymized",
99969
99992
  modeAnonymizedDescription: "Conversations are saved for AI context but stripped of identifying account info. Agents still use prior turns in the same conversation.",
99970
- modeDisabledLabel: "Disabled",
99993
+ modeDisabledLabel: "Incognito",
99971
99994
  modeDisabledDescription: "Nothing is recorded. Every message is a single-turn Q&A — agents can't reference earlier messages, even within the same conversation.",
99972
- toastUpdated: "Default Private Mode updated",
99973
- toastFailed: "Failed to update default Private Mode"
99995
+ toastUpdated: "Default Incognito Setting updated",
99996
+ toastFailed: "Failed to update default Incognito setting"
99974
99997
  };
99975
99998
  var profileCsvEditor$3 = {
99976
99999
  title: "Edit CSV Data",
@@ -100000,7 +100023,7 @@ var profileIndex$3 = {
100000
100023
  descResume: "Upload and preview your most recent resume.",
100001
100024
  descPurchases: "View and manage your subscriptions and purchases.",
100002
100025
  descMemory: "Manage what the AI remembers about you.",
100003
- descPrivacy: "Set your default Private Mode and review what each option does to your conversations with AI agents.",
100026
+ descPrivacy: "Set your default Incognito setting and review what each option does to your conversations with AI agents.",
100004
100027
  descChatHistory: "Review and export your conversations with AI agents.",
100005
100028
  descSecurity: "Update your security settings and password.",
100006
100029
  descAdvanced: "Manage your advanced settings.",
@@ -100048,7 +100071,7 @@ var profileIndex$3 = {
100048
100071
  descExperiencePreview: "Professional experience.",
100049
100072
  descPurchasesPreview: "Subscriptions and purchases.",
100050
100073
  descMemoryPreview: "What the AI remembers.",
100051
- descPrivacyPreview: "Private Mode and what each option does for conversations with AI agents.",
100074
+ descPrivacyPreview: "Incognito and what each option does for conversations with AI agents.",
100052
100075
  descChatHistoryPreview: "Conversations with AI agents.",
100053
100076
  ariaAddEducation: "Add education",
100054
100077
  ariaAddExperience: "Add experience",
@@ -100611,7 +100634,7 @@ var settingsTabLabels$3 = {
100611
100634
  tooltip: "Feature this agent to highlight it in listings."
100612
100635
  },
100613
100636
  showExploreMentors: {
100614
- label: "Show additional agents",
100637
+ label: "Show Additional Agents",
100615
100638
  tooltip: "Shows the additional agents section on this agent's welcome screen."
100616
100639
  },
100617
100640
  showAttachment: {
@@ -100627,13 +100650,13 @@ var settingsTabLabels$3 = {
100627
100650
  tooltip: "Lets people start a live voice call with the agent. Each surface has its own switch: In-app chat covers conversations hosted in the app, Embed widget covers the widget on your own site."
100628
100651
  },
100629
100652
  embedShowAttachment: {
100630
- label: "Show Attachment (embed widget)"
100653
+ label: "Show Attachment (Embed Widget)"
100631
100654
  },
100632
100655
  embedShowVoiceRecord: {
100633
- label: "Show Voice Record (embed widget)"
100656
+ label: "Show Voice Record (Embed Widget)"
100634
100657
  },
100635
100658
  embedShowVoiceCall: {
100636
- label: "Show Voice Call (embed widget)"
100659
+ label: "Show Voice Call (Embed Widget)"
100637
100660
  },
100638
100661
  allowCopies: {
100639
100662
  label: "Allow Copies",
@@ -100650,19 +100673,15 @@ var settingsTabLabels$3 = {
100650
100673
  removeAriaLabel: "Remove image"
100651
100674
  },
100652
100675
  enhancedDocRetrieval: {
100653
- label: "Enhanced document retrieval",
100676
+ label: "Enhanced Document Retrieval",
100654
100677
  tooltip: "Run multiple search queries per question to pull in more relevant documents. This setting has one value, so it applies to both in-app chat and the embed widget."
100655
100678
  },
100656
100679
  promptCaching: {
100657
- label: "Prompt caching",
100680
+ label: "Prompt Caching",
100658
100681
  tooltip: "Cache repeated prompt context to lower latency and cost on long conversations. This setting has one value, so it applies to both in-app chat and the embed widget."
100659
100682
  },
100660
- privateMode: {
100661
- label: "Enable private mode",
100662
- tooltip: "When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments. This setting has one value, so it applies to both in-app chat and the embed widget."
100663
- },
100664
100683
  smartDocRetrieval: {
100665
- label: "Smart document retrieval",
100684
+ label: "Smart Document Retrieval",
100666
100685
  tooltip: "The agent fetches documents only when it needs them, instead of searching the knowledge base on every turn. This setting has one value, so it applies to both in-app chat and the embed widget."
100667
100686
  }
100668
100687
  },
@@ -100710,14 +100729,14 @@ var settingsTabLabels$3 = {
100710
100729
  capabilities: "Capabilities"
100711
100730
  },
100712
100731
  sections: {
100713
- chatExperience: "Chat experience",
100732
+ chatExperience: "Chat Experience",
100714
100733
  advanced: "Advanced",
100715
100734
  perSurface: "Surface Capabilities",
100716
100735
  globalSettings: "Global Capabilities"
100717
100736
  },
100718
100737
  surfaces: {
100719
- inAppChat: "In-app chat",
100720
- embedWidget: "Embed widget"
100738
+ inAppChat: "In-App Chat",
100739
+ embedWidget: "Embed Widget"
100721
100740
  },
100722
100741
  notes: {
100723
100742
  perSurface: "Set independently for in-app chat and the embed widget.",
@@ -101357,6 +101376,7 @@ var tabsPoliciestab$3 = {
101357
101376
  browseResourcesLabel: "Browse resources"
101358
101377
  };
101359
101378
  var tabsPrivacyTab$3 = {
101379
+ subTabsAriaLabel: "Privacy sub-categories",
101360
101380
  moreInfo: "More info",
101361
101381
  outputFilterAriaLabelEnabled: "Output filter enabled",
101362
101382
  outputFilterAriaLabelDisabled: "Output filter disabled"
@@ -101445,7 +101465,6 @@ var tabsSettingsTab$3 = {
101445
101465
  settingsSubCategoriesAriaLabel: "Settings sub-categories",
101446
101466
  enhancedDocRetrievalTooltipAriaLabel: "More info about enhanced document retrieval",
101447
101467
  promptCachingTooltipAriaLabel: "More info about prompt caching",
101448
- privateModeTooltipAriaLabel: "More info about enable private mode",
101449
101468
  smartDocRetrievalTooltipAriaLabel: "More info about smart document retrieval",
101450
101469
  toggleAriaLabel: "{label} {state}"
101451
101470
  };
@@ -103427,6 +103446,54 @@ var virtualMachineNetworkSection$3 = {
103427
103446
  manageTitle: "Virtual Machine Settings",
103428
103447
  manageDescription: "Network policies and VM secrets are shared by every agent in your organization."
103429
103448
  };
103449
+ var accessibility$3 = {
103450
+ toolbar: {
103451
+ accessibilityMenu: "Accessibility Menu",
103452
+ contrastPlus: "Contrast +",
103453
+ highlightLinks: "Highlight Links",
103454
+ biggerText: "Bigger Text",
103455
+ textSpacing: "Text Spacing",
103456
+ pauseAnimations: "Pause Animations",
103457
+ hideImages: "Hide Images",
103458
+ dyslexiaFriendly: "Dyslexia Friendly",
103459
+ cursor: "Cursor",
103460
+ tooltips: "Tooltips",
103461
+ lineHeight: "Line Height",
103462
+ textAlign: "Text Align",
103463
+ saturation: "Saturation",
103464
+ resetAllAccessibilitySettings: "Reset All Accessibility Settings",
103465
+ contrastInvertColors: "Invert Colors",
103466
+ contrastDark: "Dark Contrast",
103467
+ contrastLight: "Light Contrast",
103468
+ textSizeNormal: "Normal Text",
103469
+ textSizeLarge: "Large Text",
103470
+ textSizeLarger: "Larger Text",
103471
+ spacingLight: "Light Spacing",
103472
+ spacingModerate: "Moderate Spacing",
103473
+ spacingHeavy: "Heavy Spacing",
103474
+ dyslexiaFont: "Dyslexia Font",
103475
+ legibleFont: "Legible Font",
103476
+ alignLeft: "Align Left",
103477
+ alignCenter: "Align Center",
103478
+ alignRight: "Align Right",
103479
+ justify: "Justify",
103480
+ saturationNormal: "Normal Saturation",
103481
+ saturationHigh: "High Saturation",
103482
+ saturationLow: "Low Saturation",
103483
+ resetButtonPosition: "Reset Button Position",
103484
+ moveButtonToCorner: "Move button to corner",
103485
+ moveButtonTopLeft: "Move button to top left corner",
103486
+ moveButtonTopRight: "Move button to top right corner",
103487
+ moveButtonBottomLeft: "Move button to bottom left corner",
103488
+ moveButtonBottomRight: "Move button to bottom right corner"
103489
+ },
103490
+ button: {
103491
+ openAccessibilityMenu: "Open Accessibility Menu",
103492
+ accessibilityIconAlt: "Accessibility",
103493
+ moveHint: "Use the up and down arrow keys to move this button, and the left and right arrow keys to switch sides. Hold Shift to move it faster.",
103494
+ positionAnnouncement: "Accessibility button moved to the {side, select, left {left} other {right}} edge, {bottom} pixels from the bottom."
103495
+ }
103496
+ };
103430
103497
  var en = {
103431
103498
  accessTabAddAccess: accessTabAddAccess$3,
103432
103499
  accessTabLabels: accessTabLabels$3,
@@ -103722,7 +103789,8 @@ var en = {
103722
103789
  virtualMachineAdminTab: virtualMachineAdminTab$3,
103723
103790
  virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$3,
103724
103791
  virtualMachineSecrets: virtualMachineSecrets$3,
103725
- virtualMachineNetworkSection: virtualMachineNetworkSection$3
103792
+ virtualMachineNetworkSection: virtualMachineNetworkSection$3,
103793
+ accessibility: accessibility$3
103726
103794
  };
103727
103795
 
103728
103796
  var accessTabAddAccess$2 = {
@@ -105654,33 +105722,33 @@ var chatInputFormVoiceChatButton$2 = {
105654
105722
  voiceRecord: "Enregistrement vocal"
105655
105723
  };
105656
105724
  var chatPrivacyChatPrivacyToggle$2 = {
105657
- toastPrivateModeOff: "Le mode privé est désactivé.",
105658
- toastCouldNotTurnOff: "Impossible de désactiver le mode privé. Veuillez réessayer.",
105659
- toastPrivateModeOnNoHistory: "Le mode privé est activé. Cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105660
- toastCouldNotEnable: "Impossible d'activer le mode privé. Veuillez réessayer.",
105661
- toastPrivateModeOnRemovedHistory: "Le mode privé est activé. Cette conversation a été supprimée de votre historique.",
105662
- toastFailedToEnable: "Échec de l'activation du mode privé. Veuillez réessayer.",
105725
+ toastPrivateModeOff: "Le mode incognito est désactivé.",
105726
+ toastCouldNotTurnOff: "Impossible de désactiver le mode incognito. Veuillez réessayer.",
105727
+ toastPrivateModeOnNoHistory: "Le mode incognito est activé. Cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105728
+ toastCouldNotEnable: "Impossible d'activer le mode incognito. Veuillez réessayer.",
105729
+ toastPrivateModeOnRemovedHistory: "Le mode incognito est activé. Cette conversation a été supprimée de votre historique.",
105730
+ toastFailedToEnable: "Échec de l'activation du mode incognito. Veuillez réessayer.",
105663
105731
  working: "En cours…",
105664
- ariaLockedByAgent: "Le mode privé est verrouillé par cet agent. Aucun historique de conversation n'est enregistré.",
105665
- ariaPrivateOnForConversation: "Le mode privé est activé pour cette conversation. Cette discussion n'est pas enregistrée ni utilisée pour la mémoire.",
105666
- ariaTurnOffPrivateMode: "Désactiver le mode privé pour cette conversation.",
105667
- ariaTurnOnMidConversation: "Activer le mode privé pour cette conversation. Cette action est irréversible.",
105668
- ariaTurnOnEmpty: "Activer le mode privé. Cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105669
- tooltipLockedByMentor: "Cet agent fonctionne toujours en mode privé — aucun historique ni mémoire n'est conservé pour les conversations avec lui.",
105670
- tooltipLockedByTenant: "Votre organisation a activé le mode privé par défaut — aucun historique ni mémoire n'est conservé.",
105671
- tooltipLockedGeneric: "Le mode privé est verrouillé — aucun historique ni mémoire n'est conservé.",
105672
- tooltipPrivateOnPostSend: "Le mode privé est activé pour cette conversation — cette discussion n'est pas enregistrée ni utilisée pour la mémoire. Démarrez une nouvelle conversation pour quitter le mode privé.",
105673
- tooltipTurnOff: "Désactiver le mode privé — votre prochaine conversation sera de nouveau enregistrée dans l'historique.",
105674
- tooltipTurnOnMidConversation: "Activer le mode privé pour le reste de cette conversation. Une fois activé, vous ne pouvez pas le désactiver — démarrez une nouvelle conversation pour reprendre l'enregistrement de l'historique.",
105675
- tooltipTurnOnEmpty: "Activer le mode privé — cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105676
- privateMode: "Mode privé",
105677
- dialogTitle: "Activer le mode privé pour cette conversation ?",
105732
+ ariaLockedByAgent: "Le mode incognito est verrouillé par cet agent. Aucun historique de conversation n'est enregistré.",
105733
+ ariaPrivateOnForConversation: "Le mode incognito est activé pour cette conversation. Cette discussion n'est pas enregistrée ni utilisée pour la mémoire.",
105734
+ ariaTurnOffPrivateMode: "Désactiver le mode incognito pour cette conversation.",
105735
+ ariaTurnOnMidConversation: "Activer le mode incognito pour cette conversation. Cette action est irréversible.",
105736
+ ariaTurnOnEmpty: "Activer le mode incognito. Cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105737
+ tooltipLockedByMentor: "Cet agent fonctionne toujours en mode incognito — aucun historique ni mémoire n'est conservé pour les conversations avec lui.",
105738
+ tooltipLockedByTenant: "Votre organisation a activé le mode incognito par défaut — aucun historique ni mémoire n'est conservé.",
105739
+ tooltipLockedGeneric: "Le mode incognito est verrouillé — aucun historique ni mémoire n'est conservé.",
105740
+ tooltipPrivateOnPostSend: "Le mode incognito est activé pour cette conversation — cette discussion n'est pas enregistrée ni utilisée pour la mémoire. Démarrez une nouvelle conversation pour quitter le mode incognito.",
105741
+ tooltipTurnOff: "Désactiver le mode incognito — votre prochaine conversation sera de nouveau enregistrée dans l'historique.",
105742
+ tooltipTurnOnMidConversation: "Activer le mode incognito pour le reste de cette conversation. Une fois activé, vous ne pouvez pas le désactiver — démarrez une nouvelle conversation pour reprendre l'enregistrement de l'historique.",
105743
+ tooltipTurnOnEmpty: "Activer le mode incognito — cette conversation ne sera pas enregistrée dans l'historique ni utilisée pour la mémoire.",
105744
+ privateMode: "Mode incognito",
105745
+ dialogTitle: "Activer le mode incognito pour cette conversation ?",
105678
105746
  dialogDescription: "Cette conversation sera supprimée de votre historique et l'assistant cessera d'utiliser les échanges précédents.",
105679
- dialogDescriptionBold: "Une fois activé, vous ne pouvez pas désactiver le mode privé pour cette conversation",
105747
+ dialogDescriptionBold: "Une fois activé, vous ne pouvez pas désactiver le mode incognito pour cette conversation",
105680
105748
  dialogDescriptionSuffix: "démarrez une nouvelle conversation si vous souhaitez que l'historique soit de nouveau enregistré.",
105681
105749
  cancel: "Annuler",
105682
105750
  enabling: "Activation…",
105683
- enablePrivateMode: "Activer le mode privé"
105751
+ enablePrivateMode: "Activer le mode incognito"
105684
105752
  };
105685
105753
  var chatStopStreamingButton$2 = {
105686
105754
  stopStreaming: "Arrêter la diffusion"
@@ -107622,6 +107690,29 @@ var privacyTabLabels$2 = {
107622
107690
  tooltip: "Supprimer les PII des réponses générées par l'IA. Peut ajouter une légère latence aux réponses en streaming."
107623
107691
  }
107624
107692
  },
107693
+ subTabs: {
107694
+ piiFiltering: "PII Filtering",
107695
+ incognito: "Incognito"
107696
+ },
107697
+ incognito: {
107698
+ description: "Incognito keeps a conversation out of chat history and memory. Choose how it works for this agent.",
107699
+ groupAriaLabel: "Incognito policy",
107700
+ options: {
107701
+ users: {
107702
+ title: "Users Decide",
107703
+ description: "Users can turn Incognito on for any conversation. Otherwise, their chats are saved to history as usual."
107704
+ },
107705
+ always: {
107706
+ title: "Always Incognito",
107707
+ description: "Every conversation with this agent is incognito. Nothing is saved to chat history or memory — for anyone."
107708
+ },
107709
+ never: {
107710
+ title: "Never Incognito",
107711
+ description: "Incognito isn't available for this agent. Every conversation is saved to chat history; users who normally keep their chats incognito are saved anonymously instead."
107712
+ }
107713
+ }
107714
+ },
107715
+ noAccess: "You don't have permission to view this agent's privacy settings.",
107625
107716
  toasts: {
107626
107717
  updateSuccess: "Paramètres de confidentialité mis à jour",
107627
107718
  updateError: "Échec de la mise à jour des paramètres de confidentialité"
@@ -107783,16 +107874,16 @@ var profileCatalogInviteModal$2 = {
107783
107874
  sendInvitationsFailed: "Échec de l'envoi des invitations. Veuillez réessayer."
107784
107875
  };
107785
107876
  var profileChatPrivacyTab$2 = {
107786
- sectionHeading: "Mode privé par défaut",
107787
- sectionDescription: "Choisissez comment les conversations avec les agents IA sont enregistrées par défaut. Vous pouvez basculer n'importe quelle conversation en mode privé depuis l'en-tête du chat — et un agent ou votre organisation peut remplacer ce paramètre pour des conversations spécifiques.",
107877
+ sectionHeading: "Mode incognito par défaut",
107878
+ sectionDescription: "Choisissez comment les conversations avec les agents IA sont enregistrées par défaut. Vous pouvez basculer n'importe quelle conversation en mode incognito depuis l'en-tête du chat — et un agent ou votre organisation peut remplacer ce paramètre pour des conversations spécifiques.",
107788
107879
  modeNormalLabel: "Normal",
107789
107880
  modeNormalDescription: "Les conversations sont enregistrées dans votre historique et liées à votre compte. Les agents utilisent les échanges précédents de la même conversation comme contexte.",
107790
107881
  modeAnonymizedLabel: "Anonymisé",
107791
107882
  modeAnonymizedDescription: "Les conversations sont enregistrées pour le contexte IA, mais les informations d'identification du compte sont supprimées. Les agents utilisent toujours les échanges précédents de la même conversation.",
107792
- modeDisabledLabel: "Désactivé",
107883
+ modeDisabledLabel: "Incognito",
107793
107884
  modeDisabledDescription: "Rien n'est enregistré. Chaque message est une question-réponse à tour unique — les agents ne peuvent pas référencer les messages précédents, même au sein de la même conversation.",
107794
- toastUpdated: "Mode privé par défaut mis à jour",
107795
- toastFailed: "Échec de la mise à jour du mode privé par défaut"
107885
+ toastUpdated: "Mode incognito par défaut mis à jour",
107886
+ toastFailed: "Échec de la mise à jour du mode incognito par défaut"
107796
107887
  };
107797
107888
  var profileCsvEditor$2 = {
107798
107889
  title: "Modifier les données CSV",
@@ -107822,7 +107913,7 @@ var profileIndex$2 = {
107822
107913
  descResume: "Téléversez et prévisualisez votre CV le plus récent.",
107823
107914
  descPurchases: "Consultez et gérez vos abonnements et achats.",
107824
107915
  descMemory: "Gérez ce que l'IA se souvient de vous.",
107825
- descPrivacy: "Définissez votre mode privé par défaut et découvrez l'effet de chaque option sur vos conversations avec les agents IA.",
107916
+ descPrivacy: "Définissez votre mode incognito par défaut et découvrez l'effet de chaque option sur vos conversations avec les agents IA.",
107826
107917
  descChatHistory: "Consultez et exportez vos conversations avec les agents IA.",
107827
107918
  descSecurity: "Mettez à jour vos paramètres de sécurité et votre mot de passe.",
107828
107919
  descAdvanced: "Gérez vos paramètres avancés.",
@@ -107870,7 +107961,7 @@ var profileIndex$2 = {
107870
107961
  descExperiencePreview: "Expérience professionnelle.",
107871
107962
  descPurchasesPreview: "Abonnements et achats.",
107872
107963
  descMemoryPreview: "Ce dont l'IA se souvient.",
107873
- descPrivacyPreview: "Mode privé et effet de chaque option sur les conversations avec les agents IA.",
107964
+ descPrivacyPreview: "Mode incognito et effet de chaque option sur les conversations avec les agents IA.",
107874
107965
  descChatHistoryPreview: "Conversations avec les agents IA.",
107875
107966
  ariaAddEducation: "Ajouter une formation",
107876
107967
  ariaAddExperience: "Ajouter une expérience",
@@ -108472,19 +108563,15 @@ var settingsTabLabels$2 = {
108472
108563
  removeAriaLabel: "Supprimer l'image"
108473
108564
  },
108474
108565
  enhancedDocRetrieval: {
108475
- label: "Enhanced document retrieval",
108566
+ label: "Enhanced Document Retrieval",
108476
108567
  tooltip: "Run multiple search queries per question to pull in more relevant documents. This setting has one value, so it applies to both in-app chat and the embed widget."
108477
108568
  },
108478
108569
  promptCaching: {
108479
- label: "Prompt caching",
108570
+ label: "Prompt Caching",
108480
108571
  tooltip: "Cache repeated prompt context to lower latency and cost on long conversations. This setting has one value, so it applies to both in-app chat and the embed widget."
108481
108572
  },
108482
- privateMode: {
108483
- label: "Enable private mode",
108484
- tooltip: "When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments. This setting has one value, so it applies to both in-app chat and the embed widget."
108485
- },
108486
108573
  smartDocRetrieval: {
108487
- label: "Smart document retrieval",
108574
+ label: "Smart Document Retrieval",
108488
108575
  tooltip: "The agent fetches documents only when it needs them, instead of searching the knowledge base on every turn. This setting has one value, so it applies to both in-app chat and the embed widget."
108489
108576
  }
108490
108577
  },
@@ -108532,14 +108619,14 @@ var settingsTabLabels$2 = {
108532
108619
  capabilities: "Capabilities"
108533
108620
  },
108534
108621
  sections: {
108535
- chatExperience: "Chat experience",
108622
+ chatExperience: "Chat Experience",
108536
108623
  advanced: "Advanced",
108537
108624
  perSurface: "Capacites par surface",
108538
108625
  globalSettings: "Capacites globales"
108539
108626
  },
108540
108627
  surfaces: {
108541
- inAppChat: "In-app chat",
108542
- embedWidget: "Embed widget"
108628
+ inAppChat: "In-App Chat",
108629
+ embedWidget: "Embed Widget"
108543
108630
  },
108544
108631
  notes: {
108545
108632
  perSurface: "A configurer independamment pour le chat dans l'application et le widget integre.",
@@ -109179,6 +109266,7 @@ var tabsPoliciestab$2 = {
109179
109266
  browseResourcesLabel: "Parcourir les ressources"
109180
109267
  };
109181
109268
  var tabsPrivacyTab$2 = {
109269
+ subTabsAriaLabel: "Privacy sub-categories",
109182
109270
  moreInfo: "Plus d'informations",
109183
109271
  outputFilterAriaLabelEnabled: "Filtre de sortie activé",
109184
109272
  outputFilterAriaLabelDisabled: "Filtre de sortie désactivé"
@@ -109267,7 +109355,6 @@ var tabsSettingsTab$2 = {
109267
109355
  settingsSubCategoriesAriaLabel: "Settings sub-categories",
109268
109356
  enhancedDocRetrievalTooltipAriaLabel: "More info about enhanced document retrieval",
109269
109357
  promptCachingTooltipAriaLabel: "More info about prompt caching",
109270
- privateModeTooltipAriaLabel: "More info about enable private mode",
109271
109358
  smartDocRetrievalTooltipAriaLabel: "More info about smart document retrieval",
109272
109359
  toggleAriaLabel: "{label} {state}"
109273
109360
  };
@@ -111083,6 +111170,54 @@ var virtualMachineNetworkSection$2 = {
111083
111170
  manageTitle: "Paramètres de la machine virtuelle",
111084
111171
  manageDescription: "Les politiques réseau et les secrets de VM sont partagés par tous les agents de votre organisation."
111085
111172
  };
111173
+ var accessibility$2 = {
111174
+ toolbar: {
111175
+ accessibilityMenu: "Menu d'accessibilité",
111176
+ contrastPlus: "Contraste +",
111177
+ highlightLinks: "Mettre les liens en évidence",
111178
+ biggerText: "Texte plus grand",
111179
+ textSpacing: "Espacement du texte",
111180
+ pauseAnimations: "Mettre les animations en pause",
111181
+ hideImages: "Masquer les images",
111182
+ dyslexiaFriendly: "Adapté à la dyslexie",
111183
+ cursor: "Curseur",
111184
+ tooltips: "Infobulles",
111185
+ lineHeight: "Hauteur de ligne",
111186
+ textAlign: "Alignement du texte",
111187
+ saturation: "Saturation",
111188
+ resetAllAccessibilitySettings: "Réinitialiser tous les paramètres d'accessibilité",
111189
+ contrastInvertColors: "Inverser les couleurs",
111190
+ contrastDark: "Contraste sombre",
111191
+ contrastLight: "Contraste clair",
111192
+ textSizeNormal: "Texte normal",
111193
+ textSizeLarge: "Grand texte",
111194
+ textSizeLarger: "Texte très grand",
111195
+ spacingLight: "Espacement léger",
111196
+ spacingModerate: "Espacement modéré",
111197
+ spacingHeavy: "Espacement important",
111198
+ dyslexiaFont: "Police dyslexie",
111199
+ legibleFont: "Police lisible",
111200
+ alignLeft: "Aligner à gauche",
111201
+ alignCenter: "Centrer",
111202
+ alignRight: "Aligner à droite",
111203
+ justify: "Justifier",
111204
+ saturationNormal: "Saturation normale",
111205
+ saturationHigh: "Haute saturation",
111206
+ saturationLow: "Faible saturation",
111207
+ resetButtonPosition: "Réinitialiser la position du bouton",
111208
+ moveButtonToCorner: "Déplacer le bouton dans un coin",
111209
+ moveButtonTopLeft: "Déplacer le bouton dans le coin supérieur gauche",
111210
+ moveButtonTopRight: "Déplacer le bouton dans le coin supérieur droit",
111211
+ moveButtonBottomLeft: "Déplacer le bouton dans le coin inférieur gauche",
111212
+ moveButtonBottomRight: "Déplacer le bouton dans le coin inférieur droit"
111213
+ },
111214
+ button: {
111215
+ openAccessibilityMenu: "Ouvrir le menu d'accessibilité",
111216
+ accessibilityIconAlt: "Accessibilité",
111217
+ moveHint: "Utilisez les flèches haut et bas pour déplacer ce bouton, et les flèches gauche et droite pour changer de côté. Maintenez Maj enfoncée pour le déplacer plus vite.",
111218
+ positionAnnouncement: "Bouton d'accessibilité déplacé vers le bord {side, select, left {gauche} other {droit}}, à {bottom} pixels du bas."
111219
+ }
111220
+ };
111086
111221
  var fr = {
111087
111222
  accessTabAddAccess: accessTabAddAccess$2,
111088
111223
  accessTabLabels: accessTabLabels$2,
@@ -111378,7 +111513,8 @@ var fr = {
111378
111513
  virtualMachineAdminTab: virtualMachineAdminTab$2,
111379
111514
  virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$2,
111380
111515
  virtualMachineSecrets: virtualMachineSecrets$2,
111381
- virtualMachineNetworkSection: virtualMachineNetworkSection$2
111516
+ virtualMachineNetworkSection: virtualMachineNetworkSection$2,
111517
+ accessibility: accessibility$2
111382
111518
  };
111383
111519
 
111384
111520
  var accessTabAddAccess$1 = {
@@ -113310,33 +113446,33 @@ var chatInputFormVoiceChatButton$1 = {
113310
113446
  voiceRecord: "Grabación de voz"
113311
113447
  };
113312
113448
  var chatPrivacyChatPrivacyToggle$1 = {
113313
- toastPrivateModeOff: "El modo privado está desactivado.",
113314
- toastCouldNotTurnOff: "No se pudo desactivar el modo privado. Por favor, inténtelo de nuevo.",
113315
- toastPrivateModeOnNoHistory: "El modo privado está activado. Esta conversación no se guardará en el historial ni se usará para la memoria.",
113316
- toastCouldNotEnable: "No se pudo activar el modo privado. Por favor, inténtelo de nuevo.",
113317
- toastPrivateModeOnRemovedHistory: "El modo privado está activado. Esta conversación ha sido eliminada de su historial.",
113318
- toastFailedToEnable: "No se pudo habilitar el modo privado. Por favor, inténtelo de nuevo.",
113449
+ toastPrivateModeOff: "El modo incógnito está desactivado.",
113450
+ toastCouldNotTurnOff: "No se pudo desactivar el modo incógnito. Por favor, inténtelo de nuevo.",
113451
+ toastPrivateModeOnNoHistory: "El modo incógnito está activado. Esta conversación no se guardará en el historial ni se usará para la memoria.",
113452
+ toastCouldNotEnable: "No se pudo activar el modo incógnito. Por favor, inténtelo de nuevo.",
113453
+ toastPrivateModeOnRemovedHistory: "El modo incógnito está activado. Esta conversación ha sido eliminada de su historial.",
113454
+ toastFailedToEnable: "No se pudo habilitar el modo incógnito. Por favor, inténtelo de nuevo.",
113319
113455
  working: "Procesando…",
113320
- ariaLockedByAgent: "El modo privado está bloqueado por este agente. No se registra ningún historial de conversación.",
113321
- ariaPrivateOnForConversation: "El modo privado está activado para esta conversación. Este chat no se guarda ni se usa para la memoria.",
113322
- ariaTurnOffPrivateMode: "Desactivar el modo privado para este chat.",
113323
- ariaTurnOnMidConversation: "Activar el modo privado para esta conversación. Esta acción no se puede deshacer.",
113324
- ariaTurnOnEmpty: "Activar el modo privado. Este chat no se guardará en el historial ni se usará para la memoria.",
113325
- tooltipLockedByMentor: "Este agente siempre funciona en modo privado — no se conserva ningún historial ni memoria de las conversaciones con él.",
113326
- tooltipLockedByTenant: "Su organización tiene el modo privado habilitado de forma predeterminada — no se conserva ningún historial ni memoria.",
113327
- tooltipLockedGeneric: "El modo privado está bloqueado — no se conserva ningún historial ni memoria.",
113328
- tooltipPrivateOnPostSend: "El modo privado está activado para esta conversación — este chat no se guarda ni se usa para la memoria. Inicie una nueva conversación para salir del modo privado.",
113329
- tooltipTurnOff: "Desactivar el modo privado — su próximo chat se guardará en el historial nuevamente.",
113330
- tooltipTurnOnMidConversation: "Activar el modo privado para el resto de esta conversación. Una vez activado, no puede desactivarlo — inicie una nueva conversación para reanudar el guardado del historial.",
113331
- tooltipTurnOnEmpty: "Activar el modo privado — este chat no se guardará en el historial ni se usará para la memoria.",
113332
- privateMode: "Modo privado",
113333
- dialogTitle: "¿Activar el modo privado para este chat?",
113456
+ ariaLockedByAgent: "El modo incógnito está bloqueado por este agente. No se registra ningún historial de conversación.",
113457
+ ariaPrivateOnForConversation: "El modo incógnito está activado para esta conversación. Este chat no se guarda ni se usa para la memoria.",
113458
+ ariaTurnOffPrivateMode: "Desactivar el modo incógnito para este chat.",
113459
+ ariaTurnOnMidConversation: "Activar el modo incógnito para esta conversación. Esta acción no se puede deshacer.",
113460
+ ariaTurnOnEmpty: "Activar el modo incógnito. Este chat no se guardará en el historial ni se usará para la memoria.",
113461
+ tooltipLockedByMentor: "Este agente siempre funciona en modo incógnito — no se conserva ningún historial ni memoria de las conversaciones con él.",
113462
+ tooltipLockedByTenant: "Su organización tiene el modo incógnito habilitado de forma predeterminada — no se conserva ningún historial ni memoria.",
113463
+ tooltipLockedGeneric: "El modo incógnito está bloqueado — no se conserva ningún historial ni memoria.",
113464
+ tooltipPrivateOnPostSend: "El modo incógnito está activado para esta conversación — este chat no se guarda ni se usa para la memoria. Inicie una nueva conversación para salir del modo incógnito.",
113465
+ tooltipTurnOff: "Desactivar el modo incógnito — su próximo chat se guardará en el historial nuevamente.",
113466
+ tooltipTurnOnMidConversation: "Activar el modo incógnito para el resto de esta conversación. Una vez activado, no puede desactivarlo — inicie una nueva conversación para reanudar el guardado del historial.",
113467
+ tooltipTurnOnEmpty: "Activar el modo incógnito — este chat no se guardará en el historial ni se usará para la memoria.",
113468
+ privateMode: "Modo incógnito",
113469
+ dialogTitle: "¿Activar el modo incógnito para este chat?",
113334
113470
  dialogDescription: "Esta conversación se eliminará de su historial y el asistente dejará de usar los turnos anteriores.",
113335
- dialogDescriptionBold: "Una vez activado, no puede desactivar el modo privado para este chat",
113471
+ dialogDescriptionBold: "Una vez activado, no puede desactivar el modo incógnito para este chat",
113336
113472
  dialogDescriptionSuffix: "inicie una nueva conversación si desea que el historial se guarde nuevamente.",
113337
113473
  cancel: "Cancelar",
113338
113474
  enabling: "Activando…",
113339
- enablePrivateMode: "Activar el modo privado"
113475
+ enablePrivateMode: "Activar el modo incógnito"
113340
113476
  };
113341
113477
  var chatStopStreamingButton$1 = {
113342
113478
  stopStreaming: "Detener transmisión"
@@ -115278,6 +115414,29 @@ var privacyTabLabels$1 = {
115278
115414
  tooltip: "Eliminar PII de las respuestas generadas por la IA. Puede añadir una ligera latencia a las respuestas en streaming."
115279
115415
  }
115280
115416
  },
115417
+ subTabs: {
115418
+ piiFiltering: "PII Filtering",
115419
+ incognito: "Incognito"
115420
+ },
115421
+ incognito: {
115422
+ description: "Incognito keeps a conversation out of chat history and memory. Choose how it works for this agent.",
115423
+ groupAriaLabel: "Incognito policy",
115424
+ options: {
115425
+ users: {
115426
+ title: "Users Decide",
115427
+ description: "Users can turn Incognito on for any conversation. Otherwise, their chats are saved to history as usual."
115428
+ },
115429
+ always: {
115430
+ title: "Always Incognito",
115431
+ description: "Every conversation with this agent is incognito. Nothing is saved to chat history or memory — for anyone."
115432
+ },
115433
+ never: {
115434
+ title: "Never Incognito",
115435
+ description: "Incognito isn't available for this agent. Every conversation is saved to chat history; users who normally keep their chats incognito are saved anonymously instead."
115436
+ }
115437
+ }
115438
+ },
115439
+ noAccess: "You don't have permission to view this agent's privacy settings.",
115281
115440
  toasts: {
115282
115441
  updateSuccess: "Configuración de privacidad actualizada",
115283
115442
  updateError: "Error al actualizar la configuración de privacidad"
@@ -115439,16 +115598,16 @@ var profileCatalogInviteModal$1 = {
115439
115598
  sendInvitationsFailed: "Error al enviar las invitaciones. Por favor, inténtalo de nuevo."
115440
115599
  };
115441
115600
  var profileChatPrivacyTab$1 = {
115442
- sectionHeading: "Modo privado predeterminado",
115443
- sectionDescription: "Elija cómo se registran por defecto las conversaciones con los agentes de IA. Puede cambiar cualquier chat individual al modo privado desde el encabezado del chat — y un agente o su organización puede anular esto para conversaciones específicas.",
115601
+ sectionHeading: "Modo incógnito predeterminado",
115602
+ sectionDescription: "Elija cómo se registran por defecto las conversaciones con los agentes de IA. Puede cambiar cualquier chat individual al modo incógnito desde el encabezado del chat — y un agente o su organización puede anular esto para conversaciones específicas.",
115444
115603
  modeNormalLabel: "Normal",
115445
115604
  modeNormalDescription: "Las conversaciones se guardan en su historial y se vinculan a su cuenta. Los agentes usan los turnos anteriores de la misma conversación como contexto.",
115446
115605
  modeAnonymizedLabel: "Anonimizado",
115447
115606
  modeAnonymizedDescription: "Las conversaciones se guardan para el contexto de IA, pero se eliminan los datos de identificación de la cuenta. Los agentes siguen usando los turnos anteriores de la misma conversación.",
115448
- modeDisabledLabel: "Desactivado",
115607
+ modeDisabledLabel: "Incógnito",
115449
115608
  modeDisabledDescription: "No se registra nada. Cada mensaje es una pregunta-respuesta de un solo turno — los agentes no pueden hacer referencia a mensajes anteriores, ni siquiera dentro de la misma conversación.",
115450
- toastUpdated: "Modo privado predeterminado actualizado",
115451
- toastFailed: "Error al actualizar el modo privado predeterminado"
115609
+ toastUpdated: "Modo incógnito predeterminado actualizado",
115610
+ toastFailed: "Error al actualizar el modo incógnito predeterminado"
115452
115611
  };
115453
115612
  var profileCsvEditor$1 = {
115454
115613
  title: "Editar datos CSV",
@@ -115478,7 +115637,7 @@ var profileIndex$1 = {
115478
115637
  descResume: "Sube y previsualiza tu currículum más reciente.",
115479
115638
  descPurchases: "Consulta y administra tus suscripciones y compras.",
115480
115639
  descMemory: "Administra lo que la IA recuerda sobre ti.",
115481
- descPrivacy: "Establece tu Modo Privado predeterminado y revisa qué efecto tiene cada opción en tus conversaciones con agentes de IA.",
115640
+ descPrivacy: "Establece tu Modo incógnito predeterminado y revisa qué efecto tiene cada opción en tus conversaciones con agentes de IA.",
115482
115641
  descChatHistory: "Revisa y exporta tus conversaciones con agentes de IA.",
115483
115642
  descSecurity: "Actualiza tu configuración de seguridad y contraseña.",
115484
115643
  descAdvanced: "Administra tu configuración avanzada.",
@@ -115526,7 +115685,7 @@ var profileIndex$1 = {
115526
115685
  descExperiencePreview: "Experiencia profesional.",
115527
115686
  descPurchasesPreview: "Suscripciones y compras.",
115528
115687
  descMemoryPreview: "Lo que la IA recuerda.",
115529
- descPrivacyPreview: "Modo Privado y qué hace cada opción en las conversaciones con agentes de IA.",
115688
+ descPrivacyPreview: "Modo incógnito y qué hace cada opción en las conversaciones con agentes de IA.",
115530
115689
  descChatHistoryPreview: "Conversaciones con agentes de IA.",
115531
115690
  ariaAddEducation: "Añadir educación",
115532
115691
  ariaAddExperience: "Añadir experiencia",
@@ -116128,19 +116287,15 @@ var settingsTabLabels$1 = {
116128
116287
  removeAriaLabel: "Eliminar imagen"
116129
116288
  },
116130
116289
  enhancedDocRetrieval: {
116131
- label: "Enhanced document retrieval",
116290
+ label: "Enhanced Document Retrieval",
116132
116291
  tooltip: "Run multiple search queries per question to pull in more relevant documents. This setting has one value, so it applies to both in-app chat and the embed widget."
116133
116292
  },
116134
116293
  promptCaching: {
116135
- label: "Prompt caching",
116294
+ label: "Prompt Caching",
116136
116295
  tooltip: "Cache repeated prompt context to lower latency and cost on long conversations. This setting has one value, so it applies to both in-app chat and the embed widget."
116137
116296
  },
116138
- privateMode: {
116139
- label: "Enable private mode",
116140
- tooltip: "When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments. This setting has one value, so it applies to both in-app chat and the embed widget."
116141
- },
116142
116297
  smartDocRetrieval: {
116143
- label: "Smart document retrieval",
116298
+ label: "Smart Document Retrieval",
116144
116299
  tooltip: "The agent fetches documents only when it needs them, instead of searching the knowledge base on every turn. This setting has one value, so it applies to both in-app chat and the embed widget."
116145
116300
  }
116146
116301
  },
@@ -116188,14 +116343,14 @@ var settingsTabLabels$1 = {
116188
116343
  capabilities: "Capabilities"
116189
116344
  },
116190
116345
  sections: {
116191
- chatExperience: "Chat experience",
116346
+ chatExperience: "Chat Experience",
116192
116347
  advanced: "Advanced",
116193
116348
  perSurface: "Capacidades por superficie",
116194
116349
  globalSettings: "Capacidades globales"
116195
116350
  },
116196
116351
  surfaces: {
116197
- inAppChat: "In-app chat",
116198
- embedWidget: "Embed widget"
116352
+ inAppChat: "In-App Chat",
116353
+ embedWidget: "Embed Widget"
116199
116354
  },
116200
116355
  notes: {
116201
116356
  perSurface: "Se configuran de forma independiente para el chat en la aplicacion y el widget incrustado.",
@@ -116835,6 +116990,7 @@ var tabsPoliciestab$1 = {
116835
116990
  browseResourcesLabel: "Explorar recursos"
116836
116991
  };
116837
116992
  var tabsPrivacyTab$1 = {
116993
+ subTabsAriaLabel: "Privacy sub-categories",
116838
116994
  moreInfo: "Más información",
116839
116995
  outputFilterAriaLabelEnabled: "Filtro de salida activado",
116840
116996
  outputFilterAriaLabelDisabled: "Filtro de salida desactivado"
@@ -116923,7 +117079,6 @@ var tabsSettingsTab$1 = {
116923
117079
  settingsSubCategoriesAriaLabel: "Settings sub-categories",
116924
117080
  enhancedDocRetrievalTooltipAriaLabel: "More info about enhanced document retrieval",
116925
117081
  promptCachingTooltipAriaLabel: "More info about prompt caching",
116926
- privateModeTooltipAriaLabel: "More info about enable private mode",
116927
117082
  smartDocRetrievalTooltipAriaLabel: "More info about smart document retrieval",
116928
117083
  toggleAriaLabel: "{label} {state}"
116929
117084
  };
@@ -118739,6 +118894,54 @@ var virtualMachineNetworkSection$1 = {
118739
118894
  manageTitle: "Configuración de la máquina virtual",
118740
118895
  manageDescription: "Las políticas de red y los secretos de VM son compartidos por todos los agentes de tu organización."
118741
118896
  };
118897
+ var accessibility$1 = {
118898
+ toolbar: {
118899
+ accessibilityMenu: "Menú de accesibilidad",
118900
+ contrastPlus: "Contraste +",
118901
+ highlightLinks: "Resaltar enlaces",
118902
+ biggerText: "Texto más grande",
118903
+ textSpacing: "Espaciado del texto",
118904
+ pauseAnimations: "Pausar animaciones",
118905
+ hideImages: "Ocultar imágenes",
118906
+ dyslexiaFriendly: "Apto para dislexia",
118907
+ cursor: "Cursor",
118908
+ tooltips: "Tooltips",
118909
+ lineHeight: "Altura de línea",
118910
+ textAlign: "Alineación del texto",
118911
+ saturation: "Saturación",
118912
+ resetAllAccessibilitySettings: "Restablecer todos los ajustes de accesibilidad",
118913
+ contrastInvertColors: "Invertir colores",
118914
+ contrastDark: "Contraste oscuro",
118915
+ contrastLight: "Contraste claro",
118916
+ textSizeNormal: "Texto normal",
118917
+ textSizeLarge: "Texto grande",
118918
+ textSizeLarger: "Texto más grande",
118919
+ spacingLight: "Espaciado ligero",
118920
+ spacingModerate: "Espaciado moderado",
118921
+ spacingHeavy: "Espaciado amplio",
118922
+ dyslexiaFont: "Fuente para dislexia",
118923
+ legibleFont: "Fuente legible",
118924
+ alignLeft: "Alinear a la izquierda",
118925
+ alignCenter: "Centrar",
118926
+ alignRight: "Alinear a la derecha",
118927
+ justify: "Justificar",
118928
+ saturationNormal: "Saturación normal",
118929
+ saturationHigh: "Alta saturación",
118930
+ saturationLow: "Baja saturación",
118931
+ resetButtonPosition: "Restablecer posición del botón",
118932
+ moveButtonToCorner: "Mover el botón a una esquina",
118933
+ moveButtonTopLeft: "Mover el botón a la esquina superior izquierda",
118934
+ moveButtonTopRight: "Mover el botón a la esquina superior derecha",
118935
+ moveButtonBottomLeft: "Mover el botón a la esquina inferior izquierda",
118936
+ moveButtonBottomRight: "Mover el botón a la esquina inferior derecha"
118937
+ },
118938
+ button: {
118939
+ openAccessibilityMenu: "Abrir el menú de accesibilidad",
118940
+ accessibilityIconAlt: "Accesibilidad",
118941
+ moveHint: "Usa las flechas arriba y abajo para mover este botón, y las flechas izquierda y derecha para cambiarlo de lado. Mantén pulsada Mayús para moverlo más rápido.",
118942
+ positionAnnouncement: "Botón de accesibilidad movido al borde {side, select, left {izquierdo} other {derecho}}, a {bottom} píxeles de la parte inferior."
118943
+ }
118944
+ };
118742
118945
  var es = {
118743
118946
  accessTabAddAccess: accessTabAddAccess$1,
118744
118947
  accessTabLabels: accessTabLabels$1,
@@ -119034,7 +119237,8 @@ var es = {
119034
119237
  virtualMachineAdminTab: virtualMachineAdminTab$1,
119035
119238
  virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$1,
119036
119239
  virtualMachineSecrets: virtualMachineSecrets$1,
119037
- virtualMachineNetworkSection: virtualMachineNetworkSection$1
119240
+ virtualMachineNetworkSection: virtualMachineNetworkSection$1,
119241
+ accessibility: accessibility$1
119038
119242
  };
119039
119243
 
119040
119244
  var accessTabAddAccess = {
@@ -120966,33 +121170,33 @@ var chatInputFormVoiceChatButton = {
120966
121170
  voiceRecord: "语音录制"
120967
121171
  };
120968
121172
  var chatPrivacyChatPrivacyToggle = {
120969
- toastPrivateModeOff: "私密模式已关闭。",
120970
- toastCouldNotTurnOff: "无法关闭私密模式,请重试。",
120971
- toastPrivateModeOnNoHistory: "私密模式已开启。此对话不会保存到历史记录,也不会用于记忆。",
120972
- toastCouldNotEnable: "无法启用私密模式,请重试。",
120973
- toastPrivateModeOnRemovedHistory: "私密模式已开启。此对话已从您的历史记录中移除。",
120974
- toastFailedToEnable: "启用私密模式失败,请重试。",
121173
+ toastPrivateModeOff: "无痕模式已关闭。",
121174
+ toastCouldNotTurnOff: "无法关闭无痕模式,请重试。",
121175
+ toastPrivateModeOnNoHistory: "无痕模式已开启。此对话不会保存到历史记录,也不会用于记忆。",
121176
+ toastCouldNotEnable: "无法启用无痕模式,请重试。",
121177
+ toastPrivateModeOnRemovedHistory: "无痕模式已开启。此对话已从您的历史记录中移除。",
121178
+ toastFailedToEnable: "启用无痕模式失败,请重试。",
120975
121179
  working: "处理中…",
120976
- ariaLockedByAgent: "私密模式已被此助手锁定开启,不记录任何对话历史。",
120977
- ariaPrivateOnForConversation: "此对话已开启私密模式,聊天内容不会被保存或用于记忆。",
120978
- ariaTurnOffPrivateMode: "关闭此对话的私密模式。",
120979
- ariaTurnOnMidConversation: "为此对话开启私密模式,此操作不可撤销。",
120980
- ariaTurnOnEmpty: "开启私密模式,此对话不会保存到历史记录或用于记忆。",
120981
- tooltipLockedByMentor: "此助手始终以私密模式运行——与其进行的对话不保留任何历史记录或记忆。",
120982
- tooltipLockedByTenant: "您的组织已默认启用私密模式——不保留任何历史记录或记忆。",
120983
- tooltipLockedGeneric: "私密模式已锁定开启——不保留任何历史记录或记忆。",
120984
- tooltipPrivateOnPostSend: "此对话已开启私密模式——聊天内容不会被保存或用于记忆。开始新对话以退出私密模式。",
120985
- tooltipTurnOff: "关闭私密模式——您的下一次对话将再次保存到历史记录。",
120986
- tooltipTurnOnMidConversation: "为本次对话的剩余部分开启私密模式。一旦开启将无法关闭——开始新对话以恢复历史记录保存。",
120987
- tooltipTurnOnEmpty: "开启私密模式——此对话不会保存到历史记录或用于记忆。",
120988
- privateMode: "私密模式",
120989
- dialogTitle: "为此对话启用私密模式?",
121180
+ ariaLockedByAgent: "无痕模式已被此助手锁定开启,不记录任何对话历史。",
121181
+ ariaPrivateOnForConversation: "此对话已开启无痕模式,聊天内容不会被保存或用于记忆。",
121182
+ ariaTurnOffPrivateMode: "关闭此对话的无痕模式。",
121183
+ ariaTurnOnMidConversation: "为此对话开启无痕模式,此操作不可撤销。",
121184
+ ariaTurnOnEmpty: "开启无痕模式,此对话不会保存到历史记录或用于记忆。",
121185
+ tooltipLockedByMentor: "此助手始终以无痕模式运行——与其进行的对话不保留任何历史记录或记忆。",
121186
+ tooltipLockedByTenant: "您的组织已默认启用无痕模式——不保留任何历史记录或记忆。",
121187
+ tooltipLockedGeneric: "无痕模式已锁定开启——不保留任何历史记录或记忆。",
121188
+ tooltipPrivateOnPostSend: "此对话已开启无痕模式——聊天内容不会被保存或用于记忆。开始新对话以退出无痕模式。",
121189
+ tooltipTurnOff: "关闭无痕模式——您的下一次对话将再次保存到历史记录。",
121190
+ tooltipTurnOnMidConversation: "为本次对话的剩余部分开启无痕模式。一旦开启将无法关闭——开始新对话以恢复历史记录保存。",
121191
+ tooltipTurnOnEmpty: "开启无痕模式——此对话不会保存到历史记录或用于记忆。",
121192
+ privateMode: "无痕模式",
121193
+ dialogTitle: "为此对话启用无痕模式?",
120990
121194
  dialogDescription: "此对话将从您的历史记录中移除,助手也将停止使用其中的早期内容。",
120991
- dialogDescriptionBold: "一旦开启,您将无法为此对话关闭私密模式",
121195
+ dialogDescriptionBold: "一旦开启,您将无法为此对话关闭无痕模式",
120992
121196
  dialogDescriptionSuffix: "如需再次保存历史记录,请开始新的对话。",
120993
121197
  cancel: "取消",
120994
121198
  enabling: "启用中…",
120995
- enablePrivateMode: "启用私密模式"
121199
+ enablePrivateMode: "启用无痕模式"
120996
121200
  };
120997
121201
  var chatStopStreamingButton = {
120998
121202
  stopStreaming: "停止流式输出"
@@ -122934,6 +123138,29 @@ var privacyTabLabels = {
122934
123138
  tooltip: "从 AI 生成的回复中删除 PII。可能会为流式回复增加轻微延迟。"
122935
123139
  }
122936
123140
  },
123141
+ subTabs: {
123142
+ piiFiltering: "PII Filtering",
123143
+ incognito: "Incognito"
123144
+ },
123145
+ incognito: {
123146
+ description: "Incognito keeps a conversation out of chat history and memory. Choose how it works for this agent.",
123147
+ groupAriaLabel: "Incognito policy",
123148
+ options: {
123149
+ users: {
123150
+ title: "Users Decide",
123151
+ description: "Users can turn Incognito on for any conversation. Otherwise, their chats are saved to history as usual."
123152
+ },
123153
+ always: {
123154
+ title: "Always Incognito",
123155
+ description: "Every conversation with this agent is incognito. Nothing is saved to chat history or memory — for anyone."
123156
+ },
123157
+ never: {
123158
+ title: "Never Incognito",
123159
+ description: "Incognito isn't available for this agent. Every conversation is saved to chat history; users who normally keep their chats incognito are saved anonymously instead."
123160
+ }
123161
+ }
123162
+ },
123163
+ noAccess: "You don't have permission to view this agent's privacy settings.",
122937
123164
  toasts: {
122938
123165
  updateSuccess: "隐私设置已更新",
122939
123166
  updateError: "更新隐私设置失败"
@@ -123095,16 +123322,16 @@ var profileCatalogInviteModal = {
123095
123322
  sendInvitationsFailed: "发送邀请失败,请重试。"
123096
123323
  };
123097
123324
  var profileChatPrivacyTab = {
123098
- sectionHeading: "默认私密模式",
123099
- sectionDescription: "选择与 AI 代理的对话默认如何记录。您可以在聊天标题中将任何单独的对话切换为私密模式——代理或您的组织也可以针对特定对话覆盖此设置。",
123325
+ sectionHeading: "默认无痕模式",
123326
+ sectionDescription: "选择与 AI 代理的对话默认如何记录。您可以在聊天标题中将任何单独的对话切换为无痕模式——代理或您的组织也可以针对特定对话覆盖此设置。",
123100
123327
  modeNormalLabel: "普通",
123101
123328
  modeNormalDescription: "对话会保存到您的历史记录并与您的账户关联。代理在同一对话中使用先前的轮次作为上下文。",
123102
123329
  modeAnonymizedLabel: "匿名",
123103
123330
  modeAnonymizedDescription: "对话会为 AI 上下文而保存,但会去除账户身份识别信息。代理仍会使用同一对话中的先前轮次。",
123104
- modeDisabledLabel: "禁用",
123331
+ modeDisabledLabel: "无痕",
123105
123332
  modeDisabledDescription: "不记录任何内容。每条消息都是单轮问答——代理无法引用之前的消息,即使在同一对话中也不例外。",
123106
- toastUpdated: "默认私密模式已更新",
123107
- toastFailed: "更新默认私密模式失败"
123333
+ toastUpdated: "默认无痕模式已更新",
123334
+ toastFailed: "更新默认无痕模式失败"
123108
123335
  };
123109
123336
  var profileCsvEditor = {
123110
123337
  title: "编辑 CSV 数据",
@@ -123784,19 +124011,15 @@ var settingsTabLabels = {
123784
124011
  removeAriaLabel: "移除图片"
123785
124012
  },
123786
124013
  enhancedDocRetrieval: {
123787
- label: "Enhanced document retrieval",
124014
+ label: "Enhanced Document Retrieval",
123788
124015
  tooltip: "Run multiple search queries per question to pull in more relevant documents. This setting has one value, so it applies to both in-app chat and the embed widget."
123789
124016
  },
123790
124017
  promptCaching: {
123791
- label: "Prompt caching",
124018
+ label: "Prompt Caching",
123792
124019
  tooltip: "Cache repeated prompt context to lower latency and cost on long conversations. This setting has one value, so it applies to both in-app chat and the embed widget."
123793
124020
  },
123794
- privateMode: {
123795
- label: "Enable private mode",
123796
- tooltip: "When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments. This setting has one value, so it applies to both in-app chat and the embed widget."
123797
- },
123798
124021
  smartDocRetrieval: {
123799
- label: "Smart document retrieval",
124022
+ label: "Smart Document Retrieval",
123800
124023
  tooltip: "The agent fetches documents only when it needs them, instead of searching the knowledge base on every turn. This setting has one value, so it applies to both in-app chat and the embed widget."
123801
124024
  }
123802
124025
  },
@@ -123844,14 +124067,14 @@ var settingsTabLabels = {
123844
124067
  capabilities: "Capabilities"
123845
124068
  },
123846
124069
  sections: {
123847
- chatExperience: "Chat experience",
124070
+ chatExperience: "Chat Experience",
123848
124071
  advanced: "Advanced",
123849
124072
  perSurface: "按界面功能",
123850
124073
  globalSettings: "全局功能"
123851
124074
  },
123852
124075
  surfaces: {
123853
- inAppChat: "In-app chat",
123854
- embedWidget: "Embed widget"
124076
+ inAppChat: "In-App Chat",
124077
+ embedWidget: "Embed Widget"
123855
124078
  },
123856
124079
  notes: {
123857
124080
  perSurface: "分别为应用内聊天和嵌入式挂件单独设置。",
@@ -124491,6 +124714,7 @@ var tabsPoliciestab = {
124491
124714
  browseResourcesLabel: "浏览资源"
124492
124715
  };
124493
124716
  var tabsPrivacyTab = {
124717
+ subTabsAriaLabel: "Privacy sub-categories",
124494
124718
  moreInfo: "更多信息",
124495
124719
  outputFilterAriaLabelEnabled: "输出过滤器已启用",
124496
124720
  outputFilterAriaLabelDisabled: "输出过滤器已禁用"
@@ -124579,7 +124803,6 @@ var tabsSettingsTab = {
124579
124803
  settingsSubCategoriesAriaLabel: "Settings sub-categories",
124580
124804
  enhancedDocRetrievalTooltipAriaLabel: "More info about enhanced document retrieval",
124581
124805
  promptCachingTooltipAriaLabel: "More info about prompt caching",
124582
- privateModeTooltipAriaLabel: "More info about enable private mode",
124583
124806
  smartDocRetrievalTooltipAriaLabel: "More info about smart document retrieval",
124584
124807
  toggleAriaLabel: "{label} {state}"
124585
124808
  };
@@ -126395,6 +126618,54 @@ var virtualMachineNetworkSection = {
126395
126618
  manageTitle: "虚拟机设置",
126396
126619
  manageDescription: "网络策略和虚拟机密钥由您组织中的所有智能体共享。"
126397
126620
  };
126621
+ var accessibility = {
126622
+ toolbar: {
126623
+ accessibilityMenu: "无障碍菜单",
126624
+ contrastPlus: "对比度 +",
126625
+ highlightLinks: "高亮链接",
126626
+ biggerText: "放大文字",
126627
+ textSpacing: "文字间距",
126628
+ pauseAnimations: "暂停动画",
126629
+ hideImages: "隐藏图片",
126630
+ dyslexiaFriendly: "阅读障碍友好",
126631
+ cursor: "光标",
126632
+ tooltips: "工具提示",
126633
+ lineHeight: "行高",
126634
+ textAlign: "文字对齐",
126635
+ saturation: "饱和度",
126636
+ resetAllAccessibilitySettings: "重置所有无障碍设置",
126637
+ contrastInvertColors: "反转颜色",
126638
+ contrastDark: "深色对比",
126639
+ contrastLight: "浅色对比",
126640
+ textSizeNormal: "正常文字",
126641
+ textSizeLarge: "大号文字",
126642
+ textSizeLarger: "更大文字",
126643
+ spacingLight: "轻度间距",
126644
+ spacingModerate: "适中间距",
126645
+ spacingHeavy: "宽松间距",
126646
+ dyslexiaFont: "阅读障碍字体",
126647
+ legibleFont: "易读字体",
126648
+ alignLeft: "左对齐",
126649
+ alignCenter: "居中对齐",
126650
+ alignRight: "右对齐",
126651
+ justify: "两端对齐",
126652
+ saturationNormal: "正常饱和度",
126653
+ saturationHigh: "高饱和度",
126654
+ saturationLow: "低饱和度",
126655
+ resetButtonPosition: "重置按钮位置",
126656
+ moveButtonToCorner: "将按钮移到角落",
126657
+ moveButtonTopLeft: "将按钮移到左上角",
126658
+ moveButtonTopRight: "将按钮移到右上角",
126659
+ moveButtonBottomLeft: "将按钮移到左下角",
126660
+ moveButtonBottomRight: "将按钮移到右下角"
126661
+ },
126662
+ button: {
126663
+ openAccessibilityMenu: "打开无障碍菜单",
126664
+ accessibilityIconAlt: "无障碍",
126665
+ moveHint: "使用上下方向键移动此按钮,使用左右方向键切换到另一侧。按住 Shift 键可更快移动。",
126666
+ positionAnnouncement: "无障碍按钮已移到{side, select, left {左} other {右}}边缘,距底部 {bottom} 像素。"
126667
+ }
126668
+ };
126398
126669
  var zh = {
126399
126670
  accessTabAddAccess: accessTabAddAccess,
126400
126671
  accessTabLabels: accessTabLabels,
@@ -126690,7 +126961,8 @@ var zh = {
126690
126961
  virtualMachineAdminTab: virtualMachineAdminTab,
126691
126962
  virtualMachineNetworkPolicies: virtualMachineNetworkPolicies,
126692
126963
  virtualMachineSecrets: virtualMachineSecrets,
126693
- virtualMachineNetworkSection: virtualMachineNetworkSection
126964
+ virtualMachineNetworkSection: virtualMachineNetworkSection,
126965
+ accessibility: accessibility
126694
126966
  };
126695
126967
 
126696
126968
  /**
@@ -181330,7 +181602,7 @@ const PaginationContent = React.forwardRef(({ className, ...props }, ref) => (js
181330
181602
  PaginationContent.displayName = 'PaginationContent';
181331
181603
  const PaginationItem = React.forwardRef(({ className, ...props }, ref) => jsx("li", { ref: ref, className: cn('', className), ...props }));
181332
181604
  PaginationItem.displayName = 'PaginationItem';
181333
- const PaginationLink = ({ className, isActive, size = 'icon', ...props }) => (jsx("a", { "aria-current": isActive ? 'page' : undefined, className: cn(buttonVariants({
181605
+ const PaginationLink = ({ className, isActive, size = 'icon', ...props }) => (jsx("a", { "aria-current": isActive ? 'page' : undefined, className: cn(buttonVariants$1({
181334
181606
  variant: isActive ? 'outline' : 'ghost',
181335
181607
  size,
181336
181608
  }), className), ...props }));
@@ -181595,7 +181867,7 @@ const pick = (name, fallback) => { var _a; return ((_a = read(name)) !== null &&
181595
181867
  const CHAT_PRIVACY_SUPPORTED = !!read('ChatPrivacyModeEnum') && !!read('CHAT_PRIVACY_MODES');
181596
181868
  const ChatPrivacyModeEnum = read('ChatPrivacyModeEnum');
181597
181869
  const CHAT_PRIVACY_MODES = ((_a$1 = read('CHAT_PRIVACY_MODES')) !== null && _a$1 !== void 0 ? _a$1 : []);
181598
- read('chatPrivacyApiSlice');
181870
+ const chatPrivacyApiSlice = read('chatPrivacyApiSlice');
181599
181871
  const useGetTenantChatPrivacyConfigQuery = pick('useGetTenantChatPrivacyConfigQuery', noopQuery);
181600
181872
  const useUpdateTenantChatPrivacyConfigMutation = pick('useUpdateTenantChatPrivacyConfigMutation', noopMutation);
181601
181873
  pick('useGetChatPrivacyEffectiveQuery', noopQuery);
@@ -181680,15 +181952,15 @@ function ChatPrivacyTab({ org, username }) {
181680
181952
  return (jsxs("div", { className: "space-y-4", "data-testid": "chat-privacy-tab-body", children: [jsxs("div", { children: [jsx("h4", { className: "text-sm font-semibold text-gray-700 dark:text-gray-300 tracking-wide", children: t('profileChatPrivacyTab.sectionHeading') }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: t('profileChatPrivacyTab.sectionDescription') })] }), jsx("div", { className: "space-y-3", children: CHAT_PRIVACY_MODES.map((mode) => {
181681
181953
  const { labelKey, descriptionKey, icon: Icon } = MODE_COPY[mode];
181682
181954
  const isSelected = pending === mode;
181683
- return (jsxs("button", { type: "button", "aria-pressed": isSelected, "data-testid": `chat-privacy-mode-${mode}`, "data-state": isSelected ? 'selected' : 'unselected', onClick: () => void handleSelect(mode), disabled: isUpdating || isPreview, className: cn('w-full flex items-start gap-3 rounded-lg border px-5 py-4 text-left transition-colors', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2', 'disabled:cursor-not-allowed disabled:opacity-60', isSelected
181955
+ return (jsxs("button", { type: "button", "aria-pressed": isSelected, "data-testid": `chat-privacy-mode-${mode}`, "data-state": isSelected ? 'selected' : 'unselected', onClick: () => void handleSelect(mode), disabled: isUpdating || isPreview, className: cn('w-full flex flex-col gap-1 rounded-lg border px-5 py-4 text-left transition-colors', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2', 'disabled:cursor-not-allowed disabled:opacity-60', isSelected
181684
181956
  ? 'border-blue-500 bg-blue-50/40 dark:bg-blue-950/20'
181685
- : 'border-gray-200 hover:bg-gray-50 dark:border-gray-800 dark:hover:bg-gray-800/40'), children: [jsx(Icon, { className: cn('h-5 w-5 mt-0.5 flex-shrink-0', isSelected
181686
- ? 'text-blue-600 dark:text-blue-400'
181687
- : 'text-gray-400 dark:text-gray-500'), "aria-hidden": "true" }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "flex items-center gap-2", children: jsx("span", { className: cn('text-sm font-medium', isSelected
181688
- ? 'text-blue-900 dark:text-blue-100'
181689
- : 'text-gray-900 dark:text-gray-100'), children: t(labelKey) }) }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: t(descriptionKey) })] }), jsx("span", { "aria-hidden": "true", className: cn('h-5 w-5 flex items-center justify-center rounded-full border-2 flex-shrink-0 mt-0.5 transition-colors', isSelected
181690
- ? 'border-blue-500 bg-blue-500'
181691
- : 'border-gray-300 dark:border-gray-600'), children: isSelected && jsx(Check, { className: "h-3 w-3 text-white", strokeWidth: 3 }) })] }, mode));
181957
+ : 'border-gray-200 hover:bg-gray-50 dark:border-gray-800 dark:hover:bg-gray-800/40'), children: [jsxs("span", { className: "flex w-full items-center gap-3", children: [jsx(Icon, { className: cn('h-4 w-4 flex-shrink-0', isSelected
181958
+ ? 'text-blue-600 dark:text-blue-400'
181959
+ : 'text-gray-400 dark:text-gray-500'), "aria-hidden": "true" }), jsx("span", { className: cn('min-w-0 flex-1 text-sm font-medium', isSelected
181960
+ ? 'text-blue-900 dark:text-blue-100'
181961
+ : 'text-gray-900 dark:text-gray-100'), children: t(labelKey) }), jsx("span", { "aria-hidden": "true", className: cn('h-5 w-5 flex items-center justify-center rounded-full border-2 flex-shrink-0 transition-colors', isSelected
181962
+ ? 'border-blue-500 bg-blue-500'
181963
+ : 'border-gray-300 dark:border-gray-600'), children: isSelected && jsx(Check, { className: "h-3 w-3 text-white", strokeWidth: 3 }) })] }), jsx("p", { className: "pl-7 pr-8 text-xs text-gray-500 dark:text-gray-400", children: t(descriptionKey) })] }, mode));
181692
181964
  }) })] }));
181693
181965
  }
181694
181966
 
@@ -271469,8 +271741,8 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
271469
271741
  months: cn('flex gap-4 flex-col md:flex-row relative', defaultClassNames.months),
271470
271742
  month: cn('flex flex-col w-full gap-4', defaultClassNames.month),
271471
271743
  nav: cn('flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between', defaultClassNames.nav),
271472
- button_previous: cn(buttonVariants({ variant: buttonVariant }), 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none', defaultClassNames.button_previous),
271473
- button_next: cn(buttonVariants({ variant: buttonVariant }), 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none', defaultClassNames.button_next),
271744
+ button_previous: cn(buttonVariants$1({ variant: buttonVariant }), 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none', defaultClassNames.button_previous),
271745
+ button_next: cn(buttonVariants$1({ variant: buttonVariant }), 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none', defaultClassNames.button_next),
271474
271746
  month_caption: cn('flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)', defaultClassNames.month_caption),
271475
271747
  dropdowns: cn('w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5', defaultClassNames.dropdowns),
271476
271748
  dropdown_root: cn('relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md', defaultClassNames.dropdown_root),
@@ -273921,7 +274193,7 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
273921
274193
  const { data: memsearchStatus, isError: isMemsearchStatusError } = useGetMemsearchStatusQuery({ org: tenant, userId: username }, { skip: !enableMemoryTab });
273922
274194
  // Show memory tab if enabled for this platform AND memsearch is enabled (or status API is unavailable)
273923
274195
  const isMemoryEnabled = enableMemoryTab && (isMemsearchStatusError || ((_a = memsearchStatus === null || memsearchStatus === void 0 ? void 0 : memsearchStatus.enable_memsearch) !== null && _a !== void 0 ? _a : false));
273924
- // The Private Mode tab only appears when the tenant has opted into user-controlled
274196
+ // The Privacy tab only appears when the tenant has opted into user-controlled
273925
274197
  // chat privacy. Backend returns { allow_user_chat_privacy_control: boolean }.
273926
274198
  const { data: chatPrivacyConfig } = useGetTenantChatPrivacyConfigQuery({ org: tenant, userId: username }, { skip: !tenant || !username });
273927
274199
  const isChatPrivacyEnabled = !!(chatPrivacyConfig === null || chatPrivacyConfig === void 0 ? void 0 : chatPrivacyConfig.allow_user_chat_privacy_control);
@@ -274003,7 +274275,7 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
274003
274275
  // id stays as 'privacy' so callers passing `targetTab='privacy'` and
274004
274276
  // any test selectors targeting #panel-privacy keep working. The
274005
274277
  // user-visible `label` is "Privacy"; the chat-privacy feature itself
274006
- // is still called "Private Mode" within the tab's content. It sits with
274278
+ // is still called "Incognito" within the tab's content. It sits with
274007
274279
  // the account controls, just above Security.
274008
274280
  ...(isChatPrivacyEnabled
274009
274281
  ? [
@@ -283495,9 +283767,9 @@ const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => (jsx
283495
283767
  AlertDialogTitle.displayName = Title2.displayName;
283496
283768
  const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => (jsx(Description2, { ref: ref, className: cn('text-muted-foreground text-sm', className), ...props })));
283497
283769
  AlertDialogDescription.displayName = Description2.displayName;
283498
- const AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => (jsx(Action, { ref: ref, className: cn(buttonVariants(), className), ...props })));
283770
+ const AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => (jsx(Action, { ref: ref, className: cn(buttonVariants$1(), className), ...props })));
283499
283771
  AlertDialogAction.displayName = Action.displayName;
283500
- const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => (jsx(Cancel, { ref: ref, className: cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className), ...props })));
283772
+ const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => (jsx(Cancel, { ref: ref, className: cn(buttonVariants$1({ variant: 'outline' }), 'mt-2 sm:mt-0', className), ...props })));
283501
283773
  AlertDialogCancel.displayName = Cancel.displayName;
283502
283774
 
283503
283775
  const hostedDomainStatus = (row) => {
@@ -295511,6 +295783,568 @@ var projectInstructionsModal = /*#__PURE__*/Object.freeze({
295511
295783
  ProjectInstructionsModal: ProjectInstructionsModal
295512
295784
  });
295513
295785
 
295786
+ const defaultSettings = {
295787
+ invertColors: false,
295788
+ highlightLinks: false,
295789
+ textSize: 'normal',
295790
+ textSpacing: 'none',
295791
+ pauseAnimations: false,
295792
+ hideImages: false,
295793
+ dyslexiaFont: 'normal',
295794
+ customCursor: false,
295795
+ tooltips: false,
295796
+ lineHeight: false,
295797
+ textAlign: 'normal',
295798
+ saturation: 'normal',
295799
+ contrastMode: 'normal',
295800
+ };
295801
+ const AccessibilityContext = createContext(undefined);
295802
+ // localStorage throws in sandboxed iframes and when site data is blocked; settings then live in memory.
295803
+ function storeSettings(settings) {
295804
+ try {
295805
+ if (settings)
295806
+ localStorage.setItem('accessibility-settings', JSON.stringify(settings));
295807
+ else
295808
+ localStorage.removeItem('accessibility-settings');
295809
+ }
295810
+ catch (_a) { }
295811
+ }
295812
+ function AccessibilityProvider({ children }) {
295813
+ const [settings, setSettings] = useState(defaultSettings);
295814
+ const [isToolbarOpen, setIsToolbarOpen] = useState(false);
295815
+ useEffect(() => {
295816
+ setSettings(defaultSettings);
295817
+ storeSettings(null);
295818
+ }, []);
295819
+ useEffect(() => {
295820
+ const root = document.documentElement;
295821
+ if (settings.contrastMode === 'invert') {
295822
+ root.style.setProperty('--accessibility-invert', 'invert(1)');
295823
+ document.body.classList.add('accessibility-invert');
295824
+ }
295825
+ else {
295826
+ root.style.setProperty('--accessibility-invert', 'invert(0)');
295827
+ document.body.classList.remove('accessibility-invert');
295828
+ }
295829
+ const fontSizeMap = {
295830
+ normal: '1',
295831
+ large: '1.2',
295832
+ larger: '1.4',
295833
+ };
295834
+ root.style.setProperty('--accessibility-font-size', fontSizeMap[settings.textSize]);
295835
+ document.body.classList.toggle('accessibility-text-size', settings.textSize !== 'normal');
295836
+ const spacingMap = {
295837
+ none: { letter: 'normal', word: 'normal' },
295838
+ light: { letter: '0.05em', word: '0.1em' },
295839
+ moderate: { letter: '0.1em', word: '0.2em' },
295840
+ heavy: { letter: '0.15em', word: '0.3em' },
295841
+ };
295842
+ const spacing = spacingMap[settings.textSpacing];
295843
+ root.style.setProperty('--accessibility-letter-spacing', spacing.letter);
295844
+ root.style.setProperty('--accessibility-word-spacing', spacing.word);
295845
+ document.body.classList.toggle('accessibility-text-spacing', settings.textSpacing !== 'none');
295846
+ if (settings.pauseAnimations) {
295847
+ document.body.classList.add('accessibility-pause-animations');
295848
+ }
295849
+ else {
295850
+ document.body.classList.remove('accessibility-pause-animations');
295851
+ }
295852
+ if (settings.lineHeight) {
295853
+ root.style.setProperty('--accessibility-line-height', '1.8');
295854
+ document.body.classList.add('accessibility-line-height');
295855
+ }
295856
+ else {
295857
+ root.style.setProperty('--accessibility-line-height', '1.5');
295858
+ document.body.classList.remove('accessibility-line-height');
295859
+ }
295860
+ const saturationMap = {
295861
+ normal: 'saturate(1)',
295862
+ high: 'saturate(1.8)',
295863
+ low: 'saturate(0.3)',
295864
+ };
295865
+ root.style.setProperty('--accessibility-saturation', saturationMap[settings.saturation]);
295866
+ document.body.classList.toggle('accessibility-saturation', settings.saturation !== 'normal');
295867
+ document.body.classList.toggle('accessibility-custom-cursor', settings.customCursor);
295868
+ const body = document.body;
295869
+ body.classList.toggle('accessibility-highlight-links', settings.highlightLinks);
295870
+ body.classList.toggle('accessibility-hide-images', settings.hideImages);
295871
+ body.classList.toggle('accessibility-dyslexia-friendly', settings.dyslexiaFont === 'dyslexia');
295872
+ body.classList.toggle('accessibility-legible-font', settings.dyslexiaFont === 'legible');
295873
+ body.classList.toggle('accessibility-pause-animations', settings.pauseAnimations);
295874
+ body.classList.toggle('accessibility-tooltips', settings.tooltips);
295875
+ body.classList.remove('accessibility-text-left', 'accessibility-text-center', 'accessibility-text-right', 'accessibility-text-justify');
295876
+ if (settings.textAlign !== 'normal') {
295877
+ body.classList.add(`accessibility-text-${settings.textAlign}`);
295878
+ }
295879
+ body.classList.remove('accessibility-high-contrast', 'accessibility-dark-contrast', 'accessibility-light-contrast');
295880
+ if (settings.contrastMode === 'dark') {
295881
+ body.classList.add('accessibility-dark-contrast');
295882
+ }
295883
+ else if (settings.contrastMode === 'light') {
295884
+ body.classList.add('accessibility-light-contrast');
295885
+ }
295886
+ }, [settings]);
295887
+ const updateSetting = (key, value) => {
295888
+ const newSettings = { ...settings, [key]: value };
295889
+ setSettings(newSettings);
295890
+ storeSettings(newSettings);
295891
+ };
295892
+ const resetSettings = () => {
295893
+ setSettings(defaultSettings);
295894
+ storeSettings(null);
295895
+ };
295896
+ return (jsx(AccessibilityContext.Provider, { value: {
295897
+ settings,
295898
+ updateSetting,
295899
+ resetSettings,
295900
+ isToolbarOpen,
295901
+ setIsToolbarOpen,
295902
+ }, children: children }));
295903
+ }
295904
+ function useAccessibility() {
295905
+ const context = useContext(AccessibilityContext);
295906
+ if (context === undefined) {
295907
+ throw new Error('useAccessibility must be used within an AccessibilityProvider');
295908
+ }
295909
+ return context;
295910
+ }
295911
+
295912
+ // Mirrors the host app's shadcn v4 button rather than ../ui/button so the
295913
+ // menu keeps its exact look: ../ui/button's `[&_svg]:size-4` would shrink the
295914
+ // h-5 icons and the 44px accessibility icon.
295915
+ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
295916
+ variants: {
295917
+ variant: {
295918
+ default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
295919
+ outline: 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',
295920
+ ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
295921
+ },
295922
+ size: {
295923
+ default: 'h-9 px-4 py-2 has-[>svg]:px-3',
295924
+ icon: 'size-9',
295925
+ },
295926
+ },
295927
+ defaultVariants: {
295928
+ variant: 'default',
295929
+ size: 'default',
295930
+ },
295931
+ });
295932
+ function AccessibilityButton({ className, variant, size, ...props }) {
295933
+ return (jsx("button", { "data-slot": "button", className: cn(buttonVariants({ variant, size, className })), ...props }));
295934
+ }
295935
+
295936
+ function AccessibilityOption({ icon, label, isActive, onClick, subtext, options, activeIndex, }) {
295937
+ return (jsxs(AccessibilityButton, { onClick: onClick, variant: isActive ? 'default' : 'outline', className: `relative flex h-24 w-full flex-col items-center justify-center gap-1 text-xs font-medium ${isActive
295938
+ ? 'border-[#38A1E5] bg-[#38A1E5] text-white hover:bg-[#D0E0FF] hover:text-gray-800'
295939
+ : 'border-gray-200 bg-white text-gray-700 hover:bg-gray-50'}`, children: [isActive && (jsx("div", { className: "absolute top-2 right-2 flex h-4 w-4 items-center justify-center rounded-full bg-[#38A1E5]", children: jsx("div", { className: "h-2 w-2 rounded-full bg-white" }) })), jsx("div", { className: "text-lg", children: icon }), jsx("span", { className: "text-center leading-tight", children: label }), isActive && subtext && (jsxs(Fragment$1, { children: [jsx("span", { className: "text-xs font-medium text-[#38A1E5]", children: subtext }), options && options.length > 0 && (jsx("div", { className: "mt-1 flex gap-1", children: options.map((_, index) => (jsx("div", { className: `h-1 w-3 rounded-full ${index === activeIndex ? 'bg-[#38A1E5]' : 'bg-gray-300'}` }, index))) }))] }))] }));
295940
+ }
295941
+ const BUTTON_CORNERS = [
295942
+ { corner: 'top-left', labelKey: 'accessibility.toolbar.moveButtonTopLeft', Icon: ArrowUpLeft },
295943
+ { corner: 'top-right', labelKey: 'accessibility.toolbar.moveButtonTopRight', Icon: ArrowUpRight },
295944
+ {
295945
+ corner: 'bottom-left',
295946
+ labelKey: 'accessibility.toolbar.moveButtonBottomLeft',
295947
+ Icon: ArrowDownLeft,
295948
+ },
295949
+ {
295950
+ corner: 'bottom-right',
295951
+ labelKey: 'accessibility.toolbar.moveButtonBottomRight',
295952
+ Icon: ArrowDownRight,
295953
+ },
295954
+ ];
295955
+ function AccessibilityToolbar({ isButtonPositionCustom = false, onResetButtonPosition, onMoveButtonToCorner, } = {}) {
295956
+ const t = useT();
295957
+ const { settings, updateSetting, resetSettings, isToolbarOpen, setIsToolbarOpen } = useAccessibility();
295958
+ if (!isToolbarOpen)
295959
+ return null;
295960
+ const cycleContrastMode = () => {
295961
+ const modes = ['normal', 'invert', 'dark', 'light'];
295962
+ const currentIndex = modes.indexOf(settings.contrastMode);
295963
+ const nextIndex = (currentIndex + 1) % modes.length;
295964
+ updateSetting('contrastMode', modes[nextIndex]);
295965
+ };
295966
+ const cycleTextSize = () => {
295967
+ const sizes = ['normal', 'large', 'larger'];
295968
+ const currentIndex = sizes.indexOf(settings.textSize);
295969
+ const nextIndex = (currentIndex + 1) % sizes.length;
295970
+ updateSetting('textSize', sizes[nextIndex]);
295971
+ };
295972
+ const cycleTextSpacing = () => {
295973
+ const spacings = ['none', 'light', 'moderate', 'heavy'];
295974
+ const currentIndex = spacings.indexOf(settings.textSpacing);
295975
+ const nextIndex = (currentIndex + 1) % spacings.length;
295976
+ updateSetting('textSpacing', spacings[nextIndex]);
295977
+ };
295978
+ const cycleDyslexiaFont = () => {
295979
+ const fonts = ['normal', 'dyslexia', 'legible'];
295980
+ const currentIndex = fonts.indexOf(settings.dyslexiaFont);
295981
+ const nextIndex = (currentIndex + 1) % fonts.length;
295982
+ updateSetting('dyslexiaFont', fonts[nextIndex]);
295983
+ };
295984
+ const cycleTextAlign = () => {
295985
+ const aligns = ['normal', 'left', 'center', 'right', 'justify'];
295986
+ const currentIndex = aligns.indexOf(settings.textAlign);
295987
+ const nextIndex = (currentIndex + 1) % aligns.length;
295988
+ updateSetting('textAlign', aligns[nextIndex]);
295989
+ };
295990
+ const cycleSaturation = () => {
295991
+ const saturations = ['normal', 'high', 'low'];
295992
+ const currentIndex = saturations.indexOf(settings.saturation);
295993
+ const nextIndex = (currentIndex + 1) % saturations.length;
295994
+ updateSetting('saturation', saturations[nextIndex]);
295995
+ };
295996
+ const getContrastLabel = () => {
295997
+ const labels = {
295998
+ normal: t('accessibility.toolbar.contrastPlus'),
295999
+ invert: t('accessibility.toolbar.contrastInvertColors'),
296000
+ dark: t('accessibility.toolbar.contrastDark'),
296001
+ light: t('accessibility.toolbar.contrastLight'),
296002
+ };
296003
+ return labels[settings.contrastMode];
296004
+ };
296005
+ const getTextSizeLabel = () => {
296006
+ const labels = {
296007
+ normal: t('accessibility.toolbar.textSizeNormal'),
296008
+ large: t('accessibility.toolbar.textSizeLarge'),
296009
+ larger: t('accessibility.toolbar.textSizeLarger'),
296010
+ };
296011
+ return labels[settings.textSize];
296012
+ };
296013
+ const getTextSpacingLabel = () => {
296014
+ const labels = {
296015
+ none: t('accessibility.toolbar.textSpacing'),
296016
+ light: t('accessibility.toolbar.spacingLight'),
296017
+ moderate: t('accessibility.toolbar.spacingModerate'),
296018
+ heavy: t('accessibility.toolbar.spacingHeavy'),
296019
+ };
296020
+ return labels[settings.textSpacing];
296021
+ };
296022
+ const getDyslexiaLabel = () => {
296023
+ const labels = {
296024
+ normal: t('accessibility.toolbar.dyslexiaFriendly'),
296025
+ dyslexia: t('accessibility.toolbar.dyslexiaFont'),
296026
+ legible: t('accessibility.toolbar.legibleFont'),
296027
+ };
296028
+ return labels[settings.dyslexiaFont];
296029
+ };
296030
+ const getTextAlignLabel = () => {
296031
+ const labels = {
296032
+ normal: t('accessibility.toolbar.textAlign'),
296033
+ left: t('accessibility.toolbar.alignLeft'),
296034
+ center: t('accessibility.toolbar.alignCenter'),
296035
+ right: t('accessibility.toolbar.alignRight'),
296036
+ justify: t('accessibility.toolbar.justify'),
296037
+ };
296038
+ return labels[settings.textAlign];
296039
+ };
296040
+ const getSaturationLabel = () => {
296041
+ const labels = {
296042
+ normal: t('accessibility.toolbar.saturationNormal'),
296043
+ high: t('accessibility.toolbar.saturationHigh'),
296044
+ low: t('accessibility.toolbar.saturationLow'),
296045
+ };
296046
+ return labels[settings.saturation];
296047
+ };
296048
+ const getTextAlignIcon = () => {
296049
+ const icons = {
296050
+ normal: jsx(AlignLeft, { className: "h-5 w-5" }),
296051
+ left: jsx(AlignLeft, { className: "h-5 w-5" }),
296052
+ center: jsx(AlignCenter, { className: "h-5 w-5" }),
296053
+ right: jsx(AlignRight, { className: "h-5 w-5" }),
296054
+ justify: jsx(AlignJustify, { className: "h-5 w-5" }),
296055
+ };
296056
+ return icons[settings.textAlign];
296057
+ };
296058
+ const toggleTooltips = () => {
296059
+ updateSetting('tooltips', !settings.tooltips);
296060
+ };
296061
+ const toggleCustomCursor = () => {
296062
+ updateSetting('customCursor', !settings.customCursor);
296063
+ };
296064
+ return (jsx(Fragment$1, { children: jsxs("div", { className: "fixed top-0 right-0 z-50 flex h-full w-80 flex-col bg-white shadow-2xl", children: [jsxs("div", { className: "flex flex-shrink-0 items-center justify-between bg-gradient-to-r from-[#38A1E5] to-[#7284FF] p-4 text-white", children: [jsx("h2", { className: "text-lg font-semibold", children: t('accessibility.toolbar.accessibilityMenu') }), jsx(AccessibilityButton, { onClick: () => setIsToolbarOpen(false), variant: "ghost", size: "icon", className: "text-white hover:bg-transparent hover:text-white", children: jsx(X$1, { className: "h-5 w-5" }) })] }), jsxs("div", { className: "flex flex-1 flex-col overflow-y-auto bg-white p-4", onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: "grid flex-1 grid-cols-2 gap-3", children: [jsx(AccessibilityOption, { icon: jsx(Circle, { className: "h-5 w-5" }), label: t('accessibility.toolbar.contrastPlus'), isActive: settings.contrastMode !== 'normal', onClick: cycleContrastMode, subtext: settings.contrastMode !== 'normal' ? getContrastLabel() : undefined, options: ['normal', 'invert', 'dark', 'light'], activeIndex: ['normal', 'invert', 'dark', 'light'].indexOf(settings.contrastMode) }), jsx(AccessibilityOption, { icon: jsx(Link$1, { className: "h-5 w-5" }), label: t('accessibility.toolbar.highlightLinks'), isActive: settings.highlightLinks, onClick: () => updateSetting('highlightLinks', !settings.highlightLinks) }), jsx(AccessibilityOption, { icon: jsx(Type, { className: "h-5 w-5" }), label: t('accessibility.toolbar.biggerText'), isActive: settings.textSize !== 'normal', onClick: cycleTextSize, subtext: settings.textSize !== 'normal' ? getTextSizeLabel() : undefined, options: ['normal', 'large', 'larger'], activeIndex: ['normal', 'large', 'larger'].indexOf(settings.textSize) }), jsx(AccessibilityOption, { icon: jsx(Minus, { className: "h-5 w-5 rotate-90" }), label: t('accessibility.toolbar.textSpacing'), isActive: settings.textSpacing !== 'none', onClick: cycleTextSpacing, subtext: settings.textSpacing !== 'none' ? getTextSpacingLabel() : undefined, options: ['none', 'light', 'moderate', 'heavy'], activeIndex: ['none', 'light', 'moderate', 'heavy'].indexOf(settings.textSpacing) }), jsx(AccessibilityOption, { icon: jsx(Pause, { className: "h-5 w-5" }), label: t('accessibility.toolbar.pauseAnimations'), isActive: settings.pauseAnimations, onClick: () => updateSetting('pauseAnimations', !settings.pauseAnimations) }), jsx(AccessibilityOption, { icon: jsx(ImageOff, { className: "h-5 w-5" }), label: t('accessibility.toolbar.hideImages'), isActive: settings.hideImages, onClick: () => updateSetting('hideImages', !settings.hideImages) }), jsx(AccessibilityOption, { icon: jsx("span", { className: "text-sm font-bold", children: "Df" }), label: t('accessibility.toolbar.dyslexiaFriendly'), isActive: settings.dyslexiaFont !== 'normal', onClick: cycleDyslexiaFont, subtext: settings.dyslexiaFont !== 'normal' ? getDyslexiaLabel() : undefined, options: ['normal', 'dyslexia', 'legible'], activeIndex: ['normal', 'dyslexia', 'legible'].indexOf(settings.dyslexiaFont) }), jsx(AccessibilityOption, { icon: jsx(MousePointer, { className: "h-5 w-5" }), label: t('accessibility.toolbar.cursor'), isActive: settings.customCursor, onClick: toggleCustomCursor }), jsx(AccessibilityOption, { icon: jsx(MessageSquare, { className: "h-5 w-5" }), label: t('accessibility.toolbar.tooltips'), isActive: settings.tooltips, onClick: toggleTooltips }), jsx(AccessibilityOption, { icon: jsxs("div", { className: "flex flex-col gap-0.5", children: [jsx("div", { className: "h-0.5 w-4 bg-current" }), jsx("div", { className: "h-0.5 w-4 bg-current" }), jsx("div", { className: "h-0.5 w-4 bg-current" })] }), label: t('accessibility.toolbar.lineHeight'), isActive: settings.lineHeight, onClick: () => updateSetting('lineHeight', !settings.lineHeight) }), jsx(AccessibilityOption, { icon: getTextAlignIcon(), label: t('accessibility.toolbar.textAlign'), isActive: settings.textAlign !== 'normal', onClick: cycleTextAlign, subtext: settings.textAlign !== 'normal' ? getTextAlignLabel() : undefined, options: ['normal', 'left', 'center', 'right', 'justify'], activeIndex: ['normal', 'left', 'center', 'right', 'justify'].indexOf(settings.textAlign) }), jsx(AccessibilityOption, { icon: jsx(Droplets, { className: "h-5 w-5" }), label: t('accessibility.toolbar.saturation'), isActive: settings.saturation !== 'normal', onClick: cycleSaturation, subtext: settings.saturation !== 'normal' ? getSaturationLabel() : undefined, options: ['normal', 'high', 'low'], activeIndex: ['normal', 'high', 'low'].indexOf(settings.saturation) })] }), onMoveButtonToCorner && (jsxs("div", { role: "group", "aria-labelledby": "accessibility-move-button-label", className: "mt-4 flex flex-shrink-0 items-center justify-between gap-2", children: [jsx("span", { id: "accessibility-move-button-label", className: "text-xs font-medium text-gray-700", children: t('accessibility.toolbar.moveButtonToCorner') }), jsx("div", { className: "flex gap-1", children: BUTTON_CORNERS.map(({ corner, labelKey, Icon }) => (jsx(AccessibilityButton, { onClick: () => onMoveButtonToCorner(corner), variant: "outline", size: "icon", "aria-label": t(labelKey), title: t(labelKey), className: "h-8 w-8 border-gray-200 bg-white text-gray-700 hover:bg-gray-50", children: jsx(Icon, { className: "h-4 w-4" }) }, corner))) })] })), isButtonPositionCustom && onResetButtonPosition && (jsxs(AccessibilityButton, { onClick: onResetButtonPosition, variant: "outline", className: "mt-4 w-full flex-shrink-0 border-gray-200 bg-white py-3 text-gray-700 hover:bg-gray-50", children: [jsx(RotateCcw, { className: "mr-2 h-4 w-4" }), t('accessibility.toolbar.resetButtonPosition')] })), jsxs(AccessibilityButton, { onClick: () => {
296065
+ resetSettings();
296066
+ onResetButtonPosition === null || onResetButtonPosition === void 0 ? void 0 : onResetButtonPosition();
296067
+ }, className: "mt-4 w-full flex-shrink-0 bg-gradient-to-r from-[#38A1E5] to-[#7284FF] py-3 text-white shadow-lg hover:from-[#2E8BC7] hover:to-[#0066DD]", children: [jsx(RotateCcw, { className: "mr-2 h-4 w-4" }), t('accessibility.toolbar.resetAllAccessibilitySettings')] })] })] }) }));
296068
+ }
296069
+
296070
+ function AccessibilityIcon({ className, title }) {
296071
+ return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: 44, height: 44, viewBox: "0 0 60 60", fill: "none", role: "img", "aria-label": title, className: className, children: jsx("path", { d: "M30,4.42857143 C44.12271,4.42857143 55.5714286,15.87729 55.5714286,30 C55.5714286,44.12271 44.12271,55.5714286 30,55.5714286 C15.87729,55.5714286 4.42857143,44.12271 4.42857143,30 C4.42857143,15.87729 15.87729,4.42857143 30,4.42857143 Z M30,6.42857143 C16.9818595,6.42857143 6.42857143,16.9818595 6.42857143,30 C6.42857143,43.0181405 16.9818595,53.5714286 30,53.5714286 C43.0181405,53.5714286 53.5714286,43.0181405 53.5714286,30 C53.5714286,16.9818595 43.0181405,6.42857143 30,6.42857143 Z M40.5936329,24.636146 C40.8208154,24.6942382 41.032297,24.8027599 41.212927,24.9537151 C41.3927444,25.1040671 41.5372605,25.2927156 41.6362456,25.506032 C41.7348561,25.7185411 41.7857143,25.9504498 41.7857143,26.1964545 C41.7780029,26.5779794 41.6395197,26.9452414 41.3935596,27.2352841 C41.1463511,27.5267988 40.8059352,27.7221149 40.4376358,27.7856619 C38.1921773,28.2017648 35.924387,28.4827808 33.6481064,28.6271294 C33.504948,28.636723 33.3651112,28.6758744 33.236922,28.7423749 C33.1082304,28.8090766 32.9940039,28.9018917 32.9011681,29.0153772 C32.8079332,29.1293505 32.7382931,29.2617886 32.6966918,29.404413 C32.6758615,29.4759144 32.6622539,29.5492793 32.6556797,29.6151616 L32.6510699,29.707205 L32.6598659,29.8496307 L32.8523035,31.5976067 C33.0926408,33.748446 33.5345387,35.8701755 34.1700609,37.9296172 L34.4174424,38.6989233 L34.6845982,39.467246 L35.9271291,42.8464114 C35.9992453,43.0440742 36.0318055,43.2541674 36.0229684,43.4645736 C36.0141278,43.6750654 35.9640303,43.8817121 35.8754594,44.0726551 C35.7867069,44.2638976 35.6611068,44.435479 35.5058759,44.5773262 C35.3501721,44.7195962 35.1677426,44.8289881 34.990022,44.8912207 C34.813373,44.9615763 34.6253467,44.9984764 34.4204191,45 C34.1147901,44.9943164 33.8175473,44.8987335 33.5650597,44.7252745 C33.4238771,44.6283171 33.2997507,44.5091367 33.1890431,44.3580526 L33.0826737,44.1959755 L33.0074053,44.0456077 L32.6901551,43.3562659 C31.8320879,41.4806152 31.0484874,39.6428286 30.3335907,37.8221303 L30.0024971,36.9627165 L29.5751047,38.0696169 C29.3403684,38.6636654 29.0998399,39.2560704 28.8536693,39.8464776 L28.4802005,40.730546 L27.9043756,42.0504488 L27.3109116,43.3600706 L27.0273167,43.9425803 C26.8810403,44.3389204 26.5849764,44.6608321 26.2034873,44.8369557 C25.8203243,45.0138521 25.3831542,45.0287926 24.9891662,44.8783588 C24.596572,44.7285499 24.2795594,44.4271943 24.1072539,44.0414047 C23.9885793,43.7756939 23.9446874,43.4836867 23.9834048,43.1768668 L24.016611,42.9910892 L24.0667666,42.8262042 L25.307875,39.4507095 C26.0439275,37.4198431 26.5851782,35.3222044 26.9239335,33.1916604 L27.0414597,32.3912301 L27.141282,31.5772235 L27.3403361,29.8381618 C27.3581635,29.6889408 27.3459492,29.5375642 27.3045081,29.3935084 C27.2630999,29.2497044 27.1934915,29.1162414 27.1000261,29.0011883 C27.0070148,28.8866944 26.8923305,28.7928596 26.7631114,28.7253145 C26.6343439,28.6580256 26.4937323,28.6181655 26.35351,28.6082966 C24.0561093,28.4626746 21.7692364,28.17737 19.5069975,27.7542651 C19.3015835,27.7165557 19.1057712,27.6379419 18.9308258,27.5230481 C18.7563857,27.408486 18.6063103,27.2602422 18.4889941,27.0867756 C18.3721069,26.9139017 18.2901967,26.7194847 18.2478998,26.5149205 C18.2055002,26.3103882 18.2034637,26.0993152 18.2403615,25.9020167 C18.2758029,25.695193 18.3515339,25.4974971 18.4633288,25.3201771 C18.5754166,25.1425366 18.7215515,24.9891682 18.8933065,24.8690391 C19.0655425,24.7486376 19.2599761,24.6643395 19.4651939,24.6211361 C19.6706526,24.577882 19.8826185,24.5767675 20.0822706,24.6166765 C26.6343689,25.8477827 33.3528511,25.8477827 39.8979716,24.6180222 C40.1283133,24.5717053 40.3659882,24.5779122 40.5936329,24.636146 Z M32.8056386,16.182956 C34.3520224,17.7551666 34.3520224,20.3006423 32.80563,21.8728616 C31.2542658,23.450066 28.7353061,23.450066 27.1840106,21.8728616 C25.6375563,20.3006489 25.6375563,17.7551599 27.1839933,16.1829647 C28.7352993,14.6056799 31.2542726,14.6056799 32.8056386,16.182956 Z", fill: "#FFFFFF", fillRule: "nonzero" }) }));
296072
+ }
296073
+
296074
+ function FloatingAccessibilityButton() {
296075
+ const t = useT();
296076
+ const { isToolbarOpen, setIsToolbarOpen } = useAccessibility();
296077
+ return (jsx(AccessibilityButton, { onClick: () => setIsToolbarOpen(!isToolbarOpen), className: "h-14 w-14 rounded-full bg-[#38A1E5] shadow-lg transition-all duration-200 hover:scale-105 hover:bg-[#2E8BC7]", size: "icon", "aria-label": t('accessibility.button.openAccessibilityMenu'), children: jsx(AccessibilityIcon, { title: t('accessibility.button.accessibilityIconAlt'), className: "size-11 text-white" }) }));
296078
+ }
296079
+
296080
+ const DRAGGABLE_SNAP_TRANSITION = 'right 350ms cubic-bezier(0.34, 1.56, 0.64, 1), bottom 350ms cubic-bezier(0.34, 1.56, 0.64, 1)';
296081
+ const VERTICAL_KEYS = { ArrowUp: 1, ArrowDown: -1 };
296082
+ const SIDE_KEYS = {
296083
+ ArrowLeft: 'left',
296084
+ ArrowRight: 'right',
296085
+ };
296086
+ function isAnchor(value) {
296087
+ if (!value || typeof value !== 'object')
296088
+ return false;
296089
+ const { side, bottom } = value;
296090
+ return ((side === 'left' || side === 'right') && typeof bottom === 'number' && Number.isFinite(bottom));
296091
+ }
296092
+ function readStored(storageKey) {
296093
+ try {
296094
+ const raw = window.localStorage.getItem(storageKey);
296095
+ if (!raw)
296096
+ return null;
296097
+ const parsed = JSON.parse(raw);
296098
+ return isAnchor(parsed) ? { side: parsed.side, bottom: parsed.bottom } : null;
296099
+ }
296100
+ catch (_a) {
296101
+ return null;
296102
+ }
296103
+ }
296104
+ function writeStored(storageKey, value) {
296105
+ try {
296106
+ if (value)
296107
+ window.localStorage.setItem(storageKey, JSON.stringify(value));
296108
+ else
296109
+ window.localStorage.removeItem(storageKey);
296110
+ }
296111
+ catch (_a) {
296112
+ // Storage unavailable (private mode, quota, blocked): keep it in memory.
296113
+ }
296114
+ }
296115
+ function prefersReducedMotion() {
296116
+ return (typeof window.matchMedia === 'function' &&
296117
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches);
296118
+ }
296119
+ function viewportSize() {
296120
+ var _a, _b;
296121
+ const vv = window.visualViewport;
296122
+ return {
296123
+ width: (_a = vv === null || vv === void 0 ? void 0 : vv.width) !== null && _a !== void 0 ? _a : window.innerWidth,
296124
+ height: (_b = vv === null || vv === void 0 ? void 0 : vv.height) !== null && _b !== void 0 ? _b : window.innerHeight,
296125
+ };
296126
+ }
296127
+ function useDraggablePosition({ storageKey, threshold = 5, margin = 8, step = 16, }) {
296128
+ const ref = useRef(null);
296129
+ // Viewport changes only re-derive `position` from `stored`, so the element
296130
+ // stays on its side and rotating back restores its height.
296131
+ const [stored, setStored] = useState(null);
296132
+ const [position, setPosition] = useState(null);
296133
+ const [announcement, setAnnouncement] = useState(null);
296134
+ // Never animate while dragging (must track the pointer 1:1) nor on the
296135
+ // initial restore.
296136
+ const [animate, setAnimate] = useState(false);
296137
+ const storedRef = useRef(null);
296138
+ const positionRef = useRef(null);
296139
+ const pressRef = useRef(null);
296140
+ const suppressClickRef = useRef(false);
296141
+ const clamp = useCallback((p) => {
296142
+ var _a, _b, _c;
296143
+ const rect = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
296144
+ const { width, height } = viewportSize();
296145
+ const maxRight = width - ((_b = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _b !== void 0 ? _b : 0) - margin;
296146
+ const maxBottom = height - ((_c = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _c !== void 0 ? _c : 0) - margin;
296147
+ return {
296148
+ right: Math.max(margin, Math.min(p.right, maxRight)),
296149
+ bottom: Math.max(margin, Math.min(p.bottom, maxBottom)),
296150
+ };
296151
+ }, [margin]);
296152
+ const resolve = useCallback((a) => {
296153
+ var _a, _b;
296154
+ const width = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) !== null && _b !== void 0 ? _b : 0;
296155
+ return clamp({
296156
+ right: a.side === 'right' ? margin : viewportSize().width - width - margin,
296157
+ bottom: a.bottom,
296158
+ });
296159
+ }, [clamp, margin]);
296160
+ const render = useCallback((p) => {
296161
+ positionRef.current = p;
296162
+ setPosition(p);
296163
+ }, []);
296164
+ const commit = useCallback((a) => {
296165
+ storedRef.current = a;
296166
+ setStored(a);
296167
+ writeStored(storageKey, a);
296168
+ }, [storageKey]);
296169
+ const currentPosition = useCallback(() => {
296170
+ var _a, _b, _c;
296171
+ if (positionRef.current)
296172
+ return positionRef.current;
296173
+ const rect = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
296174
+ const { width, height } = viewportSize();
296175
+ return {
296176
+ right: width - ((_b = rect === null || rect === void 0 ? void 0 : rect.right) !== null && _b !== void 0 ? _b : width),
296177
+ bottom: height - ((_c = rect === null || rect === void 0 ? void 0 : rect.bottom) !== null && _c !== void 0 ? _c : height),
296178
+ };
296179
+ }, []);
296180
+ // An exact tie goes right, the default side.
296181
+ const nearestSide = useCallback((p) => {
296182
+ var _a, _b;
296183
+ const width = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) !== null && _b !== void 0 ? _b : 0;
296184
+ const viewportWidth = viewportSize().width;
296185
+ const centre = viewportWidth - p.right - width / 2;
296186
+ return centre < viewportWidth / 2 ? 'left' : 'right';
296187
+ }, []);
296188
+ const settle = useCallback((a) => {
296189
+ const next = resolve(a);
296190
+ const anchor = { side: a.side, bottom: next.bottom };
296191
+ setAnimate(true);
296192
+ render(next);
296193
+ commit(anchor);
296194
+ return anchor;
296195
+ }, [commit, render, resolve]);
296196
+ const place = useCallback((a) => setAnnouncement(settle(a)), [settle]);
296197
+ useEffect(() => {
296198
+ const saved = readStored(storageKey);
296199
+ storedRef.current = saved;
296200
+ setStored(saved);
296201
+ render(saved && resolve(saved));
296202
+ const reclamp = () => {
296203
+ if (storedRef.current)
296204
+ render(resolve(storedRef.current));
296205
+ };
296206
+ const vv = window.visualViewport;
296207
+ window.addEventListener('resize', reclamp);
296208
+ window.addEventListener('orientationchange', reclamp);
296209
+ vv === null || vv === void 0 ? void 0 : vv.addEventListener('resize', reclamp);
296210
+ return () => {
296211
+ window.removeEventListener('resize', reclamp);
296212
+ window.removeEventListener('orientationchange', reclamp);
296213
+ vv === null || vv === void 0 ? void 0 : vv.removeEventListener('resize', reclamp);
296214
+ };
296215
+ }, [storageKey, resolve, render]);
296216
+ const onPointerDown = useCallback((e) => {
296217
+ if (!e.isPrimary || e.button !== 0)
296218
+ return;
296219
+ suppressClickRef.current = false;
296220
+ pressRef.current = {
296221
+ pointerId: e.pointerId,
296222
+ x: e.clientX,
296223
+ y: e.clientY,
296224
+ origin: currentPosition(),
296225
+ dragging: false,
296226
+ };
296227
+ }, [currentPosition]);
296228
+ const onPointerMove = useCallback((e) => {
296229
+ const press = pressRef.current;
296230
+ if (!press || press.pointerId !== e.pointerId)
296231
+ return;
296232
+ const dx = e.clientX - press.x;
296233
+ const dy = e.clientY - press.y;
296234
+ if (!press.dragging) {
296235
+ if (Math.hypot(dx, dy) < threshold)
296236
+ return;
296237
+ press.dragging = true;
296238
+ suppressClickRef.current = true;
296239
+ setAnimate(false);
296240
+ // Capture only once it is a real drag: capturing on pointerdown would
296241
+ // retarget a plain tap's click away from the button inside.
296242
+ try {
296243
+ e.currentTarget.setPointerCapture(e.pointerId);
296244
+ }
296245
+ catch (_a) {
296246
+ // Pointer already released; the drag still follows in-element moves.
296247
+ }
296248
+ }
296249
+ render(clamp({
296250
+ right: press.origin.right - dx,
296251
+ bottom: press.origin.bottom - dy,
296252
+ }));
296253
+ }, [clamp, render, threshold]);
296254
+ const endPress = useCallback((e) => {
296255
+ const press = pressRef.current;
296256
+ if (!press || press.pointerId !== e.pointerId)
296257
+ return;
296258
+ pressRef.current = null;
296259
+ if (!press.dragging)
296260
+ return;
296261
+ const released = positionRef.current;
296262
+ settle({ side: nearestSide(released), bottom: released.bottom });
296263
+ // A touch drag may never produce a click; don't let the flag swallow the
296264
+ // next genuine activation (e.g. Enter). Click, if any, fires before this.
296265
+ setTimeout(() => {
296266
+ suppressClickRef.current = false;
296267
+ }, 0);
296268
+ }, [nearestSide, settle]);
296269
+ const onClickCapture = useCallback((e) => {
296270
+ if (!suppressClickRef.current)
296271
+ return;
296272
+ suppressClickRef.current = false;
296273
+ e.preventDefault();
296274
+ e.stopPropagation();
296275
+ }, []);
296276
+ // A mouse press on a native-draggable child (e.g. an <img>) starts
296277
+ // HTML drag-and-drop, which fires pointercancel and kills our drag.
296278
+ const onDragStart = useCallback((e) => {
296279
+ e.preventDefault();
296280
+ }, []);
296281
+ const onKeyDown = useCallback((e) => {
296282
+ var _a, _b;
296283
+ const vertical = VERTICAL_KEYS[e.key];
296284
+ const side = SIDE_KEYS[e.key];
296285
+ if ((!vertical && !side) || e.altKey || e.ctrlKey || e.metaKey)
296286
+ return;
296287
+ e.preventDefault();
296288
+ const from = currentPosition();
296289
+ const distance = e.shiftKey ? step * 4 : step;
296290
+ place({
296291
+ side: (_b = side !== null && side !== void 0 ? side : (_a = storedRef.current) === null || _a === void 0 ? void 0 : _a.side) !== null && _b !== void 0 ? _b : nearestSide(from),
296292
+ bottom: from.bottom + (vertical !== null && vertical !== void 0 ? vertical : 0) * distance,
296293
+ });
296294
+ }, [currentPosition, nearestSide, place, step]);
296295
+ const moveToCorner = useCallback((corner) => {
296296
+ var _a, _b;
296297
+ const height = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().height) !== null && _b !== void 0 ? _b : 0;
296298
+ place({
296299
+ side: corner.endsWith('right') ? 'right' : 'left',
296300
+ bottom: corner.startsWith('bottom') ? margin : viewportSize().height - height - margin,
296301
+ });
296302
+ }, [margin, place]);
296303
+ const reset = useCallback(() => {
296304
+ pressRef.current = null;
296305
+ setAnimate(false);
296306
+ render(null);
296307
+ commit(null);
296308
+ setAnnouncement(null);
296309
+ }, [commit, render]);
296310
+ return {
296311
+ ref,
296312
+ position,
296313
+ isCustom: stored !== null,
296314
+ announcement,
296315
+ /** CSS `transition` for the rendered offsets; undefined while dragging,
296316
+ * before any user move, and under prefers-reduced-motion. */
296317
+ transition: animate && position && !prefersReducedMotion() ? DRAGGABLE_SNAP_TRANSITION : undefined,
296318
+ reset,
296319
+ moveToCorner,
296320
+ handlers: {
296321
+ onPointerDown,
296322
+ onPointerMove,
296323
+ onPointerUp: endPress,
296324
+ onPointerCancel: endPress,
296325
+ onClickCapture,
296326
+ onDragStart,
296327
+ onKeyDown,
296328
+ },
296329
+ };
296330
+ }
296331
+
296332
+ /**
296333
+ * Draggable floating accessibility button plus its menu. Must be rendered
296334
+ * inside an `AccessibilityProvider`.
296335
+ */
296336
+ function AccessibilityFab({ defaultPositionClassName = 'bottom-4', storageKey = 'accessibility-fab-position:v2', 'data-testid': testId = 'accessibility-fab', }) {
296337
+ const t = useT();
296338
+ const hintId = useId$2();
296339
+ const { ref, position, isCustom, announcement, transition, reset, moveToCorner, handlers } = useDraggablePosition({ storageKey });
296340
+ return (jsxs(Fragment$1, { children: [jsx("div", { ref: ref, role: "group", "aria-describedby": hintId, className: cn('fixed right-4 z-50 flex touch-none flex-col gap-3', !position && defaultPositionClassName), style: position ? { right: position.right, bottom: position.bottom, transition } : undefined, "data-testid": testId, ...handlers, children: jsx(FloatingAccessibilityButton, {}) }), jsx("span", { id: hintId, className: "sr-only", children: t('accessibility.button.moveHint') }), jsx("div", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement
296341
+ ? t('accessibility.button.positionAnnouncement', {
296342
+ side: announcement.side,
296343
+ bottom: Math.round(announcement.bottom),
296344
+ })
296345
+ : '' }), jsx(AccessibilityToolbar, { isButtonPositionCustom: isCustom, onResetButtonPosition: reset, onMoveButtonToCorner: moveToCorner })] }));
296346
+ }
296347
+
295514
296348
  function OrganizationTab({ platformKey, setOrganizationLogoFromOutside, tenant, onTenantUpdate, defaultSupportPhone = '', enableSupportPhone, }) {
295515
296349
  const t = useT();
295516
296350
  const { setMetadata } = useTenantContext();
@@ -296945,7 +297779,7 @@ const dynamicIconImports = {
296945
297779
  "a-arrow-down": () => Promise.resolve().then(function () { return aArrowDown; }),
296946
297780
  "a-arrow-up": () => Promise.resolve().then(function () { return aArrowUp; }),
296947
297781
  "a-large-small": () => Promise.resolve().then(function () { return aLargeSmall; }),
296948
- "accessibility": () => Promise.resolve().then(function () { return accessibility; }),
297782
+ "accessibility": () => Promise.resolve().then(function () { return accessibility$4; }),
296949
297783
  "activity": () => Promise.resolve().then(function () { return activity; }),
296950
297784
  "air-vent": () => Promise.resolve().then(function () { return airVent; }),
296951
297785
  "airplay": () => Promise.resolve().then(function () { return airplay; }),
@@ -301089,14 +301923,14 @@ const AGENT_SETTINGS_TAB_LABELS = {
301089
301923
  capabilities: 'Capabilities',
301090
301924
  },
301091
301925
  sections: {
301092
- chatExperience: 'Chat experience',
301926
+ chatExperience: 'Chat Experience',
301093
301927
  advanced: 'Advanced',
301094
301928
  perSurface: 'Surface Capabilities',
301095
301929
  globalSettings: 'Global Capabilities',
301096
301930
  },
301097
301931
  surfaces: {
301098
- inAppChat: 'In-app chat',
301099
- embedWidget: 'Embed widget',
301932
+ inAppChat: 'In-App Chat',
301933
+ embedWidget: 'Embed Widget',
301100
301934
  },
301101
301935
  notes: {
301102
301936
  perSurface: 'Set independently for in-app chat and the embed widget.',
@@ -301148,7 +301982,7 @@ const AGENT_SETTINGS_TAB_LABELS = {
301148
301982
  tooltip: 'Feature this agent to highlight it in listings.',
301149
301983
  },
301150
301984
  showExploreMentors: {
301151
- label: 'Show additional agents',
301985
+ label: 'Show Additional Agents',
301152
301986
  tooltip: "Shows the additional agents section on this agent's welcome screen.",
301153
301987
  },
301154
301988
  showAttachment: {
@@ -301164,13 +301998,13 @@ const AGENT_SETTINGS_TAB_LABELS = {
301164
301998
  tooltip: 'Lets people start a live voice call with the agent. Each surface has its own switch: In-app chat covers conversations hosted in the app, Embed widget covers the widget on your own site.',
301165
301999
  },
301166
302000
  embedShowAttachment: {
301167
- label: 'Show Attachment (embed widget)',
302001
+ label: 'Show Attachment (Embed Widget)',
301168
302002
  },
301169
302003
  embedShowVoiceRecord: {
301170
- label: 'Show Voice Record (embed widget)',
302004
+ label: 'Show Voice Record (Embed Widget)',
301171
302005
  },
301172
302006
  embedShowVoiceCall: {
301173
- label: 'Show Voice Call (embed widget)',
302007
+ label: 'Show Voice Call (Embed Widget)',
301174
302008
  },
301175
302009
  allowCopies: {
301176
302010
  label: 'Allow Copies',
@@ -301181,19 +302015,15 @@ const AGENT_SETTINGS_TAB_LABELS = {
301181
302015
  tooltip: 'Show the agent’s reasoning steps while it responds. This setting has one value, so it applies to both in-app chat and the embed widget.',
301182
302016
  },
301183
302017
  enhancedDocRetrieval: {
301184
- label: 'Enhanced document retrieval',
302018
+ label: 'Enhanced Document Retrieval',
301185
302019
  tooltip: 'Run multiple search queries per question to pull in more relevant documents. This setting has one value, so it applies to both in-app chat and the embed widget.',
301186
302020
  },
301187
302021
  promptCaching: {
301188
- label: 'Prompt caching',
302022
+ label: 'Prompt Caching',
301189
302023
  tooltip: 'Cache repeated prompt context to lower latency and cost on long conversations. This setting has one value, so it applies to both in-app chat and the embed widget.',
301190
302024
  },
301191
- privateMode: {
301192
- label: 'Enable private mode',
301193
- tooltip: 'When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments. This setting has one value, so it applies to both in-app chat and the embed widget.',
301194
- },
301195
302025
  smartDocRetrieval: {
301196
- label: 'Smart document retrieval',
302026
+ label: 'Smart Document Retrieval',
301197
302027
  tooltip: 'The agent fetches documents only when it needs them, instead of searching the knowledge base on every turn. This setting has one value, so it applies to both in-app chat and the embed widget.',
301198
302028
  },
301199
302029
  image: {
@@ -301358,10 +302188,6 @@ function buildSettingsTabLabels(t) {
301358
302188
  label: t('settingsTabLabels.fields.promptCaching.label'),
301359
302189
  tooltip: t('settingsTabLabels.fields.promptCaching.tooltip'),
301360
302190
  },
301361
- privateMode: {
301362
- label: t('settingsTabLabels.fields.privateMode.label'),
301363
- tooltip: t('settingsTabLabels.fields.privateMode.tooltip'),
301364
- },
301365
302191
  smartDocRetrieval: {
301366
302192
  label: t('settingsTabLabels.fields.smartDocRetrieval.label'),
301367
302193
  tooltip: t('settingsTabLabels.fields.smartDocRetrieval.tooltip'),
@@ -301432,9 +302258,8 @@ function resolveSettingsTabLabels(override, t) {
301432
302258
  }
301433
302259
 
301434
302260
  function useEditMentorSettings({ onSuccessfulSave, labels }) {
301435
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
302261
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
301436
302262
  const { tenantKey, mentorId, username, enableRBAC, executeGatedAction } = useAgentSettings();
301437
- const dispatch = useDispatch();
301438
302263
  const { data: categories, isLoading: isLoadingCategories } = useGetMentorCategoriesQuery(
301439
302264
  // @ts-expect-error userId is not part of the query type definition
301440
302265
  { org: tenantKey, userId: username !== null && username !== void 0 ? username : '' }, {
@@ -301447,9 +302272,6 @@ function useEditMentorSettings({ onSuccessfulSave, labels }) {
301447
302272
  });
301448
302273
  const m = mentor;
301449
302274
  const [editMentor, { isLoading: isLoadingEditMentor }] = useEditMentorMutation();
301450
- // Tenant gate for the agent-level "Enable private mode" row — hidden when off.
301451
- const { data: tenantChatPrivacyConfig } = useGetTenantChatPrivacyConfigQuery$1({ org: tenantKey !== null && tenantKey !== void 0 ? tenantKey : '', userId: username !== null && username !== void 0 ? username : '' }, { skip: !tenantKey || !username });
301452
- const tenantAllowsChatPrivacyControl = !!(tenantChatPrivacyConfig === null || tenantChatPrivacyConfig === void 0 ? void 0 : tenantChatPrivacyConfig.allow_user_chat_privacy_control);
301453
302275
  // `use_function_calling_for_rag` lives on CallConfiguration; use the inlined
301454
302276
  // config, else fetch the list. (The voice / screen-share toggles moved to
301455
302277
  // their own tabs, but this field still lives in Settings.)
@@ -301482,8 +302304,7 @@ function useEditMentorSettings({ onSuccessfulSave, labels }) {
301482
302304
  show_reasoning: (_o = m === null || m === void 0 ? void 0 : m.show_reasoning) !== null && _o !== void 0 ? _o : false,
301483
302305
  enable_multi_query_rag: (_p = m === null || m === void 0 ? void 0 : m.enable_multi_query_rag) !== null && _p !== void 0 ? _p : false,
301484
302306
  enable_prompt_caching: (_q = m === null || m === void 0 ? void 0 : m.enable_prompt_caching) !== null && _q !== void 0 ? _q : false,
301485
- disable_chathistory: (_r = m === null || m === void 0 ? void 0 : m.disable_chathistory) !== null && _r !== void 0 ? _r : false,
301486
- use_function_calling_for_rag: (_s = existingCallConfig === null || existingCallConfig === void 0 ? void 0 : existingCallConfig.use_function_calling_for_rag) !== null && _s !== void 0 ? _s : false,
302307
+ use_function_calling_for_rag: (_r = existingCallConfig === null || existingCallConfig === void 0 ? void 0 : existingCallConfig.use_function_calling_for_rag) !== null && _r !== void 0 ? _r : false,
301487
302308
  },
301488
302309
  onSubmit: async ({ value }) => {
301489
302310
  var _a;
@@ -301544,9 +302365,6 @@ function useEditMentorSettings({ onSuccessfulSave, labels }) {
301544
302365
  if (value.enable_prompt_caching !== undefined) {
301545
302366
  values.enable_prompt_caching = value.enable_prompt_caching;
301546
302367
  }
301547
- if (value.disable_chathistory !== undefined) {
301548
- values.disable_chathistory = value.disable_chathistory;
301549
- }
301550
302368
  // Drop any field the user only has read access to. Including a read-only
301551
302369
  // field makes the PUT fail ("No permission to write field: ..."). A few
301552
302370
  // payload keys are gated under a differently named permission key.
@@ -301568,9 +302386,6 @@ function useEditMentorSettings({ onSuccessfulSave, labels }) {
301568
302386
  ...writableValues,
301569
302387
  },
301570
302388
  }).unwrap();
301571
- // Refresh the nav-bar chat-privacy toggle — the mentor-settings mutation
301572
- // doesn't invalidate chat-privacy-effective. Unconditional on purpose.
301573
- dispatch(chatPrivacyApiSlice.util.invalidateTags(['ChatPrivacyEffective']));
301574
302389
  // Sync `use_function_calling_for_rag` to CallConfiguration only when
301575
302390
  // changed (POST a new config if none exists, else PATCH). `show_voice_call`
301576
302391
  // (Voice tab) and `enable_video` (Screen Share tab) are no longer written
@@ -301632,7 +302447,6 @@ function useEditMentorSettings({ onSuccessfulSave, labels }) {
301632
302447
  handleSubmit,
301633
302448
  isDisabled,
301634
302449
  isLoadingEditMentor,
301635
- tenantAllowsChatPrivacyControl,
301636
302450
  };
301637
302451
  }
301638
302452
 
@@ -301872,7 +302686,7 @@ function DiscoverySubTab({ form, labels, mentor, isDisabled }) {
301872
302686
  * single field render as one switch below the matrix, so they read as
301873
302687
  * "applies everywhere".
301874
302688
  */
301875
- function CapabilitiesSubTab({ form, labels, mentor, isDisabled, tenantAllowsChatPrivacyControl, }) {
302689
+ function CapabilitiesSubTab({ form, labels, mentor, isDisabled }) {
301876
302690
  const t = useT();
301877
302691
  const { enableRBAC } = useAgentSettings();
301878
302692
  const fieldPermissions = getFieldPermissions(mentor);
@@ -301889,7 +302703,7 @@ function CapabilitiesSubTab({ form, labels, mentor, isDisabled, tenantAllowsChat
301889
302703
  // field-permission map, and `WithFormPermissions` HIDES a control
301890
302704
  // whose key is missing on an RBAC tenant. The Voice tab treats the
301891
302705
  // same field the same way.
301892
- jsx(CapabilityMatrixSwitch, { form: form, name: "show_voice_call", label: labels.fields.showVoiceCall.label, isDisabled: isDisabled }), embedWidget: jsx(CapabilityMatrixSwitch, { form: form, name: "embed_show_voice_call", label: labels.fields.embedShowVoiceCall.label, isDisabled: isDisabled }) })] })] }), jsxs("div", { className: "rounded-lg border border-gray-200 bg-gray-50 px-4 py-3", "data-testid": "capabilities-global-settings-banner", children: [jsx("h4", { className: "text-sm font-medium text-gray-900", children: labels.sections.globalSettings }), jsx("p", { className: "mt-1 text-xs text-gray-600", children: labels.notes.globalSettings })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "space-y-3", children: [jsx("h4", { className: "text-xs font-semibold tracking-wide text-gray-500 uppercase", children: labels.sections.chatExperience }), jsx(SettingToggleField, { form: form, name: "show_reasoning", label: labels.fields.showReasoning.label, tooltip: labels.fields.showReasoning.tooltip, tooltipAriaLabel: t('tabsSettingsTab.showReasoningTooltipAriaLabel'), isDisabled: isDisabled, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "enable_multi_query_rag", label: labels.fields.enhancedDocRetrieval.label, tooltip: labels.fields.enhancedDocRetrieval.tooltip, tooltipAriaLabel: t('tabsSettingsTab.enhancedDocRetrievalTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "enable_multi_query_rag", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "use_function_calling_for_rag", label: labels.fields.smartDocRetrieval.label, tooltip: labels.fields.smartDocRetrieval.tooltip, tooltipAriaLabel: t('tabsSettingsTab.smartDocRetrievalTooltipAriaLabel'), isDisabled: isDisabled, testId: "settings-use-function-calling-for-rag-switch", alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "enable_prompt_caching", label: labels.fields.promptCaching.label, tooltip: labels.fields.promptCaching.tooltip, tooltipAriaLabel: t('tabsSettingsTab.promptCachingTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "enable_prompt_caching", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, alignToMatrix: true })] }), jsxs("div", { className: "space-y-3", children: [jsx("h4", { className: "text-xs font-semibold tracking-wide text-gray-500 uppercase", children: labels.sections.advanced }), tenantAllowsChatPrivacyControl && (jsx(SettingToggleField, { form: form, name: "disable_chathistory", label: labels.fields.privateMode.label, tooltip: labels.fields.privateMode.tooltip, tooltipAriaLabel: t('tabsSettingsTab.privateModeTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "disable_chathistory", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, testId: "settings-disable-chathistory-switch", alignToMatrix: true })), jsx(SettingToggleField, { form: form, name: "forkable", label: labels.fields.allowCopies.label, tooltip: labels.fields.allowCopies.tooltip, tooltipAriaLabel: t('tabsSettingsTab.allowCopiesTooltipAriaLabel'), isDisabled: isDisabled, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "show_explore_mentors", label: labels.fields.showExploreMentors.label, tooltip: labels.fields.showExploreMentors.tooltip, tooltipAriaLabel: t('tabsSettingsTab.showExploreMentorsTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "show_explore_mentors", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, testId: "settings-show-explore-mentors-switch", alignToMatrix: true })] })] })] }));
302706
+ jsx(CapabilityMatrixSwitch, { form: form, name: "show_voice_call", label: labels.fields.showVoiceCall.label, isDisabled: isDisabled }), embedWidget: jsx(CapabilityMatrixSwitch, { form: form, name: "embed_show_voice_call", label: labels.fields.embedShowVoiceCall.label, isDisabled: isDisabled }) })] })] }), jsxs("div", { className: "rounded-lg border border-gray-200 bg-gray-50 px-4 py-3", "data-testid": "capabilities-global-settings-banner", children: [jsx("h4", { className: "text-sm font-medium text-gray-900", children: labels.sections.globalSettings }), jsx("p", { className: "mt-1 text-xs text-gray-600", children: labels.notes.globalSettings })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "space-y-3", children: [jsx("h4", { className: "text-xs font-semibold tracking-wide text-gray-500 uppercase", children: labels.sections.chatExperience }), jsx(SettingToggleField, { form: form, name: "show_reasoning", label: labels.fields.showReasoning.label, tooltip: labels.fields.showReasoning.tooltip, tooltipAriaLabel: t('tabsSettingsTab.showReasoningTooltipAriaLabel'), isDisabled: isDisabled, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "enable_multi_query_rag", label: labels.fields.enhancedDocRetrieval.label, tooltip: labels.fields.enhancedDocRetrieval.tooltip, tooltipAriaLabel: t('tabsSettingsTab.enhancedDocRetrievalTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "enable_multi_query_rag", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "use_function_calling_for_rag", label: labels.fields.smartDocRetrieval.label, tooltip: labels.fields.smartDocRetrieval.tooltip, tooltipAriaLabel: t('tabsSettingsTab.smartDocRetrievalTooltipAriaLabel'), isDisabled: isDisabled, testId: "settings-use-function-calling-for-rag-switch", alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "enable_prompt_caching", label: labels.fields.promptCaching.label, tooltip: labels.fields.promptCaching.tooltip, tooltipAriaLabel: t('tabsSettingsTab.promptCachingTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "enable_prompt_caching", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, alignToMatrix: true })] }), jsxs("div", { className: "space-y-3", children: [jsx("h4", { className: "text-xs font-semibold tracking-wide text-gray-500 uppercase", children: labels.sections.advanced }), jsx(SettingToggleField, { form: form, name: "forkable", label: labels.fields.allowCopies.label, tooltip: labels.fields.allowCopies.tooltip, tooltipAriaLabel: t('tabsSettingsTab.allowCopiesTooltipAriaLabel'), isDisabled: isDisabled, alignToMatrix: true }), jsx(SettingToggleField, { form: form, name: "show_explore_mentors", label: labels.fields.showExploreMentors.label, tooltip: labels.fields.showExploreMentors.tooltip, tooltipAriaLabel: t('tabsSettingsTab.showExploreMentorsTooltipAriaLabel'), isDisabled: isDisabled, permissionName: "show_explore_mentors", fieldPermissions: fieldPermissions, enableRBAC: enableRBAC, testId: "settings-show-explore-mentors-switch", alignToMatrix: true })] })] })] }));
301893
302707
  }
301894
302708
 
301895
302709
  /* istanbul ignore next -- @preserve dynamic import is not testable in unit tests */
@@ -301907,7 +302721,7 @@ function AgentSettingsTab({ onSuccessfulSave, onSuccessfulDelete, tenants, isLoa
301907
302721
  const [subTab, setSubTab] = React__default.useState('basic');
301908
302722
  const labels = React__default.useMemo(() => resolveSettingsTabLabels(labelsOverride, t), [labelsOverride, t]);
301909
302723
  const { tenantKey, mentorId, username, enableRBAC } = useAgentSettings();
301910
- const { mentor, categories, form, handleSubmit, isDisabled, isLoadingEditMentor, tenantAllowsChatPrivacyControl, } = useEditMentorSettings({ onSuccessfulSave, labels });
302724
+ const { mentor, categories, form, handleSubmit, isDisabled, isLoadingEditMentor } = useEditMentorSettings({ onSuccessfulSave, labels });
301911
302725
  const subTabTriggerClass = 'px-3 py-1.5 text-sm font-medium text-gray-700 data-[state=active]:bg-white data-[state=active]:text-gray-900';
301912
302726
  return (jsxs(Fragment$1, { children: [jsx("div", { className: "flex 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-600", children: labels.header.description })] }) }), jsxs("div", { className: "flex flex-1 flex-col overflow-hidden", children: [jsx("div", { className: "flex-1 space-y-4 p-3 lg:p-4", style: {
301913
302727
  overflowY: 'auto',
@@ -301916,7 +302730,7 @@ function AgentSettingsTab({ onSuccessfulSave, onSuccessfulDelete, tenants, isLoa
301916
302730
  formEvent.preventDefault();
301917
302731
  formEvent.stopPropagation();
301918
302732
  handleSubmit();
301919
- }, children: jsxs(Tabs, { value: subTab, onValueChange: (value) => setSubTab(value), className: "space-y-4", children: [jsxs(TabsList, { className: "inline-flex h-auto rounded-md bg-gray-100 p-1", "aria-label": t('tabsSettingsTab.settingsSubCategoriesAriaLabel'), children: [jsx(TabsTrigger, { value: "basic", className: subTabTriggerClass, children: labels.subTabs.basic }), jsx(TabsTrigger, { value: "discovery", className: subTabTriggerClass, children: labels.subTabs.discovery }), jsx(TabsTrigger, { value: "capabilities", className: subTabTriggerClass, children: labels.subTabs.capabilities })] }), jsx(TabsContent, { value: "basic", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(BasicSubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled, categories: categories }) }), jsx(TabsContent, { value: "discovery", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(DiscoverySubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled }) }), jsx(TabsContent, { value: "capabilities", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(CapabilitiesSubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled, tenantAllowsChatPrivacyControl: tenantAllowsChatPrivacyControl }) })] }) }) }), jsxs("div", { className: "flex flex-shrink-0 justify-end gap-2 border-t border-gray-200 bg-white px-3 py-4", children: [jsx(WithFormPermissions, { name: "object",
302733
+ }, children: jsxs(Tabs, { value: subTab, onValueChange: (value) => setSubTab(value), className: "space-y-4", children: [jsxs(TabsList, { className: "inline-flex h-auto rounded-md bg-gray-100 p-1", "aria-label": t('tabsSettingsTab.settingsSubCategoriesAriaLabel'), children: [jsx(TabsTrigger, { value: "basic", className: subTabTriggerClass, children: labels.subTabs.basic }), jsx(TabsTrigger, { value: "discovery", className: subTabTriggerClass, children: labels.subTabs.discovery }), jsx(TabsTrigger, { value: "capabilities", className: subTabTriggerClass, children: labels.subTabs.capabilities })] }), jsx(TabsContent, { value: "basic", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(BasicSubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled, categories: categories }) }), jsx(TabsContent, { value: "discovery", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(DiscoverySubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled }) }), jsx(TabsContent, { value: "capabilities", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(CapabilitiesSubTab, { form: form, labels: labels, mentor: mentor, isDisabled: isDisabled }) })] }) }) }), jsxs("div", { className: "flex flex-shrink-0 justify-end gap-2 border-t border-gray-200 bg-white px-3 py-4", children: [jsx(WithFormPermissions, { name: "object",
301920
302734
  // @ts-expect-error permissions type is opaque
301921
302735
  permissions: mentor === null || mentor === void 0 ? void 0 : mentor.permissions, enableRBAC: enableRBAC, children: ({ canDelete }) => canDelete && (jsx(Button$1, { onClick: () => setIsDeleteModalOpen(true), type: "button", disabled: isDisabled, variant: "outline", children: labels.actions.delete })) }), (mentor === null || mentor === void 0 ? void 0 : mentor.forkable) && (jsx(Button$1, { onClick: () => setIsCopyModalOpen(true), type: "button", disabled: isDisabled, variant: "outline", children: labels.actions.copy })), jsx(form.Subscribe, { selector: (state) => ({ isFormValid: state.canSubmit }), children: ({ isFormValid }) => (jsx(WithFormPermissions, { name: "object",
301922
302736
  // @ts-expect-error permissions type is opaque
@@ -304977,7 +305791,7 @@ function AgentSafetyTab({ renderPromptContent, FlaggedPromptsModal, showFlaggedP
304977
305791
  const AGENT_PRIVACY_TAB_LABELS = {
304978
305792
  header: {
304979
305793
  title: 'Privacy',
304980
- description: 'Detect and filter personally identifiable information from chat messages.',
305794
+ description: 'Control what personal information the agent sees and how Incognito works for its conversations.',
304981
305795
  },
304982
305796
  capability: {
304983
305797
  title: 'PII filtering',
@@ -305034,6 +305848,29 @@ const AGENT_PRIVACY_TAB_LABELS = {
305034
305848
  tooltip: 'Scrub PII from AI-generated responses. May add slight latency to streamed responses.',
305035
305849
  },
305036
305850
  },
305851
+ subTabs: {
305852
+ piiFiltering: 'PII Filtering',
305853
+ incognito: 'Incognito',
305854
+ },
305855
+ incognito: {
305856
+ description: 'Incognito keeps a conversation out of chat history and memory. Choose how it works for this agent.',
305857
+ groupAriaLabel: 'Incognito policy',
305858
+ options: {
305859
+ users: {
305860
+ title: 'Users Decide',
305861
+ description: 'Users can turn Incognito on for any conversation. Otherwise, their chats are saved to history as usual.',
305862
+ },
305863
+ always: {
305864
+ title: 'Always Incognito',
305865
+ description: 'Every conversation with this agent is incognito. Nothing is saved to chat history or memory — for anyone.',
305866
+ },
305867
+ never: {
305868
+ title: 'Never Incognito',
305869
+ description: "Incognito isn't available for this agent. Every conversation is saved to chat history; users who normally keep their chats incognito are saved anonymously instead.",
305870
+ },
305871
+ },
305872
+ },
305873
+ noAccess: "You don't have permission to view this agent's privacy settings.",
305037
305874
  toasts: {
305038
305875
  updateSuccess: 'Privacy settings updated',
305039
305876
  updateError: 'Failed to update privacy settings',
@@ -305100,6 +305937,29 @@ function buildPrivacyTabLabels(t) {
305100
305937
  tooltip: t('privacyTabLabels.fields.outputFilter.tooltip'),
305101
305938
  },
305102
305939
  },
305940
+ subTabs: {
305941
+ piiFiltering: t('privacyTabLabels.subTabs.piiFiltering'),
305942
+ incognito: t('privacyTabLabels.subTabs.incognito'),
305943
+ },
305944
+ incognito: {
305945
+ description: t('privacyTabLabels.incognito.description'),
305946
+ groupAriaLabel: t('privacyTabLabels.incognito.groupAriaLabel'),
305947
+ options: {
305948
+ users: {
305949
+ title: t('privacyTabLabels.incognito.options.users.title'),
305950
+ description: t('privacyTabLabels.incognito.options.users.description'),
305951
+ },
305952
+ always: {
305953
+ title: t('privacyTabLabels.incognito.options.always.title'),
305954
+ description: t('privacyTabLabels.incognito.options.always.description'),
305955
+ },
305956
+ never: {
305957
+ title: t('privacyTabLabels.incognito.options.never.title'),
305958
+ description: t('privacyTabLabels.incognito.options.never.description'),
305959
+ },
305960
+ },
305961
+ },
305962
+ noAccess: t('privacyTabLabels.noAccess'),
305103
305963
  toasts: {
305104
305964
  updateSuccess: t('privacyTabLabels.toasts.updateSuccess'),
305105
305965
  updateError: t('privacyTabLabels.toasts.updateError'),
@@ -305113,8 +305973,31 @@ function resolvePrivacyTabLabels(override, t) {
305113
305973
  return deepMerge(base, override);
305114
305974
  }
305115
305975
 
305976
+ /**
305977
+ * The agent's Incognito policy — one choice over the two mentor flags.
305978
+ * `users` lets each user turn Incognito on per conversation (both flags
305979
+ * off); `always` makes every conversation incognito (`disable_chathistory`);
305980
+ * `never` takes Incognito away from everyone (`disable_privacy_mode`). One
305981
+ * control so the contradictory "always AND never" pair cannot be configured.
305982
+ */
305983
+ const INCOGNITO_POLICIES = ['users', 'always', 'never'];
305984
+ /** `never` wins when an older record carries both flags — the backend keeps history then. */
305985
+ function incognitoPolicyFrom(settings) {
305986
+ if (settings === null || settings === void 0 ? void 0 : settings.disable_privacy_mode)
305987
+ return 'never';
305988
+ if (settings === null || settings === void 0 ? void 0 : settings.disable_chathistory)
305989
+ return 'always';
305990
+ return 'users';
305991
+ }
305992
+ function incognitoFlags(policy) {
305993
+ return {
305994
+ disable_chathistory: policy === 'always',
305995
+ disable_privacy_mode: policy === 'never',
305996
+ };
305997
+ }
305998
+
305116
305999
  function AgentPrivacyTab({ labels: labelsOverride, tenantKey: tenantKeyProp, mentorId: mentorIdProp, username: usernameProp, enableRBAC: enableRBACProp, executeGatedAction: executeGatedActionProp, }) {
305117
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
306000
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
305118
306001
  const t = useT();
305119
306002
  const ctx = useAgentSettingsOptional();
305120
306003
  const tenantKey = (_a = tenantKeyProp !== null && tenantKeyProp !== void 0 ? tenantKeyProp : ctx === null || ctx === void 0 ? void 0 : ctx.tenantKey) !== null && _a !== void 0 ? _a : '';
@@ -305123,6 +306006,12 @@ function AgentPrivacyTab({ labels: labelsOverride, tenantKey: tenantKeyProp, men
305123
306006
  const enableRBAC = (_d = enableRBACProp !== null && enableRBACProp !== void 0 ? enableRBACProp : ctx === null || ctx === void 0 ? void 0 : ctx.enableRBAC) !== null && _d !== void 0 ? _d : false;
305124
306007
  const executeGatedAction = executeGatedActionProp !== null && executeGatedActionProp !== void 0 ? executeGatedActionProp : ctx === null || ctx === void 0 ? void 0 : ctx.executeGatedAction;
305125
306008
  const labels = React__default.useMemo(() => resolvePrivacyTabLabels(labelsOverride, t), [labelsOverride, t]);
306009
+ const dispatch = useDispatch();
306010
+ // The Incognito policy only means something when the tenant lets users
306011
+ // control chat privacy; without that gate there is no Incognito to govern.
306012
+ const { data: tenantChatPrivacyConfig } = useGetTenantChatPrivacyConfigQuery({ org: tenantKey, userId: username }, { skip: !tenantKey || !username });
306013
+ const tenantAllowsIncognito = !!(tenantChatPrivacyConfig === null || tenantChatPrivacyConfig === void 0 ? void 0 : tenantChatPrivacyConfig.allow_user_chat_privacy_control);
306014
+ const [subTab, setSubTab] = React__default.useState('pii');
305126
306015
  const { data: rawMentorSettings, isLoading: isMentorSettingsLoading, refetch: refetchMentorSettings, } = useGetMentorSettingsQuery({
305127
306016
  mentor: mentorId,
305128
306017
  org: tenantKey,
@@ -305130,32 +306019,50 @@ function AgentPrivacyTab({ labels: labelsOverride, tenantKey: tenantKeyProp, men
305130
306019
  userId: username,
305131
306020
  }, { skip: !username || !mentorId || !tenantKey });
305132
306021
  const mentorSettings = rawMentorSettings;
306022
+ // Sub-tab visibility follows field-level RBAC: a sub-tab whose fields the
306023
+ // user cannot read is not offered at all (its controls would only render
306024
+ // hidden). Until the settings land the permissions are unknown, so nothing
306025
+ // is gated yet. Writes stay per control, through `WithFormPermissions`.
306026
+ const fieldPermissions = (_e = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _e === void 0 ? void 0 : _e.field;
306027
+ const permissionsKnown = mentorSettings !== undefined;
306028
+ const showPii = !permissionsKnown ||
306029
+ PII_FIELDS.some((field) => canReadField(fieldPermissions, field, enableRBAC));
306030
+ const showIncognito = tenantAllowsIncognito &&
306031
+ (!permissionsKnown ||
306032
+ INCOGNITO_FIELDS.every((field) => canReadField(fieldPermissions, field, enableRBAC)));
306033
+ const visibleSubTabs = [
306034
+ ...(showPii ? ['pii'] : []),
306035
+ ...(showIncognito ? ['incognito'] : []),
306036
+ ];
306037
+ const activeSubTab = visibleSubTabs.includes(subTab) ? subTab : visibleSubTabs[0];
305133
306038
  // The `/settings/` endpoint accepts a JSON body — `useEditMentorJsonMutation`
305134
306039
  // matches that contract (the multipart `useEditMentorMutation` doesn't
305135
306040
  // round-trip cleanly for array fields like `privacy_entities`).
305136
306041
  const [editMentorJson, { isLoading: isEditMentorLoading }] = useEditMentorJsonMutation();
305137
306042
  const isDisabled = isMentorSettingsLoading || isEditMentorLoading;
305138
306043
  const enabled = !!(mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.enable_privacy_router);
305139
- const action = (_e = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_action) !== null && _e !== void 0 ? _e : 'redact';
305140
- const entities = (_f = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_entities) !== null && _f !== void 0 ? _f : [];
305141
- const responseText = (_g = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_response) !== null && _g !== void 0 ? _g : '';
306044
+ const action = (_f = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_action) !== null && _f !== void 0 ? _f : 'redact';
306045
+ const entities = (_g = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_entities) !== null && _g !== void 0 ? _g : [];
306046
+ const responseText = (_h = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.privacy_response) !== null && _h !== void 0 ? _h : '';
305142
306047
  const outputFilter = !!(mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.enable_privacy_output_filter);
306048
+ const incognitoPolicy = incognitoPolicyFrom(mentorSettings);
305143
306049
  const [localResponse, setLocalResponse] = React__default.useState(responseText);
305144
306050
  React__default.useEffect(() => {
305145
306051
  setLocalResponse(responseText);
305146
306052
  }, [responseText]);
305147
- async function updateField(field, value) {
306053
+ async function updateFields(requestBody, afterSave) {
305148
306054
  const run = async () => {
305149
306055
  await editMentorJson({
305150
306056
  mentorId,
305151
306057
  org: tenantKey,
305152
306058
  userId: username,
305153
- requestBody: { [field]: value },
306059
+ requestBody,
305154
306060
  }).unwrap();
305155
306061
  // `editMentorJson` lives on a separate api-slice and doesn't invalidate
305156
306062
  // the `mentorSettings` tag, so the toggle would otherwise stay stale
305157
306063
  // after a successful PUT. Refetch explicitly.
305158
306064
  await refetchMentorSettings();
306065
+ afterSave === null || afterSave === void 0 ? void 0 : afterSave();
305159
306066
  toast.success(labels.toasts.updateSuccess);
305160
306067
  };
305161
306068
  try {
@@ -305167,34 +306074,83 @@ function AgentPrivacyTab({ labels: labelsOverride, tenantKey: tenantKeyProp, men
305167
306074
  }
305168
306075
  }
305169
306076
  catch (error) {
305170
- console.error(JSON.stringify({ tenant: tenantKey, field, error }));
306077
+ console.error(JSON.stringify({ tenant: tenantKey, fields: Object.keys(requestBody), error }));
305171
306078
  toast.error(labels.toasts.updateError);
305172
306079
  }
305173
306080
  }
306081
+ function updateField(field, value) {
306082
+ return updateFields({ [field]: value });
306083
+ }
306084
+ // Both flags travel in one PUT. The chat header reads the policy from two
306085
+ // other caches — `chat-privacy-effective` (Always Incognito → the locked
306086
+ // pill) and the mentor's public settings (Never Incognito → no toggle at
306087
+ // all) — and `editMentorJson` invalidates neither, so refresh them here or
306088
+ // the header lags until reload.
306089
+ function updateIncognitoPolicy(policy) {
306090
+ return updateFields(incognitoFlags(policy), () => {
306091
+ dispatch(chatPrivacyApiSlice.util.invalidateTags(['ChatPrivacyEffective']));
306092
+ dispatch(mentorApiSlice.util.invalidateTags([{ type: 'mentorPublicSettings', id: mentorId }]));
306093
+ });
306094
+ }
305174
306095
  function toggleEntity(entity, checked) {
305175
306096
  const next = checked
305176
306097
  ? Array.from(new Set([...entities, entity]))
305177
306098
  : entities.filter((e) => e !== entity);
305178
306099
  void updateField('privacy_entities', next);
305179
306100
  }
305180
- 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", { "data-testid": "privacy-tab-body", className: "flex-1 space-y-6 p-3 lg:p-4", style: { overflowY: 'auto', overflowX: 'hidden' }, children: jsx(CapabilityGate, { title: labels.capability.title, description: labels.capability.description, offHint: labels.capability.offHint, enabled: enabled, onToggle: (checked) => void updateField('enable_privacy_router', checked), disabled: isDisabled, ariaLabel: labels.capability.title, toggleTestId: "privacy-capability-toggle", children: jsxs("div", { className: "space-y-6", children: [jsx(WithFormPermissions, { name: "privacy_action",
305181
- // @ts-ignore
305182
- permissions: (_h = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _h === void 0 ? void 0 : _h.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.action.label }), jsx(FieldTooltip$1, { text: labels.fields.action.tooltip })] }), jsxs(Select$1, { value: action, onValueChange: (v) => void updateField('privacy_action', v), disabled: isDisabled || disabled, children: [jsx(SelectTrigger, { "aria-label": labels.fields.action.label, children: jsx(SelectValue, {}) }), jsx(SelectContent, { children: PRIVACY_ACTIONS.map((opt) => (jsx(SelectItem, { value: opt, children: labels.fields.action.options[opt] }, opt))) })] }), jsx("p", { className: "text-xs text-gray-500", children: labels.fields.action.descriptions[action] })] })) }), action === 'block' && (jsx(WithFormPermissions, { name: "privacy_response",
305183
- // @ts-ignore
305184
- permissions: (_j = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _j === void 0 ? void 0 : _j.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.blockMessage.label }), jsx(Textarea, { value: localResponse, onChange: (e) => setLocalResponse(e.target.value), onBlur: () => {
305185
- if (localResponse !== responseText) {
305186
- void updateField('privacy_response', localResponse);
305187
- }
305188
- }, placeholder: labels.fields.blockMessage.placeholder, className: "min-h-[100px]", disabled: isDisabled || disabled, "aria-label": labels.fields.blockMessage.label })] })) })), jsx(WithFormPermissions, { name: "privacy_entities",
305189
- // @ts-ignore
305190
- permissions: (_k = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _k === void 0 ? void 0 : _k.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.entities.label }), jsx(FieldTooltip$1, { text: labels.fields.entities.tooltip })] }), jsx("div", { className: "flex flex-wrap gap-2", children: PRIVACY_ENTITY_TYPES.map((entity) => {
305191
- var _a;
305192
- return (jsx(EntityChip, { entity: entity, label: (_a = labels.fields.entities.labels[entity]) !== null && _a !== void 0 ? _a : entity, selected: entities.includes(entity), disabled: isDisabled || disabled, onToggle: (checked) => toggleEntity(entity, checked) }, entity));
305193
- }) }), entities.length === 0 && (jsx("p", { className: "text-xs text-gray-500", children: labels.fields.entities.emptyHint }))] })) }), jsx(WithFormPermissions, { name: "enable_privacy_output_filter",
305194
- // @ts-ignore
305195
- permissions: (_l = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _l === void 0 ? void 0 : _l.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-[#646464]", children: labels.fields.outputFilter.label }), jsx(FieldTooltip$1, { text: labels.fields.outputFilter.tooltip })] }), jsx(CustomSwitch, { checked: outputFilter, onCheckedChange: (checked) => void updateField('enable_privacy_output_filter', checked), disabled: isDisabled || disabled, "aria-label": outputFilter
305196
- ? t('tabsPrivacyTab.outputFilterAriaLabelEnabled')
305197
- : t('tabsPrivacyTab.outputFilterAriaLabelDisabled') })] })) })] }) }) })] }));
306101
+ 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", { "data-testid": "privacy-tab-body", className: "flex-1 space-y-6 p-3 lg:p-4", style: { overflowY: 'auto', overflowX: 'hidden' }, children: visibleSubTabs.length === 0 ? (jsx("p", { className: "text-sm text-gray-600", "data-testid": "privacy-no-access", children: labels.noAccess })) : (jsxs(Tabs, { value: activeSubTab, onValueChange: (value) => setSubTab(value), className: "space-y-4", children: [jsxs(TabsList, { className: "inline-flex h-auto rounded-md bg-gray-100 p-1", "aria-label": t('tabsPrivacyTab.subTabsAriaLabel'), children: [showPii && (jsx(TabsTrigger, { value: "pii", className: SUB_TAB_TRIGGER_CLASS, "data-testid": "privacy-sub-tab-pii", children: labels.subTabs.piiFiltering })), showIncognito && (jsx(TabsTrigger, { value: "incognito", className: SUB_TAB_TRIGGER_CLASS, "data-testid": "privacy-sub-tab-incognito", children: labels.subTabs.incognito }))] }), showPii && (jsx(TabsContent, { value: "pii", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsx(CapabilityGate, { title: labels.capability.title, description: labels.capability.description, offHint: labels.capability.offHint, enabled: enabled, onToggle: (checked) => void updateField('enable_privacy_router', checked), disabled: isDisabled, ariaLabel: labels.capability.title, toggleTestId: "privacy-capability-toggle", children: jsxs("div", { className: "space-y-6", children: [jsx(WithFormPermissions, { name: "privacy_action",
306102
+ // @ts-ignore
306103
+ permissions: (_j = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _j === void 0 ? void 0 : _j.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.action.label }), jsx(FieldTooltip$1, { text: labels.fields.action.tooltip })] }), jsxs(Select$1, { value: action, onValueChange: (v) => void updateField('privacy_action', v), disabled: isDisabled || disabled, children: [jsx(SelectTrigger, { "aria-label": labels.fields.action.label, children: jsx(SelectValue, {}) }), jsx(SelectContent, { children: PRIVACY_ACTIONS.map((opt) => (jsx(SelectItem, { value: opt, children: labels.fields.action.options[opt] }, opt))) })] }), jsx("p", { className: "text-xs text-gray-500", children: labels.fields.action.descriptions[action] })] })) }), action === 'block' && (jsx(WithFormPermissions, { name: "privacy_response",
306104
+ // @ts-ignore
306105
+ permissions: (_k = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _k === void 0 ? void 0 : _k.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.blockMessage.label }), jsx(Textarea, { value: localResponse, onChange: (e) => setLocalResponse(e.target.value), onBlur: () => {
306106
+ if (localResponse !== responseText) {
306107
+ void updateField('privacy_response', localResponse);
306108
+ }
306109
+ }, placeholder: labels.fields.blockMessage.placeholder, className: "min-h-[100px]", disabled: isDisabled || disabled, "aria-label": labels.fields.blockMessage.label })] })) })), jsx(WithFormPermissions, { name: "privacy_entities",
306110
+ // @ts-ignore
306111
+ permissions: (_l = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _l === void 0 ? void 0 : _l.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx(Label$1, { className: "text-sm font-medium text-[#646464]", children: labels.fields.entities.label }), jsx(FieldTooltip$1, { text: labels.fields.entities.tooltip })] }), jsx("div", { className: "flex flex-wrap gap-2", children: PRIVACY_ENTITY_TYPES.map((entity) => {
306112
+ var _a;
306113
+ return (jsx(EntityChip, { entity: entity, label: (_a = labels.fields.entities.labels[entity]) !== null && _a !== void 0 ? _a : entity, selected: entities.includes(entity), disabled: isDisabled || disabled, onToggle: (checked) => toggleEntity(entity, checked) }, entity));
306114
+ }) }), entities.length === 0 && (jsx("p", { className: "text-xs text-gray-500", children: labels.fields.entities.emptyHint }))] })) }), jsx(WithFormPermissions, { name: "enable_privacy_output_filter",
306115
+ // @ts-ignore
306116
+ permissions: (_m = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _m === void 0 ? void 0 : _m.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-[#646464]", children: labels.fields.outputFilter.label }), jsx(FieldTooltip$1, { text: labels.fields.outputFilter.tooltip })] }), jsx(CustomSwitch, { checked: outputFilter, onCheckedChange: (checked) => void updateField('enable_privacy_output_filter', checked), disabled: isDisabled || disabled, "aria-label": outputFilter
306117
+ ? t('tabsPrivacyTab.outputFilterAriaLabelEnabled')
306118
+ : t('tabsPrivacyTab.outputFilterAriaLabelDisabled') })] })) })] }) }) })), showIncognito && (jsx(TabsContent, { value: "incognito", forceMount: true, className: "m-0 data-[state=inactive]:hidden", children: jsxs("div", { className: "space-y-4", "data-testid": "privacy-incognito-section", children: [jsx("p", { className: "text-xs leading-relaxed text-gray-600", children: labels.incognito.description }), jsx(WithFormPermissions, { name: ['disable_chathistory', 'disable_privacy_mode'],
306119
+ // @ts-ignore
306120
+ permissions: (_o = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.permissions) === null || _o === void 0 ? void 0 : _o.field, enableRBAC: enableRBAC, children: ({ disabled }) => (jsx("div", { className: "space-y-3", "aria-label": labels.incognito.groupAriaLabel, children: INCOGNITO_POLICIES.map((policy) => (jsx(IncognitoOptionCard, { policy: policy, title: labels.incognito.options[policy].title, description: labels.incognito.options[policy].description, selected: incognitoPolicy === policy, disabled: isDisabled || disabled, onSelect: () => void updateIncognitoPolicy(policy) }, policy))) })) })] }) }))] })) })] }));
306121
+ }
306122
+ const PII_FIELDS = [
306123
+ 'enable_privacy_router',
306124
+ 'privacy_action',
306125
+ 'privacy_entities',
306126
+ 'privacy_response',
306127
+ 'enable_privacy_output_filter',
306128
+ ];
306129
+ const INCOGNITO_FIELDS = ['disable_chathistory', 'disable_privacy_mode'];
306130
+ /**
306131
+ * Mirror of `WithFormPermissions`' read rule: a field the endpoint lists is
306132
+ * governed by its own `read` flag; one it does not list is readable only when
306133
+ * RBAC gating is off.
306134
+ */
306135
+ function canReadField(permissions, field, enableRBAC) {
306136
+ const entry = permissions === null || permissions === void 0 ? void 0 : permissions[field];
306137
+ if (entry)
306138
+ return entry.read !== false;
306139
+ return !enableRBAC;
306140
+ }
306141
+ // Same pill switcher the Settings tab uses for its sub-tabs.
306142
+ const SUB_TAB_TRIGGER_CLASS = 'px-3 py-1.5 text-sm font-medium text-gray-700 data-[state=active]:bg-white data-[state=active]:text-gray-900';
306143
+ const INCOGNITO_OPTION_ICONS = {
306144
+ users: Users,
306145
+ always: EyeOff,
306146
+ never: History,
306147
+ };
306148
+ // Radio-card idiom shared with the profile's Privacy tab: `aria-pressed`
306149
+ // buttons rather than a WAI-ARIA radiogroup (which would need roving focus),
306150
+ // each carrying its title + description so nothing has to be explained apart.
306151
+ function IncognitoOptionCard({ policy, title, description, selected, disabled, onSelect, }) {
306152
+ const Icon = INCOGNITO_OPTION_ICONS[policy];
306153
+ return (jsxs("button", { type: "button", "aria-pressed": selected, "data-testid": `privacy-incognito-${policy}`, "data-state": selected ? 'selected' : 'unselected', onClick: onSelect, disabled: disabled, className: cn('flex w-full flex-col gap-1 rounded-lg border px-5 py-4 text-left transition-colors', 'focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 focus-visible:outline-none', 'disabled:cursor-not-allowed disabled:opacity-60', selected ? 'border-blue-500 bg-blue-50/40' : 'border-gray-200 hover:bg-gray-50'), children: [jsxs("span", { className: "flex w-full items-center gap-3", children: [jsx(Icon, { className: cn('h-4 w-4 flex-shrink-0', selected ? 'text-blue-600' : 'text-gray-400'), "aria-hidden": "true" }), jsx("span", { className: cn('min-w-0 flex-1 text-sm font-medium', selected ? 'text-blue-900' : 'text-gray-900'), children: title }), jsx("span", { "aria-hidden": "true", className: cn('flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full border-2 transition-colors', selected ? 'border-blue-500 bg-blue-500' : 'border-gray-300'), children: selected && jsx(Check, { className: "h-3 w-3 text-white", strokeWidth: 3 }) })] }), jsx("p", { className: "pr-8 pl-7 text-xs text-gray-500", children: description })] }));
305198
306154
  }
305199
306155
  function FieldTooltip$1({ text }) {
305200
306156
  const t = useT();
@@ -317058,7 +318014,7 @@ function LiveKitScreenSharing({ tenantKey, mentorUniqueId, sessionId, username,
317058
318014
  }
317059
318015
 
317060
318016
  function AppSyncBanner({ badge, text, link, linkText }) {
317061
- return (jsx("div", { className: "mx-auto mb-8 w-full max-w-md", children: jsxs("div", { className: "flex items-center justify-between rounded-lg border border-[#D0E0FF] bg-[#F5F8FF] p-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "rounded-md bg-[#D0E0FF] px-2 py-0.5 text-xs font-medium text-[#666768]", children: badge }), jsx("span", { className: "text-sm font-medium text-gray-900", children: text })] }), jsxs(Link$2, { href: link, target: "_blank", className: cn(buttonVariants({
318017
+ return (jsx("div", { className: "mx-auto mb-8 w-full max-w-md", children: jsxs("div", { className: "flex items-center justify-between rounded-lg border border-[#D0E0FF] bg-[#F5F8FF] p-2", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "rounded-md bg-[#D0E0FF] px-2 py-0.5 text-xs font-medium text-[#666768]", children: badge }), jsx("span", { className: "text-sm font-medium text-gray-900", children: text })] }), jsxs(Link$2, { href: link, target: "_blank", className: cn(buttonVariants$1({
317062
318018
  variant: 'ghost',
317063
318019
  size: 'sm',
317064
318020
  className: 'h-auto p-1 text-sm text-blue-600 hover:text-blue-700',
@@ -320714,5 +321670,5 @@ var disclaimerModal = /*#__PURE__*/Object.freeze({
320714
321670
  DisclaimerModal: DisclaimerModal
320715
321671
  });
320716
321672
 
320717
- 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 };
321673
+ 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, AccessibilityFab, AccessibilityProvider, AccessibilityToolbar, 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, DRAGGABLE_SNAP_TRANSITION, DeleteMentorModal, EMPTY_PROGRAM_SETTINGS_FORM, EdxIframe, ErrorPage, FloatingAccessibilityButton, 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, useAccessibility, useAgentSearch, useAgentSearchWithPagination, useAgentSettings, useAgentStar, useDraggablePosition, useGetChatDetails, usePlatformSidebarFooterActions, usePlatformSidebarNavCallback, useSidebar, useT, useTimeTracker, useToggleTools, useWebContainersI18n, useWebContainersLocale };
320718
321674
  //# sourceMappingURL=index.esm.js.map