@iblai/iblai-js 2.2.9 → 2.2.10

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.
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useRef, useEffect, useState, useCallback, useLayoutEffect, forwardRef, createElement as createElement$1, createContext, useContext, useMemo, useReducer, useImperativeHandle, isValidElement, Children, PureComponent, cloneElement, Component, useId as useId$2, useDebugValue, lazy, Suspense } from 'react';
3
3
  import { useDispatch, useSelector } from 'react-redux';
4
- import { selectSessionId, selectActiveChatMessages, useCachedSessionId, chatActions, LOCAL_STORAGE_KEYS, TimeTracker, getInitials, useTenantMetadata, WithPermissions, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, getTimeAgo, REQUIRED_ACTIONS_FOR_GROUPS, formatRelativeTime as formatRelativeTime$2, ANONYMOUS_USERNAME, combineCSVData, redirectToAuthSpaJoinTenant, redirectToAuthSpa, getAuthSpaJoinUrl, useOS, selectNumberOfActiveChatMessages, useUsername, selectStreaming, isLoggedIn, TOOLS, hasRemoteAiConfig, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, selectRbacPermissions, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, removeFile, chatInputSliceActions, WithFormPermissions, MENTOR_VISIBILITY } from '@iblai/web-utils';
4
+ import { selectSessionId, selectActiveChatMessages, useCachedSessionId, chatActions, LOCAL_STORAGE_KEYS, TimeTracker, getInitials, useTenantMetadata, WithPermissions, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, getTimeAgo, REQUIRED_ACTIONS_FOR_GROUPS, formatRelativeTime as formatRelativeTime$2, ANONYMOUS_USERNAME, combineCSVData, redirectToAuthSpaJoinTenant, redirectToAuthSpa, getAuthSpaJoinUrl, useOS, selectNumberOfActiveChatMessages, useUsername, selectStreaming, isLoggedIn, TOOLS, hasRemoteAiConfig, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, selectRbacPermissions, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, chatInputSliceActions, removeFile, WithFormPermissions, MENTOR_VISIBILITY } from '@iblai/web-utils';
5
5
  import * as dataLayer from '@iblai/data-layer';
6
- import { useCreateSessionIdMutation, useTimeTrackingMutation, useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, 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, useDeleteApiKeyMutation, useGetApiKeysQuery, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useGetLlmsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, useGetCustomDomainsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useUpdateTenantMetadataMutation, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useGetAiSearchMentorsQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, useGetMentorsQuery, useUpdateTemplateMutation, useGetTemplateDetailsQuery, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAverageRatingQuery, useGetFinancialStatsQuery, useGetDetailedFinancialStatsQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useLazyGetDownloadReportFromURLQuery, useGetMentorPublicSettingsQuery, useGetReportsQuery, useCreateReportMutation, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListSubscribersQuery, useGetAuditLogsQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useLazyGetPersonnalizedSearchQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetClawMentorConfigQuery, useGetClawInstancesQuery, useGetAgentConfigQuery, useUpdateClawMentorConfigMutation, useCreateClawMentorConfigMutation, useDeleteClawMentorConfigMutation, usePushClawConfigMutation, useCreateClawInstanceMutation, useDeleteClawInstanceMutation, useUpdateAgentConfigMutation, useHealthCheckClawInstanceMutation, useTestConnectivityClawInstanceMutation, useUpdateClawInstanceMutation, useGetAgentSkillsQuery, useGetMentorSkillAssignmentsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, useCreateCheckoutMutation, useGetUserProjectsQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useGetVectorDocumentsQuery, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useDeleteMentorMemoryMutation, useUpdateMentorMemoryMutation, useCreateMentorMemoryMutation, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useGetMentorCategoriesQuery, useCreateMentorMutation, useUpdateUserPlatformMetadataMutation, useGetApplicationStatusQuery, useListOwnApplicationsQuery, useGetApplicationFormQuery, useWithdrawApplicationMutation, useRenewApplicationMutation, useCreateApplicationDraftMutation, useSubmitApplicationMutation, useUpdateApplicationMutation, useUploadApplicationAttachmentMutation, useDeleteApplicationAttachmentMutation, useGetPromptCategoriesQuery, useCreatePromptMutation, useDeletePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation } from '@iblai/data-layer';
6
+ import { useCreateSessionIdMutation, useTimeTrackingMutation, useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, 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, useDeleteApiKeyMutation, useGetApiKeysQuery, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useGetLlmsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, useGetCustomDomainsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useUpdateTenantMetadataMutation, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useGetAiSearchMentorsQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, useGetMentorsQuery, useUpdateTemplateMutation, useGetTemplateDetailsQuery, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAverageRatingQuery, useGetFinancialStatsQuery, useGetDetailedFinancialStatsQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useLazyGetDownloadReportFromURLQuery, useGetMentorPublicSettingsQuery, useGetReportsQuery, useCreateReportMutation, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListSubscribersQuery, useGetAuditLogsQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useLazyGetPersonnalizedSearchQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetClawMentorConfigQuery, useGetClawInstancesQuery, useGetAgentConfigQuery, useUpdateClawMentorConfigMutation, useCreateClawMentorConfigMutation, useDeleteClawMentorConfigMutation, usePushClawConfigMutation, useCreateClawInstanceMutation, useDeleteClawInstanceMutation, useUpdateAgentConfigMutation, useHealthCheckClawInstanceMutation, useTestConnectivityClawInstanceMutation, useUpdateClawInstanceMutation, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetAgentSkillsQuery, useGetMentorSkillAssignmentsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, resolveEffectiveAgentSkills, filterSlashSkills, useCreateCheckoutMutation, useGetUserProjectsQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useGetVectorDocumentsQuery, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useDeleteMentorMemoryMutation, useUpdateMentorMemoryMutation, useCreateMentorMemoryMutation, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useGetMentorCategoriesQuery, useCreateMentorMutation, useUpdateUserPlatformMetadataMutation, useGetApplicationStatusQuery, useListOwnApplicationsQuery, useGetApplicationFormQuery, useWithdrawApplicationMutation, useRenewApplicationMutation, useCreateApplicationDraftMutation, useSubmitApplicationMutation, useUpdateApplicationMutation, useUploadApplicationAttachmentMutation, useDeleteApplicationAttachmentMutation, useGetPromptCategoriesQuery, useCreatePromptMutation, useDeletePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation } from '@iblai/data-layer';
7
7
  import { toast } from 'sonner';
8
8
  import { jsx, Fragment as Fragment$1, jsxs } from 'react/jsx-runtime';
9
9
  import * as ReactDOM from 'react-dom';
