@iblai/iblai-js 2.2.9 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -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,
|
|
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';
|
|
@@ -254,7 +254,7 @@ function useTimeTracking(config = {}) {
|
|
|
254
254
|
}
|
|
255
255
|
}, [config.getTenantKey, config.getMentorId]);
|
|
256
256
|
const handleTimeUpdate = useCallback(async (url, timeSpent) => {
|
|
257
|
-
var _a;
|
|
257
|
+
var _a, _b, _c;
|
|
258
258
|
// Check if user is logged in before making time tracking API call
|
|
259
259
|
if (config.storageService) {
|
|
260
260
|
try {
|
|
@@ -278,6 +278,10 @@ function useTimeTracking(config = {}) {
|
|
|
278
278
|
const currentSessionUuid = config.getSessionUuid
|
|
279
279
|
? config.getSessionUuid()
|
|
280
280
|
: config.sessionUuid;
|
|
281
|
+
// Course/unit context is resolved per-update from the tracked URL (not
|
|
282
|
+
// cached like tenant/mentor) because it changes as the user navigates.
|
|
283
|
+
const courseId = (_a = config.getCourseId) === null || _a === void 0 ? void 0 : _a.call(config, url);
|
|
284
|
+
const blockId = (_b = config.getBlockId) === null || _b === void 0 ? void 0 : _b.call(config, url);
|
|
281
285
|
const timeTrackingData = {
|
|
282
286
|
timestamp: new Date().toISOString(),
|
|
283
287
|
url: url,
|
|
@@ -285,8 +289,10 @@ function useTimeTracking(config = {}) {
|
|
|
285
289
|
count: Math.floor(timeSpent / 1000), // Convert milliseconds to seconds
|
|
286
290
|
...(mentorId && { mentor_uuid: mentorId }),
|
|
287
291
|
...(currentSessionUuid && { session_uuid: currentSessionUuid }),
|
|
292
|
+
...(courseId && { course_id: courseId }),
|
|
293
|
+
...(blockId && { block_id: blockId }),
|
|
288
294
|
};
|
|
289
|
-
if ((
|
|
295
|
+
if ((_c = config.storageService) === null || _c === void 0 ? void 0 : _c.getItem(LOCAL_STORAGE_KEYS.USER_DATA)) {
|
|
290
296
|
await timeTracking(timeTrackingData).unwrap();
|
|
291
297
|
}
|
|
292
298
|
else {
|
|
@@ -298,7 +304,7 @@ function useTimeTracking(config = {}) {
|
|
|
298
304
|
...(currentSessionUuid && { sessionUuid: currentSessionUuid }),
|
|
299
305
|
});
|
|
300
306
|
}
|
|
301
|
-
catch (
|
|
307
|
+
catch (_d) {
|
|
302
308
|
// console.error('Failed to send time tracking data:', error);
|
|
303
309
|
// Don't throw the error to prevent disrupting the user experience
|
|
304
310
|
}
|
|
@@ -307,6 +313,8 @@ function useTimeTracking(config = {}) {
|
|
|
307
313
|
mentorId,
|
|
308
314
|
config.getSessionUuid,
|
|
309
315
|
config.sessionUuid,
|
|
316
|
+
config.getCourseId,
|
|
317
|
+
config.getBlockId,
|
|
310
318
|
config.storageService,
|
|
311
319
|
timeTracking,
|
|
312
320
|
]);
|
|
@@ -54758,7 +54766,7 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
54758
54766
|
*/
|
|
54759
54767
|
|
|
54760
54768
|
|
|
54761
|
-
const __iconNode$
|
|
54769
|
+
const __iconNode$2l = [
|
|
54762
54770
|
[
|
|
54763
54771
|
"path",
|
|
54764
54772
|
{
|
|
@@ -54767,7 +54775,7 @@ const __iconNode$2k = [
|
|
|
54767
54775
|
}
|
|
54768
54776
|
]
|
|
54769
54777
|
];
|
|
54770
|
-
const Activity = createLucideIcon("activity", __iconNode$
|
|
54778
|
+
const Activity = createLucideIcon("activity", __iconNode$2l);
|
|
54771
54779
|
|
|
54772
54780
|
/**
|
|
54773
54781
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54777,12 +54785,12 @@ const Activity = createLucideIcon("activity", __iconNode$2k);
|
|
|
54777
54785
|
*/
|
|
54778
54786
|
|
|
54779
54787
|
|
|
54780
|
-
const __iconNode$
|
|
54788
|
+
const __iconNode$2k = [
|
|
54781
54789
|
["path", { d: "M17 12H7", key: "16if0g" }],
|
|
54782
54790
|
["path", { d: "M19 18H5", key: "18s9l3" }],
|
|
54783
54791
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
54784
54792
|
];
|
|
54785
|
-
const AlignCenter = createLucideIcon("align-center", __iconNode$
|
|
54793
|
+
const AlignCenter = createLucideIcon("align-center", __iconNode$2k);
|
|
54786
54794
|
|
|
54787
54795
|
/**
|
|
54788
54796
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54792,12 +54800,12 @@ const AlignCenter = createLucideIcon("align-center", __iconNode$2j);
|
|
|
54792
54800
|
*/
|
|
54793
54801
|
|
|
54794
54802
|
|
|
54795
|
-
const __iconNode$
|
|
54803
|
+
const __iconNode$2j = [
|
|
54796
54804
|
["path", { d: "M15 12H3", key: "6jk70r" }],
|
|
54797
54805
|
["path", { d: "M17 18H3", key: "1amg6g" }],
|
|
54798
54806
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
54799
54807
|
];
|
|
54800
|
-
const AlignLeft = createLucideIcon("align-left", __iconNode$
|
|
54808
|
+
const AlignLeft = createLucideIcon("align-left", __iconNode$2j);
|
|
54801
54809
|
|
|
54802
54810
|
/**
|
|
54803
54811
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54807,12 +54815,12 @@ const AlignLeft = createLucideIcon("align-left", __iconNode$2i);
|
|
|
54807
54815
|
*/
|
|
54808
54816
|
|
|
54809
54817
|
|
|
54810
|
-
const __iconNode$
|
|
54818
|
+
const __iconNode$2i = [
|
|
54811
54819
|
["path", { d: "M21 12H9", key: "dn1m92" }],
|
|
54812
54820
|
["path", { d: "M21 18H7", key: "1ygte8" }],
|
|
54813
54821
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
54814
54822
|
];
|
|
54815
|
-
const AlignRight = createLucideIcon("align-right", __iconNode$
|
|
54823
|
+
const AlignRight = createLucideIcon("align-right", __iconNode$2i);
|
|
54816
54824
|
|
|
54817
54825
|
/**
|
|
54818
54826
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54822,12 +54830,12 @@ const AlignRight = createLucideIcon("align-right", __iconNode$2h);
|
|
|
54822
54830
|
*/
|
|
54823
54831
|
|
|
54824
54832
|
|
|
54825
|
-
const __iconNode$
|
|
54833
|
+
const __iconNode$2h = [
|
|
54826
54834
|
["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
|
|
54827
54835
|
["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
|
|
54828
54836
|
["path", { d: "M10 12h4", key: "a56b0p" }]
|
|
54829
54837
|
];
|
|
54830
|
-
const Archive = createLucideIcon("archive", __iconNode$
|
|
54838
|
+
const Archive = createLucideIcon("archive", __iconNode$2h);
|
|
54831
54839
|
|
|
54832
54840
|
/**
|
|
54833
54841
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54837,11 +54845,11 @@ const Archive = createLucideIcon("archive", __iconNode$2g);
|
|
|
54837
54845
|
*/
|
|
54838
54846
|
|
|
54839
54847
|
|
|
54840
|
-
const __iconNode$
|
|
54848
|
+
const __iconNode$2g = [
|
|
54841
54849
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
54842
54850
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
54843
54851
|
];
|
|
54844
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
54852
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$2g);
|
|
54845
54853
|
|
|
54846
54854
|
/**
|
|
54847
54855
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54851,11 +54859,11 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$2f);
|
|
|
54851
54859
|
*/
|
|
54852
54860
|
|
|
54853
54861
|
|
|
54854
|
-
const __iconNode$
|
|
54862
|
+
const __iconNode$2f = [
|
|
54855
54863
|
["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
|
|
54856
54864
|
["path", { d: "M19 12H5", key: "x3x0zl" }]
|
|
54857
54865
|
];
|
|
54858
|
-
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$
|
|
54866
|
+
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2f);
|
|
54859
54867
|
|
|
54860
54868
|
/**
|
|
54861
54869
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54865,11 +54873,11 @@ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2e);
|
|
|
54865
54873
|
*/
|
|
54866
54874
|
|
|
54867
54875
|
|
|
54868
|
-
const __iconNode$
|
|
54876
|
+
const __iconNode$2e = [
|
|
54869
54877
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
54870
54878
|
["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
|
|
54871
54879
|
];
|
|
54872
|
-
const ArrowRight = createLucideIcon("arrow-right", __iconNode$
|
|
54880
|
+
const ArrowRight = createLucideIcon("arrow-right", __iconNode$2e);
|
|
54873
54881
|
|
|
54874
54882
|
/**
|
|
54875
54883
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54879,11 +54887,11 @@ const ArrowRight = createLucideIcon("arrow-right", __iconNode$2d);
|
|
|
54879
54887
|
*/
|
|
54880
54888
|
|
|
54881
54889
|
|
|
54882
|
-
const __iconNode$
|
|
54890
|
+
const __iconNode$2d = [
|
|
54883
54891
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
54884
54892
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
54885
54893
|
];
|
|
54886
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
54894
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$2d);
|
|
54887
54895
|
|
|
54888
54896
|
/**
|
|
54889
54897
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54893,7 +54901,7 @@ const ArrowUp = createLucideIcon("arrow-up", __iconNode$2c);
|
|
|
54893
54901
|
*/
|
|
54894
54902
|
|
|
54895
54903
|
|
|
54896
|
-
const __iconNode$
|
|
54904
|
+
const __iconNode$2c = [
|
|
54897
54905
|
[
|
|
54898
54906
|
"path",
|
|
54899
54907
|
{
|
|
@@ -54903,7 +54911,7 @@ const __iconNode$2b = [
|
|
|
54903
54911
|
],
|
|
54904
54912
|
["circle", { cx: "12", cy: "8", r: "6", key: "1vp47v" }]
|
|
54905
54913
|
];
|
|
54906
|
-
const Award = createLucideIcon("award", __iconNode$
|
|
54914
|
+
const Award = createLucideIcon("award", __iconNode$2c);
|
|
54907
54915
|
|
|
54908
54916
|
/**
|
|
54909
54917
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54913,11 +54921,11 @@ const Award = createLucideIcon("award", __iconNode$2b);
|
|
|
54913
54921
|
*/
|
|
54914
54922
|
|
|
54915
54923
|
|
|
54916
|
-
const __iconNode$
|
|
54924
|
+
const __iconNode$2b = [
|
|
54917
54925
|
["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }],
|
|
54918
54926
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
|
|
54919
54927
|
];
|
|
54920
|
-
const Ban = createLucideIcon("ban", __iconNode$
|
|
54928
|
+
const Ban = createLucideIcon("ban", __iconNode$2b);
|
|
54921
54929
|
|
|
54922
54930
|
/**
|
|
54923
54931
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54927,12 +54935,12 @@ const Ban = createLucideIcon("ban", __iconNode$2a);
|
|
|
54927
54935
|
*/
|
|
54928
54936
|
|
|
54929
54937
|
|
|
54930
|
-
const __iconNode$
|
|
54938
|
+
const __iconNode$2a = [
|
|
54931
54939
|
["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }],
|
|
54932
54940
|
["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }],
|
|
54933
54941
|
["path", { d: "M6 12h.01M18 12h.01", key: "113zkx" }]
|
|
54934
54942
|
];
|
|
54935
|
-
const Banknote = createLucideIcon("banknote", __iconNode$
|
|
54943
|
+
const Banknote = createLucideIcon("banknote", __iconNode$2a);
|
|
54936
54944
|
|
|
54937
54945
|
/**
|
|
54938
54946
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54942,7 +54950,7 @@ const Banknote = createLucideIcon("banknote", __iconNode$29);
|
|
|
54942
54950
|
*/
|
|
54943
54951
|
|
|
54944
54952
|
|
|
54945
|
-
const __iconNode$
|
|
54953
|
+
const __iconNode$29 = [
|
|
54946
54954
|
["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
|
|
54947
54955
|
["path", { d: "M22 8c0-2.3-.8-4.3-2-6", key: "5bb3ad" }],
|
|
54948
54956
|
[
|
|
@@ -54954,7 +54962,7 @@ const __iconNode$28 = [
|
|
|
54954
54962
|
],
|
|
54955
54963
|
["path", { d: "M4 2C2.8 3.7 2 5.7 2 8", key: "tap9e0" }]
|
|
54956
54964
|
];
|
|
54957
|
-
const BellRing = createLucideIcon("bell-ring", __iconNode$
|
|
54965
|
+
const BellRing = createLucideIcon("bell-ring", __iconNode$29);
|
|
54958
54966
|
|
|
54959
54967
|
/**
|
|
54960
54968
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54964,7 +54972,7 @@ const BellRing = createLucideIcon("bell-ring", __iconNode$28);
|
|
|
54964
54972
|
*/
|
|
54965
54973
|
|
|
54966
54974
|
|
|
54967
|
-
const __iconNode$
|
|
54975
|
+
const __iconNode$28 = [
|
|
54968
54976
|
["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
|
|
54969
54977
|
[
|
|
54970
54978
|
"path",
|
|
@@ -54974,7 +54982,7 @@ const __iconNode$27 = [
|
|
|
54974
54982
|
}
|
|
54975
54983
|
]
|
|
54976
54984
|
];
|
|
54977
|
-
const Bell = createLucideIcon("bell", __iconNode$
|
|
54985
|
+
const Bell = createLucideIcon("bell", __iconNode$28);
|
|
54978
54986
|
|
|
54979
54987
|
/**
|
|
54980
54988
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -54984,13 +54992,13 @@ const Bell = createLucideIcon("bell", __iconNode$27);
|
|
|
54984
54992
|
*/
|
|
54985
54993
|
|
|
54986
54994
|
|
|
54987
|
-
const __iconNode$
|
|
54995
|
+
const __iconNode$27 = [
|
|
54988
54996
|
[
|
|
54989
54997
|
"path",
|
|
54990
54998
|
{ 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
54999
|
]
|
|
54992
55000
|
];
|
|
54993
|
-
const Bold$1 = createLucideIcon("bold", __iconNode$
|
|
55001
|
+
const Bold$1 = createLucideIcon("bold", __iconNode$27);
|
|
54994
55002
|
|
|
54995
55003
|
/**
|
|
54996
55004
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55000,7 +55008,7 @@ const Bold$1 = createLucideIcon("bold", __iconNode$26);
|
|
|
55000
55008
|
*/
|
|
55001
55009
|
|
|
55002
55010
|
|
|
55003
|
-
const __iconNode$
|
|
55011
|
+
const __iconNode$26 = [
|
|
55004
55012
|
["path", { d: "M12 7v14", key: "1akyts" }],
|
|
55005
55013
|
[
|
|
55006
55014
|
"path",
|
|
@@ -55010,7 +55018,7 @@ const __iconNode$25 = [
|
|
|
55010
55018
|
}
|
|
55011
55019
|
]
|
|
55012
55020
|
];
|
|
55013
|
-
const BookOpen = createLucideIcon("book-open", __iconNode$
|
|
55021
|
+
const BookOpen = createLucideIcon("book-open", __iconNode$26);
|
|
55014
55022
|
|
|
55015
55023
|
/**
|
|
55016
55024
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55020,7 +55028,7 @@ const BookOpen = createLucideIcon("book-open", __iconNode$25);
|
|
|
55020
55028
|
*/
|
|
55021
55029
|
|
|
55022
55030
|
|
|
55023
|
-
const __iconNode$
|
|
55031
|
+
const __iconNode$25 = [
|
|
55024
55032
|
["path", { d: "M12 8V4H8", key: "hb8ula" }],
|
|
55025
55033
|
["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
|
|
55026
55034
|
["path", { d: "M2 14h2", key: "vft8re" }],
|
|
@@ -55028,7 +55036,7 @@ const __iconNode$24 = [
|
|
|
55028
55036
|
["path", { d: "M15 13v2", key: "1xurst" }],
|
|
55029
55037
|
["path", { d: "M9 13v2", key: "rq6x2g" }]
|
|
55030
55038
|
];
|
|
55031
|
-
const Bot = createLucideIcon("bot", __iconNode$
|
|
55039
|
+
const Bot = createLucideIcon("bot", __iconNode$25);
|
|
55032
55040
|
|
|
55033
55041
|
/**
|
|
55034
55042
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55038,11 +55046,11 @@ const Bot = createLucideIcon("bot", __iconNode$24);
|
|
|
55038
55046
|
*/
|
|
55039
55047
|
|
|
55040
55048
|
|
|
55041
|
-
const __iconNode$
|
|
55049
|
+
const __iconNode$24 = [
|
|
55042
55050
|
["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
|
|
55043
55051
|
["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
|
|
55044
55052
|
];
|
|
55045
|
-
const Briefcase = createLucideIcon("briefcase", __iconNode$
|
|
55053
|
+
const Briefcase = createLucideIcon("briefcase", __iconNode$24);
|
|
55046
55054
|
|
|
55047
55055
|
/**
|
|
55048
55056
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55052,7 +55060,7 @@ const Briefcase = createLucideIcon("briefcase", __iconNode$23);
|
|
|
55052
55060
|
*/
|
|
55053
55061
|
|
|
55054
55062
|
|
|
55055
|
-
const __iconNode$
|
|
55063
|
+
const __iconNode$23 = [
|
|
55056
55064
|
["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
|
|
55057
55065
|
["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
|
|
55058
55066
|
["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
|
|
@@ -55061,7 +55069,7 @@ const __iconNode$22 = [
|
|
|
55061
55069
|
["path", { d: "M10 14h4", key: "kelpxr" }],
|
|
55062
55070
|
["path", { d: "M10 18h4", key: "1ulq68" }]
|
|
55063
55071
|
];
|
|
55064
|
-
const Building2 = createLucideIcon("building-2", __iconNode$
|
|
55072
|
+
const Building2 = createLucideIcon("building-2", __iconNode$23);
|
|
55065
55073
|
|
|
55066
55074
|
/**
|
|
55067
55075
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55071,13 +55079,13 @@ const Building2 = createLucideIcon("building-2", __iconNode$22);
|
|
|
55071
55079
|
*/
|
|
55072
55080
|
|
|
55073
55081
|
|
|
55074
|
-
const __iconNode$
|
|
55082
|
+
const __iconNode$22 = [
|
|
55075
55083
|
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
55076
55084
|
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
55077
55085
|
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
|
|
55078
55086
|
["path", { d: "M3 10h18", key: "8toen8" }]
|
|
55079
55087
|
];
|
|
55080
|
-
const Calendar$1 = createLucideIcon("calendar", __iconNode$
|
|
55088
|
+
const Calendar$1 = createLucideIcon("calendar", __iconNode$22);
|
|
55081
55089
|
|
|
55082
55090
|
/**
|
|
55083
55091
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55087,11 +55095,11 @@ const Calendar$1 = createLucideIcon("calendar", __iconNode$21);
|
|
|
55087
55095
|
*/
|
|
55088
55096
|
|
|
55089
55097
|
|
|
55090
|
-
const __iconNode$
|
|
55098
|
+
const __iconNode$21 = [
|
|
55091
55099
|
["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
|
|
55092
55100
|
["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
|
|
55093
55101
|
];
|
|
55094
|
-
const CheckCheck = createLucideIcon("check-check", __iconNode$
|
|
55102
|
+
const CheckCheck = createLucideIcon("check-check", __iconNode$21);
|
|
55095
55103
|
|
|
55096
55104
|
/**
|
|
55097
55105
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55101,8 +55109,8 @@ const CheckCheck = createLucideIcon("check-check", __iconNode$20);
|
|
|
55101
55109
|
*/
|
|
55102
55110
|
|
|
55103
55111
|
|
|
55104
|
-
const __iconNode$
|
|
55105
|
-
const Check = createLucideIcon("check", __iconNode$
|
|
55112
|
+
const __iconNode$20 = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
55113
|
+
const Check = createLucideIcon("check", __iconNode$20);
|
|
55106
55114
|
|
|
55107
55115
|
/**
|
|
55108
55116
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55112,8 +55120,8 @@ const Check = createLucideIcon("check", __iconNode$1$);
|
|
|
55112
55120
|
*/
|
|
55113
55121
|
|
|
55114
55122
|
|
|
55115
|
-
const __iconNode$
|
|
55116
|
-
const ChevronDown = createLucideIcon("chevron-down", __iconNode$
|
|
55123
|
+
const __iconNode$1$ = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
55124
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$1$);
|
|
55117
55125
|
|
|
55118
55126
|
/**
|
|
55119
55127
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55123,11 +55131,11 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1_);
|
|
|
55123
55131
|
*/
|
|
55124
55132
|
|
|
55125
55133
|
|
|
55126
|
-
const __iconNode$
|
|
55134
|
+
const __iconNode$1_ = [
|
|
55127
55135
|
["path", { d: "m17 18-6-6 6-6", key: "1yerx2" }],
|
|
55128
55136
|
["path", { d: "M7 6v12", key: "1p53r6" }]
|
|
55129
55137
|
];
|
|
55130
|
-
const ChevronFirst = createLucideIcon("chevron-first", __iconNode$
|
|
55138
|
+
const ChevronFirst = createLucideIcon("chevron-first", __iconNode$1_);
|
|
55131
55139
|
|
|
55132
55140
|
/**
|
|
55133
55141
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55137,11 +55145,11 @@ const ChevronFirst = createLucideIcon("chevron-first", __iconNode$1Z);
|
|
|
55137
55145
|
*/
|
|
55138
55146
|
|
|
55139
55147
|
|
|
55140
|
-
const __iconNode$
|
|
55148
|
+
const __iconNode$1Z = [
|
|
55141
55149
|
["path", { d: "m7 18 6-6-6-6", key: "lwmzdw" }],
|
|
55142
55150
|
["path", { d: "M17 6v12", key: "1o0aio" }]
|
|
55143
55151
|
];
|
|
55144
|
-
const ChevronLast = createLucideIcon("chevron-last", __iconNode$
|
|
55152
|
+
const ChevronLast = createLucideIcon("chevron-last", __iconNode$1Z);
|
|
55145
55153
|
|
|
55146
55154
|
/**
|
|
55147
55155
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55151,8 +55159,8 @@ const ChevronLast = createLucideIcon("chevron-last", __iconNode$1Y);
|
|
|
55151
55159
|
*/
|
|
55152
55160
|
|
|
55153
55161
|
|
|
55154
|
-
const __iconNode$
|
|
55155
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
55162
|
+
const __iconNode$1Y = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
|
|
55163
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1Y);
|
|
55156
55164
|
|
|
55157
55165
|
/**
|
|
55158
55166
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55162,8 +55170,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1X);
|
|
|
55162
55170
|
*/
|
|
55163
55171
|
|
|
55164
55172
|
|
|
55165
|
-
const __iconNode$
|
|
55166
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
55173
|
+
const __iconNode$1X = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
55174
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$1X);
|
|
55167
55175
|
|
|
55168
55176
|
/**
|
|
55169
55177
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55173,8 +55181,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1W);
|
|
|
55173
55181
|
*/
|
|
55174
55182
|
|
|
55175
55183
|
|
|
55176
|
-
const __iconNode$
|
|
55177
|
-
const ChevronUp = createLucideIcon("chevron-up", __iconNode$
|
|
55184
|
+
const __iconNode$1W = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
55185
|
+
const ChevronUp = createLucideIcon("chevron-up", __iconNode$1W);
|
|
55178
55186
|
|
|
55179
55187
|
/**
|
|
55180
55188
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55184,11 +55192,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1V);
|
|
|
55184
55192
|
*/
|
|
55185
55193
|
|
|
55186
55194
|
|
|
55187
|
-
const __iconNode$
|
|
55195
|
+
const __iconNode$1V = [
|
|
55188
55196
|
["path", { d: "m11 17-5-5 5-5", key: "13zhaf" }],
|
|
55189
55197
|
["path", { d: "m18 17-5-5 5-5", key: "h8a8et" }]
|
|
55190
55198
|
];
|
|
55191
|
-
const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$
|
|
55199
|
+
const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$1V);
|
|
55192
55200
|
|
|
55193
55201
|
/**
|
|
55194
55202
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55198,11 +55206,11 @@ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$1U);
|
|
|
55198
55206
|
*/
|
|
55199
55207
|
|
|
55200
55208
|
|
|
55201
|
-
const __iconNode$
|
|
55209
|
+
const __iconNode$1U = [
|
|
55202
55210
|
["path", { d: "m6 17 5-5-5-5", key: "xnjwq" }],
|
|
55203
55211
|
["path", { d: "m13 17 5-5-5-5", key: "17xmmf" }]
|
|
55204
55212
|
];
|
|
55205
|
-
const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$
|
|
55213
|
+
const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$1U);
|
|
55206
55214
|
|
|
55207
55215
|
/**
|
|
55208
55216
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55212,11 +55220,11 @@ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$1T);
|
|
|
55212
55220
|
*/
|
|
55213
55221
|
|
|
55214
55222
|
|
|
55215
|
-
const __iconNode$
|
|
55223
|
+
const __iconNode$1T = [
|
|
55216
55224
|
["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
|
|
55217
55225
|
["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
|
|
55218
55226
|
];
|
|
55219
|
-
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$
|
|
55227
|
+
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1T);
|
|
55220
55228
|
|
|
55221
55229
|
/**
|
|
55222
55230
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55226,12 +55234,12 @@ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1S);
|
|
|
55226
55234
|
*/
|
|
55227
55235
|
|
|
55228
55236
|
|
|
55229
|
-
const __iconNode$
|
|
55237
|
+
const __iconNode$1S = [
|
|
55230
55238
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
55231
55239
|
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
55232
55240
|
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
55233
55241
|
];
|
|
55234
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
55242
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$1S);
|
|
55235
55243
|
|
|
55236
55244
|
/**
|
|
55237
55245
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55241,11 +55249,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$1R);
|
|
|
55241
55249
|
*/
|
|
55242
55250
|
|
|
55243
55251
|
|
|
55244
|
-
const __iconNode$
|
|
55252
|
+
const __iconNode$1R = [
|
|
55245
55253
|
["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
|
|
55246
55254
|
["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
|
|
55247
55255
|
];
|
|
55248
|
-
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$
|
|
55256
|
+
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1R);
|
|
55249
55257
|
|
|
55250
55258
|
/**
|
|
55251
55259
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -55255,11 +55263,25 @@ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1Q);
|
|
|
55255
55263
|
*/
|
|
55256
55264
|
|
|
55257
55265
|
|
|
55258
|
-
const __iconNode$
|
|
55266
|
+
const __iconNode$1Q = [
|
|
55259
55267
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
55260
55268
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
55261
55269
|
];
|
|
55262
|
-
const CircleCheck = createLucideIcon("circle-check", __iconNode$
|
|
55270
|
+
const CircleCheck = createLucideIcon("circle-check", __iconNode$1Q);
|
|
55271
|
+
|
|
55272
|
+
/**
|
|
55273
|
+
* @license lucide-react v0.528.0 - ISC
|
|
55274
|
+
*
|
|
55275
|
+
* This source code is licensed under the ISC license.
|
|
55276
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
55277
|
+
*/
|
|
55278
|
+
|
|
55279
|
+
|
|
55280
|
+
const __iconNode$1P = [
|
|
55281
|
+
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
55282
|
+
["path", { d: "M8 12h8", key: "1wcyev" }]
|
|
55283
|
+
];
|
|
55284
|
+
const CircleMinus$1 = createLucideIcon("circle-minus", __iconNode$1P);
|
|
55263
55285
|
|
|
55264
55286
|
/**
|
|
55265
55287
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -61011,118 +61033,6 @@ var gradebookGradebookTab$3 = {
|
|
|
61011
61033
|
previousPage: "Previous",
|
|
61012
61034
|
nextPage: "Next"
|
|
61013
61035
|
};
|
|
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
61036
|
var careerExperienceDialog$3 = {
|
|
61127
61037
|
pleaseSelectACompany: "Please select a company",
|
|
61128
61038
|
endDateCannotBeBeforeStartDate: "End date cannot be before start date",
|
|
@@ -61436,7 +61346,57 @@ var clawSandboxAgentSkills$3 = {
|
|
|
61436
61346
|
fieldVersionPlaceholder: "e.g. 1.0.0",
|
|
61437
61347
|
fieldDescription: "Description",
|
|
61438
61348
|
fieldDescriptionPlaceholder: "e.g. Search the web for information",
|
|
61439
|
-
fieldInstruction: "Instruction"
|
|
61349
|
+
fieldInstruction: "Instruction",
|
|
61350
|
+
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.",
|
|
61351
|
+
effectiveHeading: "This agent's skills",
|
|
61352
|
+
catalogHeading: "Available skills",
|
|
61353
|
+
noEffectiveSkills: "No skills enabled for this agent yet. Add one from the available skills below.",
|
|
61354
|
+
addToAgent: "Add",
|
|
61355
|
+
addToAgentLabel: "Add {name} to this agent",
|
|
61356
|
+
removeFromAgent: "Remove from agent",
|
|
61357
|
+
skillAdded: "{name} added",
|
|
61358
|
+
skillRemoved: "{name} removed",
|
|
61359
|
+
featuredBadge: "Featured",
|
|
61360
|
+
nativeBadge: "Native",
|
|
61361
|
+
privateBadge: "Only this agent",
|
|
61362
|
+
fieldCategory: "Category",
|
|
61363
|
+
fieldCategoryPlaceholder: "e.g. web, code, data",
|
|
61364
|
+
privateToAgent: "Only this agent",
|
|
61365
|
+
privateToAgentHint: "Private skills are available to this agent only and take precedence over platform skills with the same slug.",
|
|
61366
|
+
instructionHint: "The playbook the agent follows when the skill is used. Edits apply immediately, including in conversations already in progress.",
|
|
61367
|
+
filesHint: "Optional resources the agent can use with this skill. References and scripts are text files; assets are uploaded files.",
|
|
61368
|
+
filesAfterCreateHint: "You can attach resources to this skill after creating it (reopen it with Edit).",
|
|
61369
|
+
noFiles: "No resources attached yet.",
|
|
61370
|
+
loadingFiles: "Loading resources...",
|
|
61371
|
+
fileTypeLabel: "Type",
|
|
61372
|
+
fileTypeReference: "Reference",
|
|
61373
|
+
fileTypeScript: "Script",
|
|
61374
|
+
fileTypeAsset: "Asset",
|
|
61375
|
+
fileNameLabel: "File name",
|
|
61376
|
+
fileNamePlaceholder: "e.g. rubric.md",
|
|
61377
|
+
fileContentLabel: "Content",
|
|
61378
|
+
fileContentPlaceholder: "The file's text content",
|
|
61379
|
+
addFileButton: "Add resource",
|
|
61380
|
+
adding: "Adding...",
|
|
61381
|
+
uploading: "Uploading...",
|
|
61382
|
+
fileAdded: "Resource added",
|
|
61383
|
+
fileUploaded: "Resource uploaded",
|
|
61384
|
+
fileSaved: "Resource saved",
|
|
61385
|
+
fileDeleted: "Resource deleted",
|
|
61386
|
+
failedToSaveFile: "Failed to save resource",
|
|
61387
|
+
failedToUploadFile: "Failed to upload resource",
|
|
61388
|
+
failedToDeleteFile: "Failed to delete resource",
|
|
61389
|
+
detailsTab: "General",
|
|
61390
|
+
filesTab: "Resources",
|
|
61391
|
+
newFile: "New Resource",
|
|
61392
|
+
newFileDialogTitle: "New Resource",
|
|
61393
|
+
editFileDialogTitle: "Edit Resource",
|
|
61394
|
+
deleteFileDialogTitle: "Delete Resource",
|
|
61395
|
+
deleteFileConfirmation: "Are you sure you want to delete {name}? This action cannot be undone.",
|
|
61396
|
+
chooseFile: "Choose file",
|
|
61397
|
+
upload: "Upload",
|
|
61398
|
+
download: "Download",
|
|
61399
|
+
resourcesItemLabel: "resources"
|
|
61440
61400
|
};
|
|
61441
61401
|
var clawSandboxHelpers$3 = {
|
|
61442
61402
|
unknown: "Unknown",
|
|
@@ -63701,7 +63661,7 @@ var safetyTabLabels$3 = {
|
|
|
63701
63661
|
};
|
|
63702
63662
|
var screenshareTabLabels$3 = {
|
|
63703
63663
|
header: {
|
|
63704
|
-
title: "Screen
|
|
63664
|
+
title: "Screen",
|
|
63705
63665
|
description: "How your agent behaves when a user shares their screen during a voice call."
|
|
63706
63666
|
},
|
|
63707
63667
|
capability: {
|
|
@@ -65340,6 +65300,19 @@ var platformNavbar$3 = {
|
|
|
65340
65300
|
placementExamsHeader: "Placement exams",
|
|
65341
65301
|
placementExamFallback: "Placement exam"
|
|
65342
65302
|
};
|
|
65303
|
+
var slashSkillPicker$3 = {
|
|
65304
|
+
listLabel: "Agent skills",
|
|
65305
|
+
resultsAnnouncement: "{count} skills available. Use arrow keys to browse and Enter to select.",
|
|
65306
|
+
loading: "Loading..."
|
|
65307
|
+
};
|
|
65308
|
+
var skillsTabLabels$3 = {
|
|
65309
|
+
header: {
|
|
65310
|
+
title: "Skills",
|
|
65311
|
+
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."
|
|
65312
|
+
},
|
|
65313
|
+
notBaseAgent: "Skills are only available to Base Agents.",
|
|
65314
|
+
loading: "Loading..."
|
|
65315
|
+
};
|
|
65343
65316
|
var placementExam$3 = {
|
|
65344
65317
|
title: "Placement exam",
|
|
65345
65318
|
back: "Back"
|
|
@@ -65636,6 +65609,118 @@ var profileApplicationsQuestionsEditor$3 = {
|
|
|
65636
65609
|
collapseSection: "Collapse section",
|
|
65637
65610
|
expandSection: "Expand section"
|
|
65638
65611
|
};
|
|
65612
|
+
var graderTabLabels$3 = {
|
|
65613
|
+
header: {
|
|
65614
|
+
title: "Grader",
|
|
65615
|
+
description: "Set up how your agent grades work against a rubric you define."
|
|
65616
|
+
},
|
|
65617
|
+
capability: {
|
|
65618
|
+
title: "Grading",
|
|
65619
|
+
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.",
|
|
65620
|
+
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."
|
|
65621
|
+
},
|
|
65622
|
+
subTabs: {
|
|
65623
|
+
setup: "Grading setup",
|
|
65624
|
+
rubric: "Rubric"
|
|
65625
|
+
},
|
|
65626
|
+
denied: {
|
|
65627
|
+
title: "No access to grading settings",
|
|
65628
|
+
description: "You don't have permission to view this agent's grading setup. Ask an administrator for access."
|
|
65629
|
+
},
|
|
65630
|
+
warnings: {
|
|
65631
|
+
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.",
|
|
65632
|
+
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."
|
|
65633
|
+
},
|
|
65634
|
+
config: {
|
|
65635
|
+
sectionTitle: "Grading setup",
|
|
65636
|
+
gradingMode: {
|
|
65637
|
+
label: "What gets graded",
|
|
65638
|
+
options: {
|
|
65639
|
+
submission: "A submission",
|
|
65640
|
+
conversation: "The conversation"
|
|
65641
|
+
},
|
|
65642
|
+
help: {
|
|
65643
|
+
submission: "The agent grades a piece of work the person hands in, like an essay or answer.",
|
|
65644
|
+
conversation: "The agent grades how the whole conversation went."
|
|
65645
|
+
}
|
|
65646
|
+
},
|
|
65647
|
+
feedbackMode: {
|
|
65648
|
+
label: "Feedback shared with the person",
|
|
65649
|
+
options: {
|
|
65650
|
+
overall: "Overall feedback only",
|
|
65651
|
+
perCriteria: "Feedback per criterion",
|
|
65652
|
+
both: "Overall + per criterion"
|
|
65653
|
+
},
|
|
65654
|
+
help: "The overall score is always calculated — this only controls how much detail is shared back."
|
|
65655
|
+
},
|
|
65656
|
+
instructions: {
|
|
65657
|
+
label: "Grading instructions",
|
|
65658
|
+
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.'",
|
|
65659
|
+
help: "Required. This is the context the agent uses every time it grades."
|
|
65660
|
+
},
|
|
65661
|
+
saveButton: "Save",
|
|
65662
|
+
savingButton: "Saving…"
|
|
65663
|
+
},
|
|
65664
|
+
criteria: {
|
|
65665
|
+
sectionTitle: "Rubric",
|
|
65666
|
+
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.",
|
|
65667
|
+
needsConfigHint: "Save your grading setup first, then add rubric criteria here.",
|
|
65668
|
+
emptyState: "No criteria yet. Add your first one — for example \"Clarity\", 10 points.",
|
|
65669
|
+
addButton: "Add criterion",
|
|
65670
|
+
columns: {
|
|
65671
|
+
name: "Name",
|
|
65672
|
+
criteria: "Criteria",
|
|
65673
|
+
points: "Points"
|
|
65674
|
+
},
|
|
65675
|
+
actionsAria: "Actions for {name}",
|
|
65676
|
+
edit: "Edit",
|
|
65677
|
+
"delete": "Delete",
|
|
65678
|
+
totalPoints: "Total possible points: {total}",
|
|
65679
|
+
scoreHint: "Overall score = points earned ÷ {total}.",
|
|
65680
|
+
lastCriterionHint: "A rubric needs at least one criterion — add another before removing this one.",
|
|
65681
|
+
modal: {
|
|
65682
|
+
addTitle: "Add criterion",
|
|
65683
|
+
editTitle: "Edit criterion",
|
|
65684
|
+
name: {
|
|
65685
|
+
label: "Name",
|
|
65686
|
+
placeholder: "e.g. Clarity",
|
|
65687
|
+
required: "Name is required"
|
|
65688
|
+
},
|
|
65689
|
+
criteria: {
|
|
65690
|
+
label: "Criteria",
|
|
65691
|
+
placeholder: "e.g. The argument is easy to follow and each paragraph makes one clear point.",
|
|
65692
|
+
required: "Criteria is required"
|
|
65693
|
+
},
|
|
65694
|
+
points: {
|
|
65695
|
+
label: "Points",
|
|
65696
|
+
placeholder: "10",
|
|
65697
|
+
positive: "Points must be a positive number"
|
|
65698
|
+
},
|
|
65699
|
+
save: "Save",
|
|
65700
|
+
saving: "Saving…",
|
|
65701
|
+
cancel: "Cancel"
|
|
65702
|
+
},
|
|
65703
|
+
deleteModal: {
|
|
65704
|
+
title: "Delete criterion",
|
|
65705
|
+
confirmationPrefix: "Are you sure you want to remove",
|
|
65706
|
+
confirmationSuffix: " from the rubric?",
|
|
65707
|
+
cancel: "Cancel",
|
|
65708
|
+
"delete": "Delete",
|
|
65709
|
+
deleting: "Deleting…"
|
|
65710
|
+
}
|
|
65711
|
+
},
|
|
65712
|
+
toasts: {
|
|
65713
|
+
toggleOn: "Grading turned on",
|
|
65714
|
+
toggleOff: "Grading turned off — your rubric is kept for next time",
|
|
65715
|
+
toggleError: "Couldn't update grading",
|
|
65716
|
+
configSaved: "Grading setup saved",
|
|
65717
|
+
configError: "Couldn't save grading setup",
|
|
65718
|
+
criterionAdded: "Criterion added",
|
|
65719
|
+
criterionUpdated: "Criterion updated",
|
|
65720
|
+
criterionDeleted: "Criterion deleted",
|
|
65721
|
+
criterionError: "Couldn't update the rubric"
|
|
65722
|
+
}
|
|
65723
|
+
};
|
|
65639
65724
|
var en = {
|
|
65640
65725
|
accessTabAddAccess: accessTabAddAccess$3,
|
|
65641
65726
|
accessTabLabels: accessTabLabels$3,
|
|
@@ -65690,7 +65775,6 @@ var en = {
|
|
|
65690
65775
|
careerEducationDialog: careerEducationDialog$3,
|
|
65691
65776
|
careerEducationTab: careerEducationTab$3,
|
|
65692
65777
|
gradebookGradebookTab: gradebookGradebookTab$3,
|
|
65693
|
-
graderTabLabels: graderTabLabels$3,
|
|
65694
65778
|
careerExperienceDialog: careerExperienceDialog$3,
|
|
65695
65779
|
careerExperienceTab: careerExperienceTab$3,
|
|
65696
65780
|
careerInstitutionDialog: careerInstitutionDialog$3,
|
|
@@ -65884,10 +65968,13 @@ var en = {
|
|
|
65884
65968
|
benchmarksAddItemsModal: benchmarksAddItemsModal$3,
|
|
65885
65969
|
platformSidebar: platformSidebar$3,
|
|
65886
65970
|
platformNavbar: platformNavbar$3,
|
|
65971
|
+
slashSkillPicker: slashSkillPicker$3,
|
|
65972
|
+
skillsTabLabels: skillsTabLabels$3,
|
|
65887
65973
|
placementExam: placementExam$3,
|
|
65888
65974
|
applyApplyWizard: applyApplyWizard$3,
|
|
65889
65975
|
profileApplicationsTab: profileApplicationsTab$3,
|
|
65890
|
-
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$3
|
|
65976
|
+
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$3,
|
|
65977
|
+
graderTabLabels: graderTabLabels$3
|
|
65891
65978
|
};
|
|
65892
65979
|
|
|
65893
65980
|
var accessTabAddAccess$2 = {
|
|
@@ -67557,7 +67644,57 @@ var clawSandboxAgentSkills$2 = {
|
|
|
67557
67644
|
fieldVersionPlaceholder: "ex. 1.0.0",
|
|
67558
67645
|
fieldDescription: "Description",
|
|
67559
67646
|
fieldDescriptionPlaceholder: "ex. Rechercher des informations sur le web",
|
|
67560
|
-
fieldInstruction: "Instruction"
|
|
67647
|
+
fieldInstruction: "Instruction",
|
|
67648
|
+
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.",
|
|
67649
|
+
effectiveHeading: "Compétences de cet agent",
|
|
67650
|
+
catalogHeading: "Compétences disponibles",
|
|
67651
|
+
noEffectiveSkills: "Cet agent n'a pas encore de compétences activées. Ajoutez-en une depuis les compétences disponibles.",
|
|
67652
|
+
addToAgent: "Ajouter",
|
|
67653
|
+
addToAgentLabel: "Ajouter {name} à cet agent",
|
|
67654
|
+
removeFromAgent: "Retirer de l'agent",
|
|
67655
|
+
skillAdded: "{name} ajoutée",
|
|
67656
|
+
skillRemoved: "{name} retirée",
|
|
67657
|
+
featuredBadge: "En vedette",
|
|
67658
|
+
nativeBadge: "Native",
|
|
67659
|
+
privateBadge: "Cet agent uniquement",
|
|
67660
|
+
fieldCategory: "Catégorie",
|
|
67661
|
+
fieldCategoryPlaceholder: "p. ex. web, code, données",
|
|
67662
|
+
privateToAgent: "Cet agent uniquement",
|
|
67663
|
+
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.",
|
|
67664
|
+
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.",
|
|
67665
|
+
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.",
|
|
67666
|
+
filesAfterCreateHint: "Vous pouvez joindre des ressources à cette compétence après sa création (rouvrez-la avec Modifier).",
|
|
67667
|
+
noFiles: "Aucune ressource jointe pour le moment.",
|
|
67668
|
+
loadingFiles: "Chargement des ressources...",
|
|
67669
|
+
fileTypeLabel: "Type",
|
|
67670
|
+
fileTypeReference: "Référence",
|
|
67671
|
+
fileTypeScript: "Script",
|
|
67672
|
+
fileTypeAsset: "Ressource",
|
|
67673
|
+
fileNameLabel: "Nom du fichier",
|
|
67674
|
+
fileNamePlaceholder: "p. ex. grille.md",
|
|
67675
|
+
fileContentLabel: "Contenu",
|
|
67676
|
+
fileContentPlaceholder: "Le contenu texte du fichier",
|
|
67677
|
+
addFileButton: "Ajouter la ressource",
|
|
67678
|
+
adding: "Ajout...",
|
|
67679
|
+
uploading: "Téléversement...",
|
|
67680
|
+
fileAdded: "Ressource ajoutée",
|
|
67681
|
+
fileUploaded: "Ressource téléversée",
|
|
67682
|
+
fileSaved: "Ressource enregistrée",
|
|
67683
|
+
fileDeleted: "Ressource supprimée",
|
|
67684
|
+
failedToSaveFile: "Impossible d'enregistrer la ressource",
|
|
67685
|
+
failedToUploadFile: "Impossible de téléverser la ressource",
|
|
67686
|
+
failedToDeleteFile: "Impossible de supprimer la ressource",
|
|
67687
|
+
detailsTab: "Général",
|
|
67688
|
+
filesTab: "Ressources",
|
|
67689
|
+
newFile: "Nouvelle ressource",
|
|
67690
|
+
newFileDialogTitle: "Nouvelle ressource",
|
|
67691
|
+
editFileDialogTitle: "Modifier la ressource",
|
|
67692
|
+
deleteFileDialogTitle: "Supprimer la ressource",
|
|
67693
|
+
deleteFileConfirmation: "Voulez-vous vraiment supprimer {name} ? Cette action est irréversible.",
|
|
67694
|
+
chooseFile: "Choisir un fichier",
|
|
67695
|
+
upload: "Téléverser",
|
|
67696
|
+
download: "Télécharger",
|
|
67697
|
+
resourcesItemLabel: "ressources"
|
|
67561
67698
|
};
|
|
67562
67699
|
var clawSandboxHelpers$2 = {
|
|
67563
67700
|
unknown: "Inconnu",
|
|
@@ -69822,7 +69959,7 @@ var safetyTabLabels$2 = {
|
|
|
69822
69959
|
};
|
|
69823
69960
|
var screenshareTabLabels$2 = {
|
|
69824
69961
|
header: {
|
|
69825
|
-
title: "
|
|
69962
|
+
title: "Écran",
|
|
69826
69963
|
description: "Comment votre agent se comporte lorsqu’un utilisateur partage son écran pendant un appel vocal."
|
|
69827
69964
|
},
|
|
69828
69965
|
capability: {
|
|
@@ -71757,6 +71894,19 @@ var profileApplicationsQuestionsEditor$2 = {
|
|
|
71757
71894
|
collapseSection: "Réduire la section",
|
|
71758
71895
|
expandSection: "Développer la section"
|
|
71759
71896
|
};
|
|
71897
|
+
var slashSkillPicker$2 = {
|
|
71898
|
+
listLabel: "Compétences de l'agent",
|
|
71899
|
+
resultsAnnouncement: "{count} compétences disponibles. Utilisez les flèches pour parcourir et Entrée pour sélectionner.",
|
|
71900
|
+
loading: "Chargement..."
|
|
71901
|
+
};
|
|
71902
|
+
var skillsTabLabels$2 = {
|
|
71903
|
+
header: {
|
|
71904
|
+
title: "Compétences",
|
|
71905
|
+
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."
|
|
71906
|
+
},
|
|
71907
|
+
notBaseAgent: "Les compétences ne sont disponibles que pour les agents de base.",
|
|
71908
|
+
loading: "Chargement..."
|
|
71909
|
+
};
|
|
71760
71910
|
var fr = {
|
|
71761
71911
|
accessTabAddAccess: accessTabAddAccess$2,
|
|
71762
71912
|
accessTabLabels: accessTabLabels$2,
|
|
@@ -72008,7 +72158,9 @@ var fr = {
|
|
|
72008
72158
|
placementExam: placementExam$2,
|
|
72009
72159
|
applyApplyWizard: applyApplyWizard$2,
|
|
72010
72160
|
profileApplicationsTab: profileApplicationsTab$2,
|
|
72011
|
-
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$2
|
|
72161
|
+
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$2,
|
|
72162
|
+
slashSkillPicker: slashSkillPicker$2,
|
|
72163
|
+
skillsTabLabels: skillsTabLabels$2
|
|
72012
72164
|
};
|
|
72013
72165
|
|
|
72014
72166
|
var accessTabAddAccess$1 = {
|
|
@@ -73678,7 +73830,57 @@ var clawSandboxAgentSkills$1 = {
|
|
|
73678
73830
|
fieldVersionPlaceholder: "ej. 1.0.0",
|
|
73679
73831
|
fieldDescription: "Descripción",
|
|
73680
73832
|
fieldDescriptionPlaceholder: "ej. Buscar información en la web",
|
|
73681
|
-
fieldInstruction: "Instrucción"
|
|
73833
|
+
fieldInstruction: "Instrucción",
|
|
73834
|
+
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.",
|
|
73835
|
+
effectiveHeading: "Habilidades de este agente",
|
|
73836
|
+
catalogHeading: "Habilidades disponibles",
|
|
73837
|
+
noEffectiveSkills: "Este agente aún no tiene habilidades habilitadas. Añade una desde las habilidades disponibles.",
|
|
73838
|
+
addToAgent: "Añadir",
|
|
73839
|
+
addToAgentLabel: "Añadir {name} a este agente",
|
|
73840
|
+
removeFromAgent: "Quitar del agente",
|
|
73841
|
+
skillAdded: "{name} añadida",
|
|
73842
|
+
skillRemoved: "{name} eliminada",
|
|
73843
|
+
featuredBadge: "Destacada",
|
|
73844
|
+
nativeBadge: "Nativa",
|
|
73845
|
+
privateBadge: "Solo este agente",
|
|
73846
|
+
fieldCategory: "Categoría",
|
|
73847
|
+
fieldCategoryPlaceholder: "p. ej. web, código, datos",
|
|
73848
|
+
privateToAgent: "Solo este agente",
|
|
73849
|
+
privateToAgentHint: "Las habilidades privadas solo están disponibles para este agente y tienen prioridad sobre las habilidades de la plataforma con el mismo slug.",
|
|
73850
|
+
instructionHint: "La guía que sigue el agente cuando se usa la habilidad. Los cambios se aplican de inmediato, incluso en conversaciones en curso.",
|
|
73851
|
+
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.",
|
|
73852
|
+
filesAfterCreateHint: "Puedes adjuntar recursos a esta habilidad después de crearla (vuelve a abrirla con Editar).",
|
|
73853
|
+
noFiles: "Aún no hay recursos adjuntos.",
|
|
73854
|
+
loadingFiles: "Cargando recursos...",
|
|
73855
|
+
fileTypeLabel: "Tipo",
|
|
73856
|
+
fileTypeReference: "Referencia",
|
|
73857
|
+
fileTypeScript: "Script",
|
|
73858
|
+
fileTypeAsset: "Recurso",
|
|
73859
|
+
fileNameLabel: "Nombre del archivo",
|
|
73860
|
+
fileNamePlaceholder: "p. ej. rubrica.md",
|
|
73861
|
+
fileContentLabel: "Contenido",
|
|
73862
|
+
fileContentPlaceholder: "El contenido de texto del archivo",
|
|
73863
|
+
addFileButton: "Añadir recurso",
|
|
73864
|
+
adding: "Añadiendo...",
|
|
73865
|
+
uploading: "Subiendo...",
|
|
73866
|
+
fileAdded: "Recurso añadido",
|
|
73867
|
+
fileUploaded: "Recurso subido",
|
|
73868
|
+
fileSaved: "Recurso guardado",
|
|
73869
|
+
fileDeleted: "Recurso eliminado",
|
|
73870
|
+
failedToSaveFile: "No se pudo guardar el recurso",
|
|
73871
|
+
failedToUploadFile: "No se pudo subir el recurso",
|
|
73872
|
+
failedToDeleteFile: "No se pudo eliminar el recurso",
|
|
73873
|
+
detailsTab: "General",
|
|
73874
|
+
filesTab: "Recursos",
|
|
73875
|
+
newFile: "Nuevo recurso",
|
|
73876
|
+
newFileDialogTitle: "Nuevo recurso",
|
|
73877
|
+
editFileDialogTitle: "Editar recurso",
|
|
73878
|
+
deleteFileDialogTitle: "Eliminar recurso",
|
|
73879
|
+
deleteFileConfirmation: "¿Seguro que quieres eliminar {name}? Esta acción no se puede deshacer.",
|
|
73880
|
+
chooseFile: "Elegir archivo",
|
|
73881
|
+
upload: "Subir",
|
|
73882
|
+
download: "Descargar",
|
|
73883
|
+
resourcesItemLabel: "recursos"
|
|
73682
73884
|
};
|
|
73683
73885
|
var clawSandboxHelpers$1 = {
|
|
73684
73886
|
unknown: "Desconocido",
|
|
@@ -75943,7 +76145,7 @@ var safetyTabLabels$1 = {
|
|
|
75943
76145
|
};
|
|
75944
76146
|
var screenshareTabLabels$1 = {
|
|
75945
76147
|
header: {
|
|
75946
|
-
title: "Pantalla
|
|
76148
|
+
title: "Pantalla",
|
|
75947
76149
|
description: "Cómo se comporta tu agente cuando un usuario comparte su pantalla durante una llamada de voz."
|
|
75948
76150
|
},
|
|
75949
76151
|
capability: {
|
|
@@ -77878,6 +78080,19 @@ var profileApplicationsQuestionsEditor$1 = {
|
|
|
77878
78080
|
collapseSection: "Contraer sección",
|
|
77879
78081
|
expandSection: "Expandir sección"
|
|
77880
78082
|
};
|
|
78083
|
+
var slashSkillPicker$1 = {
|
|
78084
|
+
listLabel: "Habilidades del agente",
|
|
78085
|
+
resultsAnnouncement: "{count} habilidades disponibles. Usa las flechas para navegar y Enter para seleccionar.",
|
|
78086
|
+
loading: "Cargando..."
|
|
78087
|
+
};
|
|
78088
|
+
var skillsTabLabels$1 = {
|
|
78089
|
+
header: {
|
|
78090
|
+
title: "Habilidades",
|
|
78091
|
+
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."
|
|
78092
|
+
},
|
|
78093
|
+
notBaseAgent: "Las habilidades solo están disponibles para los agentes base.",
|
|
78094
|
+
loading: "Cargando..."
|
|
78095
|
+
};
|
|
77881
78096
|
var es = {
|
|
77882
78097
|
accessTabAddAccess: accessTabAddAccess$1,
|
|
77883
78098
|
accessTabLabels: accessTabLabels$1,
|
|
@@ -78129,7 +78344,9 @@ var es = {
|
|
|
78129
78344
|
placementExam: placementExam$1,
|
|
78130
78345
|
applyApplyWizard: applyApplyWizard$1,
|
|
78131
78346
|
profileApplicationsTab: profileApplicationsTab$1,
|
|
78132
|
-
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$1
|
|
78347
|
+
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor$1,
|
|
78348
|
+
slashSkillPicker: slashSkillPicker$1,
|
|
78349
|
+
skillsTabLabels: skillsTabLabels$1
|
|
78133
78350
|
};
|
|
78134
78351
|
|
|
78135
78352
|
var accessTabAddAccess = {
|
|
@@ -79799,7 +80016,57 @@ var clawSandboxAgentSkills = {
|
|
|
79799
80016
|
fieldVersionPlaceholder: "例如:1.0.0",
|
|
79800
80017
|
fieldDescription: "描述",
|
|
79801
80018
|
fieldDescriptionPlaceholder: "例如:在网络上搜索信息",
|
|
79802
|
-
fieldInstruction: "指令"
|
|
80019
|
+
fieldInstruction: "指令",
|
|
80020
|
+
sessionNote: "在此添加或移除的技能仅对新的聊天会话生效。技能指令的修改会立即生效,包括正在进行的对话。",
|
|
80021
|
+
effectiveHeading: "此智能体的技能",
|
|
80022
|
+
catalogHeading: "可用技能",
|
|
80023
|
+
noEffectiveSkills: "此智能体尚未启用任何技能。请从下方的可用技能中添加。",
|
|
80024
|
+
addToAgent: "添加",
|
|
80025
|
+
addToAgentLabel: "将 {name} 添加到此智能体",
|
|
80026
|
+
removeFromAgent: "从智能体中移除",
|
|
80027
|
+
skillAdded: "已添加 {name}",
|
|
80028
|
+
skillRemoved: "已移除 {name}",
|
|
80029
|
+
featuredBadge: "精选",
|
|
80030
|
+
nativeBadge: "原生",
|
|
80031
|
+
privateBadge: "仅此智能体",
|
|
80032
|
+
fieldCategory: "分类",
|
|
80033
|
+
fieldCategoryPlaceholder: "例如 web、代码、数据",
|
|
80034
|
+
privateToAgent: "仅此智能体",
|
|
80035
|
+
privateToAgentHint: "私有技能仅对此智能体可用,并优先于具有相同 slug 的平台技能。",
|
|
80036
|
+
instructionHint: "使用该技能时智能体遵循的操作指南。修改会立即生效,包括正在进行的对话。",
|
|
80037
|
+
filesHint: "智能体在使用此技能时可参考的可选资源。参考资料和脚本是文本文件;资产是上传的文件。",
|
|
80038
|
+
filesAfterCreateHint: "创建技能后即可附加资源(通过“编辑”重新打开)。",
|
|
80039
|
+
noFiles: "尚未附加任何资源。",
|
|
80040
|
+
loadingFiles: "正在加载资源...",
|
|
80041
|
+
fileTypeLabel: "类型",
|
|
80042
|
+
fileTypeReference: "参考资料",
|
|
80043
|
+
fileTypeScript: "脚本",
|
|
80044
|
+
fileTypeAsset: "资源",
|
|
80045
|
+
fileNameLabel: "文件名",
|
|
80046
|
+
fileNamePlaceholder: "例如 rubric.md",
|
|
80047
|
+
fileContentLabel: "内容",
|
|
80048
|
+
fileContentPlaceholder: "文件的文本内容",
|
|
80049
|
+
addFileButton: "添加资源",
|
|
80050
|
+
adding: "添加中...",
|
|
80051
|
+
uploading: "上传中...",
|
|
80052
|
+
fileAdded: "资源已添加",
|
|
80053
|
+
fileUploaded: "资源已上传",
|
|
80054
|
+
fileSaved: "资源已保存",
|
|
80055
|
+
fileDeleted: "资源已删除",
|
|
80056
|
+
failedToSaveFile: "保存资源失败",
|
|
80057
|
+
failedToUploadFile: "上传资源失败",
|
|
80058
|
+
failedToDeleteFile: "删除资源失败",
|
|
80059
|
+
detailsTab: "常规",
|
|
80060
|
+
filesTab: "资源",
|
|
80061
|
+
newFile: "新建资源",
|
|
80062
|
+
newFileDialogTitle: "新建资源",
|
|
80063
|
+
editFileDialogTitle: "编辑资源",
|
|
80064
|
+
deleteFileDialogTitle: "删除资源",
|
|
80065
|
+
deleteFileConfirmation: "确定要删除 {name} 吗?此操作无法撤销。",
|
|
80066
|
+
chooseFile: "选择文件",
|
|
80067
|
+
upload: "上传",
|
|
80068
|
+
download: "下载",
|
|
80069
|
+
resourcesItemLabel: "资源"
|
|
79803
80070
|
};
|
|
79804
80071
|
var clawSandboxHelpers = {
|
|
79805
80072
|
unknown: "未知",
|
|
@@ -82064,7 +82331,7 @@ var safetyTabLabels = {
|
|
|
82064
82331
|
};
|
|
82065
82332
|
var screenshareTabLabels = {
|
|
82066
82333
|
header: {
|
|
82067
|
-
title: "
|
|
82334
|
+
title: "屏幕",
|
|
82068
82335
|
description: "当用户在语音通话中共享屏幕时,您的智能体的表现方式。"
|
|
82069
82336
|
},
|
|
82070
82337
|
capability: {
|
|
@@ -83999,6 +84266,19 @@ var profileApplicationsQuestionsEditor = {
|
|
|
83999
84266
|
collapseSection: "折叠板块",
|
|
84000
84267
|
expandSection: "展开板块"
|
|
84001
84268
|
};
|
|
84269
|
+
var slashSkillPicker = {
|
|
84270
|
+
listLabel: "智能体技能",
|
|
84271
|
+
resultsAnnouncement: "{count} 个技能可用。使用方向键浏览,按 Enter 选择。",
|
|
84272
|
+
loading: "加载中..."
|
|
84273
|
+
};
|
|
84274
|
+
var skillsTabLabels = {
|
|
84275
|
+
header: {
|
|
84276
|
+
title: "技能",
|
|
84277
|
+
description: "可附加到此智能体的可复用操作指南——每个技能都是完成一项任务的指令集。在聊天中输入 / 即可使用。"
|
|
84278
|
+
},
|
|
84279
|
+
notBaseAgent: "技能仅适用于基础智能体。",
|
|
84280
|
+
loading: "加载中..."
|
|
84281
|
+
};
|
|
84002
84282
|
var zh = {
|
|
84003
84283
|
accessTabAddAccess: accessTabAddAccess,
|
|
84004
84284
|
accessTabLabels: accessTabLabels,
|
|
@@ -84250,7 +84530,9 @@ var zh = {
|
|
|
84250
84530
|
placementExam: placementExam,
|
|
84251
84531
|
applyApplyWizard: applyApplyWizard,
|
|
84252
84532
|
profileApplicationsTab: profileApplicationsTab,
|
|
84253
|
-
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor
|
|
84533
|
+
profileApplicationsQuestionsEditor: profileApplicationsQuestionsEditor,
|
|
84534
|
+
slashSkillPicker: slashSkillPicker,
|
|
84535
|
+
skillsTabLabels: skillsTabLabels
|
|
84254
84536
|
};
|
|
84255
84537
|
|
|
84256
84538
|
/**
|
|
@@ -181384,10 +181666,13 @@ function TopBanner({ parentContainerSelector, bannerText = '', loading = false,
|
|
|
181384
181666
|
* getSessionUuid={() => getCurrentSessionId()}
|
|
181385
181667
|
* getTenantKey={() => localStorage.getItem('tenant') || ''}
|
|
181386
181668
|
* getMentorId={() => extractMentorIdFromUrl()}
|
|
181669
|
+
* // Course/unit context is parsed from the URL the time was spent on:
|
|
181670
|
+
* getCourseId={(url) => parseCourseId(url)}
|
|
181671
|
+
* getBlockId={(url) => parseUnitId(url)}
|
|
181387
181672
|
* />
|
|
181388
181673
|
* ```
|
|
181389
181674
|
*/
|
|
181390
|
-
function TimeTrackingProvider({ intervalSeconds = 30, enabled = true, sessionUuid, getSessionUuid, getTenantKey, getMentorId, getCurrentUrl, onRouteChange, }) {
|
|
181675
|
+
function TimeTrackingProvider({ intervalSeconds = 30, enabled = true, sessionUuid, getSessionUuid, getTenantKey, getMentorId, getCourseId, getBlockId, getCurrentUrl, onRouteChange, }) {
|
|
181391
181676
|
// Initialize time tracking
|
|
181392
181677
|
useTimeTracking({
|
|
181393
181678
|
intervalSeconds,
|
|
@@ -181396,6 +181681,8 @@ function TimeTrackingProvider({ intervalSeconds = 30, enabled = true, sessionUui
|
|
|
181396
181681
|
getSessionUuid,
|
|
181397
181682
|
getTenantKey,
|
|
181398
181683
|
getMentorId,
|
|
181684
|
+
getCourseId,
|
|
181685
|
+
getBlockId,
|
|
181399
181686
|
getCurrentUrl,
|
|
181400
181687
|
onRouteChange,
|
|
181401
181688
|
});
|
|
@@ -227076,27 +227363,192 @@ function AgentConfigPrompts({ platformKey, mentorUniqueId }) {
|
|
|
227076
227363
|
}) }), editingField && (jsx(EditFieldModal, { isOpen: !!editingField, onClose: () => setEditingField(null), label: editingField.label, value: editingField.value, onSave: handleSaveField, isSaving: isUpdating }))] }));
|
|
227077
227364
|
}
|
|
227078
227365
|
|
|
227366
|
+
/** Page size for the resources list inside the Edit Skill dialog. */
|
|
227367
|
+
const RESOURCES_PAGE_SIZE = 20;
|
|
227368
|
+
const EMPTY_RESOURCE_FORM = {
|
|
227369
|
+
file_type: 'reference',
|
|
227370
|
+
filename: '',
|
|
227371
|
+
content: '',
|
|
227372
|
+
};
|
|
227373
|
+
/**
|
|
227374
|
+
* File attachments for a skill (agent-skill-resources). `reference`/`script`
|
|
227375
|
+
* files are text (filename + content); `asset` files are binary uploads.
|
|
227376
|
+
* Rendered as the Files tab of the Edit Skill dialog: a list with row
|
|
227377
|
+
* actions, a New File popup for add/edit, and a delete confirmation.
|
|
227378
|
+
*/
|
|
227379
|
+
function SkillResourcesSection({ platformKey, skillId }) {
|
|
227380
|
+
var _a, _b, _c;
|
|
227381
|
+
const t = useT();
|
|
227382
|
+
const [page, setPage] = useState(1);
|
|
227383
|
+
const { data: resourcePage, isLoading } = useGetAgentSkillResourcesQuery({
|
|
227384
|
+
org: platformKey,
|
|
227385
|
+
skill: skillId,
|
|
227386
|
+
limit: RESOURCES_PAGE_SIZE,
|
|
227387
|
+
offset: (page - 1) * RESOURCES_PAGE_SIZE,
|
|
227388
|
+
});
|
|
227389
|
+
const resources = (_a = resourcePage === null || resourcePage === void 0 ? void 0 : resourcePage.results) !== null && _a !== void 0 ? _a : [];
|
|
227390
|
+
const totalCount = (_b = resourcePage === null || resourcePage === void 0 ? void 0 : resourcePage.count) !== null && _b !== void 0 ? _b : 0;
|
|
227391
|
+
const totalPages = Math.max(1, Math.ceil(totalCount / RESOURCES_PAGE_SIZE));
|
|
227392
|
+
// Deleting the last item of the last page leaves the page out of range —
|
|
227393
|
+
// snap back to the new last page.
|
|
227394
|
+
useEffect(() => {
|
|
227395
|
+
if (page > totalPages)
|
|
227396
|
+
setPage(totalPages);
|
|
227397
|
+
}, [page, totalPages]);
|
|
227398
|
+
const [createResource, { isLoading: isCreating }] = useCreateAgentSkillResourceMutation();
|
|
227399
|
+
const [updateResource, { isLoading: isUpdating }] = useUpdateAgentSkillResourceMutation();
|
|
227400
|
+
const [uploadAsset, { isLoading: isUploading }] = useUploadAgentSkillResourceAssetMutation();
|
|
227401
|
+
const [deleteResource, { isLoading: isDeleting }] = useDeleteAgentSkillResourceMutation();
|
|
227402
|
+
const [showFileDialog, setShowFileDialog] = useState(false);
|
|
227403
|
+
const [editingResource, setEditingResource] = useState(null);
|
|
227404
|
+
const [deletingResource, setDeletingResource] = useState(null);
|
|
227405
|
+
const [form, setForm] = useState(EMPTY_RESOURCE_FORM);
|
|
227406
|
+
const [assetFile, setAssetFile] = useState(null);
|
|
227407
|
+
const fileInputRef = useRef(null);
|
|
227408
|
+
const isSaving = isCreating || isUpdating || isUploading;
|
|
227409
|
+
const isAssetForm = form.file_type === 'asset' && !editingResource;
|
|
227410
|
+
const canSubmitFile = isAssetForm ? !!assetFile : !!form.filename && !!form.content;
|
|
227411
|
+
const typeLabel = (fileType) => {
|
|
227412
|
+
switch (fileType) {
|
|
227413
|
+
case 'script':
|
|
227414
|
+
return t('clawSandboxAgentSkills.fileTypeScript');
|
|
227415
|
+
case 'asset':
|
|
227416
|
+
return t('clawSandboxAgentSkills.fileTypeAsset');
|
|
227417
|
+
default:
|
|
227418
|
+
return t('clawSandboxAgentSkills.fileTypeReference');
|
|
227419
|
+
}
|
|
227420
|
+
};
|
|
227421
|
+
const openNewFileDialog = () => {
|
|
227422
|
+
setForm(EMPTY_RESOURCE_FORM);
|
|
227423
|
+
setAssetFile(null);
|
|
227424
|
+
setEditingResource(null);
|
|
227425
|
+
setShowFileDialog(true);
|
|
227426
|
+
};
|
|
227427
|
+
const openEditFileDialog = (resource) => {
|
|
227428
|
+
var _a, _b;
|
|
227429
|
+
setForm({
|
|
227430
|
+
file_type: (_a = resource.file_type) !== null && _a !== void 0 ? _a : 'reference',
|
|
227431
|
+
filename: resource.filename,
|
|
227432
|
+
content: (_b = resource.content) !== null && _b !== void 0 ? _b : '',
|
|
227433
|
+
});
|
|
227434
|
+
setAssetFile(null);
|
|
227435
|
+
setEditingResource(resource);
|
|
227436
|
+
setShowFileDialog(true);
|
|
227437
|
+
};
|
|
227438
|
+
const closeFileDialog = () => {
|
|
227439
|
+
setShowFileDialog(false);
|
|
227440
|
+
setEditingResource(null);
|
|
227441
|
+
setForm(EMPTY_RESOURCE_FORM);
|
|
227442
|
+
setAssetFile(null);
|
|
227443
|
+
};
|
|
227444
|
+
const handleSubmitFile = async () => {
|
|
227445
|
+
try {
|
|
227446
|
+
if (editingResource) {
|
|
227447
|
+
await updateResource({
|
|
227448
|
+
org: platformKey,
|
|
227449
|
+
id: editingResource.id,
|
|
227450
|
+
filename: form.filename,
|
|
227451
|
+
content: form.content,
|
|
227452
|
+
}).unwrap();
|
|
227453
|
+
toast.success(t('clawSandboxAgentSkills.fileSaved'));
|
|
227454
|
+
}
|
|
227455
|
+
else if (isAssetForm) {
|
|
227456
|
+
if (!assetFile)
|
|
227457
|
+
return;
|
|
227458
|
+
await uploadAsset({
|
|
227459
|
+
org: platformKey,
|
|
227460
|
+
skill: skillId,
|
|
227461
|
+
file: assetFile,
|
|
227462
|
+
filename: assetFile.name,
|
|
227463
|
+
}).unwrap();
|
|
227464
|
+
toast.success(t('clawSandboxAgentSkills.fileUploaded'));
|
|
227465
|
+
}
|
|
227466
|
+
else {
|
|
227467
|
+
await createResource({
|
|
227468
|
+
org: platformKey,
|
|
227469
|
+
skill: skillId,
|
|
227470
|
+
file_type: form.file_type,
|
|
227471
|
+
filename: form.filename,
|
|
227472
|
+
content: form.content,
|
|
227473
|
+
}).unwrap();
|
|
227474
|
+
toast.success(t('clawSandboxAgentSkills.fileAdded'));
|
|
227475
|
+
}
|
|
227476
|
+
closeFileDialog();
|
|
227477
|
+
}
|
|
227478
|
+
catch (_a) {
|
|
227479
|
+
toast.error(t(isAssetForm
|
|
227480
|
+
? 'clawSandboxAgentSkills.failedToUploadFile'
|
|
227481
|
+
: 'clawSandboxAgentSkills.failedToSaveFile'));
|
|
227482
|
+
}
|
|
227483
|
+
};
|
|
227484
|
+
const handleDeleteFile = async () => {
|
|
227485
|
+
if (!deletingResource)
|
|
227486
|
+
return;
|
|
227487
|
+
try {
|
|
227488
|
+
await deleteResource({ org: platformKey, id: deletingResource.id }).unwrap();
|
|
227489
|
+
toast.success(t('clawSandboxAgentSkills.fileDeleted'));
|
|
227490
|
+
setDeletingResource(null);
|
|
227491
|
+
}
|
|
227492
|
+
catch (_a) {
|
|
227493
|
+
toast.error(t('clawSandboxAgentSkills.failedToDeleteFile'));
|
|
227494
|
+
}
|
|
227495
|
+
};
|
|
227496
|
+
const submitLabel = () => {
|
|
227497
|
+
if (editingResource) {
|
|
227498
|
+
return isUpdating ? t('clawSandboxAgentSkills.saving') : t('clawSandboxAgentSkills.save');
|
|
227499
|
+
}
|
|
227500
|
+
if (isAssetForm) {
|
|
227501
|
+
return isUploading
|
|
227502
|
+
? t('clawSandboxAgentSkills.uploading')
|
|
227503
|
+
: t('clawSandboxAgentSkills.upload');
|
|
227504
|
+
}
|
|
227505
|
+
return isCreating ? t('clawSandboxAgentSkills.adding') : t('clawSandboxAgentSkills.addFileButton');
|
|
227506
|
+
};
|
|
227507
|
+
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', {
|
|
227508
|
+
name: resource.filename,
|
|
227509
|
+
}), 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
|
|
227510
|
+
? 'clawSandboxAgentSkills.editFileDialogTitle'
|
|
227511
|
+
: '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', {
|
|
227512
|
+
name: (_c = deletingResource === null || deletingResource === void 0 ? void 0 : deletingResource.filename) !== null && _c !== void 0 ? _c : '',
|
|
227513
|
+
}) }), 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
|
|
227514
|
+
? t('clawSandboxAgentSkills.deleting')
|
|
227515
|
+
: t('clawSandboxAgentSkills.delete') })] })] })] }));
|
|
227516
|
+
}
|
|
227517
|
+
|
|
227079
227518
|
const EMPTY_SKILL_FORM = {
|
|
227080
227519
|
name: '',
|
|
227081
227520
|
slug: '',
|
|
227082
227521
|
description: '',
|
|
227083
227522
|
version: '1.0.0',
|
|
227523
|
+
category: '',
|
|
227084
227524
|
instruction: '',
|
|
227525
|
+
privateToAgent: false,
|
|
227085
227526
|
};
|
|
227527
|
+
// The builder resolves the effective skill set client-side, which needs the
|
|
227528
|
+
// complete catalog and assignment lists. Request one explicit large page so
|
|
227529
|
+
// the result is deterministic even if the backend later configures a default
|
|
227530
|
+
// page size (the list endpoints unwrap paginated envelopes to `results`).
|
|
227531
|
+
const FULL_LIST_LIMIT = 1000;
|
|
227086
227532
|
function AgentSkills({ platformKey, mentorUniqueId }) {
|
|
227087
227533
|
var _a;
|
|
227088
227534
|
const t = useT();
|
|
227089
227535
|
// Skills are managed independently of the sandbox connection — org-level
|
|
227090
227536
|
// skills and the mentor's assignments both resolve without a wired Claw
|
|
227091
227537
|
// instance, so we always fetch and let admins add/assign skills freely.
|
|
227538
|
+
// Always fetch — the backend enforces read access; RBAC here only gates
|
|
227539
|
+
// the write affordances (a partial permissions map must not blank the UI).
|
|
227092
227540
|
const { data: availableSkills, isLoading: isLoadingSkills } = useGetAgentSkillsQuery({
|
|
227093
227541
|
org: platformKey,
|
|
227542
|
+
limit: FULL_LIST_LIMIT,
|
|
227543
|
+
offset: 0,
|
|
227094
227544
|
});
|
|
227095
227545
|
const { data: assignments, isLoading: isLoadingAssignments } = useGetMentorSkillAssignmentsQuery({
|
|
227096
227546
|
org: platformKey,
|
|
227097
227547
|
mentorUniqueId,
|
|
227548
|
+
limit: FULL_LIST_LIMIT,
|
|
227549
|
+
offset: 0,
|
|
227098
227550
|
});
|
|
227099
|
-
// Assignment mutations (toggle on
|
|
227551
|
+
// Assignment mutations (attach/detach/toggle on the agent)
|
|
227100
227552
|
const [createAssignment, { isLoading: isCreatingAssignment }] = useCreateMentorSkillAssignmentMutation();
|
|
227101
227553
|
const [updateAssignment, { isLoading: isUpdatingAssignment }] = useUpdateMentorSkillAssignmentMutation();
|
|
227102
227554
|
const [deleteAssignment, { isLoading: isDeletingAssignment }] = useDeleteMentorSkillAssignmentMutation();
|
|
@@ -227109,59 +227561,95 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
|
|
|
227109
227561
|
const [deletingSkill, setDeletingSkill] = useState(null);
|
|
227110
227562
|
const [form, setForm] = useState(EMPTY_SKILL_FORM);
|
|
227111
227563
|
const isLoading = isLoadingSkills || isLoadingAssignments;
|
|
227112
|
-
const
|
|
227113
|
-
const
|
|
227114
|
-
|
|
227115
|
-
const
|
|
227564
|
+
const isMutatingAgentSkill = isCreatingAssignment || isUpdatingAssignment || isDeletingAssignment || isUpdatingSkill;
|
|
227565
|
+
const allSkills = availableSkills !== null && availableSkills !== void 0 ? availableSkills : [];
|
|
227566
|
+
const effectiveSkills = resolveEffectiveAgentSkills(allSkills, assignments !== null && assignments !== void 0 ? assignments : [], mentorUniqueId);
|
|
227567
|
+
const effectiveUniqueIds = new Set(effectiveSkills.map((s) => s.unique_id));
|
|
227568
|
+
const effectiveSlugs = new Set(effectiveSkills.map((s) => s.slug));
|
|
227569
|
+
// Catalog skills this agent could still attach: enabled, platform-wide
|
|
227570
|
+
// (never another agent's private skills), and not already effective. A
|
|
227571
|
+
// skill whose slug is already effective (e.g. shadowed by a private skill)
|
|
227572
|
+
// would dedupe away after attaching — don't offer an Add that does nothing.
|
|
227573
|
+
const attachableSkills = allSkills.filter((skill) => skill.enabled &&
|
|
227574
|
+
!skill.mentor &&
|
|
227575
|
+
!effectiveUniqueIds.has(skill.unique_id) &&
|
|
227576
|
+
!effectiveSlugs.has(skill.slug));
|
|
227577
|
+
// Featured skills from the `main` platform are read-only for tenants — the
|
|
227578
|
+
// API 404s writes against them, so hide the edit/delete affordances.
|
|
227579
|
+
const isSkillEditable = (skill) => {
|
|
227580
|
+
if (!skill)
|
|
227581
|
+
return false;
|
|
227582
|
+
return skill.platform_key ? skill.platform_key === platformKey : !skill.is_featured;
|
|
227583
|
+
};
|
|
227116
227584
|
const resetForm = () => setForm(EMPTY_SKILL_FORM);
|
|
227117
|
-
const
|
|
227118
|
-
const existing = assignmentsBySkillUniqueId.get(skill.unique_id);
|
|
227585
|
+
const handleToggleEffective = async (effective, shouldEnable) => {
|
|
227119
227586
|
try {
|
|
227120
|
-
if (
|
|
227121
|
-
|
|
227122
|
-
|
|
227123
|
-
|
|
227124
|
-
|
|
227125
|
-
|
|
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 }));
|
|
227587
|
+
if (effective.origin === 'private' && effective.skill) {
|
|
227588
|
+
await updateSkill({
|
|
227589
|
+
org: platformKey,
|
|
227590
|
+
id: effective.skill.id,
|
|
227591
|
+
enabled: shouldEnable,
|
|
227592
|
+
}).unwrap();
|
|
227138
227593
|
}
|
|
227139
|
-
else {
|
|
227140
|
-
|
|
227141
|
-
return;
|
|
227142
|
-
await deleteAssignment({
|
|
227594
|
+
else if (effective.assignmentId !== undefined) {
|
|
227595
|
+
await updateAssignment({
|
|
227143
227596
|
org: platformKey,
|
|
227144
227597
|
mentorUniqueId,
|
|
227145
|
-
assignmentPk:
|
|
227598
|
+
assignmentPk: effective.assignmentId,
|
|
227599
|
+
enabled: shouldEnable,
|
|
227146
227600
|
}).unwrap();
|
|
227147
|
-
toast.success(t('clawSandboxAgentSkills.skillDisabled', { name: skill.name }));
|
|
227148
227601
|
}
|
|
227602
|
+
toast.success(t(shouldEnable
|
|
227603
|
+
? 'clawSandboxAgentSkills.skillEnabled'
|
|
227604
|
+
: 'clawSandboxAgentSkills.skillDisabled', { name: effective.name }));
|
|
227605
|
+
}
|
|
227606
|
+
catch (_a) {
|
|
227607
|
+
toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: effective.name }));
|
|
227608
|
+
}
|
|
227609
|
+
};
|
|
227610
|
+
const handleAttach = async (skill) => {
|
|
227611
|
+
try {
|
|
227612
|
+
await createAssignment({
|
|
227613
|
+
org: platformKey,
|
|
227614
|
+
mentorUniqueId,
|
|
227615
|
+
skill: skill.unique_id,
|
|
227616
|
+
enabled: true,
|
|
227617
|
+
}).unwrap();
|
|
227618
|
+
toast.success(t('clawSandboxAgentSkills.skillAdded', { name: skill.name }));
|
|
227149
227619
|
}
|
|
227150
227620
|
catch (_a) {
|
|
227151
227621
|
toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: skill.name }));
|
|
227152
227622
|
}
|
|
227153
227623
|
};
|
|
227624
|
+
const handleDetach = async (effective) => {
|
|
227625
|
+
if (effective.assignmentId === undefined)
|
|
227626
|
+
return;
|
|
227627
|
+
try {
|
|
227628
|
+
await deleteAssignment({
|
|
227629
|
+
org: platformKey,
|
|
227630
|
+
mentorUniqueId,
|
|
227631
|
+
assignmentPk: effective.assignmentId,
|
|
227632
|
+
}).unwrap();
|
|
227633
|
+
toast.success(t('clawSandboxAgentSkills.skillRemoved', { name: effective.name }));
|
|
227634
|
+
}
|
|
227635
|
+
catch (_a) {
|
|
227636
|
+
toast.error(t('clawSandboxAgentSkills.failedToUpdateSkill', { name: effective.name }));
|
|
227637
|
+
}
|
|
227638
|
+
};
|
|
227154
227639
|
const openNewSkillDialog = () => {
|
|
227155
227640
|
resetForm();
|
|
227156
227641
|
setShowNewDialog(true);
|
|
227157
227642
|
};
|
|
227158
227643
|
const openEditSkillDialog = (skill) => {
|
|
227644
|
+
var _a;
|
|
227159
227645
|
setForm({
|
|
227160
227646
|
name: skill.name,
|
|
227161
227647
|
slug: skill.slug,
|
|
227162
227648
|
description: skill.description,
|
|
227163
227649
|
version: skill.version,
|
|
227650
|
+
category: (_a = skill.category) !== null && _a !== void 0 ? _a : '',
|
|
227164
227651
|
instruction: skill.instruction,
|
|
227652
|
+
privateToAgent: skill.mentor === mentorUniqueId,
|
|
227165
227653
|
});
|
|
227166
227654
|
setEditingSkill(skill);
|
|
227167
227655
|
};
|
|
@@ -227182,6 +227670,8 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
|
|
|
227182
227670
|
slug: form.slug,
|
|
227183
227671
|
description: form.description,
|
|
227184
227672
|
version: form.version || '1.0.0',
|
|
227673
|
+
...(form.category && { category: form.category }),
|
|
227674
|
+
...(form.privateToAgent && { mentor: mentorUniqueId }),
|
|
227185
227675
|
instruction: form.instruction,
|
|
227186
227676
|
enabled: true,
|
|
227187
227677
|
}).unwrap();
|
|
@@ -227207,6 +227697,7 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
|
|
|
227207
227697
|
slug: form.slug,
|
|
227208
227698
|
description: form.description,
|
|
227209
227699
|
version: form.version,
|
|
227700
|
+
category: form.category,
|
|
227210
227701
|
instruction: form.instruction,
|
|
227211
227702
|
}).unwrap();
|
|
227212
227703
|
toast.success(t('clawSandboxAgentSkills.skillUpdated'));
|
|
@@ -227228,32 +227719,169 @@ function AgentSkills({ platformKey, mentorUniqueId }) {
|
|
|
227228
227719
|
toast.error(t('clawSandboxAgentSkills.failedToDeleteSkill'));
|
|
227229
227720
|
}
|
|
227230
227721
|
};
|
|
227722
|
+
const renderBadges = (skill, effective) => {
|
|
227723
|
+
var _a, _b, _c;
|
|
227724
|
+
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;
|
|
227725
|
+
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;
|
|
227726
|
+
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;
|
|
227727
|
+
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') }))] }));
|
|
227728
|
+
};
|
|
227729
|
+
const renderSkillMenu = (skill, effective) => {
|
|
227730
|
+
var _a, _b;
|
|
227731
|
+
const editable = isSkillEditable(skill);
|
|
227732
|
+
const showEdit = editable;
|
|
227733
|
+
const showDelete = editable;
|
|
227734
|
+
const detachable = (effective === null || effective === void 0 ? void 0 : effective.origin) === 'assignment';
|
|
227735
|
+
if (!showEdit && !showDelete && !detachable)
|
|
227736
|
+
return null;
|
|
227737
|
+
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 : '';
|
|
227738
|
+
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')] }))] })] }));
|
|
227739
|
+
};
|
|
227231
227740
|
if (isLoading) {
|
|
227232
227741
|
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
227742
|
}
|
|
227234
|
-
return (jsxs("div", { className: "space-y-4", "data-testid": "agent-skills-content", children: [
|
|
227235
|
-
|
|
227236
|
-
|
|
227237
|
-
|
|
227238
|
-
|
|
227239
|
-
|
|
227240
|
-
|
|
227241
|
-
|
|
227242
|
-
|
|
227243
|
-
|
|
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
|
|
227743
|
+
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) => {
|
|
227744
|
+
var _a;
|
|
227745
|
+
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
|
|
227746
|
+
? 'clawSandboxAgentSkills.skillEnabledLabel'
|
|
227747
|
+
: 'clawSandboxAgentSkills.skillDisabledLabel', { name: effective.name }) }), renderSkillMenu(effective.skill, effective)] })] }, effective.unique_id));
|
|
227748
|
+
}) }))] }), 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
|
|
227749
|
+
? t('clawSandboxAgentSkills.creating')
|
|
227750
|
+
: 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
|
|
227751
|
+
? t('clawSandboxAgentSkills.saving')
|
|
227752
|
+
: 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
227753
|
? t('clawSandboxAgentSkills.deleting')
|
|
227251
227754
|
: t('clawSandboxAgentSkills.delete') })] })] })] }));
|
|
227252
227755
|
}
|
|
227253
227756
|
// ── Shared Skill Form ────────────────────────────────────────────────────────
|
|
227254
|
-
function SkillForm({ form, onChange, }) {
|
|
227757
|
+
function SkillForm({ form, onChange, showPrivateToggle = false, }) {
|
|
227758
|
+
const t = useT();
|
|
227759
|
+
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 }) })] })] }));
|
|
227760
|
+
}
|
|
227761
|
+
|
|
227762
|
+
/** Distance (px) from the list bottom at which the next page is requested. */
|
|
227763
|
+
const LOAD_MORE_THRESHOLD_PX = 48;
|
|
227764
|
+
/**
|
|
227765
|
+
* Listbox half of the chat `/` skill combobox. The composer textarea owns
|
|
227766
|
+
* focus and keyboard handling (see `useSlashSkillPicker`); options here are
|
|
227767
|
+
* referenced via `aria-activedescendant` and selected on click. Scrolling
|
|
227768
|
+
* near the bottom lazily loads the next page of skills.
|
|
227769
|
+
*/
|
|
227770
|
+
function SlashSkillPicker({ skills, activeIndex, listboxId, onSelect, onActiveIndexChange, isLoading = false, isFetchingMore = false, hasMore = false, onLoadMore, }) {
|
|
227255
227771
|
const t = useT();
|
|
227256
|
-
|
|
227772
|
+
const listRef = useRef(null);
|
|
227773
|
+
// Keep the active option scrolled into view during arrow-key browsing.
|
|
227774
|
+
useEffect(() => {
|
|
227775
|
+
var _a;
|
|
227776
|
+
const option = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children[activeIndex];
|
|
227777
|
+
option === null || option === void 0 ? void 0 : option.scrollIntoView({ block: 'nearest' });
|
|
227778
|
+
}, [activeIndex]);
|
|
227779
|
+
if (skills.length === 0 && !isLoading)
|
|
227780
|
+
return null;
|
|
227781
|
+
const handleScroll = (event) => {
|
|
227782
|
+
if (!hasMore || isFetchingMore || !onLoadMore)
|
|
227783
|
+
return;
|
|
227784
|
+
const el = event.currentTarget;
|
|
227785
|
+
if (el.scrollTop + el.clientHeight >= el.scrollHeight - LOAD_MORE_THRESHOLD_PX) {
|
|
227786
|
+
onLoadMore();
|
|
227787
|
+
}
|
|
227788
|
+
};
|
|
227789
|
+
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
|
|
227790
|
+
? t('slashSkillPicker.loading')
|
|
227791
|
+
: 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),
|
|
227792
|
+
// onMouseDown so selection wins over the textarea losing focus.
|
|
227793
|
+
onMouseDown: (e) => {
|
|
227794
|
+
e.preventDefault();
|
|
227795
|
+
onSelect(skill);
|
|
227796
|
+
}, 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') })] }))] }))] }));
|
|
227797
|
+
}
|
|
227798
|
+
|
|
227799
|
+
/** Matches a composer value that is a single `/`-prefixed token (no whitespace). */
|
|
227800
|
+
const SLASH_TOKEN_RE = /^\/\S*$/;
|
|
227801
|
+
/** Whether the composer text is a `/` skill token (single word, leading slash). */
|
|
227802
|
+
function isSlashCommandToken(value) {
|
|
227803
|
+
return SLASH_TOKEN_RE.test(value);
|
|
227804
|
+
}
|
|
227805
|
+
/**
|
|
227806
|
+
* State machine for the chat `/` skill picker. Opens while the composer holds
|
|
227807
|
+
* a single `/`-prefixed token and at least one enabled skill matches; `Esc`
|
|
227808
|
+
* dismisses until the token is cleared, so plain text starting with `/` is
|
|
227809
|
+
* never blocked.
|
|
227810
|
+
*/
|
|
227811
|
+
function useSlashSkillPicker({ inputValue, setInputValue, skills, isLoading = false, }) {
|
|
227812
|
+
const listboxId = useId$2();
|
|
227813
|
+
const [dismissed, setDismissed] = useState(false);
|
|
227814
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
227815
|
+
const isSlashToken = SLASH_TOKEN_RE.test(inputValue);
|
|
227816
|
+
const query = isSlashToken ? inputValue.slice(1) : '';
|
|
227817
|
+
const filteredSkills = useMemo(() => (isSlashToken ? filterSlashSkills(skills, query) : []), [isSlashToken, skills, query]);
|
|
227818
|
+
// Loading keeps the picker open (with a loading row) so the user knows
|
|
227819
|
+
// something is coming; once loaded, zero matches closes it.
|
|
227820
|
+
const open = isSlashToken && !dismissed && (filteredSkills.length > 0 || isLoading);
|
|
227821
|
+
// Re-arm the picker once the slash token is gone (text sent or cleared).
|
|
227822
|
+
useEffect(() => {
|
|
227823
|
+
if (!isSlashToken && dismissed)
|
|
227824
|
+
setDismissed(false);
|
|
227825
|
+
}, [isSlashToken, dismissed]);
|
|
227826
|
+
// Keep the active option valid as the query narrows the list.
|
|
227827
|
+
const filteredLength = filteredSkills.length;
|
|
227828
|
+
const previousLength = useRef(filteredLength);
|
|
227829
|
+
useEffect(() => {
|
|
227830
|
+
if (previousLength.current !== filteredLength) {
|
|
227831
|
+
previousLength.current = filteredLength;
|
|
227832
|
+
setActiveIndex(0);
|
|
227833
|
+
}
|
|
227834
|
+
}, [filteredLength]);
|
|
227835
|
+
const selectSkill = (skill) => {
|
|
227836
|
+
setInputValue(`/${skill.slug} `);
|
|
227837
|
+
setActiveIndex(0);
|
|
227838
|
+
};
|
|
227839
|
+
const handleKeyDown = (event) => {
|
|
227840
|
+
if (!open)
|
|
227841
|
+
return false;
|
|
227842
|
+
switch (event.key) {
|
|
227843
|
+
case 'ArrowDown':
|
|
227844
|
+
if (!filteredSkills.length)
|
|
227845
|
+
return false;
|
|
227846
|
+
event.preventDefault();
|
|
227847
|
+
setActiveIndex((index) => (index + 1) % filteredSkills.length);
|
|
227848
|
+
return true;
|
|
227849
|
+
case 'ArrowUp':
|
|
227850
|
+
if (!filteredSkills.length)
|
|
227851
|
+
return false;
|
|
227852
|
+
event.preventDefault();
|
|
227853
|
+
setActiveIndex((index) => (index - 1 + filteredSkills.length) % filteredSkills.length);
|
|
227854
|
+
return true;
|
|
227855
|
+
case 'Enter':
|
|
227856
|
+
if (event.shiftKey || !filteredSkills.length)
|
|
227857
|
+
return false;
|
|
227858
|
+
event.preventDefault();
|
|
227859
|
+
selectSkill(filteredSkills[activeIndex]);
|
|
227860
|
+
return true;
|
|
227861
|
+
case 'Tab':
|
|
227862
|
+
if (!filteredSkills.length)
|
|
227863
|
+
return false;
|
|
227864
|
+
event.preventDefault();
|
|
227865
|
+
selectSkill(filteredSkills[activeIndex]);
|
|
227866
|
+
return true;
|
|
227867
|
+
case 'Escape':
|
|
227868
|
+
event.preventDefault();
|
|
227869
|
+
setDismissed(true);
|
|
227870
|
+
return true;
|
|
227871
|
+
default:
|
|
227872
|
+
return false;
|
|
227873
|
+
}
|
|
227874
|
+
};
|
|
227875
|
+
return {
|
|
227876
|
+
open,
|
|
227877
|
+
filteredSkills,
|
|
227878
|
+
activeIndex,
|
|
227879
|
+
setActiveIndex,
|
|
227880
|
+
listboxId,
|
|
227881
|
+
activeOptionId: open && filteredSkills.length > 0 ? `${listboxId}-option-${activeIndex}` : undefined,
|
|
227882
|
+
selectSkill,
|
|
227883
|
+
handleKeyDown,
|
|
227884
|
+
};
|
|
227257
227885
|
}
|
|
227258
227886
|
|
|
227259
227887
|
/**
|
|
@@ -228718,7 +229346,7 @@ const CSS_CLASS_NAMES = {
|
|
|
228718
229346
|
STOP_STREAMING_BUTTON: 'chat-stop-streaming-button',
|
|
228719
229347
|
}};
|
|
228720
229348
|
|
|
228721
|
-
const AutoResizeTextarea = ({ allowEmptySubmit = false, value, onChange, onSubmit, disabled = false, placeholder = '', sessionId = null, isPreviewMode = false, textAreaRows = 3, className = '', style = {}, allowAnonymousAccess = false, embedMode = false, ...props }) => {
|
|
229349
|
+
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
229350
|
const textareaRef = useRef(null);
|
|
228723
229351
|
const [isResizing, setIsResizing] = useState(false);
|
|
228724
229352
|
const numberOfMessages = useSelector(selectNumberOfActiveChatMessages);
|
|
@@ -228766,6 +229394,8 @@ const AutoResizeTextarea = ({ allowEmptySubmit = false, value, onChange, onSubmi
|
|
|
228766
229394
|
const handleKeyDown = (e) => {
|
|
228767
229395
|
if (isPreviewMode && !allowAnonymousAccess)
|
|
228768
229396
|
return;
|
|
229397
|
+
if (onComposerKeyDown === null || onComposerKeyDown === void 0 ? void 0 : onComposerKeyDown(e))
|
|
229398
|
+
return;
|
|
228769
229399
|
if (e.key === 'Enter' && !e.shiftKey) {
|
|
228770
229400
|
e.preventDefault();
|
|
228771
229401
|
if (value.trim() || allowEmptySubmit) {
|
|
@@ -229655,7 +230285,7 @@ function SubmitMessageButton({ isPreviewMode, allowAnonymousAccess, isUploading,
|
|
|
229655
230285
|
const PromptGalleryModal$1 = dynamic(() => Promise.resolve().then(function () { return promptGalleryModal; }).then((mod) => mod.PromptGalleryModal), {
|
|
229656
230286
|
ssr: false,
|
|
229657
230287
|
});
|
|
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, }) {
|
|
230288
|
+
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
230289
|
var _a, _b, _c, _d, _e;
|
|
229660
230290
|
const t = useT();
|
|
229661
230291
|
const dispatch = useDispatch();
|
|
@@ -229709,6 +230339,15 @@ function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpe
|
|
|
229709
230339
|
const setInputValue = (input) => {
|
|
229710
230340
|
dispatch(chatInputSliceActions.setTextareaInput(input));
|
|
229711
230341
|
};
|
|
230342
|
+
// `/` skill picker — active only when the host supplies the agent's
|
|
230343
|
+
// effective skills (or reports them loading). No fetching happens here.
|
|
230344
|
+
const effectiveSlashSkills = slashSkills !== null && slashSkills !== void 0 ? slashSkills : [];
|
|
230345
|
+
const slashPicker = useSlashSkillPicker({
|
|
230346
|
+
inputValue,
|
|
230347
|
+
setInputValue,
|
|
230348
|
+
skills: effectiveSlashSkills,
|
|
230349
|
+
isLoading: slashSkillsLoading,
|
|
230350
|
+
});
|
|
229712
230351
|
const handleSelectPrompt = (promptText) => {
|
|
229713
230352
|
setInputValue(promptText);
|
|
229714
230353
|
setIsPromptGalleryOpen(false);
|
|
@@ -229773,9 +230412,18 @@ function ChatInputForm({ onSubmit, onScreenSharingClick, isScreenSharingModalOpe
|
|
|
229773
230412
|
}
|
|
229774
230413
|
return persistentChatInputLabel ? '' : t('chatInputForm.askAnything');
|
|
229775
230414
|
};
|
|
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
|
|
230415
|
+
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
230416
|
? '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,
|
|
230417
|
+
: '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) && {
|
|
230418
|
+
role: 'combobox',
|
|
230419
|
+
'aria-expanded': slashPicker.open,
|
|
230420
|
+
'aria-haspopup': 'listbox',
|
|
230421
|
+
'aria-controls': slashPicker.open && slashPicker.filteredSkills.length > 0
|
|
230422
|
+
? slashPicker.listboxId
|
|
230423
|
+
: undefined,
|
|
230424
|
+
'aria-activedescendant': slashPicker.activeOptionId,
|
|
230425
|
+
'aria-autocomplete': 'list',
|
|
230426
|
+
}), 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
230427
|
? fileUploadCapabilities.allSupportedTypes.join(',')
|
|
229780
230428
|
: 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
230429
|
}
|
|
@@ -233912,5 +234560,5 @@ var trainOrDeleteModal = /*#__PURE__*/Object.freeze({
|
|
|
233912
234560
|
TrainOrDeleteModal: TrainOrDeleteModal
|
|
233913
234561
|
});
|
|
233914
234562
|
|
|
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 };
|
|
234563
|
+
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
234564
|
//# sourceMappingURL=index.esm.js.map
|