@@ -54758,7 +54758,7 @@ const createLucideIcon = (iconName, iconNode) => {
54758
54758
  */
54759
54759
 
54760
54760
 
54761
- const __iconNode$2k = [
54761
+ const __iconNode$2l = [
54762
54762
  [
54763
54763
  "path",
54764
54764
  {
@@ -54767,7 +54767,7 @@ const __iconNode$2k = [
54767
54767
  }
54768
54768
  ]
54769
54769
  ];
54770
- const Activity = createLucideIcon("activity", __iconNode$2k);
54770
+ const Activity = createLucideIcon("activity", __iconNode$2l);
54771
54771
 
54772
54772
  /**
54773
54773
  * @license lucide-react v0.528.0 - ISC
@@ -54777,12 +54777,12 @@ const Activity = createLucideIcon("activity", __iconNode$2k);
54777
54777
  */
54778
54778
 
54779
54779
 
54780
- const __iconNode$2j = [
54780
+ const __iconNode$2k = [
54781
54781
  ["path", { d: "M17 12H7", key: "16if0g" }],
54782
54782
  ["path", { d: "M19 18H5", key: "18s9l3" }],
54783
54783
  ["path", { d: "M21 6H3", key: "1jwq7v" }]
54784
54784
  ];
54785
- const AlignCenter = createLucideIcon("align-center", __iconNode$2j);
54785
+ const AlignCenter = createLucideIcon("align-center", __iconNode$2k);
54786
54786
 
54787
54787
  /**
54788
54788
  * @license lucide-react v0.528.0 - ISC
@@ -54792,12 +54792,12 @@ const AlignCenter = createLucideIcon("align-center", __iconNode$2j);
54792
54792
  */
54793
54793
 
54794
54794
 
54795
- const __iconNode$2i = [
54795
+ const __iconNode$2j = [
54796
54796
  ["path", { d: "M15 12H3", key: "6jk70r" }],
54797
54797
  ["path", { d: "M17 18H3", key: "1amg6g" }],
54798
54798
  ["path", { d: "M21 6H3", key: "1jwq7v" }]
54799
54799
  ];
54800
- const AlignLeft = createLucideIcon("align-left", __iconNode$2i);
54800
+ const AlignLeft = createLucideIcon("align-left", __iconNode$2j);
54801
54801
 
54802
54802
  /**
54803
54803
  * @license lucide-react v0.528.0 - ISC
@@ -54807,12 +54807,12 @@ const AlignLeft = createLucideIcon("align-left", __iconNode$2i);
54807
54807
  */
54808
54808
 
54809
54809
 
54810
- const __iconNode$2h = [
54810
+ const __iconNode$2i = [
54811
54811
  ["path", { d: "M21 12H9", key: "dn1m92" }],
54812
54812
  ["path", { d: "M21 18H7", key: "1ygte8" }],
54813
54813
  ["path", { d: "M21 6H3", key: "1jwq7v" }]
54814
54814
  ];
54815
- const AlignRight = createLucideIcon("align-right", __iconNode$2h);
54815
+ const AlignRight = createLucideIcon("align-right", __iconNode$2i);
54816
54816
 
54817
54817
  /**
54818
54818
  * @license lucide-react v0.528.0 - ISC
@@ -54822,12 +54822,12 @@ const AlignRight = createLucideIcon("align-right", __iconNode$2h);
54822
54822
  */
54823
54823
 
54824
54824
 
54825
- const __iconNode$2g = [
54825
+ const __iconNode$2h = [
54826
54826
  ["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
54827
54827
  ["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
54828
54828
  ["path", { d: "M10 12h4", key: "a56b0p" }]
54829
54829
  ];
54830
- const Archive = createLucideIcon("archive", __iconNode$2g);
54830
+ const Archive = createLucideIcon("archive", __iconNode$2h);
54831
54831
 
54832
54832
  /**
54833
54833
  * @license lucide-react v0.528.0 - ISC
@@ -54837,11 +54837,11 @@ const Archive = createLucideIcon("archive", __iconNode$2g);
54837
54837
  */
54838
54838
 
54839
54839
 
54840
- const __iconNode$2f = [
54840
+ const __iconNode$2g = [
54841
54841
  ["path", { d: "M12 5v14", key: "s699le" }],
54842
54842
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
54843
54843
  ];
54844
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$2f);
54844
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$2g);
54845
54845
 
54846
54846
  /**
54847
54847
  * @license lucide-react v0.528.0 - ISC
@@ -54851,11 +54851,11 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$2f);
54851
54851
  */
54852
54852
 
54853
54853
 
54854
- const __iconNode$2e = [
54854
+ const __iconNode$2f = [
54855
54855
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
54856
54856
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
54857
54857
  ];
54858
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2e);
54858
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2f);
54859
54859
 
54860
54860
  /**
54861
54861
  * @license lucide-react v0.528.0 - ISC
@@ -54865,11 +54865,11 @@ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2e);
54865
54865
  */
54866
54866
 
54867
54867
 
54868
- const __iconNode$2d = [
54868
+ const __iconNode$2e = [
54869
54869
  ["path", { d: "M5 12h14", key: "1ays0h" }],
54870
54870
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
54871
54871
  ];
54872
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$2d);
54872
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$2e);
54873
54873
 
54874
54874
  /**
54875
54875
  * @license lucide-react v0.528.0 - ISC
@@ -54879,11 +54879,11 @@ const ArrowRight = createLucideIcon("arrow-right", __iconNode$2d);
54879
54879
  */
54880
54880
 
54881
54881
 
54882
- const __iconNode$2c = [
54882
+ const __iconNode$2d = [
54883
54883
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
54884
54884
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
54885
54885
  ];
54886
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$2c);
54886
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$2d);
54887
54887
 
54888
54888
  /**
54889
54889
  * @license lucide-react v0.528.0 - ISC
@@ -54893,7 +54893,7 @@ const ArrowUp = createLucideIcon("arrow-up", __iconNode$2c);
54893
54893
  */
54894
54894
 
54895
54895
 
54896
- const __iconNode$2b = [
54896
+ const __iconNode$2c = [
54897
54897
  [
54898
54898
  "path",
54899
54899
  {
@@ -54903,7 +54903,7 @@ const __iconNode$2b = [
54903
54903
  ],
54904
54904
  ["circle", { cx: "12", cy: "8", r: "6", key: "1vp47v" }]
54905
54905
  ];
54906
- const Award = createLucideIcon("award", __iconNode$2b);
54906
+ const Award = createLucideIcon("award", __iconNode$2c);
54907
54907
 
54908
54908
  /**
54909
54909
  * @license lucide-react v0.528.0 - ISC
@@ -54913,11 +54913,11 @@ const Award = createLucideIcon("award", __iconNode$2b);
54913
54913
  */
54914
54914
 
54915
54915
 
54916
- const __iconNode$2a = [
54916
+ const __iconNode$2b = [
54917
54917
  ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }],
54918
54918
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
54919
54919
  ];
54920
- const Ban = createLucideIcon("ban", __iconNode$2a);
54920
+ const Ban = createLucideIcon("ban", __iconNode$2b);
54921
54921
 
54922
54922
  /**
54923
54923
  * @license lucide-react v0.528.0 - ISC
@@ -54927,12 +54927,12 @@ const Ban = createLucideIcon("ban", __iconNode$2a);
54927
54927
  */
54928
54928
 
54929
54929
 
54930
- const __iconNode$29 = [
54930
+ const __iconNode$2a = [
54931
54931
  ["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }],
54932
54932
  ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }],
54933
54933
  ["path", { d: "M6 12h.01M18 12h.01", key: "113zkx" }]
54934
54934
  ];
54935
- const Banknote = createLucideIcon("banknote", __iconNode$29);
54935
+ const Banknote = createLucideIcon("banknote", __iconNode$2a);
54936
54936
 
54937
54937
  /**
54938
54938
  * @license lucide-react v0.528.0 - ISC
@@ -54942,7 +54942,7 @@ const Banknote = createLucideIcon("banknote", __iconNode$29);
54942
54942
  */
54943
54943
 
54944
54944
 
54945
- const __iconNode$28 = [
54945
+ const __iconNode$29 = [
54946
54946
  ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
54947
54947
  ["path", { d: "M22 8c0-2.3-.8-4.3-2-6", key: "5bb3ad" }],
54948
54948
  [
@@ -54954,7 +54954,7 @@ const __iconNode$28 = [
54954
54954
  ],
54955
54955
  ["path", { d: "M4 2C2.8 3.7 2 5.7 2 8", key: "tap9e0" }]
54956
54956
  ];
54957
- const BellRing = createLucideIcon("bell-ring", __iconNode$28);
54957
+ const BellRing = createLucideIcon("bell-ring", __iconNode$29);
54958
54958
 
54959
54959
  /**
54960
54960
  * @license lucide-react v0.528.0 - ISC
@@ -54964,7 +54964,7 @@ const BellRing = createLucideIcon("bell-ring", __iconNode$28);
54964
54964
  */
54965
54965
 
54966
54966
 
54967
- const __iconNode$27 = [
54967
+ const __iconNode$28 = [
54968
54968
  ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
54969
54969
  [
54970
54970
  "path",
@@ -54974,7 +54974,7 @@ const __iconNode$27 = [
54974
54974
  }
54975
54975
  ]
54976
54976
  ];
54977
- const Bell = createLucideIcon("bell", __iconNode$27);
54977
+ const Bell = createLucideIcon("bell", __iconNode$28);
54978
54978
 
54979
54979
  /**
54980
54980
  * @license lucide-react v0.528.0 - ISC
@@ -54984,13 +54984,13 @@ const Bell = createLucideIcon("bell", __iconNode$27);
54984
54984
  */
54985
54985
 
54986
54986
 
54987
- const __iconNode$26 = [
54987
+ const __iconNode$27 = [
54988
54988
  [
54989
54989
  "path",
54990
54990
  { d: "M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8", key: "mg9rjx" }
54991
54991
  ]
54992
54992
  ];
54993
- const Bold$1 = createLucideIcon("bold", __iconNode$26);
54993
+ const Bold$1 = createLucideIcon("bold", __iconNode$27);
54994
54994
 
54995
54995
  /**
54996
54996
  * @license lucide-react v0.528.0 - ISC
@@ -55000,7 +55000,7 @@ const Bold$1 = createLucideIcon("bold", __iconNode$26);
55000
55000
  */
55001
55001
 
55002
55002
 
55003
- const __iconNode$25 = [
55003
+ const __iconNode$26 = [
55004
55004
  ["path", { d: "M12 7v14", key: "1akyts" }],
55005
55005
  [
55006
55006
  "path",
@@ -55010,7 +55010,7 @@ const __iconNode$25 = [
55010
55010
  }
55011
55011
  ]
55012
55012
  ];
55013
- const BookOpen = createLucideIcon("book-open", __iconNode$25);
55013
+ const BookOpen = createLucideIcon("book-open", __iconNode$26);
55014
55014
 
55015
55015
  /**
55016
55016
  * @license lucide-react v0.528.0 - ISC
@@ -55020,7 +55020,7 @@ const BookOpen = createLucideIcon("book-open", __iconNode$25);
55020
55020
  */
55021
55021
 
55022
55022
 
55023
- const __iconNode$24 = [
55023
+ const __iconNode$25 = [
55024
55024
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
55025
55025
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
55026
55026
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -55028,7 +55028,7 @@ const __iconNode$24 = [
55028
55028
  ["path", { d: "M15 13v2", key: "1xurst" }],
55029
55029
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
55030
55030
  ];
55031
- const Bot = createLucideIcon("bot", __iconNode$24);
55031
+ const Bot = createLucideIcon("bot", __iconNode$25);
55032
55032
 
55033
55033
  /**
55034
55034
  * @license lucide-react v0.528.0 - ISC
@@ -55038,11 +55038,11 @@ const Bot = createLucideIcon("bot", __iconNode$24);
55038
55038
  */
55039
55039
 
55040
55040
 
55041
- const __iconNode$23 = [
55041
+ const __iconNode$24 = [
55042
55042
  ["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
55043
55043
  ["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
55044
55044
  ];
55045
- const Briefcase = createLucideIcon("briefcase", __iconNode$23);
55045
+ const Briefcase = createLucideIcon("briefcase", __iconNode$24);
55046
55046
 
55047
55047
  /**
55048
55048
  * @license lucide-react v0.528.0 - ISC
@@ -55052,7 +55052,7 @@ const Briefcase = createLucideIcon("briefcase", __iconNode$23);
55052
55052
  */
55053
55053
 
55054
55054
 
55055
- const __iconNode$22 = [
55055
+ const __iconNode$23 = [
55056
55056
  ["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
55057
55057
  ["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
55058
55058
  ["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
@@ -55061,7 +55061,7 @@ const __iconNode$22 = [
55061
55061
  ["path", { d: "M10 14h4", key: "kelpxr" }],
55062
55062
  ["path", { d: "M10 18h4", key: "1ulq68" }]
55063
55063
  ];
55064
- const Building2 = createLucideIcon("building-2", __iconNode$22);
55064
+ const Building2 = createLucideIcon("building-2", __iconNode$23);
55065
55065
 
55066
55066
  /**
55067
55067
  * @license lucide-react v0.528.0 - ISC
@@ -55071,13 +55071,13 @@ const Building2 = createLucideIcon("building-2", __iconNode$22);
55071
55071
  */
55072
55072
 
55073
55073
 
55074
- const __iconNode$21 = [
55074
+ const __iconNode$22 = [
55075
55075
  ["path", { d: "M8 2v4", key: "1cmpym" }],
55076
55076
  ["path", { d: "M16 2v4", key: "4m81vk" }],
55077
55077
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
55078
55078
  ["path", { d: "M3 10h18", key: "8toen8" }]
55079
55079
  ];
55080
- const Calendar$1 = createLucideIcon("calendar", __iconNode$21);
55080
+ const Calendar$1 = createLucideIcon("calendar", __iconNode$22);
55081
55081
 
55082
55082
  /**
55083
55083
  * @license lucide-react v0.528.0 - ISC
@@ -55087,11 +55087,11 @@ const Calendar$1 = createLucideIcon("calendar", __iconNode$21);
55087
55087
  */
55088
55088
 
55089
55089
 
55090
- const __iconNode$20 = [
55090
+ const __iconNode$21 = [
55091
55091
  ["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
55092
55092
  ["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
55093
55093
  ];
55094
- const CheckCheck = createLucideIcon("check-check", __iconNode$20);
55094
+ const CheckCheck = createLucideIcon("check-check", __iconNode$21);
55095
55095
 
55096
55096
  /**
55097
55097
  * @license lucide-react v0.528.0 - ISC
@@ -55101,8 +55101,8 @@ const CheckCheck = createLucideIcon("check-check", __iconNode$20);
55101
55101
  */
55102
55102
 
55103
55103
 
55104
- const __iconNode$1$ = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
55105
- const Check = createLucideIcon("check", __iconNode$1$);
55104
+ const __iconNode$20 = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
55105
+ const Check = createLucideIcon("check", __iconNode$20);
55106
55106
 
55107
55107
  /**
55108
55108
  * @license lucide-react v0.528.0 - ISC
@@ -55112,8 +55112,8 @@ const Check = createLucideIcon("check", __iconNode$1$);
55112
55112
  */
55113
55113
 
55114
55114
 
55115
- const __iconNode$1_ = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
55116
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1_);
55115
+ const __iconNode$1$ = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
55116
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1$);
55117
55117
 
55118
55118
  /**
55119
55119
  * @license lucide-react v0.528.0 - ISC
@@ -55123,11 +55123,11 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1_);
55123
55123
  */
55124
55124
 
55125
55125
 
55126
- const __iconNode$1Z = [
55126
+ const __iconNode$1_ = [
55127
55127
  ["path", { d: "m17 18-6-6 6-6", key: "1yerx2" }],
55128
55128
  ["path", { d: "M7 6v12", key: "1p53r6" }]
55129
55129
  ];
55130
- const ChevronFirst = createLucideIcon("chevron-first", __iconNode$1Z);
55130
+ const ChevronFirst = createLucideIcon("chevron-first", __iconNode$1_);
55131
55131
 
55132
55132
  /**
55133
55133
  * @license lucide-react v0.528.0 - ISC
@@ -55137,11 +55137,11 @@ const ChevronFirst = createLucideIcon("chevron-first", __iconNode$1Z);
55137
55137
  */
55138
55138
 
55139
55139
 
55140
- const __iconNode$1Y = [
55140
+ const __iconNode$1Z = [
55141
55141
  ["path", { d: "m7 18 6-6-6-6", key: "lwmzdw" }],
55142
55142
  ["path", { d: "M17 6v12", key: "1o0aio" }]
55143
55143
  ];
55144
- const ChevronLast = createLucideIcon("chevron-last", __iconNode$1Y);
55144
+ const ChevronLast = createLucideIcon("chevron-last", __iconNode$1Z);
55145
55145
 
55146
55146
  /**
55147
55147
  * @license lucide-react v0.528.0 - ISC
@@ -55151,8 +55151,8 @@ const ChevronLast = createLucideIcon("chevron-last", __iconNode$1Y);
55151
55151
  */
55152
55152
 
55153
55153
 
55154
- const __iconNode$1X = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
55155
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1X);
55154
+ const __iconNode$1Y = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
55155
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1Y);
55156
55156
 
55157
55157
  /**
55158
55158
  * @license lucide-react v0.528.0 - ISC
@@ -55162,8 +55162,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1X);
55162
55162
  */
55163
55163
 
55164
55164
 
55165
- const __iconNode$1W = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
55166
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1W);
55165
+ const __iconNode$1X = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
55166
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1X);
55167
55167
 
55168
55168
  /**
55169
55169
  * @license lucide-react v0.528.0 - ISC
@@ -55173,8 +55173,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1W);
55173
55173
  */
55174
55174
 
55175
55175
 
55176
- const __iconNode$1V = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
55177
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$1V);
55176
+ const __iconNode$1W = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
55177
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1W);
55178
55178
 
55179
55179
  /**
55180
55180
  * @license lucide-react v0.528.0 - ISC
@@ -55184,11 +55184,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1V);
55184
55184
  */
55185
55185
 
55186
55186
 
55187
- const __iconNode$1U = [
55187
+ const __iconNode$1V = [
55188
55188
  ["path", { d: "m11 17-5-5 5-5", key: "13zhaf" }],
55189
55189
  ["path", { d: "m18 17-5-5 5-5", key: "h8a8et" }]
55190
55190
  ];
55191
- const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$1U);
55191
+ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$1V);
55192
55192
 
55193
55193
  /**
55194
55194
  * @license lucide-react v0.528.0 - ISC
@@ -55198,11 +55198,11 @@ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$1U);
55198
55198
  */
55199
55199
 
55200
55200
 
55201
- const __iconNode$1T = [
55201
+ const __iconNode$1U = [
55202
55202
  ["path", { d: "m6 17 5-5-5-5", key: "xnjwq" }],
55203
55203
  ["path", { d: "m13 17 5-5-5-5", key: "17xmmf" }]
55204
55204
  ];
55205
- const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$1T);
55205
+ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$1U);
55206
55206
 
55207
55207
  /**
55208
55208
  * @license lucide-react v0.528.0 - ISC
@@ -55212,11 +55212,11 @@ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$1T);
55212
55212
  */
55213
55213
 
55214
55214
 
55215
- const __iconNode$1S = [
55215
+ const __iconNode$1T = [
55216
55216
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
55217
55217
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
55218
55218
  ];
55219
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1S);
55219
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1T);
55220
55220
 
55221
55221
  /**
55222
55222
  * @license lucide-react v0.528.0 - ISC
@@ -55226,12 +55226,12 @@ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1S);
55226
55226
  */
55227
55227
 
55228
55228
 
55229
- const __iconNode$1R = [
55229
+ const __iconNode$1S = [
55230
55230
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
55231
55231
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
55232
55232
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
55233
55233
  ];
55234
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$1R);
55234
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$1S);
55235
55235
 
55236
55236
  /**
55237
55237
  * @license lucide-react v0.528.0 - ISC
@@ -55241,11 +55241,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$1R);
55241
55241
  */
55242
55242
 
55243
55243
 
55244
- const __iconNode$1Q = [
55244
+ const __iconNode$1R = [
55245
55245
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
55246
55246
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
55247
55247
  ];
55248
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1Q);
55248
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1R);
55249
55249
 
55250
55250
  /**
55251
55251
  * @license lucide-react v0.528.0 - ISC
@@ -55255,11 +55255,25 @@ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1Q);
55255
55255
  */
55256
55256
 
55257
55257
 
55258
- const __iconNode$1P = [
55258
+ const __iconNode$1Q = [
55259
55259
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
55260
55260
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
55261
55261
  ];
55262
- const CircleCheck = createLucideIcon("circle-check", __iconNode$1P);
55262
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$1Q);
55263
+
55264
+ /**
55265
+ * @license lucide-react v0.528.0 - ISC
55266
+ *
55267
+ * This source code is licensed under the ISC license.
55268
+ * See the LICENSE file in the root directory of this source tree.
55269
+ */
55270
+
55271
+
55272
+ const __iconNode$1P = [
55273
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
55274
+ ["path", { d: "M8 12h8", key: "1wcyev" }]
55275
+ ];
55276
+ const CircleMinus$1 = createLucideIcon("circle-minus", __iconNode$1P);
55263
55277
 
55264
55278
  /**
55265
55279
  * @license lucide-react v0.528.0 - ISC
@@ -61011,118 +61025,6 @@ var gradebookGradebookTab$3 = {
61011
61025
  previousPage: "Previous",
61012
61026
  nextPage: "Next"
61013
61027
  };
61014
- var graderTabLabels$3 = {
61015
- header: {
61016
- title: "Grader",
61017
- description: "Set up how your agent grades work against a rubric you define."
61018
- },
61019
- capability: {
61020
- title: "Grading",
61021
- description: "Let your agent grade work. When this is on, the agent scores what people submit against the rubric you set up below and shares the result as feedback — great for essays, projects, and practice exercises.",
61022
- offHint: "Turn it on to write grading instructions and build your rubric. Anything you set up here is kept safe if you later turn it off."
61023
- },
61024
- subTabs: {
61025
- setup: "Grading setup",
61026
- rubric: "Rubric"
61027
- },
61028
- denied: {
61029
- title: "No access to grading settings",
61030
- description: "You don't have permission to view this agent's grading setup. Ask an administrator for access."
61031
- },
61032
- warnings: {
61033
- noConfig: "Grading is on but not set up yet — the agent will fail when asked to grade. Save your grading instructions in Grading setup to finish.",
61034
- noCriteria: "Grading is on but the rubric is empty — the agent will fail when asked to grade. Add at least one criterion in the Rubric tab."
61035
- },
61036
- config: {
61037
- sectionTitle: "Grading setup",
61038
- gradingMode: {
61039
- label: "What gets graded",
61040
- options: {
61041
- submission: "A submission",
61042
- conversation: "The conversation"
61043
- },
61044
- help: {
61045
- submission: "The agent grades a piece of work the person hands in, like an essay or answer.",
61046
- conversation: "The agent grades how the whole conversation went."
61047
- }
61048
- },
61049
- feedbackMode: {
61050
- label: "Feedback shared with the person",
61051
- options: {
61052
- overall: "Overall feedback only",
61053
- perCriteria: "Feedback per criterion",
61054
- both: "Overall + per criterion"
61055
- },
61056
- help: "The overall score is always calculated — this only controls how much detail is shared back."
61057
- },
61058
- instructions: {
61059
- label: "Grading instructions",
61060
- placeholder: "Describe what's being graded and anything the grader should know beyond the rubric. E.g. 'You are grading a 500-word persuasive essay on climate policy written by a high-school student. Be encouraging but honest.'",
61061
- help: "Required. This is the context the agent uses every time it grades."
61062
- },
61063
- saveButton: "Save",
61064
- savingButton: "Saving…"
61065
- },
61066
- criteria: {
61067
- sectionTitle: "Rubric",
61068
- description: "Each row is one thing the agent looks for and how many points it is worth. The overall score is points earned out of the total.",
61069
- needsConfigHint: "Save your grading setup first, then add rubric criteria here.",
61070
- emptyState: "No criteria yet. Add your first one — for example \"Clarity\", 10 points.",
61071
- addButton: "Add criterion",
61072
- columns: {
61073
- name: "Name",
61074
- criteria: "Criteria",
61075
- points: "Points"
61076
- },
61077
- actionsAria: "Actions for {name}",
61078
- edit: "Edit",
61079
- "delete": "Delete",
61080
- totalPoints: "Total possible points: {total}",
61081
- scoreHint: "Overall score = points earned ÷ {total}.",
61082
- lastCriterionHint: "A rubric needs at least one criterion — add another before removing this one.",
61083
- modal: {
61084
- addTitle: "Add criterion",
61085
- editTitle: "Edit criterion",
61086
- name: {
61087
- label: "Name",
61088
- placeholder: "e.g. Clarity",
61089
- required: "Name is required"
61090
- },
61091
- criteria: {
61092
- label: "Criteria",
61093
- placeholder: "e.g. The argument is easy to follow and each paragraph makes one clear point.",
61094
- required: "Criteria is required"
61095
- },
61096
- points: {
61097
- label: "Points",
61098
- placeholder: "10",
61099
- positive: "Points must be a positive number"
61100
- },
61101
- save: "Save",
61102
- saving: "Saving…",
61103
- cancel: "Cancel"
61104
- },
61105
- deleteModal: {
61106
- title: "Delete criterion",
61107
- confirmationPrefix: "Are you sure you want to remove",
61108
- confirmationSuffix: " from the rubric?",
61109
- cancel: "Cancel",
61110
- "delete": "Delete",
61111
- deleting: "Deleting…"
61112
- }
61113
- },
61114
- toasts: {
61115
- toggleOn: "Grading turned on",
61116
- toggleOff: "Grading turned off — your rubric is kept for next time",
61117
- toggleError: "Couldn't update grading",
61118
- configSaved: "Grading setup saved",
61119
- configError: "Couldn't save grading setup",
61120
- criterionAdded: "Criterion added",
61121
- criterionUpdated: "Criterion updated",
61122
- criterionDeleted: "Criterion deleted",
61123
- criterionError: "Couldn't update the rubric"
61124
- }
61125
- };
61126
61028
  var careerExperienceDialog$3 = {
61127
61029
  pleaseSelectACompany: "Please select a company",
61128
61030
  endDateCannotBeBeforeStartDate: "End date cannot be before start date",
@@ -61436,7 +61338,57 @@ var clawSandboxAgentSkills$3 = {
61436
61338
  fieldVersionPlaceholder: "e.g. 1.0.0",
61437
61339
  fieldDescription: "Description",
61438
61340
  fieldDescriptionPlaceholder: "e.g. Search the web for information",
61439
- fieldInstruction: "Instruction"
61341
+ fieldInstruction: "Instruction",
61342
+ sessionNote: "Skills added or removed here apply to new chat sessions only. Edits to a skill's instructions apply immediately, including in conversations already in progress.",
61343
+ effectiveHeading: "This agent's skills",
61344
+ catalogHeading: "Available skills",
61345
+ noEffectiveSkills: "No skills enabled for this agent yet. Add one from the available skills below.",
61346
+ addToAgent: "Add",
61347
+ addToAgentLabel: "Add {name} to this agent",
61348
+ removeFromAgent: "Remove from agent",
61349
+ skillAdded: "{name} added",
61350
+ skillRemoved: "{name} removed",
61351
+ featuredBadge: "Featured",
61352
+ nativeBadge: "Native",
61353
+ privateBadge: "Only this agent",
61354
+ fieldCategory: "Category",
61355
+ fieldCategoryPlaceholder: "e.g. web, code, data",
61356
+ privateToAgent: "Only this agent",
61357
+ privateToAgentHint: "Private skills are available to this agent only and take precedence over platform skills with the same slug.",
61358
+ instructionHint: "The playbook the agent follows when the skill is used. Edits apply immediately, including in conversations already in progress.",
61359
+ filesHint: "Optional resources the agent can use with this skill. References and scripts are text files; assets are uploaded files.",
61360
+ filesAfterCreateHint: "You can attach resources to this skill after creating it (reopen it with Edit).",
61361
+ noFiles: "No resources attached yet.",
61362
+ loadingFiles: "Loading resources...",
61363
+ fileTypeLabel: "Type",
61364
+ fileTypeReference: "Reference",
61365
+ fileTypeScript: "Script",
61366
+ fileTypeAsset: "Asset",
61367
+ fileNameLabel: "File name",
61368
+ fileNamePlaceholder: "e.g. rubric.md",
61369
+ fileContentLabel: "Content",
61370
+ fileContentPlaceholder: "The file's text content",
61371
+ addFileButton: "Add resource",
61372
+ adding: "Adding...",
61373
+ uploading: "Uploading...",
61374
+ fileAdded: "Resource added",
61375
+ fileUploaded: "Resource uploaded",
61376
+ fileSaved: "Resource saved",
61377
+ fileDeleted: "Resource deleted",
61378
+ failedToSaveFile: "Failed to save resource",
61379
+ failedToUploadFile: "Failed to upload resource",
61380
+ failedToDeleteFile: "Failed to delete resource",
61381
+ detailsTab: "General",
61382
+ filesTab: "Resources",
61383
+ newFile: "New Resource",
61384
+ newFileDialogTitle: "New Resource",
61385
+ editFileDialogTitle: "Edit Resource",
61386
+ deleteFileDialogTitle: "Delete Resource",
61387
+ deleteFileConfirmation: "Are you sure you want to delete {name}? This action cannot be undone.",
61388
+ chooseFile: "Choose file",
61389
+ upload: "Upload",
61390
+ download: "Download",
61391
+ resourcesItemLabel: "resources"
61440
61392
  };
61441
61393
  var clawSandboxHelpers$3 = {
61442
61394
  unknown: "Unknown",
@@ -63701,7 +63653,7 @@ var safetyTabLabels$3 = {
63701
63653
  };
63702
63654
  var screenshareTabLabels$3 = {
63703
63655
  header: {
63704
- title: "Screen Share",
63656
+ title: "Screen",
63705
63657
  description: "How your agent behaves when a user shares their screen during a voice call."
63706
63658
  },
63707
63659
  capability: {
@@ -65340,6 +65292,19 @@ var platformNavbar$3 = {
65340
65292
  placementExamsHeader: "Placement exams",
65341
65293
  placementExamFallback: "Placement exam"
65342
65294
  };
65295
+ var slashSkillPicker$3 = {
65296
+ listLabel: "Agent skills",
65297
+ resultsAnnouncement: "{count} skills available. Use arrow keys to browse and Enter to select.",
65298
+ loading: "Loading..."
65299
+ };
65300
+ var skillsTabLabels$3 = {
65301
+ header: {
65302
+ title: "Skills",
65303
+ description: "Reusable playbooks you can attach to this agent — each one is a set of instructions for a job. In chat, type / to use one."
65304
+ },
65305
+ notBaseAgent: "Skills are only available to Base Agents.",
65306
+ loading: "Loading..."
65307
+ };
65343
65308
  var placementExam$3 = {
65344
65309
  title: "Placement exam",
65345
65310
  back: "Back"
@@ -65636,6 +65601,118 @@ var profileApplicationsQuestionsEditor$3 = {
65636
65601
  collapseSection: "Collapse section",
65637
65602
  expandSection: "Expand section"
65638
65603
  };
65604
+ var graderTabLabels$3 = {
65605
+ header: {
65606
+ title: "Grader",
65607
+ description: "Set up how your agent grades work against a rubric you define."
65608
+ },
65609
+ capability: {
65610
+ title: "Grading",
65611
+ description: "Let your agent grade work. When this is on, the agent scores what people submit against the rubric you set up below and shares the result as feedback — great for essays, projects, and practice exercises.",
65612
+ offHint: "Turn it on to write grading instructions and build your rubric. Anything you set up here is kept safe if you later turn it off."
65613
+ },
65614
+ subTabs: {
65615
+ setup: "Grading setup",
65616
+ rubric: "Rubric"
65617
+ },
65618
+ denied: {
65619
+ title: "No access to grading settings",
65620
+ description: "You don't have permission to view this agent's grading setup. Ask an administrator for access."
65621
+ },
65622
+ warnings: {
65623
+ noConfig: "Grading is on but not set up yet — the agent will fail when asked to grade. Save your grading instructions in Grading setup to finish.",
65624
+ noCriteria: "Grading is on but the rubric is empty — the agent will fail when asked to grade. Add at least one criterion in the Rubric tab."
65625
+ },
65626
+ config: {
65627
+ sectionTitle: "Grading setup",
65628
+ gradingMode: {
65629
+ label: "What gets graded",
65630
+ options: {
65631
+ submission: "A submission",
65632
+ conversation: "The conversation"
65633
+ },
65634
+ help: {
65635
+ submission: "The agent grades a piece of work the person hands in, like an essay or answer.",
65636
+ conversation: "The agent grades how the whole conversation went."
65637
+ }
65638
+ },
65639
+ feedbackMode: {
65640
+ label: "Feedback shared with the person",
65641
+ options: {
65642
+ overall: "Overall feedback only",
65643
+ perCriteria: "Feedback per criterion",
65644
+ both: "Overall + per criterion"
65645
+ },
65646
+ help: "The overall score is always calculated — this only controls how much detail is shared back."
65647
+ },
65648
+ instructions: {
65649
+ label: "Grading instructions",
65650
+ placeholder: "Describe what's being graded and anything the grader should know beyond the rubric. E.g. 'You are grading a 500-word persuasive essay on climate policy written by a high-school student. Be encouraging but honest.'",
65651
+ help: "Required. This is the context the agent uses every time it grades."
65652
+ },
65653
+ saveButton: "Save",
65654
+ savingButton: "Saving…"
65655
+ },
65656
+ criteria: {
65657
+ sectionTitle: "Rubric",
65658
+ description: "Each row is one thing the agent looks for and how many points it is worth. The overall score is points earned out of the total.",
65659
+ needsConfigHint: "Save your grading setup first, then add rubric criteria here.",
65660
+ emptyState: "No criteria yet. Add your first one — for example \"Clarity\", 10 points.",
65661
+ addButton: "Add criterion",
65662
+ columns: {
65663
+ name: "Name",
65664
+ criteria: "Criteria",
65665
+ points: "Points"
65666
+ },
65667
+ actionsAria: "Actions for {name}",
65668
+ edit: "Edit",
65669
+ "delete": "Delete",
65670
+ totalPoints: "Total possible points: {total}",
65671
+ scoreHint: "Overall score = points earned ÷ {total}.",
65672
+ lastCriterionHint: "A rubric needs at least one criterion — add another before removing this one.",
65673
+ modal: {
65674
+ addTitle: "Add criterion",
65675
+ editTitle: "Edit criterion",
65676
+ name: {
65677
+ label: "Name",
65678
+ placeholder: "e.g. Clarity",
65679
+ required: "Name is required"
65680
+ },
65681
+ criteria: {
65682
+ label: "Criteria",
65683
+ placeholder: "e.g. The argument is easy to follow and each paragraph makes one clear point.",
65684
+ required: "Criteria is required"
65685
+ },
65686
+ points: {
65687
+ label: "Points",
65688
+ placeholder: "10",
65689
+ positive: "Points must be a positive number"
65690
+ },
65691
+ save: "Save",
65692
+ saving: "Saving…",
65693
+ cancel: "Cancel"
65694
+ },
65695
+ deleteModal: {
65696
+ title: "Delete criterion",
65697
+ confirmationPrefix: "Are you sure you want to remove",
65698
+ confirmationSuffix: " from the rubric?",
65699
+ cancel: "Cancel",
65700
+ "delete": "Delete",
65701
+ deleting: "Deleting…"
65702
+ }
65703
+ },
65704
+ toasts: {
65705
+ toggleOn: "Grading turned on",
65706
+ toggleOff: "Grading turned off — your rubric is kept for next time",
65707
+ toggleError: "Couldn't update grading",
65708
+ configSaved: "Grading setup saved",
65709
+ configError: "Couldn't save grading setup",
65710
+ criterionAdded: "Criterion added",
65711
+ criterionUpdated: "Criterion updated",
65712
+ criterionDeleted: "Criterion deleted",
65713
+ criterionError: "Couldn't update the rubric"
65714
+ }
65715
+ };
65639
65716
  var en = {
65640
65717
  accessTabAddAccess: accessTabAddAccess$3,
65641
65718
  accessTabLabels: accessTabLabels$3,
@@ -65690,7 +65767,6 @@ var en = {
65690
65767
  careerEducationDialog: careerEducationDialog$3,
65691
65768
  careerEducationTab: careerEducationTab$3,
65692
65769
  gradebookGradebookTab: gradebookGradebookTab$3,
65693
- graderTabLabels: graderTabLabels$3,
65694
65770
  careerExperienceDialog: careerExperienceDialog$3,
65695
65771
  careerExperienceTab: careerExperienceTab$3,
65696
65772
  careerInstitutionDialog: careerInstitutionDialog$3,
@@ -65884,10 +65960,13 @@ var en = {
65884
65960
  benchmarksAddItemsModal: benchmarksAddItemsModal$3,
65885
65961
  platformSidebar: platformSidebar$3,
65886
65962
  platformNavbar: platformNavbar$3,
65963
+ slashSkillPicker: slashSkillPicker$3,
65964
+ skillsTabLabels: skillsTabLabels$3,
65887
65965
  placementExam: placementExam$3,
65888
65966
  applyApplyWizard: applyApplyWizard$3,
65889
65967
  profileApplicationsTab: profileApplicationsTab$3,
65890
- profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$3
65968
+ profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$3,
65969
+ graderTabLabels: graderTabLabels$3
65891
65970
  };
65892
65971
 
65893
65972
  var accessTabAddAccess$2 = {
@@ -67557,7 +67636,57 @@ var clawSandboxAgentSkills$2 = {
67557
67636
  fieldVersionPlaceholder: "ex. 1.0.0",
67558
67637
  fieldDescription: "Description",
67559
67638
  fieldDescriptionPlaceholder: "ex. Rechercher des informations sur le web",
67560
- fieldInstruction: "Instruction"
67639
+ fieldInstruction: "Instruction",
67640
+ sessionNote: "Les compétences ajoutées ou supprimées ici ne s'appliquent qu'aux nouvelles sessions de chat. Les modifications des instructions d'une compétence s'appliquent immédiatement, y compris dans les conversations en cours.",
67641
+ effectiveHeading: "Compétences de cet agent",
67642
+ catalogHeading: "Compétences disponibles",
67643
+ noEffectiveSkills: "Cet agent n'a pas encore de compétences activées. Ajoutez-en une depuis les compétences disponibles.",
67644
+ addToAgent: "Ajouter",
67645
+ addToAgentLabel: "Ajouter {name} à cet agent",
67646
+ removeFromAgent: "Retirer de l'agent",
67647
+ skillAdded: "{name} ajoutée",
67648
+ skillRemoved: "{name} retirée",
67649
+ featuredBadge: "En vedette",
67650
+ nativeBadge: "Native",
67651
+ privateBadge: "Cet agent uniquement",
67652
+ fieldCategory: "Catégorie",
67653
+ fieldCategoryPlaceholder: "p. ex. web, code, données",
67654
+ privateToAgent: "Cet agent uniquement",
67655
+ privateToAgentHint: "Les compétences privées ne sont disponibles que pour cet agent et priment sur les compétences de la plateforme portant le même slug.",
67656
+ instructionHint: "Le guide que l'agent suit lorsque la compétence est utilisée. Les modifications s'appliquent immédiatement, y compris dans les conversations en cours.",
67657
+ filesHint: "Ressources facultatives que l'agent peut utiliser avec cette compétence. Les références et les scripts sont des fichiers texte ; les assets sont des fichiers téléversés.",
67658
+ filesAfterCreateHint: "Vous pouvez joindre des ressources à cette compétence après sa création (rouvrez-la avec Modifier).",
67659
+ noFiles: "Aucune ressource jointe pour le moment.",
67660
+ loadingFiles: "Chargement des ressources...",
67661
+ fileTypeLabel: "Type",
67662
+ fileTypeReference: "Référence",
67663
+ fileTypeScript: "Script",
67664
+ fileTypeAsset: "Ressource",
67665
+ fileNameLabel: "Nom du fichier",
67666
+ fileNamePlaceholder: "p. ex. grille.md",
67667
+ fileContentLabel: "Contenu",
67668
+ fileContentPlaceholder: "Le contenu texte du fichier",
67669
+ addFileButton: "Ajouter la ressource",
67670
+ adding: "Ajout...",
67671
+ uploading: "Téléversement...",
67672
+ fileAdded: "Ressource ajoutée",
67673
+ fileUploaded: "Ressource téléversée",
67674
+ fileSaved: "Ressource enregistrée",
67675
+ fileDeleted: "Ressource supprimée",
67676
+ failedToSaveFile: "Impossible d'enregistrer la ressource",
67677
+ failedToUploadFile: "Impossible de téléverser la ressource",
67678
+ failedToDeleteFile: "Impossible de supprimer la ressource",
67679
+ detailsTab: "Général",
67680
+ filesTab: "Ressources",
67681
+ newFile: "Nouvelle ressource",
67682
+ newFileDialogTitle: "Nouvelle ressource",
67683
+ editFileDialogTitle: "Modifier la ressource",
67684
+ deleteFileDialogTitle: "Supprimer la ressource",
67685
+ deleteFileConfirmation: "Voulez-vous vraiment supprimer {name} ? Cette action est irréversible.",
67686
+ chooseFile: "Choisir un fichier",
67687
+ upload: "Téléverser",
67688
+ download: "Télécharger",
67689
+ resourcesItemLabel: "ressources"
67561
67690
  };
67562
67691
  var clawSandboxHelpers$2 = {
67563
67692
  unknown: "Inconnu",
@@ -69822,7 +69951,7 @@ var safetyTabLabels$2 = {
69822
69951
  };
69823
69952
  var screenshareTabLabels$2 = {
69824
69953
  header: {
69825
- title: "Partage d’écran",
69954
+ title: "Écran",
69826
69955
  description: "Comment votre agent se comporte lorsqu’un utilisateur partage son écran pendant un appel vocal."
69827
69956
  },
69828
69957
  capability: {
@@ -71757,6 +71886,19 @@ var profileApplicationsQuestionsEditor$2 = {
71757
71886
  collapseSection: "Réduire la section",
71758
71887
  expandSection: "Développer la section"
71759
71888
  };
71889
+ var slashSkillPicker$2 = {
71890
+ listLabel: "Compétences de l'agent",
71891
+ resultsAnnouncement: "{count} compétences disponibles. Utilisez les flèches pour parcourir et Entrée pour sélectionner.",
71892
+ loading: "Chargement..."
71893
+ };
71894
+ var skillsTabLabels$2 = {
71895
+ header: {
71896
+ title: "Compétences",
71897
+ description: "Des guides réutilisables à attacher à cet agent — chacun est un ensemble d'instructions pour une tâche. Dans le chat, tapez / pour en utiliser un."
71898
+ },
71899
+ notBaseAgent: "Les compétences ne sont disponibles que pour les agents de base.",
71900
+ loading: "Chargement..."
71901
+ };
71760
71902
  var fr = {
71761
71903
  accessTabAddAccess: accessTabAddAccess$2,
71762
71904
  accessTabLabels: accessTabLabels$2,
@@ -72008,7 +72150,9 @@ var fr = {
72008
72150
  placementExam: placementExam$2,
72009
72151
  applyApplyWizard: applyApplyWizard$2,
72010
72152
  profileApplicationsTab: profileApplicationsTab$2,
72011
- profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$2
72153
+ profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$2,
72154
+ slashSkillPicker: slashSkillPicker$2,
72155
+ skillsTabLabels: skillsTabLabels$2
72012
72156
  };
72013
72157
 
72014
72158
  var accessTabAddAccess$1 = {
@@ -73678,7 +73822,57 @@ var clawSandboxAgentSkills$1 = {
73678
73822
  fieldVersionPlaceholder: "ej. 1.0.0",
73679
73823
  fieldDescription: "Descripción",
73680
73824
  fieldDescriptionPlaceholder: "ej. Buscar información en la web",
73681
- fieldInstruction: "Instrucción"
73825
+ fieldInstruction: "Instrucción",
73826
+ sessionNote: "Las habilidades añadidas o eliminadas aquí solo se aplican a las nuevas sesiones de chat. Los cambios en las instrucciones de una habilidad se aplican de inmediato, incluso en conversaciones en curso.",
73827
+ effectiveHeading: "Habilidades de este agente",
73828
+ catalogHeading: "Habilidades disponibles",
73829
+ noEffectiveSkills: "Este agente aún no tiene habilidades habilitadas. Añade una desde las habilidades disponibles.",
73830
+ addToAgent: "Añadir",
73831
+ addToAgentLabel: "Añadir {name} a este agente",
73832
+ removeFromAgent: "Quitar del agente",
73833
+ skillAdded: "{name} añadida",
73834
+ skillRemoved: "{name} eliminada",
73835
+ featuredBadge: "Destacada",
73836
+ nativeBadge: "Nativa",
73837
+ privateBadge: "Solo este agente",
73838
+ fieldCategory: "Categoría",
73839
+ fieldCategoryPlaceholder: "p. ej. web, código, datos",
73840
+ privateToAgent: "Solo este agente",
73841
+ privateToAgentHint: "Las habilidades privadas solo están disponibles para este agente y tienen prioridad sobre las habilidades de la plataforma con el mismo slug.",
73842
+ instructionHint: "La guía que sigue el agente cuando se usa la habilidad. Los cambios se aplican de inmediato, incluso en conversaciones en curso.",
73843
+ filesHint: "Recursos opcionales que el agente puede usar con esta habilidad. Las referencias y los scripts son archivos de texto; los assets son archivos subidos.",
73844
+ filesAfterCreateHint: "Puedes adjuntar recursos a esta habilidad después de crearla (vuelve a abrirla con Editar).",
73845
+ noFiles: "Aún no hay recursos adjuntos.",
73846
+ loadingFiles: "Cargando recursos...",
73847
+ fileTypeLabel: "Tipo",
73848
+ fileTypeReference: "Referencia",
73849
+ fileTypeScript: "Script",
73850
+ fileTypeAsset: "Recurso",
73851
+ fileNameLabel: "Nombre del archivo",
73852
+ fileNamePlaceholder: "p. ej. rubrica.md",
73853
+ fileContentLabel: "Contenido",
73854
+ fileContentPlaceholder: "El contenido de texto del archivo",
73855
+ addFileButton: "Añadir recurso",
73856
+ adding: "Añadiendo...",
73857
+ uploading: "Subiendo...",
73858
+ fileAdded: "Recurso añadido",
73859
+ fileUploaded: "Recurso subido",
73860
+ fileSaved: "Recurso guardado",
73861
+ fileDeleted: "Recurso eliminado",
73862
+ failedToSaveFile: "No se pudo guardar el recurso",
73863
+ failedToUploadFile: "No se pudo subir el recurso",
73864
+ failedToDeleteFile: "No se pudo eliminar el recurso",
73865
+ detailsTab: "General",
73866
+ filesTab: "Recursos",
73867
+ newFile: "Nuevo recurso",
73868
+ newFileDialogTitle: "Nuevo recurso",
73869
+ editFileDialogTitle: "Editar recurso",
73870
+ deleteFileDialogTitle: "Eliminar recurso",
73871
+ deleteFileConfirmation: "¿Seguro que quieres eliminar {name}? Esta acción no se puede deshacer.",
73872
+ chooseFile: "Elegir archivo",
73873
+ upload: "Subir",
73874
+ download: "Descargar",
73875
+ resourcesItemLabel: "recursos"
73682
73876
  };
73683
73877
  var clawSandboxHelpers$1 = {
73684
73878
  unknown: "Desconocido",
@@ -75943,7 +76137,7 @@ var safetyTabLabels$1 = {
75943
76137
  };
75944
76138
  var screenshareTabLabels$1 = {
75945
76139
  header: {
75946
- title: "Pantalla compartida",
76140
+ title: "Pantalla",
75947
76141
  description: "Cómo se comporta tu agente cuando un usuario comparte su pantalla durante una llamada de voz."
75948
76142
  },
75949
76143
  capability: {
@@ -77878,6 +78072,19 @@ var profileApplicationsQuestionsEditor$1 = {
77878
78072
  collapseSection: "Contraer sección",
77879
78073
  expandSection: "Expandir sección"
77880
78074
  };
78075
+ var slashSkillPicker$1 = {
78076
+ listLabel: "Habilidades del agente",
78077
+ resultsAnnouncement: "{count} habilidades disponibles. Usa las flechas para navegar y Enter para seleccionar.",
78078
+ loading: "Cargando..."
78079
+ };
78080
+ var skillsTabLabels$1 = {
78081
+ header: {
78082
+ title: "Habilidades",
78083
+ description: "Guías reutilizables que puedes adjuntar a este agente: cada una es un conjunto de instrucciones para una tarea. En el chat, escribe / para usar una."
78084
+ },
78085
+ notBaseAgent: "Las habilidades solo están disponibles para los agentes base.",
78086
+ loading: "Cargando..."
78087
+ };
77881
78088
  var es = {
77882
78089
  accessTabAddAccess: accessTabAddAccess$1,
77883
78090
  accessTabLabels: accessTabLabels$1,
@@ -78129,7 +78336,9 @@ var es = {
78129
78336
  placementExam: placementExam$1,
78130
78337
  applyApplyWizard: applyApplyWizard$1,
78131
78338
  profileApplicationsTab: profileApplicationsTab$1,
78132
- profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$1
78339
+ profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$1,
78340
+ slashSkillPicker: slashSkillPicker$1,
78341
+ skillsTabLabels: skillsTabLabels$1
78133
78342
  };
78134
78343
 
78135
78344
  var accessTabAddAccess = {
@@ -79799,7 +80008,57 @@ var clawSandboxAgentSkills = {
79799
80008
  fieldVersionPlaceholder: "例如:1.0.0",
79800
80009
  fieldDescription: "描述",
79801
80010
  fieldDescriptionPlaceholder: "例如:在网络上搜索信息",
79802
- fieldInstruction: "指令"
80011
+ fieldInstruction: "指令",
80012
+ sessionNote: "在此添加或移除的技能仅对新的聊天会话生效。技能指令的修改会立即生效,包括正在进行的对话。",
80013
+ effectiveHeading: "此智能体的技能",
80014
+ catalogHeading: "可用技能",
80015
+ noEffectiveSkills: "此智能体尚未启用任何技能。请从下方的可用技能中添加。",
80016
+ addToAgent: "添加",
80017
+ addToAgentLabel: "将 {name} 添加到此智能体",
80018
+ removeFromAgent: "从智能体中移除",
80019
+ skillAdded: "已添加 {name}",
80020
+ skillRemoved: "已移除 {name}",
80021
+ featuredBadge: "精选",
80022
+ nativeBadge: "原生",
80023
+ privateBadge: "仅此智能体",
80024
+ fieldCategory: "分类",
80025
+ fieldCategoryPlaceholder: "例如 web、代码、数据",
80026
+ privateToAgent: "仅此智能体",
80027
+ privateToAgentHint: "私有技能仅对此智能体可用,并优先于具有相同 slug 的平台技能。",
80028
+ instructionHint: "使用该技能时智能体遵循的操作指南。修改会立即生效,包括正在进行的对话。",
80029
+ filesHint: "智能体在使用此技能时可参考的可选资源。参考资料和脚本是文本文件;资产是上传的文件。",
80030
+ filesAfterCreateHint: "创建技能后即可附加资源(通过“编辑”重新打开)。",
80031
+ noFiles: "尚未附加任何资源。",
80032
+ loadingFiles: "正在加载资源...",
80033
+ fileTypeLabel: "类型",
80034
+ fileTypeReference: "参考资料",
80035
+ fileTypeScript: "脚本",
80036
+ fileTypeAsset: "资源",
80037
+ fileNameLabel: "文件名",
80038
+ fileNamePlaceholder: "例如 rubric.md",
80039
+ fileContentLabel: "内容",
80040
+ fileContentPlaceholder: "文件的文本内容",
80041
+ addFileButton: "添加资源",
80042
+ adding: "添加中...",
80043
+ uploading: "上传中...",
80044
+ fileAdded: "资源已添加",
80045
+ fileUploaded: "资源已上传",
80046
+ fileSaved: "资源已保存",
80047
+ fileDeleted: "资源已删除",
80048
+ failedToSaveFile: "保存资源失败",
80049
+ failedToUploadFile: "上传资源失败",
80050
+ failedToDeleteFile: "删除资源失败",
80051
+ detailsTab: "常规",
80052
+ filesTab: "资源",
80053
+ newFile: "新建资源",
80054
+ newFileDialogTitle: "新建资源",
80055
+ editFileDialogTitle: "编辑资源",
80056
+ deleteFileDialogTitle: "删除资源",
80057
+ deleteFileConfirmation: "确定要删除 {name} 吗?此操作无法撤销。",
80058
+ chooseFile: "选择文件",
80059
+ upload: "上传",
80060
+ download: "下载",
80061
+ resourcesItemLabel: "资源"
79803
80062
  };
79804
80063
  var clawSandboxHelpers = {
79805
80064
  unknown: "未知",
@@ -82064,7 +82323,7 @@ var safetyTabLabels = {
82064
82323
  };
82065
82324
  var screenshareTabLabels = {
82066
82325
  header: {
82067
- title: "屏幕共享",
82326
+ title: "屏幕",
82068
82327
  description: "当用户在语音通话中共享屏幕时,您的智能体的表现方式。"
82069
82328
  },
82070
82329
  capability: {
@@ -83999,6 +84258,19 @@ var profileApplicationsQuestionsEditor = {
83999
84258
  collapseSection: "折叠板块",
84000
84259
  expandSection: "展开板块"
84001
84260
  };
84261
+ var slashSkillPicker = {
84262
+ listLabel: "智能体技能",
84263
+ resultsAnnouncement: "{count} 个技能可用。使用方向键浏览,按 Enter 选择。",
84264
+ loading: "加载中..."
84265
+ };
84266
+ var skillsTabLabels = {
84267
+ header: {
84268
+ title: "技能",
84269
+ description: "可附加到此智能体的可复用操作指南——每个技能都是完成一项任务的指令集。在聊天中输入 / 即可使用。"
84270
+ },
84271
+ notBaseAgent: "技能仅适用于基础智能体。",
84272
+ loading: "加载中..."
84273
+ };
84002
84274
  var zh = {
84003
84275
  accessTabAddAccess: accessTabAddAccess,
84004
84276
  accessTabLabels: accessTabLabels,
@@ -84250,7 +84522,9 @@ var zh = {
84250
84522
  placementExam: placementExam,
84251
84523
  applyApplyWizard: applyApplyWizard,
84252
84524
  profileApplicationsTab: profileApplicationsTab,
84253
- profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor
84525
+ profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor,
84526
+ slashSkillPicker: slashSkillPicker,
84527
+ skillsTabLabels: skillsTabLabels
84254
84528
  };
84255
84529
 
84256
84530
  /**
@@ -227076,27 +227350,192 @@ function AgentConfigPrompts({ platformKey, mentorUniqueId }) {
227076
227350
  }) }), editingField && (jsx(EditFieldModal, { isOpen: !!editingField, onClose: () => setEditingField(null), label: editingField.label, value: editingField.value, onSave: handleSaveField, isSaving: isUpdating }))] }));
227077
227351
  }
227078
227352
 
227353
+ /** Page size for the resources list inside the Edit Skill dialog. */
227354
+ const RESOURCES_PAGE_SIZE = 20;
227355
+ const EMPTY_RESOURCE_FORM = {
227356
+ file_type: 'reference',
227357
+ filename: '',
227358
+ content: '',
227359
+ };
227360
+ /**
227361
+ * File attachments for a skill (agent-skill-resources). `reference`/`script`
227362
+ * files are text (filename + content); `asset` files are binary uploads.
227363
+ * Rendered as the Files tab of the Edit Skill dialog: a list with row
227364
+ * actions, a New File popup for add/edit, and a delete confirmation.
227365
+ */
227366
+ function SkillResourcesSection({ platformKey, skillId }) {
227367
+ var _a, _b, _c;
227368
+ const t = useT();
227369
+ const [page, setPage] = useState(1);
227370
+ const { data: resourcePage, isLoading } = useGetAgentSkillResourcesQuery({
227371
+ org: platformKey,
227372
+ skill: skillId,
227373
+ limit: RESOURCES_PAGE_SIZE,
227374
+ offset: (page - 1) * RESOURCES_PAGE_SIZE,
227375
+ });
227376
+ const resources = (_a = resourcePage === null || resourcePage === void 0 ? void 0 : resourcePage.results) !== null && _a !== void 0 ? _a : [];
227377
+ const totalCount = (_b = resourcePage === null || resourcePage === void 0 ? void 0 : resourcePage.count) !== null && _b !== void 0 ? _b : 0;
227378
+ const totalPages = Math.max(1, Math.ceil(totalCount / RESOURCES_PAGE_SIZE));
227379
+ // Deleting the last item of the last page leaves the page out of range —
227380
+ // snap back to the new last page.
227381
+ useEffect(() => {
227382
+ if (page > totalPages)
227383
+ setPage(totalPages);
227384
+ }, [page, totalPages]);
227385
+ const [createResource, { isLoading: isCreating }] = useCreateAgentSkillResourceMutation();
227386
+ const [updateResource, { isLoading: isUpdating }] = useUpdateAgentSkillResourceMutation();
227387
+ const [uploadAsset, { isLoading: isUploading }] = useUploadAgentSkillResourceAssetMutation();
227388
+ const [deleteResource, { isLoading: isDeleting }] = useDeleteAgentSkillResourceMutation();
227389
+ const [showFileDialog, setShowFileDialog] = useState(false);
227390
+ const [editingResource, setEditingResource] = useState(null);
227391
+ const [deletingResource, setDeletingResource] = useState(null);
227392
+ const [form, setForm] = useState(EMPTY_RESOURCE_FORM);
227393
+ const [assetFile, setAssetFile] = useState(null);
227394
+ const fileInputRef = useRef(null);
227395
+ const isSaving = isCreating || isUpdating || isUploading;
227396
+ const isAssetForm = form.file_type === 'asset' && !editingResource;
227397
+ const canSubmitFile = isAssetForm ? !!assetFile : !!form.filename && !!form.content;
227398
+ const typeLabel = (fileType) => {
227399
+ switch (fileType) {
227400
+ case 'script':
227401
+ return t('clawSandboxAgentSkills.fileTypeScript');
227402
+ case 'asset':
227403
+ return t('clawSandboxAgentSkills.fileTypeAsset');
227404
+ default:
227405
+ return t('clawSandboxAgentSkills.fileTypeReference');
227406
+ }
227407
+ };
227408
+ const openNewFileDialog = () => {
227409
+ setForm(EMPTY_RESOURCE_FORM);
227410
+ setAssetFile(null);
227411
+ setEditingResource(null);
227412
+ setShowFileDialog(true);
227413
+ };
227414
+ const openEditFileDialog = (resource) => {
227415
+ var _a, _b;
227416
+ setForm({
227417
+ file_type: (_a = resource.file_type) !== null && _a !== void 0 ? _a : 'reference',
227418
+ filename: resource.filename,
227419
+ content: (_b = resource.content) !== null && _b !== void 0 ? _b : '',
227420
+ });
227421
+ setAssetFile(null);
227422
+ setEditingResource(resource);
227423
+ setShowFileDialog(true);
227424
+ };
227425
+ const closeFileDialog = () => {
227426
+ setShowFileDialog(false);
227427
+ setEditingResource(null);
227428
+ setForm(EMPTY_RESOURCE_FORM);
227429
+ setAssetFile(null);
227430
+ };
227431
+ const handleSubmitFile = async () => {
227432
+ try {
227433
+ if (editingResource) {
227434
+ await updateResource({
227435
+ org: platformKey,
227436
+ id: editingResource.id,
227437
+ filename: form.filename,
227438
+ content: form.content,
227439
+ }).unwrap();
227440
+ toast.success(t('clawSandboxAgentSkills.fileSaved'));
227441
+ }
227442
+ else if (isAssetForm) {
227443
+ if (!assetFile)
227444
+ return;
227445
+ await uploadAsset({
227446
+ org: platformKey,
227447
+ skill: skillId,
227448
+ file: assetFile,
227449
+ filename: assetFile.name,
227450
+ }).unwrap();
227451
+ toast.success(t('clawSandboxAgentSkills.fileUploaded'));
227452
+ }
227453
+ else {
227454
+ await createResource({
227455
+ org: platformKey,
227456
+ skill: skillId,
227457
+ file_type: form.file_type,
227458
+ filename: form.filename,
227459
+ content: form.content,
227460
+ }).unwrap();
227461
+ toast.success(t('clawSandboxAgentSkills.fileAdded'));
227462
+ }
227463
+ closeFileDialog();
227464
+ }
227465
+ catch (_a) {
227466
+ toast.error(t(isAssetForm
227467
+ ? 'clawSandboxAgentSkills.failedToUploadFile'
227468
+ : 'clawSandboxAgentSkills.failedToSaveFile'));
227469
+ }
227470
+ };
227471
+ const handleDeleteFile = async () => {
227472
+ if (!deletingResource)
227473
+ return;
227474
+ try {
227475
+ await deleteResource({ org: platformKey, id: deletingResource.id }).unwrap();
227476
+ toast.success(t('clawSandboxAgentSkills.fileDeleted'));
227477
+ setDeletingResource(null);
227478
+ }
227479
+ catch (_a) {
227480
+ toast.error(t('clawSandboxAgentSkills.failedToDeleteFile'));
227481
+ }
227482
+ };
227483
+ const submitLabel = () => {
227484
+ if (editingResource) {
227485
+ return isUpdating ? t('clawSandboxAgentSkills.saving') : t('clawSandboxAgentSkills.save');
227486
+ }
227487
+ if (isAssetForm) {
227488
+ return isUploading
227489
+ ? t('clawSandboxAgentSkills.uploading')
227490
+ : t('clawSandboxAgentSkills.upload');
227491
+ }
227492
+ return isCreating ? t('clawSandboxAgentSkills.adding') : t('clawSandboxAgentSkills.addFileButton');
227493
+ };
227494
+ return (jsxs("div", { className: "space-y-4", "data-testid": "skill-resources-section", children: [jsxs("div", { className: "flex items-start justify-between gap-4", children: [jsx("p", { className: "text-xs text-gray-500", children: t('clawSandboxAgentSkills.filesHint') }), jsxs(Button$1, { onClick: openNewFileDialog, size: "sm", className: "shrink-0 cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.newFile')] })] }), isLoading ? (jsxs("div", { className: "flex items-center gap-2 p-4", role: "status", children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin text-blue-500" }), jsx("span", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.loadingFiles') })] })) : resources.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noFiles') }) })) : (jsxs("div", { className: "space-y-3", children: [resources.map((resource) => (jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg border p-4", children: [jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [jsx(Paperclip, { className: "h-4 w-4 shrink-0 text-gray-400" }), jsx("span", { className: "truncate text-sm font-medium text-gray-700", children: resource.filename }), jsx("span", { className: "rounded-full bg-gray-100 px-2 py-0.5 text-[0.625rem] text-gray-500", children: typeLabel(resource.file_type) })] }), jsx(FloatingPortalContainerContext.Provider, { value: null, children: jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxAgentSkills.skillActions', {
227495
+ name: resource.filename,
227496
+ }), children: jsx(Ellipsis, { className: "h-4 w-4" }) }) }), jsxs(DropdownMenuContent, { align: "end", className: "z-[110]", children: [resource.file_type === 'asset' && resource.file && (jsx(DropdownMenuItem, { asChild: true, className: "cursor-pointer", children: jsxs("a", { href: resource.file, target: "_blank", rel: "noreferrer", download: true, children: [jsx(Download, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.download')] }) })), resource.file_type !== 'asset' && (jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => openEditFileDialog(resource), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.edit')] })), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingResource(resource), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.delete')] })] })] }) })] }, resource.id))), jsx(AdvancedPagination, { currentPage: page, totalPages: totalPages, onPageChange: setPage, totalCount: totalCount, itemsPerPage: RESOURCES_PAGE_SIZE, itemLabel: t('clawSandboxAgentSkills.resourcesItemLabel') })] })), jsxs(OverlayModal, { open: showFileDialog, onClose: closeFileDialog, title: t(editingResource
227497
+ ? 'clawSandboxAgentSkills.editFileDialogTitle'
227498
+ : 'clawSandboxAgentSkills.newFileDialogTitle'), className: "max-w-lg", children: [jsxs("div", { className: "mt-4 grid gap-4", children: [!editingResource && (jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "resource-type", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fileTypeLabel') }), jsxs(Select$1, { value: form.file_type, onValueChange: (value) => setForm({ ...form, file_type: value }), children: [jsx(SelectTrigger, { id: "resource-type", className: "w-full", children: jsx(SelectValue, {}) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "reference", children: t('clawSandboxAgentSkills.fileTypeReference') }), jsx(SelectItem, { value: "script", children: t('clawSandboxAgentSkills.fileTypeScript') }), jsx(SelectItem, { value: "asset", children: t('clawSandboxAgentSkills.fileTypeAsset') })] })] })] })), isAssetForm ? (jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "resource-file", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fileNameLabel') }), jsx("input", { ref: fileInputRef, id: "resource-file", type: "file", className: "hidden", onChange: (e) => { var _a, _b; return setAssetFile((_b = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null); }, "data-testid": "resource-file-input" }), jsxs("div", { className: "flex items-center gap-2", children: [jsxs(Button$1, { variant: "outline", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: [jsx(Paperclip, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.chooseFile')] }), assetFile && (jsx("span", { className: "truncate text-sm text-gray-600", children: assetFile.name }))] })] })) : (jsxs(Fragment$1, { children: [jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "resource-filename", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fileNameLabel') }), jsx(Input, { id: "resource-filename", name: "resource-filename", value: form.filename, onChange: (e) => setForm({ ...form, filename: e.target.value }), placeholder: t('clawSandboxAgentSkills.fileNamePlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "resource-content", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fileContentLabel') }), jsx(Textarea, { id: "resource-content", name: "resource-content", value: form.content, onChange: (e) => setForm({ ...form, content: e.target.value }), placeholder: t('clawSandboxAgentSkills.fileContentPlaceholder'), rows: 6 })] })] }))] }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: closeFileDialog, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleSubmitFile, disabled: isSaving || !canSubmitFile, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: submitLabel() })] })] }), jsxs(OverlayModal, { open: !!deletingResource, onClose: () => setDeletingResource(null), title: t('clawSandboxAgentSkills.deleteFileDialogTitle'), className: "max-w-md", children: [jsx("p", { className: "mt-2 text-sm text-gray-600", children: t('clawSandboxAgentSkills.deleteFileConfirmation', {
227499
+ name: (_c = deletingResource === null || deletingResource === void 0 ? void 0 : deletingResource.filename) !== null && _c !== void 0 ? _c : '',
227500
+ }) }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: () => setDeletingResource(null), children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleDeleteFile, disabled: isDeleting, className: "bg-red-600 text-white hover:bg-red-700", children: isDeleting
227501
+ ? t('clawSandboxAgentSkills.deleting')
227502
+ : t('clawSandboxAgentSkills.delete') })] })] })] }));
227503
+ }
227504
+
227079
227505
  const EMPTY_SKILL_FORM = {
227080
227506
  name: '',
227081
227507
  slug: '',
227082
227508
  description: '',
227083
227509
  version: '1.0.0',
227510
+ category: '',
227084
227511
  instruction: '',
227512
+ privateToAgent: false,
227085
227513
  };
227514
+ // The builder resolves the effective skill set client-side, which needs the
227515
+ // complete catalog and assignment lists. Request one explicit large page so
227516
+ // the result is deterministic even if the backend later configures a default
227517
+ // page size (the list endpoints unwrap paginated envelopes to `results`).
227518
+ const FULL_LIST_LIMIT = 1000;
227086
227519
  function AgentSkills({ platformKey, mentorUniqueId }) {
227087
227520
  var _a;
227088
227521
  const t = useT();
227089
227522
  // Skills are managed independently of the sandbox connection — org-level
227090
227523
  // skills and the mentor's assignments both resolve without a wired Claw
227091
227524
  // instance, so we always fetch and let admins add/assign skills freely.
227525
+ // Always fetch — the backend enforces read access; RBAC here only gates
227526
+ // the write affordances (a partial permissions map must not blank the UI).
227092
227527
  const { data: availableSkills, isLoading: isLoadingSkills } = useGetAgentSkillsQuery({
227093
227528
  org: platformKey,
227529
+ limit: FULL_LIST_LIMIT,
227530
+ offset: 0,
227094
227531
  });
227095
227532
  const { data: assignments, isLoading: isLoadingAssignments } = useGetMentorSkillAssignmentsQuery({
227096
227533
  org: platformKey,
227097
227534
  mentorUniqueId,
227535
+ limit: FULL_LIST_LIMIT,
227536
+ offset: 0,
227098
227537
  });
227099
- // Assignment mutations (toggle on mentor)
227538
+ // Assignment mutations (attach/detach/toggle on the agent)
227100
227539
  const [createAssignment, { isLoading: isCreatingAssignment }] = useCreateMentorSkillAssignmentMutation();
227101
227540
  const [updateAssignment, { isLoading: isUpdatingAssignment }] = useUpdateMentorSkillAssignmentMutation();
227102
227541
  const [deleteAssignment, { isLoading: isDeletingAssignment }] = useDeleteMentorSkillAssignmentMutation();
@@ -227109,59 +227548,95 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
227109
227548
  const [deletingSkill, setDeletingSkill] = useState(null);
227110
227549
  const [form, setForm] = useState(EMPTY_SKILL_FORM);
227111
227550
  const isLoading = isLoadingSkills || isLoadingAssignments;
227112
- const isTogglingMentorSkill = isCreatingAssignment || isUpdatingAssignment || isDeletingAssignment;
227113
- const skills = (availableSkills !== null && availableSkills !== void 0 ? availableSkills : []).filter((s) => s.enabled);
227114
- // Skill assignments are now keyed by skill UUID (the new stable identifier).
227115
- const assignmentsBySkillUniqueId = new Map((assignments !== null && assignments !== void 0 ? assignments : []).map((a) => [a.skill, a]));
227551
+ const isMutatingAgentSkill = isCreatingAssignment || isUpdatingAssignment || isDeletingAssignment || isUpdatingSkill;
227552
+ const allSkills = availableSkills !== null && availableSkills !== void 0 ? availableSkills : [];
227553
+ const effectiveSkills = resolveEffectiveAgentSkills(allSkills, assignments !== null && assignments !== void 0 ? assignments : [], mentorUniqueId);
227554
+ const effectiveUniqueIds = new Set(effectiveSkills.map((s) => s.unique_id));
227555
+ const effectiveSlugs = new Set(effectiveSkills.map((s) => s.slug));
227556
+ // Catalog skills this agent could still attach: enabled, platform-wide
227557
+ // (never another agent's private skills), and not already effective. A
227558
+ // skill whose slug is already effective (e.g. shadowed by a private skill)
227559
+ // would dedupe away after attaching — don't offer an Add that does nothing.
227560
+ const attachableSkills = allSkills.filter((skill) => skill.enabled &&
227561
+ !skill.mentor &&
227562
+ !effectiveUniqueIds.has(skill.unique_id) &&
227563
+ !effectiveSlugs.has(skill.slug));
227564
+ // Featured skills from the `main` platform are read-only for tenants — the
227565
+ // API 404s writes against them, so hide the edit/delete affordances.
227566
+ const isSkillEditable = (skill) => {
227567
+ if (!skill)
227568
+ return false;
227569
+ return skill.platform_key ? skill.platform_key === platformKey : !skill.is_featured;
227570
+ };
227116
227571
  const resetForm = () => setForm(EMPTY_SKILL_FORM);
227117
- const handleToggle = async (skill, shouldEnable) => {
227118
- const existing = assignmentsBySkillUniqueId.get(skill.unique_id);
227572
+ const handleToggleEffective = async (effective, shouldEnable) => {
227119
227573
  try {
227120
- if (shouldEnable) {
227121
- if (existing) {
227122
- await updateAssignment({
227123
- org: platformKey,
227124
- mentorUniqueId,
227125
- assignmentPk: existing.id,
227126
- enabled: true,
227127
- }).unwrap();
227128
- }
227129
- else {
227130
- await createAssignment({
227131
- org: platformKey,
227132
- mentorUniqueId,
227133
- skill: skill.unique_id,
227134
- enabled: true,
227135
- }).unwrap();
227136
- }
227137
- toast.success(t('clawSandboxAgentSkills.skillEnabled', { name: skill.name }));
227574
+ if (effective.origin === 'private' && effective.skill) {
227575
+ await updateSkill({
227576
+ org: platformKey,
227577
+ id: effective.skill.id,
227578
+ enabled: shouldEnable,
227579
+ }).unwrap();
227138
227580
  }
227139
- else {
227140
- if (!existing)
227141
- return;
227142
- await deleteAssignment({
227581
+ else if (effective.assignmentId !== undefined) {
227582
+ await updateAssignment({
227143
227583
  org: platformKey,
227144
227584
  mentorUniqueId,
227145
- assignmentPk: existing.id,
227585
+ assignmentPk: effective.assignmentId,
227586
+ enabled: shouldEnable,
227146
227587
  }).unwrap();
227147
- toast.success(t('clawSandboxAgentSkills.skillDisabled', { name: skill.name }));
227148
227588
  }
227589
+ toast.success(t(shouldEnable
227590
+ ? 'clawSandboxAgentSkills.skillEnabled'
227591
+ : 'clawSandboxAgentSkills.skillDisabled', { name: effective.name }));
227592
+ }
227593
+ catch (_a) {
227594
+ toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: effective.name }));
227595
+ }
227596
+ };
227597
+ const handleAttach = async (skill) => {
227598
+ try {
227599
+ await createAssignment({
227600
+ org: platformKey,
227601
+ mentorUniqueId,
227602
+ skill: skill.unique_id,
227603
+ enabled: true,
227604
+ }).unwrap();
227605
+ toast.success(t('clawSandboxAgentSkills.skillAdded', { name: skill.name }));
227149
227606
  }
227150
227607
  catch (_a) {
227151
227608
  toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: skill.name }));
227152
227609
  }
227153
227610
  };
227611
+ const handleDetach = async (effective) => {
227612
+ if (effective.assignmentId === undefined)
227613
+ return;
227614
+ try {
227615
+ await deleteAssignment({
227616
+ org: platformKey,
227617
+ mentorUniqueId,
227618
+ assignmentPk: effective.assignmentId,
227619
+ }).unwrap();
227620
+ toast.success(t('clawSandboxAgentSkills.skillRemoved', { name: effective.name }));
227621
+ }
227622
+ catch (_a) {
227623
+ toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: effective.name }));
227624
+ }
227625
+ };
227154
227626
  const openNewSkillDialog = () => {
227155
227627
  resetForm();
227156
227628
  setShowNewDialog(true);
227157
227629
  };
227158
227630
  const openEditSkillDialog = (skill) => {
227631
+ var _a;
227159
227632
  setForm({
227160
227633
  name: skill.name,
227161
227634
  slug: skill.slug,
227162
227635
  description: skill.description,
227163
227636
  version: skill.version,
227637
+ category: (_a = skill.category) !== null && _a !== void 0 ? _a : '',
227164
227638
  instruction: skill.instruction,
227639
+ privateToAgent: skill.mentor === mentorUniqueId,
227165
227640
  });
227166
227641
  setEditingSkill(skill);
227167
227642
  };
@@ -227182,6 +227657,8 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
227182
227657
  slug: form.slug,
227183
227658
  description: form.description,
227184
227659
  version: form.version || '1.0.0',
227660
+ ...(form.category && { category: form.category }),
227661
+ ...(form.privateToAgent && { mentor: mentorUniqueId }),
227185
227662
  instruction: form.instruction,
227186
227663
  enabled: true,
227187
227664
  }).unwrap();
@@ -227207,6 +227684,7 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
227207
227684
  slug: form.slug,
227208
227685
  description: form.description,
227209
227686
  version: form.version,
227687
+ category: form.category,
227210
227688
  instruction: form.instruction,
227211
227689
  }).unwrap();
227212
227690
  toast.success(t('clawSandboxAgentSkills.skillUpdated'));
@@ -227228,32 +227706,169 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
227228
227706
  toast.error(t('clawSandboxAgentSkills.failedToDeleteSkill'));
227229
227707
  }
227230
227708
  };
227709
+ const renderBadges = (skill, effective) => {
227710
+ var _a, _b, _c;
227711
+ const category = (_a = effective === null || effective === void 0 ? void 0 : effective.category) !== null && _a !== void 0 ? _a : skill === null || skill === void 0 ? void 0 : skill.category;
227712
+ const skillType = (_b = effective === null || effective === void 0 ? void 0 : effective.skill_type) !== null && _b !== void 0 ? _b : skill === null || skill === void 0 ? void 0 : skill.skill_type;
227713
+ const isFeatured = (_c = effective === null || effective === void 0 ? void 0 : effective.is_featured) !== null && _c !== void 0 ? _c : skill === null || skill === void 0 ? void 0 : skill.is_featured;
227714
+ return (jsxs("span", { className: "flex flex-wrap items-center gap-1", children: [category && (jsx("span", { className: "rounded-full bg-gray-100 px-2 py-0.5 text-[0.625rem] text-gray-500", children: category })), skillType === 'native' && (jsx("span", { className: "rounded-full bg-purple-50 px-2 py-0.5 text-[0.625rem] text-purple-600", children: t('clawSandboxAgentSkills.nativeBadge') })), isFeatured && (jsx("span", { className: "rounded-full bg-amber-50 px-2 py-0.5 text-[0.625rem] text-amber-600", children: t('clawSandboxAgentSkills.featuredBadge') })), (effective === null || effective === void 0 ? void 0 : effective.origin) === 'private' && (jsx("span", { className: "rounded-full bg-blue-50 px-2 py-0.5 text-[0.625rem] text-blue-600", children: t('clawSandboxAgentSkills.privateBadge') }))] }));
227715
+ };
227716
+ const renderSkillMenu = (skill, effective) => {
227717
+ var _a, _b;
227718
+ const editable = isSkillEditable(skill);
227719
+ const showEdit = editable;
227720
+ const showDelete = editable;
227721
+ const detachable = (effective === null || effective === void 0 ? void 0 : effective.origin) === 'assignment';
227722
+ if (!showEdit && !showDelete && !detachable)
227723
+ return null;
227724
+ const name = (_b = (_a = effective === null || effective === void 0 ? void 0 : effective.name) !== null && _a !== void 0 ? _a : skill === null || skill === void 0 ? void 0 : skill.name) !== null && _b !== void 0 ? _b : '';
227725
+ return (jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxAgentSkills.skillActions', { name }), children: jsx(Ellipsis, { className: "h-4 w-4" }) }) }), jsxs(DropdownMenuContent, { align: "end", children: [detachable && (jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => effective && handleDetach(effective), children: [jsx(CircleMinus$1, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.removeFromAgent')] })), showEdit && skill && (jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => openEditSkillDialog(skill), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.edit')] })), showDelete && skill && (jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingSkill(skill), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.delete')] }))] })] }));
227726
+ };
227231
227727
  if (isLoading) {
227232
227728
  return (jsxs("div", { className: "flex items-center gap-2 p-4", children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin text-blue-500" }), jsx("span", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.loadingSkills') })] }));
227233
227729
  }
227234
- return (jsxs("div", { className: "space-y-4", "data-testid": "agent-skills-content", children: [jsx("div", { className: "flex items-center justify-end", children: jsxs(Button$1, { onClick: openNewSkillDialog, size: "sm", className: "cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.newSkill')] }) }), skills.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noSkillsAvailable') }) })) : (jsx("div", { className: "space-y-6", children: skills.map((skill) => {
227235
- var _a;
227236
- const assignment = assignmentsBySkillUniqueId.get(skill.unique_id);
227237
- const isEnabled = (_a = assignment === null || assignment === void 0 ? void 0 : assignment.enabled) !== null && _a !== void 0 ? _a : false;
227238
- return (jsxs("div", { className: "flex items-center justify-between rounded-lg border p-6", children: [jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [jsx("span", { className: "text-sm font-medium text-gray-700", children: skill.name }), skill.description && (jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { "aria-label": t('clawSandboxAgentSkills.moreInfoAbout', {
227239
- name: skill.name,
227240
- }), children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: jsx("p", { children: skill.description }) })] }) })), jsxs("span", { className: "hidden sm:inline text-xs text-gray-400", children: ["v", skill.version] })] }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Switch, { checked: isEnabled, onCheckedChange: (checked) => handleToggle(skill, checked), disabled: isTogglingMentorSkill, className: "cursor-pointer data-[state=checked]:bg-blue-500", "aria-label": t(isEnabled
227241
- ? 'clawSandboxAgentSkills.skillEnabledLabel'
227242
- : 'clawSandboxAgentSkills.skillDisabledLabel', { name: skill.name }) }), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button$1, { variant: "ghost", size: "sm", "aria-label": t('clawSandboxAgentSkills.skillActions', {
227243
- name: skill.name,
227244
- }), children: jsx(Ellipsis, { className: "h-4 w-4" }) }) }), jsxs(DropdownMenuContent, { align: "end", children: [jsxs(DropdownMenuItem, { className: "cursor-pointer", onClick: () => openEditSkillDialog(skill), children: [jsx(Pen, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.edit')] }), jsxs(DropdownMenuItem, { variant: "destructive", className: "cursor-pointer", onClick: () => setDeletingSkill(skill), children: [jsx(Trash2, { className: "mr-2 h-4 w-4" }), t('clawSandboxAgentSkills.delete')] })] })] })] })] }, skill.id));
227245
- }) })), jsxs(OverlayModal, { open: showNewDialog, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.newSkillDialogTitle'), className: "max-w-2xl", children: [jsx(SkillForm, { form: form, onChange: setForm }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleCreateSkill, disabled: isCreatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isCreatingSkill
227246
- ? t('clawSandboxAgentSkills.creating')
227247
- : t('clawSandboxAgentSkills.create') })] })] }), jsxs(OverlayModal, { open: !!editingSkill, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.editSkillDialogTitle'), className: "max-w-2xl", children: [jsx(SkillForm, { form: form, onChange: setForm }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleUpdateSkill, disabled: isUpdatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isUpdatingSkill
227248
- ? t('clawSandboxAgentSkills.saving')
227249
- : t('clawSandboxAgentSkills.save') })] })] }), jsxs(OverlayModal, { open: !!deletingSkill, onClose: () => setDeletingSkill(null), title: t('clawSandboxAgentSkills.deleteSkillDialogTitle'), className: "max-w-md", children: [jsx("p", { className: "mt-2 text-sm text-gray-600", children: t('clawSandboxAgentSkills.deleteConfirmation', { name: (_a = deletingSkill === null || deletingSkill === void 0 ? void 0 : deletingSkill.name) !== null && _a !== void 0 ? _a : '' }) }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: () => setDeletingSkill(null), children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleDeleteSkill, disabled: isDeletingSkill, className: "bg-red-600 text-white hover:bg-red-700", children: isDeletingSkill
227730
+ return (jsxs("div", { className: "space-y-4", "data-testid": "agent-skills-content", children: [jsxs("div", { className: "flex items-start justify-between gap-4", children: [jsxs("p", { className: "flex items-start gap-2 text-xs text-gray-500", children: [jsx(Info$3, { className: "mt-0.5 h-4 w-4 shrink-0 text-gray-400" }), jsx("span", { children: t('clawSandboxAgentSkills.sessionNote') })] }), jsxs(Button$1, { onClick: openNewSkillDialog, size: "sm", className: "shrink-0 cursor-pointer bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.newSkill')] })] }), jsxs("div", { className: "space-y-2", children: [jsx("h3", { className: "text-sm font-semibold text-gray-700", children: t('clawSandboxAgentSkills.effectiveHeading') }), effectiveSkills.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noEffectiveSkills') }) })) : (jsx("div", { className: "space-y-3", children: effectiveSkills.map((effective) => {
227731
+ var _a;
227732
+ return (jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg border p-4", children: [jsxs("div", { className: "min-w-0 space-y-1", children: [jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-gray-700", children: effective.name }), ((_a = effective.skill) === null || _a === void 0 ? void 0 : _a.version) && (jsxs("span", { className: "hidden text-xs text-gray-400 sm:inline", children: ["v", effective.skill.version] })), renderBadges(effective.skill, effective)] }), effective.description && (jsx("p", { className: "line-clamp-2 text-xs text-gray-500", children: effective.description }))] }), jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [jsx(Switch, { checked: effective.enabled, onCheckedChange: (checked) => handleToggleEffective(effective, checked), disabled: isMutatingAgentSkill, className: "cursor-pointer data-[state=checked]:bg-blue-500", "aria-label": t(effective.enabled
227733
+ ? 'clawSandboxAgentSkills.skillEnabledLabel'
227734
+ : 'clawSandboxAgentSkills.skillDisabledLabel', { name: effective.name }) }), renderSkillMenu(effective.skill, effective)] })] }, effective.unique_id));
227735
+ }) }))] }), jsxs("div", { className: "space-y-2", children: [jsx("h3", { className: "text-sm font-semibold text-gray-700", children: t('clawSandboxAgentSkills.catalogHeading') }), attachableSkills.length === 0 ? (jsx("div", { className: "flex items-center justify-center rounded-lg border p-6", children: jsx("p", { className: "text-sm text-gray-500", children: t('clawSandboxAgentSkills.noSkillsAvailable') }) })) : (jsx("div", { className: "space-y-3", children: attachableSkills.map((skill) => (jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg border p-4", children: [jsxs("div", { className: "min-w-0 space-y-1", children: [jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-gray-700", children: skill.name }), jsxs("span", { className: "hidden text-xs text-gray-400 sm:inline", children: ["v", skill.version] }), renderBadges(skill)] }), skill.description && (jsx("p", { className: "line-clamp-2 text-xs text-gray-500", children: skill.description }))] }), jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [jsxs(Button$1, { variant: "outline", size: "sm", className: "cursor-pointer", disabled: isMutatingAgentSkill, onClick: () => handleAttach(skill), "aria-label": t('clawSandboxAgentSkills.addToAgentLabel', { name: skill.name }), children: [jsx(Plus, { className: "h-4 w-4" }), t('clawSandboxAgentSkills.addToAgent')] }), renderSkillMenu(skill)] })] }, skill.id))) }))] }), jsx(OverlayModal, { open: showNewDialog, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.newSkillDialogTitle'), className: "max-w-2xl", children: jsxs("div", { className: "flex h-[min(75dvh,46rem)] flex-col", children: [jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto pb-4 pr-1", children: [jsx(SkillForm, { form: form, onChange: setForm, showPrivateToggle: true }), jsx("p", { className: "text-xs text-gray-500", children: t('clawSandboxAgentSkills.filesAfterCreateHint') })] }), jsxs("div", { className: "flex justify-end gap-2 border-t pt-4", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleCreateSkill, disabled: isCreatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isCreatingSkill
227736
+ ? t('clawSandboxAgentSkills.creating')
227737
+ : t('clawSandboxAgentSkills.create') })] })] }) }), jsx(OverlayModal, { open: !!editingSkill, onClose: closeAllDialogs, title: t('clawSandboxAgentSkills.editSkillDialogTitle'), className: "max-w-2xl", children: jsxs(Tabs, { defaultValue: "details", className: "w-full", children: [jsxs(TabsList, { "aria-label": t('clawSandboxAgentSkills.editSkillDialogTitle'), "data-testid": "skill-dialog-tabs", children: [jsx(TabsTrigger, { value: "details", "data-testid": "skill-dialog-tab-details", children: t('clawSandboxAgentSkills.detailsTab') }), jsx(TabsTrigger, { value: "files", "data-testid": "skill-dialog-tab-files", children: t('clawSandboxAgentSkills.filesTab') })] }), jsx(TabsContent, { value: "details", children: jsxs("div", { className: "flex h-[min(75dvh,46rem)] flex-col", children: [jsx("div", { className: "flex-1 space-y-4 overflow-y-auto pb-4 pr-1", children: jsx(SkillForm, { form: form, onChange: setForm }) }), jsxs("div", { className: "flex justify-end gap-2 border-t pt-4", children: [jsx(Button$1, { variant: "outline", onClick: closeAllDialogs, children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleUpdateSkill, disabled: isUpdatingSkill || !form.name || !form.slug, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", children: isUpdatingSkill
227738
+ ? t('clawSandboxAgentSkills.saving')
227739
+ : t('clawSandboxAgentSkills.save') })] })] }) }), jsx(TabsContent, { value: "files", children: jsx("div", { className: "flex h-[min(75dvh,46rem)] flex-col", children: jsx("div", { className: "flex-1 space-y-4 overflow-y-auto pb-4 pr-1", children: editingSkill && (jsx(SkillResourcesSection, { platformKey: platformKey, skillId: editingSkill.id })) }) }) })] }) }), jsxs(OverlayModal, { open: !!deletingSkill, onClose: () => setDeletingSkill(null), title: t('clawSandboxAgentSkills.deleteSkillDialogTitle'), className: "max-w-md", children: [jsx("p", { className: "mt-2 text-sm text-gray-600", children: t('clawSandboxAgentSkills.deleteConfirmation', { name: (_a = deletingSkill === null || deletingSkill === void 0 ? void 0 : deletingSkill.name) !== null && _a !== void 0 ? _a : '' }) }), jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [jsx(Button$1, { variant: "outline", onClick: () => setDeletingSkill(null), children: t('clawSandboxAgentSkills.cancel') }), jsx(Button$1, { onClick: handleDeleteSkill, disabled: isDeletingSkill, className: "bg-red-600 text-white hover:bg-red-700", children: isDeletingSkill
227250
227740
  ? t('clawSandboxAgentSkills.deleting')
227251
227741
  : t('clawSandboxAgentSkills.delete') })] })] })] }));
227252
227742
  }
227253
227743
  // ── Shared Skill Form ────────────────────────────────────────────────────────
227254
- function SkillForm({ form, onChange, }) {
227744
+ function SkillForm({ form, onChange, showPrivateToggle = false, }) {
227745
+ const t = useT();
227746
+ return (jsxs("div", { className: "mt-4 grid gap-4", children: [jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-name", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldName') }), jsx(Input, { id: "skill-name", name: "skill-name", value: form.name, onChange: (e) => onChange({ ...form, name: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldNamePlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-slug", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldSlug') }), jsx(Input, { id: "skill-slug", name: "skill-slug", value: form.slug, onChange: (e) => onChange({ ...form, slug: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldSlugPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-version", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldVersion') }), jsx(Input, { id: "skill-version", name: "skill-version", value: form.version, onChange: (e) => onChange({ ...form, version: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldVersionPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-category", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldCategory') }), jsx(Input, { id: "skill-category", name: "skill-category", value: form.category, onChange: (e) => onChange({ ...form, category: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldCategoryPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-description", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldDescription') }), jsx(Input, { id: "skill-description", name: "skill-description", value: form.description, onChange: (e) => onChange({ ...form, description: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldDescriptionPlaceholder'), className: "py-6" })] }), showPrivateToggle && (jsxs("div", { className: "flex items-center justify-between rounded-lg border p-4", children: [jsxs("div", { className: "space-y-1", children: [jsx(Label$2, { htmlFor: "skill-private", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.privateToAgent') }), jsx("p", { className: "text-xs text-gray-500", children: t('clawSandboxAgentSkills.privateToAgentHint') })] }), jsx(Switch, { id: "skill-private", checked: form.privateToAgent, onCheckedChange: (checked) => onChange({ ...form, privateToAgent: checked }), className: "cursor-pointer data-[state=checked]:bg-blue-500" })] })), jsxs("div", { className: "space-y-2 overflow-hidden", children: [jsx(Label$2, { htmlFor: "skill-instruction", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldInstruction') }), jsx("p", { className: "text-xs text-gray-500", children: t('clawSandboxAgentSkills.instructionHint') }), jsx(RichTextEditor, { value: form.instruction, onChange: (value) => onChange({ ...form, instruction: value }) })] })] }));
227747
+ }
227748
+
227749
+ /** Distance (px) from the list bottom at which the next page is requested. */
227750
+ const LOAD_MORE_THRESHOLD_PX = 48;
227751
+ /**
227752
+ * Listbox half of the chat `/` skill combobox. The composer textarea owns
227753
+ * focus and keyboard handling (see `useSlashSkillPicker`); options here are
227754
+ * referenced via `aria-activedescendant` and selected on click. Scrolling
227755
+ * near the bottom lazily loads the next page of skills.
227756
+ */
227757
+ function SlashSkillPicker({ skills, activeIndex, listboxId, onSelect, onActiveIndexChange, isLoading = false, isFetchingMore = false, hasMore = false, onLoadMore, }) {
227255
227758
  const t = useT();
227256
- return (jsxs("div", { className: "mt-4 grid gap-4", children: [jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-name", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldName') }), jsx(Input, { id: "skill-name", name: "skill-name", value: form.name, onChange: (e) => onChange({ ...form, name: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldNamePlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-slug", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldSlug') }), jsx(Input, { id: "skill-slug", name: "skill-slug", value: form.slug, onChange: (e) => onChange({ ...form, slug: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldSlugPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-version", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldVersion') }), jsx(Input, { id: "skill-version", name: "skill-version", value: form.version, onChange: (e) => onChange({ ...form, version: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldVersionPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2", children: [jsx(Label$2, { htmlFor: "skill-description", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldDescription') }), jsx(Input, { id: "skill-description", name: "skill-description", value: form.description, onChange: (e) => onChange({ ...form, description: e.target.value }), placeholder: t('clawSandboxAgentSkills.fieldDescriptionPlaceholder'), className: "py-6" })] }), jsxs("div", { className: "space-y-2 overflow-hidden", children: [jsx(Label$2, { htmlFor: "skill-instruction", className: "text-sm font-medium text-[#646464]", children: t('clawSandboxAgentSkills.fieldInstruction') }), jsx(RichTextEditor, { value: form.instruction, onChange: (value) => onChange({ ...form, instruction: value }) })] })] }));
227759
+ const listRef = useRef(null);
227760
+ // Keep the active option scrolled into view during arrow-key browsing.
227761
+ useEffect(() => {
227762
+ var _a;
227763
+ const option = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children[activeIndex];
227764
+ option === null || option === void 0 ? void 0 : option.scrollIntoView({ block: 'nearest' });
227765
+ }, [activeIndex]);
227766
+ if (skills.length === 0 && !isLoading)
227767
+ return null;
227768
+ const handleScroll = (event) => {
227769
+ if (!hasMore || isFetchingMore || !onLoadMore)
227770
+ return;
227771
+ const el = event.currentTarget;
227772
+ if (el.scrollTop + el.clientHeight >= el.scrollHeight - LOAD_MORE_THRESHOLD_PX) {
227773
+ onLoadMore();
227774
+ }
227775
+ };
227776
+ return (jsxs("div", { className: "absolute right-0 bottom-full left-0 z-50 mb-2", children: [jsx("div", { "aria-live": "polite", className: "sr-only", children: isLoading
227777
+ ? t('slashSkillPicker.loading')
227778
+ : t('slashSkillPicker.resultsAnnouncement', { count: skills.length }) }), isLoading ? (jsxs("div", { role: "status", className: "flex items-center gap-2 rounded-xl border border-gray-200 bg-white px-3 py-3 shadow-lg", "data-testid": "slash-skill-picker-loading", children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin text-blue-500" }), jsx("span", { className: "text-sm text-gray-500", children: t('slashSkillPicker.loading') })] })) : (jsxs("ul", { ref: listRef, id: listboxId, role: "listbox", "aria-label": t('slashSkillPicker.listLabel'), onScroll: handleScroll, className: "max-h-64 overflow-y-auto rounded-xl border border-gray-200 bg-white p-1 shadow-lg", "data-testid": "slash-skill-picker", children: [skills.map((skill, index) => (jsxs("li", { id: `${listboxId}-option-${index}`, role: "option", "aria-selected": index === activeIndex, className: cn('flex cursor-pointer flex-col gap-0.5 rounded-lg px-3 py-2', index === activeIndex ? 'bg-blue-50' : 'hover:bg-gray-50'), onMouseEnter: () => onActiveIndexChange(index),
227779
+ // onMouseDown so selection wins over the textarea losing focus.
227780
+ onMouseDown: (e) => {
227781
+ e.preventDefault();
227782
+ onSelect(skill);
227783
+ }, children: [jsxs("span", { className: "flex items-baseline gap-2", children: [jsx("span", { className: "text-sm font-medium text-gray-800", children: skill.name }), jsxs("span", { className: "text-xs text-gray-400", children: ["/", skill.slug] }), skill.category && (jsx("span", { className: "ml-auto rounded-full bg-gray-100 px-2 py-0.5 text-[0.625rem] text-gray-500", children: skill.category }))] }), skill.description && (jsx("span", { className: "line-clamp-2 text-xs text-gray-500", children: skill.description }))] }, skill.unique_id))), isFetchingMore && (jsxs("li", { role: "presentation", className: "flex items-center gap-2 px-3 py-2", "data-testid": "slash-skill-picker-loading-more", children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin text-blue-500" }), jsx("span", { className: "text-xs text-gray-500", children: t('slashSkillPicker.loading') })] }))] }))] }));
227784
+ }
227785
+
227786
+ /** Matches a composer value that is a single `/`-prefixed token (no whitespace). */
227787
+ const SLASH_TOKEN_RE = /^\/\S*$/;
227788
+ /** Whether the composer text is a `/` skill token (single word, leading slash). */
227789
+ function isSlashCommandToken(value) {
227790
+ return SLASH_TOKEN_RE.test(value);
227791
+ }
227792
+ /**
227793
+ * State machine for the chat `/` skill picker. Opens while the composer holds
227794
+ * a single `/`-prefixed token and at least one enabled skill matches; `Esc`
227795
+ * dismisses until the token is cleared, so plain text starting with `/` is
227796
+ * never blocked.
227797
+ */
227798
+ function useSlashSkillPicker({ inputValue, setInputValue, skills, isLoading = false, }) {
227799
+ const listboxId = useId$2();
227800
+ const [dismissed, setDismissed] = useState(false);
227801
+ const [activeIndex, setActiveIndex] = useState(0);
227802
+ const isSlashToken = SLASH_TOKEN_RE.test(inputValue);
227803
+ const query = isSlashToken ? inputValue.slice(1) : '';
227804
+ const filteredSkills = useMemo(() => (isSlashToken ? filterSlashSkills(skills, query) : []), [isSlashToken, skills, query]);
227805
+ // Loading keeps the picker open (with a loading row) so the user knows
227806
+ // something is coming; once loaded, zero matches closes it.
227807
+ const open = isSlashToken && !dismissed && (filteredSkills.length > 0 || isLoading);
227808
+ // Re-arm the picker once the slash token is gone (text sent or cleared).
227809
+ useEffect(() => {
227810
+ if (!isSlashToken && dismissed)
227811
+ setDismissed(false);
227812
+ }, [isSlashToken, dismissed]);
227813
+ // Keep the active option valid as the query narrows the list.
227814
+ const filteredLength = filteredSkills.length;
227815
+ const previousLength = useRef(filteredLength);
227816
+ useEffect(() => {
227817
+ if (previousLength.current !== filteredLength) {
227818
+ previousLength.current = filteredLength;
227819
+ setActiveIndex(0);
227820
+ }
227821
+ }, [filteredLength]);
227822
+ const selectSkill = (skill) => {
227823
+ setInputValue(`/${skill.slug} `);
227824
+ setActiveIndex(0);
227825
+ };
227826
+ const handleKeyDown = (event) => {
227827
+ if (!open)
227828
+ return false;
227829
+ switch (event.key) {
227830
+ case 'ArrowDown':
227831
+ if (!filteredSkills.length)
227832
+ return false;
227833
+ event.preventDefault();
227834
+ setActiveIndex((index) => (index + 1) % filteredSkills.length);
227835
+ return true;
227836
+ case 'ArrowUp':
227837
+ if (!filteredSkills.length)
227838
+ return false;
227839
+ event.preventDefault();
227840
+ setActiveIndex((index) => (index - 1 + filteredSkills.length) % filteredSkills.length);
227841
+ return true;
227842
+ case 'Enter':
227843
+ if (event.shiftKey || !filteredSkills.length)
227844
+ return false;
227845
+ event.preventDefault();
227846
+ selectSkill(filteredSkills[activeIndex]);
227847
+ return true;
227848
+ case 'Tab':
227849
+ if (!filteredSkills.length)
227850
+ return false;
227851
+ event.preventDefault();
227852
+ selectSkill(filteredSkills[activeIndex]);
227853
+ return true;
227854
+ case 'Escape':
227855
+ event.preventDefault();
227856
+ setDismissed(true);
227857
+ return true;
227858
+ default:
227859
+ return false;
227860
+ }
227861
+ };
227862
+ return {
227863
+ open,
227864
+ filteredSkills,
227865
+ activeIndex,
227866
+ setActiveIndex,
227867
+ listboxId,
227868
+ activeOptionId: open && filteredSkills.length > 0 ? `${listboxId}-option-${activeIndex}` : undefined,
227869
+ selectSkill,
227870
+ handleKeyDown,
227871
+ };
227257
227872
  }
227258
227873
 
227259
227874
  /**
@@ -228718,7 +229333,7 @@ const CSS_CLASS_NAMES = {
228718
229333
  STOP_STREAMING_BUTTON: 'chat-stop-streaming-button',
228719
229334
  }};
228720
229335
 
228721
- const AutoResizeTextarea = ({ allowEmptySubmit = false, value, onChange, onSubmit, disabled = false, placeholder = '', sessionId = null, isPreviewMode = false, textAreaRows = 3, className = '', style = {}, allowAnonymousAccess = false, embedMode = false, ...props }) => {
229336
+ const AutoResizeTextarea = ({ allowEmptySubmit = false, value, onChange, onSubmit, onComposerKeyDown, disabled = false, placeholder = '', sessionId = null, isPreviewMode = false, textAreaRows = 3, className = '', style = {}, allowAnonymousAccess = false, embedMode = false, ...props }) => {
228722
229337
  const textareaRef = useRef(null);
228723
229338
  const [isResizing, setIsResizing] = useState(false);
228724
229339
  const numberOfMessages = useSelector(selectNumberOfActiveChatMessages);
@@ -228766,6 +229381,8 @@ const AutoResizeTextarea = ({ allowEmptySubmit = false, value, onChange, onSubmi
228766
229381
  const handleKeyDown = (e) => {
228767
229382
  if (isPreviewMode && !allowAnonymousAccess)
228768
229383
  return;
229384
+ if (onComposerKeyDown === null || onComposerKeyDown === void 0 ? void 0 : onComposerKeyDown(e))
229385
+ return;
228769
229386
  if (e.key === 'Enter' && !e.shiftKey) {
228770
229387
  e.preventDefault();
228771
229388
  if (value.trim() || allowEmptySubmit) {
@@ -229655,7 +230272,7 @@ function SubmitMessageButton({ isPreviewMode, allowAnonymousAccess, isUploading,
229655
230272
  const PromptGalleryModal$1 = dynamic(() => Promise.resolve().then(function () { return promptGalleryModal; }).then((mod) => mod.PromptGalleryModal), {
229656
230273
  ssr: false,
229657
230274
  });
229658
- function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, sessionId, stopGenerating, mentorId, tenantKey, isPublicRoute, userIsStudent, username, isPreviewMode, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, compactMode = false, chatAreaMaxWidth, isConnecting = false, stopStreamingButtonRef, }) {
230275
+ function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, sessionId, stopGenerating, mentorId, tenantKey, isPublicRoute, userIsStudent, username, isPreviewMode, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, compactMode = false, chatAreaMaxWidth, isConnecting = false, stopStreamingButtonRef, slashSkills, slashSkillsLoading = false, }) {
229659
230276
  var _a, _b, _c, _d, _e;
229660
230277
  const t = useT();
229661
230278
  const dispatch = useDispatch();
@@ -229709,6 +230326,15 @@ function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpe
229709
230326
  const setInputValue = (input) => {
229710
230327
  dispatch(chatInputSliceActions.setTextareaInput(input));
229711
230328
  };
230329
+ // `/` skill picker — active only when the host supplies the agent's
230330
+ // effective skills (or reports them loading). No fetching happens here.
230331
+ const effectiveSlashSkills = slashSkills !== null && slashSkills !== void 0 ? slashSkills : [];
230332
+ const slashPicker = useSlashSkillPicker({
230333
+ inputValue,
230334
+ setInputValue,
230335
+ skills: effectiveSlashSkills,
230336
+ isLoading: slashSkillsLoading,
230337
+ });
229712
230338
  const handleSelectPrompt = (promptText) => {
229713
230339
  setInputValue(promptText);
229714
230340
  setIsPromptGalleryOpen(false);
@@ -229773,9 +230399,18 @@ function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpe
229773
230399
  }
229774
230400
  return persistentChatInputLabel ? '' : t('chatInputForm.askAnything');
229775
230401
  };
229776
- return (jsxs(Fragment$1, { children: [isTabletOrMobile && !isPreviewMode && !embedMode && !compactMode && (jsx("div", { className: "mx-auto flex w-full justify-end pt-4 pl-4", style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: jsx(RetrievedDocumentsButton, { sessionId: sessionId }) })), ((_c = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _c === void 0 ? void 0 : _c.disclaimer) && !compactMode && (jsx("div", { className: "mx-auto mt-1 w-full pb-1", style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: jsx("p", { id: "chat-input-disclaimer", className: "text-center text-[0.625rem] text-gray-500 italic", children: (_d = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _d === void 0 ? void 0 : _d.disclaimer }) })), jsxs("form", { ref: containerRef, onSubmit: handleSubmit, className: cn('mx-auto mt-4 w-full pb-2', CSS_CLASS_NAMES.CHAT.TEXTAREA), style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: [jsxs("div", { className: "relative overflow-hidden rounded-2xl border border-gray-200 bg-[#fbfbfb] pb-3 shadow-xs", children: [jsx(FileAttachmentsList, { attachedFiles: attachedFiles, onRemoveFile: handleRemoveFile, onRetryFile: retryUpload }), fileAddedNotification && (jsxs("div", { className: "animate-in slide-in-from-bottom-5 absolute top-0 right-0 left-0 -mt-10 flex items-center gap-2 rounded-md bg-blue-50 p-2 text-xs text-blue-600 duration-300", children: [jsx(FileText, { className: "h-3 w-3" }), jsx("span", { className: "truncate", children: fileAddedNotification })] })), jsxs("div", { className: "grid", children: [jsx("label", { id: "chat-input-label", htmlFor: "chat-input-textarea", className: cn(persistentChatInputLabel
230402
+ return (jsxs(Fragment$1, { children: [isTabletOrMobile && !isPreviewMode && !embedMode && !compactMode && (jsx("div", { className: "mx-auto flex w-full justify-end pt-4 pl-4", style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: jsx(RetrievedDocumentsButton, { sessionId: sessionId }) })), ((_c = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _c === void 0 ? void 0 : _c.disclaimer) && !compactMode && (jsx("div", { className: "mx-auto mt-1 w-full pb-1", style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: jsx("p", { id: "chat-input-disclaimer", className: "text-center text-[0.625rem] text-gray-500 italic", children: (_d = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _d === void 0 ? void 0 : _d.disclaimer }) })), jsxs("form", { ref: containerRef, onSubmit: handleSubmit, className: cn('relative mx-auto mt-4 w-full pb-2', CSS_CLASS_NAMES.CHAT.TEXTAREA), style: chatAreaMaxWidth ? { maxWidth: `${chatAreaMaxWidth}px` } : undefined, children: [slashPicker.open && (jsx(SlashSkillPicker, { skills: slashPicker.filteredSkills, activeIndex: slashPicker.activeIndex, listboxId: slashPicker.listboxId, onSelect: slashPicker.selectSkill, onActiveIndexChange: slashPicker.setActiveIndex, isLoading: slashSkillsLoading })), jsxs("div", { className: "relative overflow-hidden rounded-2xl border border-gray-200 bg-[#fbfbfb] pb-3 shadow-xs", children: [jsx(FileAttachmentsList, { attachedFiles: attachedFiles, onRemoveFile: handleRemoveFile, onRetryFile: retryUpload }), fileAddedNotification && (jsxs("div", { className: "animate-in slide-in-from-bottom-5 absolute top-0 right-0 left-0 -mt-10 flex items-center gap-2 rounded-md bg-blue-50 p-2 text-xs text-blue-600 duration-300", children: [jsx(FileText, { className: "h-3 w-3" }), jsx("span", { className: "truncate", children: fileAddedNotification })] })), jsxs("div", { className: "grid", children: [jsx("label", { id: "chat-input-label", htmlFor: "chat-input-textarea", className: cn(persistentChatInputLabel
229777
230403
  ? 'block px-[18.5px] pt-3 text-xs font-medium text-gray-600'
229778
- : 'sr-only'), children: t('chatInputForm.askAnything') }), jsx(AutoResizeTextarea, { id: "chat-input-textarea", "aria-labelledby": "chat-input-label", "aria-describedby": ((_e = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _e === void 0 ? void 0 : _e.disclaimer) ? 'chat-input-disclaimer' : undefined, value: inputValue, onChange: handleInputChange, onSubmit: handleSubmit, sessionId: sessionId, isPreviewMode: isPreviewMode, textAreaRows: textAreaRows, placeholder: isChatDisabledByRbac ? t('chatInputForm.noChatPermission') : textAreaPlaceholder(), disabled: isChatDisabledByRbac || hasUploadingFiles, allowEmptySubmit: attachedFiles.length > 0, allowAnonymousAccess: isMentorViewableByAnyone || showingSharedChat || !!userIsVisiting, embedMode: embedMode }), jsxs("div", { className: "flex items-center gap-2 px-2", children: [visibleToLoggedInUsersOnly && !compactMode && (jsx(UploadMenu, { onFileInputTrigger: () => executeWithTrialCheck(triggerFileInput), disabled: isChatDisabledByRbac || !sessionId, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), visibleToLoggedInUsersOnly && !compactMode && (jsx(InsideButtons, { containerWidth: containerWidth, activeOptions: activeTools, onOptionClick: updateSessionTools, deepResearch: deepResearch, artifactsEnabled: artifactsEnabled, disabled: isChatDisabledByRbac, onOpenPromptGallery: openPromptGallery, embedMode: embedMode, promptsIsEnabled: promptsIsEnabled, studyMode: studyMode, memoryEnabled: mentorSettings.data.memoryEnabled, mentorId: mentorId, tenantKey: tenantKey, username: username })), jsxs("div", { className: "ml-auto flex", children: [visibleToLoggedInUsersOnly && !compactMode && (jsx(ScreenSharingButton, { onClick: onScreenSharingClick, isScreenSharingModalOpen: isScreenSharingModalOpen, screenSharing: screenSharing, isPreviewMode: isPreviewMode, disabled: isChatDisabledByRbac })), visibleToLoggedInUsersOnly && !compactMode && (jsx(VoiceChatButton, { isPreviewMode: isPreviewMode, handleMicrophoneBtnClick: () => executeWithTrialCheck(handleMicrophoneBtnClick), processing: processing, recording: recording, disabled: isChatDisabledByRbac, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), visibleToLoggedInUsersOnly && !compactMode && (jsx(VoiceCallButton, { isPreviewMode: isPreviewMode, onClick: () => executeWithTrialCheck(onPhoneCallClick), disabled: isChatDisabledByRbac, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), isStreaming ? (jsx(StopStreamingButton, { ref: stopStreamingButtonRef, stopGenerating: stopGenerating })) : (jsx(SubmitMessageButton, { isPreviewMode: isPreviewMode, allowAnonymousAccess: isMentorViewableByAnyone, isUploading: hasUploadingFiles, disabled: isChatDisabledByRbac || !sessionId, isConnecting: isConnecting }))] })] })] }), jsx("input", { type: "file", ref: fileUploadInputRef, className: "hidden", onChange: handleFileInputChange, accept: fileUploadCapabilities.allSupportedTypes.length > 0
230404
+ : 'sr-only'), children: t('chatInputForm.askAnything') }), jsx(AutoResizeTextarea, { id: "chat-input-textarea", "aria-labelledby": "chat-input-label", "aria-describedby": ((_e = mentorSettings === null || mentorSettings === void 0 ? void 0 : mentorSettings.data) === null || _e === void 0 ? void 0 : _e.disclaimer) ? 'chat-input-disclaimer' : undefined, ...((effectiveSlashSkills.length > 0 || slashPicker.open) && {
230405
+ role: 'combobox',
230406
+ 'aria-expanded': slashPicker.open,
230407
+ 'aria-haspopup': 'listbox',
230408
+ 'aria-controls': slashPicker.open && slashPicker.filteredSkills.length > 0
230409
+ ? slashPicker.listboxId
230410
+ : undefined,
230411
+ 'aria-activedescendant': slashPicker.activeOptionId,
230412
+ 'aria-autocomplete': 'list',
230413
+ }), value: inputValue, onChange: handleInputChange, onSubmit: handleSubmit, onComposerKeyDown: slashPicker.handleKeyDown, sessionId: sessionId, isPreviewMode: isPreviewMode, textAreaRows: textAreaRows, placeholder: isChatDisabledByRbac ? t('chatInputForm.noChatPermission') : textAreaPlaceholder(), disabled: isChatDisabledByRbac || hasUploadingFiles, allowEmptySubmit: attachedFiles.length > 0, allowAnonymousAccess: isMentorViewableByAnyone || showingSharedChat || !!userIsVisiting, embedMode: embedMode }), jsxs("div", { className: "flex items-center gap-2 px-2", children: [visibleToLoggedInUsersOnly && !compactMode && (jsx(UploadMenu, { onFileInputTrigger: () => executeWithTrialCheck(triggerFileInput), disabled: isChatDisabledByRbac || !sessionId, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), visibleToLoggedInUsersOnly && !compactMode && (jsx(InsideButtons, { containerWidth: containerWidth, activeOptions: activeTools, onOptionClick: updateSessionTools, deepResearch: deepResearch, artifactsEnabled: artifactsEnabled, disabled: isChatDisabledByRbac, onOpenPromptGallery: openPromptGallery, embedMode: embedMode, promptsIsEnabled: promptsIsEnabled, studyMode: studyMode, memoryEnabled: mentorSettings.data.memoryEnabled, mentorId: mentorId, tenantKey: tenantKey, username: username })), jsxs("div", { className: "ml-auto flex", children: [visibleToLoggedInUsersOnly && !compactMode && (jsx(ScreenSharingButton, { onClick: onScreenSharingClick, isScreenSharingModalOpen: isScreenSharingModalOpen, screenSharing: screenSharing, isPreviewMode: isPreviewMode, disabled: isChatDisabledByRbac })), visibleToLoggedInUsersOnly && !compactMode && (jsx(VoiceChatButton, { isPreviewMode: isPreviewMode, handleMicrophoneBtnClick: () => executeWithTrialCheck(handleMicrophoneBtnClick), processing: processing, recording: recording, disabled: isChatDisabledByRbac, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), visibleToLoggedInUsersOnly && !compactMode && (jsx(VoiceCallButton, { isPreviewMode: isPreviewMode, onClick: () => executeWithTrialCheck(onPhoneCallClick), disabled: isChatDisabledByRbac, mentorId: mentorId, tenantKey: tenantKey, isPublicRoute: isPublicRoute })), isStreaming ? (jsx(StopStreamingButton, { ref: stopStreamingButtonRef, stopGenerating: stopGenerating })) : (jsx(SubmitMessageButton, { isPreviewMode: isPreviewMode, allowAnonymousAccess: isMentorViewableByAnyone, isUploading: hasUploadingFiles, disabled: isChatDisabledByRbac || !sessionId, isConnecting: isConnecting }))] })] })] }), jsx("input", { type: "file", ref: fileUploadInputRef, className: "hidden", onChange: handleFileInputChange, accept: fileUploadCapabilities.allSupportedTypes.length > 0
229779
230414
  ? fileUploadCapabilities.allSupportedTypes.join(',')
229780
230415
  : MENTOR_CHAT_DOCUMENTS_EXTENSIONS.join(','), multiple: true, disabled: isChatDisabledByRbac || !sessionId })] }), visibleToLoggedInUsersOnly && !compactMode && (jsx("div", { className: "flex w-full justify-center", children: jsx(OutsideButtons, { activeOptions: activeTools, onOptionClick: updateSessionTools, setSessionTools: setSessionTools, onCrossClick: updateSessionTools, containerWidth: containerWidth, enableWebBrowsing: enableWebBrowsing, imageGeneration: imageGeneration, codeInterpreter: codeInterpreter, googleSlidesIsEnabled: googleSlidesIsEnabled, googleDocumentIsEnabled: googleDocumentIsEnabled, tenantKey: tenantKey, userId: username, disabled: isChatDisabledByRbac }) }))] }), isPromptGalleryOpen && (jsx(PromptGalleryModal$1, { isOpen: isPromptGalleryOpen, onClose: () => setIsPromptGalleryOpen(false), onSelectPrompt: handleSelectPrompt, mentorId: mentorId, tenantKey: tenantKey, userIsStudent: userIsStudent })), isFreeTrialModalOpen && FreeTrialDialog && (jsx(FreeTrialDialog, { isOpen: isFreeTrialModalOpen, onClose: closeFreeTrialModal }))] }));
229781
230416
  }
@@ -233912,5 +234547,5 @@ var trainOrDeleteModal = /*#__PURE__*/Object.freeze({
233912
234547
  TrainOrDeleteModal: TrainOrDeleteModal
233913
234548
  });
233914
234549
 
233915
- export { ACCESS_COURSE_LABEL, AccessTimeHeatmap, AccessiblePaginate, AddMentorToProjectModal, AddSkillDialog, Admin, AdvancedTab, AgentConfigPrompts, AgentSkills, AlertsTab, AnalyticsAuditLogStats, AnalyticsCourseDetail, AnalyticsCourses, AnalyticsFinancialStats, AnalyticsLayout, AnalyticsMonetizationStats, AnalyticsOverview, AnalyticsProgramDetail, AnalyticsPrograms, AnalyticsReportDownload, AnalyticsReports, AnalyticsSettingsProvider, AnalyticsTopicsStats, AnalyticsTranscriptsStats, AnalyticsUsersStats, AppleRestrictionModal, ApplyWizard, BUY_NOW_LABEL, BillingTab, CATALOGS, CREATE_AGENT_LABELS, CategorizedDropdownMenu, ChartCardWrapper, ChartFiltersProvider, ChartLoading, ChatContext, ChatPrivacyToggle, ChatProvider, CompanyDialog, ConnectorManagementDialog, CopyButtonIcon, CourseAccessGuard, CourseCardSkeleton, CourseContentLoading, CourseOutline, CourseOutlineContext, CourseOutlineDrawer, CreateAgentForm, CreateAgentModal, CreateProjectModal, CreateWorkflowModal, CredentialBox, CredentialMiniBoxSkeleton, CredentialsList, CreditBalance, CustomDateRangePicker, CustomTooltip, DEFAULT_COWORK_REQUIRED_SIZE_GB, DEFAULT_LOCALE, DefaultEmptyBox, DeleteProjectModal, DeleteWorkflowModal, DiscoverContentCard, DiscoverFacetsFilter, DiscoverFilterDrawer, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENROLL_NOW_COURSE_STARTING_SOON_LABEL, ENROLL_NOW_LABEL, EditAlertDialog, EducationBox, EducationDialog, EducationTab, EdxIframeContext, EmptyStats, ExperienceBox, ExperienceDialog, ExperienceTab, FacetFilterContext, Footer, GHOST_OS_REPO_URL, GHOST_OS_TAURI_COMMANDS, GHOST_OS_TAURI_EVENTS, GradebookTab, GroupsFilterDropdown, INVITATION_ONLY_LABEL, InstitutionDialog, IntegrationsTab, InviteUserContent, InviteUserDialog, InvitedUsersDialog, LOCAL_MODELS, Loader, LocalLLMTab, LocalModelsContent, LoginButton, MACOS_PERMISSIONS_COMMANDS, Markdown, MinimumMentorAlert, MonetizationTab, NotificationDisplay, NotificationDropdown, ONBOARDING_SECTORS, OnboardingShell, OnboardingWizard, PaywallModal, PlacementExam, PlacementExamsDropdown, PlatformNavbar, PlatformNavbarSearch, Profile, ProfileTimeChart, ProgressDots, ProjectActionButtons, ProjectFilesModal, ProjectInstructionsModal, ProjectLandingPage, ProjectMentorsList, ProjectsPage, REQUEST_ACCESS_COURSE_STARTING_SOON_LABEL, REQUEST_ACCESS_LABEL, RenameProjectModal, ResumeBox, ResumeTab, RichTextEditor, SUPPORTED_LOCALES, SandboxConfig, SearchableMultiSelect, SendNotificationDialog, SignupButton, SkeletonActivityStatBox, SkeletonAddSkillsLoading, SkeletonCreatePathwaySearchList, SkeletonDiscoverFilterBox, SkeletonEducationBox, SkeletonMultiplier, SkeletonPathwayBox, SkeletonProfileInfoCard, SkeletonSkillBox, SkillBox, SkillDetailModal, SkillLeaderboardChart, SkillsBox, SkillsList, Spinner, StatCard, StepHeader, TAURI_COMMANDS, TAURI_EVENTS, TenantSwitcher, TimeFilter, TimeTrackingProvider, TimedExam, ToolDialogs, TopBanner, UpgradePackageModal, UserAvatar, Version, WebContainersI18nProvider, WorkflowSidebar, addBookmarksTab, availablePlacementExams, findLastResumeBlock, findSequentialParent, flattenVerticalBlocks, getCatalog, getFirstAvailableUnit, getLocalLLMModel, getLocalLLMToolSupport, getNextUnitIframe, getOrg, getParentBlockById, getParentsInfosFromSublessonId, getPreviousUnitIframe, getRandomCourseImage, getSectorById, getTenant, getUnitToIframe, getUserId, getUserName, inBrowserPrint, inIframe, initialGhostOsInstallState, initialModelDownloadState, isCoworkEnabled, isLocalLLMEnabled, isPlatformNavbarCreditBalanceVisible, isTauriApp, isValidLocale, components as markdownComponents, modelSupportsCowork, onboardingPrimaryButtonClass, onboardingSecondaryButtonClass, resolveCreateAgentLabels, sanitizeCss, setCoworkEnabled, setLocalLLMEnabled, setLocalLLMModel, setLocalLLMToolSupport, smallestCoworkModel, useAnalyticsSettings, useAuditLog, useCatalogSearch, useChartFilters, useChatPrivacy, useChatState, useCourseDetail, useCourseMetadata, useCourses, useDiscover, useEdxIframe, useFinancial, useGhostOs, useIframeMessageHandler, useLocalStorage, useModelDownload, useMonetization, useOverview, useProfileActivityStats, useProfileCredentials, useProfilePathways, useProfilePrograms, useProfileSkills, useProfileTimeSpent, usePrograms, useReports, useT, useTauri, useTimeTracking, useTopics, useTranscripts, useUserCourses, useUserMetadata, useUsers, useWebContainersI18n, useWebContainersLocale };
234550
+ export { ACCESS_COURSE_LABEL, AccessTimeHeatmap, AccessiblePaginate, AddMentorToProjectModal, AddSkillDialog, Admin, AdvancedTab, AgentConfigPrompts, AgentSkills, AlertsTab, AnalyticsAuditLogStats, AnalyticsCourseDetail, AnalyticsCourses, AnalyticsFinancialStats, AnalyticsLayout, AnalyticsMonetizationStats, AnalyticsOverview, AnalyticsProgramDetail, AnalyticsPrograms, AnalyticsReportDownload, AnalyticsReports, AnalyticsSettingsProvider, AnalyticsTopicsStats, AnalyticsTranscriptsStats, AnalyticsUsersStats, AppleRestrictionModal, ApplyWizard, BUY_NOW_LABEL, BillingTab, CATALOGS, CREATE_AGENT_LABELS, CategorizedDropdownMenu, ChartCardWrapper, ChartFiltersProvider, ChartLoading, ChatContext, ChatPrivacyToggle, ChatProvider, CompanyDialog, ConnectorManagementDialog, CopyButtonIcon, CourseAccessGuard, CourseCardSkeleton, CourseContentLoading, CourseOutline, CourseOutlineContext, CourseOutlineDrawer, CreateAgentForm, CreateAgentModal, CreateProjectModal, CreateWorkflowModal, CredentialBox, CredentialMiniBoxSkeleton, CredentialsList, CreditBalance, CustomDateRangePicker, CustomTooltip, DEFAULT_COWORK_REQUIRED_SIZE_GB, DEFAULT_LOCALE, DefaultEmptyBox, DeleteProjectModal, DeleteWorkflowModal, DiscoverContentCard, DiscoverFacetsFilter, DiscoverFilterDrawer, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENROLL_NOW_COURSE_STARTING_SOON_LABEL, ENROLL_NOW_LABEL, EditAlertDialog, EducationBox, EducationDialog, EducationTab, EdxIframeContext, EmptyStats, ExperienceBox, ExperienceDialog, ExperienceTab, FacetFilterContext, Footer, GHOST_OS_REPO_URL, GHOST_OS_TAURI_COMMANDS, GHOST_OS_TAURI_EVENTS, GradebookTab, GroupsFilterDropdown, INVITATION_ONLY_LABEL, InstitutionDialog, IntegrationsTab, InviteUserContent, InviteUserDialog, InvitedUsersDialog, LOCAL_MODELS, Loader, LocalLLMTab, LocalModelsContent, LoginButton, MACOS_PERMISSIONS_COMMANDS, Markdown, MinimumMentorAlert, MonetizationTab, NotificationDisplay, NotificationDropdown, ONBOARDING_SECTORS, OnboardingShell, OnboardingWizard, PaywallModal, PlacementExam, PlacementExamsDropdown, PlatformNavbar, PlatformNavbarSearch, Profile, ProfileTimeChart, ProgressDots, ProjectActionButtons, ProjectFilesModal, ProjectInstructionsModal, ProjectLandingPage, ProjectMentorsList, ProjectsPage, REQUEST_ACCESS_COURSE_STARTING_SOON_LABEL, REQUEST_ACCESS_LABEL, RenameProjectModal, ResumeBox, ResumeTab, RichTextEditor, SUPPORTED_LOCALES, SandboxConfig, SearchableMultiSelect, SendNotificationDialog, SignupButton, SkeletonActivityStatBox, SkeletonAddSkillsLoading, SkeletonCreatePathwaySearchList, SkeletonDiscoverFilterBox, SkeletonEducationBox, SkeletonMultiplier, SkeletonPathwayBox, SkeletonProfileInfoCard, SkeletonSkillBox, SkillBox, SkillDetailModal, SkillLeaderboardChart, SkillsBox, SkillsList, SlashSkillPicker, Spinner, StatCard, StepHeader, TAURI_COMMANDS, TAURI_EVENTS, TenantSwitcher, TimeFilter, TimeTrackingProvider, TimedExam, ToolDialogs, TopBanner, UpgradePackageModal, UserAvatar, Version, WebContainersI18nProvider, WorkflowSidebar, addBookmarksTab, availablePlacementExams, findLastResumeBlock, findSequentialParent, flattenVerticalBlocks, getCatalog, getFirstAvailableUnit, getLocalLLMModel, getLocalLLMToolSupport, getNextUnitIframe, getOrg, getParentBlockById, getParentsInfosFromSublessonId, getPreviousUnitIframe, getRandomCourseImage, getSectorById, getTenant, getUnitToIframe, getUserId, getUserName, inBrowserPrint, inIframe, initialGhostOsInstallState, initialModelDownloadState, isCoworkEnabled, isLocalLLMEnabled, isPlatformNavbarCreditBalanceVisible, isSlashCommandToken, isTauriApp, isValidLocale, components as markdownComponents, modelSupportsCowork, onboardingPrimaryButtonClass, onboardingSecondaryButtonClass, resolveCreateAgentLabels, sanitizeCss, setCoworkEnabled, setLocalLLMEnabled, setLocalLLMModel, setLocalLLMToolSupport, smallestCoworkModel, useAnalyticsSettings, useAuditLog, useCatalogSearch, useChartFilters, useChatPrivacy, useChatState, useCourseDetail, useCourseMetadata, useCourses, useDiscover, useEdxIframe, useFinancial, useGhostOs, useIframeMessageHandler, useLocalStorage, useModelDownload, useMonetization, useOverview, useProfileActivityStats, useProfileCredentials, useProfilePathways, useProfilePrograms, useProfileSkills, useProfileTimeSpent, usePrograms, useReports, useSlashSkillPicker, useT, useTauri, useTimeTracking, useTopics, useTranscripts, useUserCourses, useUserMetadata, useUsers, useWebContainersI18n, useWebContainersLocale };
233916
234551
  //# sourceMappingURL=index.esm.js.map