@red-hat-developer-hub/backstage-plugin-intelligent-assistant 3.0.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.
- package/CHANGELOG.md +681 -0
- package/README.md +378 -0
- package/config.d.ts +70 -0
- package/dist/alpha.d.ts +285 -0
- package/dist/alpha.esm.js +3 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/api/LightspeedApiClient.esm.js +234 -0
- package/dist/api/LightspeedApiClient.esm.js.map +1 -0
- package/dist/api/NotebooksApiClient.esm.js +179 -0
- package/dist/api/NotebooksApiClient.esm.js.map +1 -0
- package/dist/api/api.esm.js +8 -0
- package/dist/api/api.esm.js.map +1 -0
- package/dist/api/notebooksApi.esm.js +10 -0
- package/dist/api/notebooksApi.esm.js.map +1 -0
- package/dist/components/Attachment.esm.js +108 -0
- package/dist/components/Attachment.esm.js.map +1 -0
- package/dist/components/AttachmentContext.esm.js +125 -0
- package/dist/components/AttachmentContext.esm.js.map +1 -0
- package/dist/components/CollapsedHistoryStrip.esm.js +87 -0
- package/dist/components/CollapsedHistoryStrip.esm.js.map +1 -0
- package/dist/components/DeleteModal.esm.js +92 -0
- package/dist/components/DeleteModal.esm.js.map +1 -0
- package/dist/components/FilePreview.esm.js +49 -0
- package/dist/components/FilePreview.esm.js.map +1 -0
- package/dist/components/LightSpeedChat.esm.js +1898 -0
- package/dist/components/LightSpeedChat.esm.js.map +1 -0
- package/dist/components/LightspeedChatBox.esm.js +252 -0
- package/dist/components/LightspeedChatBox.esm.js.map +1 -0
- package/dist/components/LightspeedChatBoxHeader.esm.js +210 -0
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -0
- package/dist/components/LightspeedChatContainer.esm.js +162 -0
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -0
- package/dist/components/LightspeedChatModelsState.esm.js +198 -0
- package/dist/components/LightspeedChatModelsState.esm.js.map +1 -0
- package/dist/components/LightspeedDrawerContext.esm.js +15 -0
- package/dist/components/LightspeedDrawerContext.esm.js.map +1 -0
- package/dist/components/LightspeedDrawerProvider.esm.js +44 -0
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -0
- package/dist/components/LightspeedDrawerStateExposer.esm.js +34 -0
- package/dist/components/LightspeedDrawerStateExposer.esm.js.map +1 -0
- package/dist/components/LightspeedFAB.esm.js +6 -0
- package/dist/components/LightspeedFAB.esm.js.map +1 -0
- package/dist/components/LightspeedFABContent.esm.js +65 -0
- package/dist/components/LightspeedFABContent.esm.js.map +1 -0
- package/dist/components/LightspeedIcon.esm.js +46 -0
- package/dist/components/LightspeedIcon.esm.js.map +1 -0
- package/dist/components/LightspeedPage.esm.js +31 -0
- package/dist/components/LightspeedPage.esm.js.map +1 -0
- package/dist/components/McpServersSettings.esm.js +953 -0
- package/dist/components/McpServersSettings.esm.js.map +1 -0
- package/dist/components/McpSettingsIcon.esm.js +18 -0
- package/dist/components/McpSettingsIcon.esm.js.map +1 -0
- package/dist/components/MessageBarModelSelector.esm.js +92 -0
- package/dist/components/MessageBarModelSelector.esm.js.map +1 -0
- package/dist/components/PermissionRequiredIcon.esm.js +18 -0
- package/dist/components/PermissionRequiredIcon.esm.js.map +1 -0
- package/dist/components/PermissionRequiredState.esm.js +88 -0
- package/dist/components/PermissionRequiredState.esm.js.map +1 -0
- package/dist/components/RenameConversationModal.esm.js +157 -0
- package/dist/components/RenameConversationModal.esm.js.map +1 -0
- package/dist/components/Router.esm.js +35 -0
- package/dist/components/Router.esm.js.map +1 -0
- package/dist/components/SourcesChipModal.esm.js +124 -0
- package/dist/components/SourcesChipModal.esm.js.map +1 -0
- package/dist/components/ToolCallContent.esm.js +208 -0
- package/dist/components/ToolCallContent.esm.js.map +1 -0
- package/dist/components/Trans.esm.js +33 -0
- package/dist/components/Trans.esm.js.map +1 -0
- package/dist/components/notebooks/AddDocumentModal.esm.js +271 -0
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -0
- package/dist/components/notebooks/DeleteDocumentModal.esm.js +131 -0
- package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -0
- package/dist/components/notebooks/DeleteNotebookModal.esm.js +143 -0
- package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -0
- package/dist/components/notebooks/DocumentSidebar.esm.js +235 -0
- package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -0
- package/dist/components/notebooks/FileListItem.esm.js +94 -0
- package/dist/components/notebooks/FileListItem.esm.js.map +1 -0
- package/dist/components/notebooks/FileTypeIcon.esm.js +59 -0
- package/dist/components/notebooks/FileTypeIcon.esm.js.map +1 -0
- package/dist/components/notebooks/NotebookCard.esm.js +118 -0
- package/dist/components/notebooks/NotebookCard.esm.js.map +1 -0
- package/dist/components/notebooks/NotebookView.esm.js +681 -0
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -0
- package/dist/components/notebooks/NotebooksTab.esm.js +71 -0
- package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -0
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +142 -0
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -0
- package/dist/components/notebooks/RenameNotebookModal.esm.js +187 -0
- package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -0
- package/dist/components/notebooks/SidebarCollapseIcon.esm.js +50 -0
- package/dist/components/notebooks/SidebarCollapseIcon.esm.js.map +1 -0
- package/dist/components/notebooks/UploadResourceScreen.esm.js +79 -0
- package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -0
- package/dist/const.esm.js +74 -0
- package/dist/const.esm.js.map +1 -0
- package/dist/dev.d.ts +2 -0
- package/dist/dev.esm.js +48 -0
- package/dist/dev.esm.js.map +1 -0
- package/dist/hooks/notebooks/useCreateNotebook.esm.js +19 -0
- package/dist/hooks/notebooks/useCreateNotebook.esm.js.map +1 -0
- package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js +24 -0
- package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js.map +1 -0
- package/dist/hooks/notebooks/useDeleteNotebook.esm.js +19 -0
- package/dist/hooks/notebooks/useDeleteNotebook.esm.js.map +1 -0
- package/dist/hooks/notebooks/useDocumentStatusPolling.esm.js +40 -0
- package/dist/hooks/notebooks/useDocumentStatusPolling.esm.js.map +1 -0
- package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js +15 -0
- package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js.map +1 -0
- package/dist/hooks/notebooks/useNotebookDocuments.esm.js +18 -0
- package/dist/hooks/notebooks/useNotebookDocuments.esm.js.map +1 -0
- package/dist/hooks/notebooks/useNotebookSession.esm.js +18 -0
- package/dist/hooks/notebooks/useNotebookSession.esm.js.map +1 -0
- package/dist/hooks/notebooks/useNotebookSessions.esm.js +18 -0
- package/dist/hooks/notebooks/useNotebookSessions.esm.js.map +1 -0
- package/dist/hooks/notebooks/useRenameNotebook.esm.js +19 -0
- package/dist/hooks/notebooks/useRenameNotebook.esm.js.map +1 -0
- package/dist/hooks/notebooks/useUploadDocument.esm.js +28 -0
- package/dist/hooks/notebooks/useUploadDocument.esm.js.map +1 -0
- package/dist/hooks/toolCallsCacheStore.esm.js +61 -0
- package/dist/hooks/toolCallsCacheStore.esm.js.map +1 -0
- package/dist/hooks/useAllModels.esm.js +20 -0
- package/dist/hooks/useAllModels.esm.js.map +1 -0
- package/dist/hooks/useAutoScroll.esm.js +78 -0
- package/dist/hooks/useAutoScroll.esm.js.map +1 -0
- package/dist/hooks/useBackstageUserIdentity.esm.js +14 -0
- package/dist/hooks/useBackstageUserIdentity.esm.js.map +1 -0
- package/dist/hooks/useBufferedMessages.esm.js +27 -0
- package/dist/hooks/useBufferedMessages.esm.js.map +1 -0
- package/dist/hooks/useCaptureFeedback.esm.js +21 -0
- package/dist/hooks/useCaptureFeedback.esm.js.map +1 -0
- package/dist/hooks/useConversationMessages.esm.js +544 -0
- package/dist/hooks/useConversationMessages.esm.js.map +1 -0
- package/dist/hooks/useConversations.esm.js +25 -0
- package/dist/hooks/useConversations.esm.js.map +1 -0
- package/dist/hooks/useCreateCoversationMessage.esm.js +33 -0
- package/dist/hooks/useCreateCoversationMessage.esm.js.map +1 -0
- package/dist/hooks/useDeleteConversation.esm.js +39 -0
- package/dist/hooks/useDeleteConversation.esm.js.map +1 -0
- package/dist/hooks/useDisplayModeSettings.esm.js +57 -0
- package/dist/hooks/useDisplayModeSettings.esm.js.map +1 -0
- package/dist/hooks/useFeedbackActions.esm.js +275 -0
- package/dist/hooks/useFeedbackActions.esm.js.map +1 -0
- package/dist/hooks/useFeedbackState.esm.js +93 -0
- package/dist/hooks/useFeedbackState.esm.js.map +1 -0
- package/dist/hooks/useFeedbackStatus.esm.js +14 -0
- package/dist/hooks/useFeedbackStatus.esm.js.map +1 -0
- package/dist/hooks/useIsMobile.esm.js +14 -0
- package/dist/hooks/useIsMobile.esm.js.map +1 -0
- package/dist/hooks/useLastOpenedConversation.esm.js +51 -0
- package/dist/hooks/useLastOpenedConversation.esm.js.map +1 -0
- package/dist/hooks/useLightspeedDeletePermission.esm.js +12 -0
- package/dist/hooks/useLightspeedDeletePermission.esm.js.map +1 -0
- package/dist/hooks/useLightspeedDrawerContext.esm.js +15 -0
- package/dist/hooks/useLightspeedDrawerContext.esm.js.map +1 -0
- package/dist/hooks/useLightspeedProviderState.esm.js +277 -0
- package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -0
- package/dist/hooks/useLightspeedUpdatePermission.esm.js +12 -0
- package/dist/hooks/useLightspeedUpdatePermission.esm.js.map +1 -0
- package/dist/hooks/useLightspeedViewPermission.esm.js +18 -0
- package/dist/hooks/useLightspeedViewPermission.esm.js.map +1 -0
- package/dist/hooks/useNotebookConversationIds.esm.js +19 -0
- package/dist/hooks/useNotebookConversationIds.esm.js.map +1 -0
- package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
- package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
- package/dist/hooks/usePinnedChatsSettings.esm.js +118 -0
- package/dist/hooks/usePinnedChatsSettings.esm.js.map +1 -0
- package/dist/hooks/useQuestionValidation.esm.js +16 -0
- package/dist/hooks/useQuestionValidation.esm.js.map +1 -0
- package/dist/hooks/useRenameConversation.esm.js +44 -0
- package/dist/hooks/useRenameConversation.esm.js.map +1 -0
- package/dist/hooks/useSortSettings.esm.js +60 -0
- package/dist/hooks/useSortSettings.esm.js.map +1 -0
- package/dist/hooks/useStopConversation.esm.js +18 -0
- package/dist/hooks/useStopConversation.esm.js.map +1 -0
- package/dist/hooks/useTranslation.esm.js +7 -0
- package/dist/hooks/useTranslation.esm.js.map +1 -0
- package/dist/hooks/useWelcomePrompts.esm.js +36 -0
- package/dist/hooks/useWelcomePrompts.esm.js.map +1 -0
- package/dist/images/bot-avatar-dark.svg +4 -0
- package/dist/images/bot-avatar.svg +4 -0
- package/dist/images/permission-required.svg +319 -0
- package/dist/images/user-avatar.svg +4 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.esm.js +137 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/intelligent-assistant-fab-module.d.ts +4 -0
- package/dist/intelligent-assistant-fab-module.esm.js +2 -0
- package/dist/intelligent-assistant-fab-module.esm.js.map +1 -0
- package/dist/intelligent-assistant-translations-module.d.ts +4 -0
- package/dist/intelligent-assistant-translations-module.esm.js +2 -0
- package/dist/intelligent-assistant-translations-module.esm.js.map +1 -0
- package/dist/legacy.d.ts +75 -0
- package/dist/legacy.esm.js +13 -0
- package/dist/legacy.esm.js.map +1 -0
- package/dist/plugin.esm.js +84 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +23 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/translations/de.esm.js +278 -0
- package/dist/translations/de.esm.js.map +1 -0
- package/dist/translations/es.esm.js +278 -0
- package/dist/translations/es.esm.js.map +1 -0
- package/dist/translations/fr.esm.js +278 -0
- package/dist/translations/fr.esm.js.map +1 -0
- package/dist/translations/index.esm.js +16 -0
- package/dist/translations/index.esm.js.map +1 -0
- package/dist/translations/it.esm.js +278 -0
- package/dist/translations/it.esm.js.map +1 -0
- package/dist/translations/ja.esm.js +278 -0
- package/dist/translations/ja.esm.js.map +1 -0
- package/dist/translations/ref.esm.js +315 -0
- package/dist/translations/ref.esm.js.map +1 -0
- package/dist/types.esm.js +9 -0
- package/dist/types.esm.js.map +1 -0
- package/dist/utils/attachment-utils.esm.js +30 -0
- package/dist/utils/attachment-utils.esm.js.map +1 -0
- package/dist/utils/formatToolResponseForMarkdown.esm.js +98 -0
- package/dist/utils/formatToolResponseForMarkdown.esm.js.map +1 -0
- package/dist/utils/generateClassName.esm.js +12 -0
- package/dist/utils/generateClassName.esm.js.map +1 -0
- package/dist/utils/lightspeed-chatbox-utils.esm.js +232 -0
- package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -0
- package/dist/utils/notebook-upload-utils.esm.js +48 -0
- package/dist/utils/notebook-upload-utils.esm.js.map +1 -0
- package/dist/utils/notebooks-utils.esm.js +25 -0
- package/dist/utils/notebooks-utils.esm.js.map +1 -0
- package/dist/utils/prompt-utils.esm.js +17 -0
- package/dist/utils/prompt-utils.esm.js.map +1 -0
- package/dist/utils/queryClient.esm.js +6 -0
- package/dist/utils/queryClient.esm.js.map +1 -0
- package/dist/utils/reasoningParser.esm.js +33 -0
- package/dist/utils/reasoningParser.esm.js.map +1 -0
- package/dist/utils/toolCallMapper.esm.js +15 -0
- package/dist/utils/toolCallMapper.esm.js.map +1 -0
- package/dist/utils/user-utils.esm.js +7 -0
- package/dist/utils/user-utils.esm.js.map +1 -0
- package/package.json +182 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { createTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
2
|
+
|
|
3
|
+
const intelligentAssistantMessages = {
|
|
4
|
+
// Page titles and headers
|
|
5
|
+
"page.title": "Intelligent assistant",
|
|
6
|
+
"page.subtitle": "AI-powered development assistant",
|
|
7
|
+
"tabs.ariaLabel": "Intelligent assistant views",
|
|
8
|
+
"tabs.chat": "Chat",
|
|
9
|
+
"tabs.notebooks": "Notebooks",
|
|
10
|
+
"tabs.notebooks.devPreview": "Developer preview",
|
|
11
|
+
"tabs.notebooks.empty": "Notebooks content goes here.",
|
|
12
|
+
"notebooks.title": "My Notebooks",
|
|
13
|
+
"notebooks.empty.title": "No created notebooks",
|
|
14
|
+
"notebooks.empty.description": "Start a new notebook to organize your sources and generate AI-powered insights.",
|
|
15
|
+
"notebooks.empty.action": "Create a new notebook",
|
|
16
|
+
"notebooks.documents": "Documents",
|
|
17
|
+
"notebooks.actions.rename": "Rename",
|
|
18
|
+
"notebooks.actions.delete": "Delete",
|
|
19
|
+
"notebooks.rename.title": "Rename {{name}}?",
|
|
20
|
+
"notebooks.rename.description": "Please input the new name for this notebook and click submit to proceed.",
|
|
21
|
+
"notebooks.rename.label": "New name",
|
|
22
|
+
"notebooks.rename.placeholder": "New name",
|
|
23
|
+
"notebooks.rename.action": "Submit",
|
|
24
|
+
"notebooks.delete.title": "Delete {{name}}?",
|
|
25
|
+
"notebooks.delete.message": "You'll no longer see this notebook here. This will also delete related activity like prompts, responses, and feedback from your activity.",
|
|
26
|
+
"notebooks.delete.action": "Delete",
|
|
27
|
+
"notebooks.delete.toast": "Notebook deleted!",
|
|
28
|
+
"notebooks.updated.today": "Updated today",
|
|
29
|
+
"notebooks.updated.yesterday": "Updated 1 day ago",
|
|
30
|
+
"notebooks.updated.days": "Updated {{days}} days ago",
|
|
31
|
+
"notebooks.updated.on": "Updated on",
|
|
32
|
+
"notebooks.card.openAria": "Open notebook {{name}}",
|
|
33
|
+
// Notebook sample prompts
|
|
34
|
+
"notebooks.prompts.coreConcepts.title": "What are the core concepts?",
|
|
35
|
+
"notebooks.prompts.vulnerabilities.title": "Show my critical vulnerabilities",
|
|
36
|
+
"notebooks.prompts.accessIssue.title": "Help me with an access issue",
|
|
37
|
+
// Notebook view
|
|
38
|
+
"notebook.view.title": "Untitled notebook",
|
|
39
|
+
"notebook.view.close": "Close notebook",
|
|
40
|
+
"notebook.view.documents.count": "{{count}} Documents",
|
|
41
|
+
"notebook.view.documents.add": "Add",
|
|
42
|
+
"notebook.view.upload.heading": "Upload a resource to get started",
|
|
43
|
+
"notebook.view.upload.action": "Upload a resource",
|
|
44
|
+
"notebook.view.processing.heading": "Processing resources...",
|
|
45
|
+
"notebook.view.processing.description": "Your files are being indexed. You can start asking questions once processing is complete.",
|
|
46
|
+
"notebook.view.input.placeholder": "Ask about your documents...",
|
|
47
|
+
"notebook.view.input.disabledTooltip": "Select at least one loaded resource to start chatting",
|
|
48
|
+
"notebook.view.sidebar.collapse": "Collapse sidebar",
|
|
49
|
+
"notebook.view.sidebar.expand": "Expand sidebar",
|
|
50
|
+
"notebook.view.sidebar.resize": "Resize sidebar",
|
|
51
|
+
"notebook.view.documents.uploading": "Uploading document",
|
|
52
|
+
"notebook.view.documents.maxReached": "Maximum 10 documents are allowed. Delete a document to upload a new document.",
|
|
53
|
+
"notebook.view.documents.uploadsInProgress": "Please wait for current uploads to complete before adding more documents.",
|
|
54
|
+
"notebook.upload.failed": '"{{fileName}}" upload failed.',
|
|
55
|
+
// Notebook upload modal
|
|
56
|
+
"notebook.upload.modal.title": "Add a document to Notebook",
|
|
57
|
+
"notebook.upload.modal.dragDropTitle": "Drag and drop files here",
|
|
58
|
+
"notebook.upload.modal.browseButton": "Upload",
|
|
59
|
+
"notebook.upload.modal.separator": "or",
|
|
60
|
+
"notebook.upload.modal.infoText": "Accepted file types: .md, .txt, .pdf, .json, .yaml, .log",
|
|
61
|
+
"notebook.upload.modal.selectedFiles": "{{count}} of {{max}} files selected",
|
|
62
|
+
"notebook.upload.modal.addButton": "Add ({{count}})",
|
|
63
|
+
"notebook.upload.modal.removeFile": "Remove {{fileName}}",
|
|
64
|
+
"notebook.upload.error.unsupportedType": "Upload error: Unsupported file type(s) found. Please upload only supported file types.",
|
|
65
|
+
"notebook.upload.error.fileTooLarge": "Upload error: File size exceeds 25 MB limit.",
|
|
66
|
+
"notebook.upload.error.tooManyFiles": "Upload error: Maximum of {{max}} files allowed.",
|
|
67
|
+
// Notebook overwrite modal
|
|
68
|
+
"notebook.overwrite.modal.title": "Overwrite Files?",
|
|
69
|
+
"notebook.overwrite.modal.description": "The following files already exist in this notebook. Do you want to overwrite them with the new versions?",
|
|
70
|
+
"notebook.overwrite.modal.action": "Overwrite",
|
|
71
|
+
"notebook.document.delete": "Delete",
|
|
72
|
+
"notebook.document.delete.title": "Remove resource?",
|
|
73
|
+
"notebook.document.delete.description": "Are you sure you want to remove <documentName/> from this notebook? This action cannot be undone.",
|
|
74
|
+
"notebook.document.delete.action": "Remove",
|
|
75
|
+
"notebook.document.delete.success": '"{{documentName}}" removed successfully.',
|
|
76
|
+
// Sample prompts - General Development
|
|
77
|
+
"prompts.codeReadability.title": "Get Help On Code Readability",
|
|
78
|
+
"prompts.codeReadability.message": "Can you suggest techniques I can use to make my code more readable and maintainable?",
|
|
79
|
+
"prompts.debugging.title": "Get Help With Debugging",
|
|
80
|
+
"prompts.debugging.message": "My application is throwing an error when trying to connect to the database. Can you help me identify the issue?",
|
|
81
|
+
"prompts.developmentConcept.title": "Explain a Development Concept",
|
|
82
|
+
"prompts.developmentConcept.message": "Can you explain how microservices architecture works and its advantages over a monolithic design?",
|
|
83
|
+
"prompts.codeOptimization.title": "Suggest Code Optimizations",
|
|
84
|
+
"prompts.codeOptimization.message": "Can you suggest common ways to optimize code to achieve better performance?",
|
|
85
|
+
"prompts.documentation.title": "Documentation Summary",
|
|
86
|
+
"prompts.documentation.message": "Can you summarize the documentation for implementing OAuth 2.0 authentication in a web app?",
|
|
87
|
+
"prompts.gitWorkflows.title": "Workflows With Git",
|
|
88
|
+
"prompts.gitWorkflows.message": "I want to make changes to code on another branch without losing my existing work. What is the procedure to do this using Git?",
|
|
89
|
+
"prompts.testingStrategies.title": "Suggest Testing Strategies",
|
|
90
|
+
"prompts.testingStrategies.message": "Can you recommend some common testing strategies that will make my application robust and error-free?",
|
|
91
|
+
"prompts.sortingAlgorithms.title": "Demystify Sorting Algorithms",
|
|
92
|
+
"prompts.sortingAlgorithms.message": "Can you explain the difference between a quicksort and a merge sort algorithm, and when to use each?",
|
|
93
|
+
"prompts.eventDriven.title": "Understand Event-Driven Architecture",
|
|
94
|
+
"prompts.eventDriven.message": "Can you explain what event-driven architecture is and when it's beneficial to use it in software development?",
|
|
95
|
+
// Sample prompts - RHDH Specific
|
|
96
|
+
"prompts.tekton.title": "Deploy With Tekton",
|
|
97
|
+
"prompts.tekton.message": "Can you help me automate the deployment of my application using Tekton pipelines?",
|
|
98
|
+
"prompts.openshift.title": "Create An OpenShift Deployment",
|
|
99
|
+
"prompts.openshift.message": "Can you guide me through creating a new deployment in OpenShift for a containerized application?",
|
|
100
|
+
"prompts.rhdh.title": "Getting Started with Red Hat Developer Hub",
|
|
101
|
+
"prompts.rhdh.message": "Can you guide me through the first steps to start using Developer Hub as a developer, like exploring the Software Catalog and adding my service?",
|
|
102
|
+
// Conversation history
|
|
103
|
+
"conversation.delete.confirm.title": 'Delete "{{chatName}}"?',
|
|
104
|
+
"conversation.delete.confirm.message": "You'll no longer see this chat here. This will also delete related activity like prompts, responses, and feedback from your activity.",
|
|
105
|
+
"conversation.delete.confirm.action": "Delete",
|
|
106
|
+
"conversation.rename.confirm.title": "Rename chat?",
|
|
107
|
+
"conversation.rename.confirm.action": "Rename",
|
|
108
|
+
"conversation.rename.placeholder": "Chat name",
|
|
109
|
+
// Permissions
|
|
110
|
+
"permission.required.title": "Missing permissions",
|
|
111
|
+
"permission.required.description": "To view <subject/>, contact your administrator to give the <permissions/> permission.",
|
|
112
|
+
"permission.subject.plugin": "the intelligent assistant plugin",
|
|
113
|
+
"permission.subject.notebooks": "the intelligent assistant notebooks",
|
|
114
|
+
"permission.notebooks.goBack": "Go back",
|
|
115
|
+
// LCORE / LLM (no models registered)
|
|
116
|
+
"lcore.notConfigured.title": "Connect an LLM to get started",
|
|
117
|
+
"lcore.notConfigured.description": "The intelligent assistant requires a registered LLM. Contact your organization's platform administrator to complete the setup.",
|
|
118
|
+
"lcore.notConfigured.developerLightspeedDocs": "Configuring Developer Hub Intelligent Assistant",
|
|
119
|
+
"lcore.notConfigured.backendDocs": "Intelligent Assistant Backend Setup",
|
|
120
|
+
"lcore.loadError.title": "Could not load models",
|
|
121
|
+
"lcore.loadError.description": "The intelligent assistant backend did not return a model list. Check that the service is running and reachable, then try again.",
|
|
122
|
+
// Disclaimers
|
|
123
|
+
"disclaimer.withValidation": "This feature uses AI technology. Do not include any personal information or any other sensitive information in your input. Interactions may be used to improve Red Hat's products or services.",
|
|
124
|
+
"disclaimer.withoutValidation": "This feature uses AI technology. Do not include any personal information or any other sensitive information in your input. Interactions may be used to improve Red Hat's products or services.",
|
|
125
|
+
// Footer and feedback
|
|
126
|
+
"footer.accuracy.label": "Always review AI generated content prior to use.",
|
|
127
|
+
// Common actions
|
|
128
|
+
"common.cancel": "Cancel",
|
|
129
|
+
"common.close": "Close",
|
|
130
|
+
"common.readMore": "Read more",
|
|
131
|
+
"common.retry": "Try again",
|
|
132
|
+
"common.loading": "Loading",
|
|
133
|
+
"common.noSearchResults": "No result matches the search",
|
|
134
|
+
// Menu items
|
|
135
|
+
"menu.newConversation": "New Chat",
|
|
136
|
+
// Chat-specific UI elements
|
|
137
|
+
"chatbox.header.title": "Developer Hub Intelligent Assistant",
|
|
138
|
+
"chatbox.search.placeholder": "Search",
|
|
139
|
+
"chatbox.provider.other": "Other",
|
|
140
|
+
"chatbox.emptyState.noPinnedChats": "Pin chats to keep them on top",
|
|
141
|
+
"chatbox.emptyState.noRecentChats": "No recent chats",
|
|
142
|
+
"chatbox.emptyState.noResults.title": "No results found",
|
|
143
|
+
"chatbox.emptyState.noResults.body": "Adjust your search query and try again. Check your spelling or try a more general term.",
|
|
144
|
+
"chatbox.welcome.greeting": "Hello, {{userName}}",
|
|
145
|
+
"chatbox.welcome.description": "How can I help you today?",
|
|
146
|
+
"chatbox.message.placeholder": "Send a message",
|
|
147
|
+
"chatbox.fileUpload.failed": "File upload failed",
|
|
148
|
+
"chatbox.fileUpload.infoText": "Supported file types are: .txt, .yaml, and .json. The maximum file size is 25 MB.",
|
|
149
|
+
// Accessibility and ARIA labels
|
|
150
|
+
"aria.chatbotSelector": "Chatbot selector",
|
|
151
|
+
"aria.important": "Important",
|
|
152
|
+
"aria.chatHistoryMenu": "Chat history menu",
|
|
153
|
+
"aria.closeDrawerPanel": "Close drawer panel",
|
|
154
|
+
"aria.search.placeholder": "Search",
|
|
155
|
+
"aria.searchPreviousConversations": "Search previous conversations",
|
|
156
|
+
"aria.resize": "Resize",
|
|
157
|
+
"aria.options.label": "Options",
|
|
158
|
+
"aria.scroll.down": "Back to bottom",
|
|
159
|
+
"aria.scroll.up": "Back to top",
|
|
160
|
+
"aria.close": "Close chatbot",
|
|
161
|
+
// Modal actions
|
|
162
|
+
"modal.edit": "Edit",
|
|
163
|
+
"modal.save": "Save",
|
|
164
|
+
"modal.close": "Close",
|
|
165
|
+
"modal.cancel": "Cancel",
|
|
166
|
+
// Conversation actions
|
|
167
|
+
"conversation.delete": "Delete",
|
|
168
|
+
"conversation.rename": "Rename",
|
|
169
|
+
"conversation.addToPinnedChats": "Pin",
|
|
170
|
+
"conversation.removeFromPinnedChats": "Unpin",
|
|
171
|
+
"conversation.announcement.userMessage": "Message from User: {{prompt}}. Message from Bot is loading.",
|
|
172
|
+
"conversation.announcement.responseStopped": "Response stopped.",
|
|
173
|
+
// User states
|
|
174
|
+
"user.guest": "Guest",
|
|
175
|
+
"user.loading": "...",
|
|
176
|
+
// Button tooltips and labels
|
|
177
|
+
"tooltip.attach": "Attach",
|
|
178
|
+
"tooltip.send": "Send",
|
|
179
|
+
"tooltip.microphone.active": "Stop listening",
|
|
180
|
+
"tooltip.microphone.inactive": "Use microphone",
|
|
181
|
+
"tooltip.expandHistoryPanel": "Expand chat history",
|
|
182
|
+
"tooltip.collapseHistoryPanel": "Collapse chat history",
|
|
183
|
+
"tooltip.quickNewChat": "New chat",
|
|
184
|
+
"button.newChat": "New chat",
|
|
185
|
+
"tooltip.chatHistoryMenu": "Chat history menu",
|
|
186
|
+
"tooltip.responseRecorded": "Response recorded",
|
|
187
|
+
"tooltip.backToTop": "Back to top",
|
|
188
|
+
"tooltip.backToBottom": "Back to bottom",
|
|
189
|
+
"tooltip.settings": "Chatbot options",
|
|
190
|
+
"tooltip.close": "Close",
|
|
191
|
+
"tooltip.fab.open": "Open intelligent assistant",
|
|
192
|
+
"tooltip.fab.close": "Close intelligent assistant",
|
|
193
|
+
// Attach menu
|
|
194
|
+
"attach.menu.title": "Attach",
|
|
195
|
+
"attach.menu.description": "Attach a JSON, YAML, or TXT file",
|
|
196
|
+
// Modal titles
|
|
197
|
+
"modal.title.preview": "Preview attachment",
|
|
198
|
+
"modal.title.edit": "Edit attachment",
|
|
199
|
+
// Alt texts for icons
|
|
200
|
+
"icon.lightspeed.alt": "intelligent assistant icon",
|
|
201
|
+
"icon.permissionRequired.alt": "permission required icon",
|
|
202
|
+
// Message utilities
|
|
203
|
+
"message.options.label": "Options",
|
|
204
|
+
// File attachment errors
|
|
205
|
+
"file.upload.error.alreadyExists": "File already exists.",
|
|
206
|
+
"file.upload.error.multipleFiles": "Uploaded more than one file.",
|
|
207
|
+
"file.upload.error.unsupportedType": "Unsupported file type. Supported types are: .txt, .yaml, and .json.",
|
|
208
|
+
"file.upload.error.fileTooLarge": "Your file size is too large. Please ensure that your file is less than 25 MB.",
|
|
209
|
+
"file.upload.error.readFailed": "Failed to read file: {{errorMessage}}",
|
|
210
|
+
// Developer error messages
|
|
211
|
+
"error.context.fileAttachment": "useFileAttachmentContext must be within a FileAttachmentContextProvider",
|
|
212
|
+
// Feedback actions
|
|
213
|
+
"feedback.form.title": "Why did you choose this rating?",
|
|
214
|
+
"feedback.form.textAreaPlaceholder": "Provide optional additional feedback",
|
|
215
|
+
"feedback.form.submitWord": "Submit",
|
|
216
|
+
"feedback.tooltips.goodResponse": "Good Response",
|
|
217
|
+
"feedback.tooltips.badResponse": "Bad Response",
|
|
218
|
+
"feedback.tooltips.copied": "Copied",
|
|
219
|
+
"feedback.tooltips.copy": "Copy",
|
|
220
|
+
"feedback.tooltips.listening": "Listening",
|
|
221
|
+
"feedback.tooltips.listen": "Listen",
|
|
222
|
+
"feedback.quickResponses.positive.helpful": "Helpful information",
|
|
223
|
+
"feedback.quickResponses.positive.easyToUnderstand": "Easy to understand",
|
|
224
|
+
"feedback.quickResponses.positive.resolvedIssue": "Resolved my issue",
|
|
225
|
+
"feedback.quickResponses.negative.didntAnswer": "Didn't answer my question",
|
|
226
|
+
"feedback.quickResponses.negative.hardToUnderstand": "Hard to understand",
|
|
227
|
+
"feedback.quickResponses.negative.notHelpful": "Not Helpful",
|
|
228
|
+
"feedback.completion.title": "Feedback submitted",
|
|
229
|
+
"feedback.completion.body": "We've received your response. Thank you for sharing your feedback!",
|
|
230
|
+
// Conversation categorization
|
|
231
|
+
"conversation.category.pinnedChats": "Pinned chats",
|
|
232
|
+
"conversation.category.recent": "Chats",
|
|
233
|
+
// lightspeed settings
|
|
234
|
+
"settings.pinned.enable": "Enable pinned chats",
|
|
235
|
+
"settings.pinned.disable": "Disable pinned chats",
|
|
236
|
+
"settings.pinned.enabled.description": "Pinned chats are currently enabled",
|
|
237
|
+
"settings.pinned.disabled.description": "Pinned chats are currently disabled",
|
|
238
|
+
"settings.mcp.label": "MCP settings",
|
|
239
|
+
"settings.mcp.badge": "New",
|
|
240
|
+
// MCP settings
|
|
241
|
+
"mcp.settings.title": "MCP servers",
|
|
242
|
+
"mcp.settings.selectedCount": "{{selectedCount}} of {{totalCount}} selected",
|
|
243
|
+
"mcp.settings.closeAriaLabel": "Close MCP settings",
|
|
244
|
+
"mcp.settings.readOnlyAccess": "You have read-only access to MCP servers.",
|
|
245
|
+
"mcp.settings.tableAriaLabel": "MCP servers table",
|
|
246
|
+
"mcp.settings.enabled": "Enabled",
|
|
247
|
+
"mcp.settings.name": "Name",
|
|
248
|
+
"mcp.settings.status": "Status",
|
|
249
|
+
"mcp.settings.edit": "Edit",
|
|
250
|
+
"mcp.settings.loading": "Loading MCP servers...",
|
|
251
|
+
"mcp.settings.noneAvailable": "No MCP servers available.",
|
|
252
|
+
"mcp.settings.status.disabled": "Disabled",
|
|
253
|
+
"mcp.settings.status.tokenRequired": "Token required",
|
|
254
|
+
"mcp.settings.status.failed": "Failed",
|
|
255
|
+
"mcp.settings.status.oneTool": "{{count}} tool",
|
|
256
|
+
"mcp.settings.status.manyTools": "{{count}} tools",
|
|
257
|
+
"mcp.settings.status.unknown": "Unknown",
|
|
258
|
+
"mcp.settings.modalDescriptionDcr": "This server uses Dynamic Client Registration (DCR). Tokens are minted automatically using your Backstage identity \u2014 no manual token is needed.",
|
|
259
|
+
"mcp.settings.toggleServerAriaLabel": "Toggle {{serverName}}",
|
|
260
|
+
"mcp.settings.editServerAriaLabel": "Edit {{serverName}}",
|
|
261
|
+
"mcp.settings.configureServerTitle": "Configure {{serverName}} server",
|
|
262
|
+
"mcp.settings.closeConfigureModalAriaLabel": "Close configure modal",
|
|
263
|
+
"mcp.settings.modalDescription": "Credentials are encrypted at rest and scoped to your profile. The intelligent assistant will operate with your exact permissions.",
|
|
264
|
+
"mcp.settings.savedToken": "Saved token",
|
|
265
|
+
"mcp.settings.personalAccessToken": "Personal Access Token",
|
|
266
|
+
"mcp.settings.usingAdminCredential": "Using Administrator provided credential. Enter a personal token to override for your account.",
|
|
267
|
+
"mcp.settings.enterToken": "Enter your token",
|
|
268
|
+
"mcp.settings.removePersonalToken": "Remove personal token",
|
|
269
|
+
"mcp.settings.token.clearAriaLabel": "Clear token input",
|
|
270
|
+
"mcp.settings.token.validating": "Validating token...",
|
|
271
|
+
"mcp.settings.token.savingAndValidating": "Saving and validating token...",
|
|
272
|
+
"mcp.settings.token.urlUnavailableForValidation": "Unable to validate token because server URL is not available.",
|
|
273
|
+
"mcp.settings.token.invalidCredentials": "Invalid credentials. Check server URL and token.",
|
|
274
|
+
"mcp.settings.token.validationFailed": "Validation failed. Check server URL and token.",
|
|
275
|
+
"mcp.settings.token.connectionSuccessful": "Connection successful",
|
|
276
|
+
// Tool calling
|
|
277
|
+
"toolCall.header": "Tool response: {{toolName}}",
|
|
278
|
+
"toolCall.thinking": "Thought for {{seconds}} seconds",
|
|
279
|
+
"toolCall.executionTime": "Execution time: ",
|
|
280
|
+
"toolCall.parameters": "Parameters",
|
|
281
|
+
"toolCall.response": "Response",
|
|
282
|
+
"toolCall.showMore": "show more",
|
|
283
|
+
"toolCall.showLess": "show less",
|
|
284
|
+
"toolCall.loading": "Executing tool...",
|
|
285
|
+
"toolCall.executing": "Executing tool...",
|
|
286
|
+
"toolCall.copyResponse": "Copy response",
|
|
287
|
+
"toolCall.summary": "Here's a summary of your response",
|
|
288
|
+
"toolCall.mcpServer": "MCP Server",
|
|
289
|
+
// Display modes
|
|
290
|
+
"settings.displayMode.label": "Display mode",
|
|
291
|
+
"settings.displayMode.overlay": "Overlay",
|
|
292
|
+
"settings.displayMode.docked": "Dock to window",
|
|
293
|
+
"settings.displayMode.fullscreen": "Fullscreen",
|
|
294
|
+
// Sort options
|
|
295
|
+
"sort.label": "Sort conversations",
|
|
296
|
+
"sort.newest": "Date (newest first)",
|
|
297
|
+
"sort.oldest": "Date (oldest first)",
|
|
298
|
+
"sort.alphabeticalAsc": "Name (A-Z)",
|
|
299
|
+
"sort.alphabeticalDesc": "Name (Z-A)",
|
|
300
|
+
// Sources
|
|
301
|
+
"sources.chip.label_one": "{{count}} Source",
|
|
302
|
+
"sources.chip.label_other": "{{count}} Sources",
|
|
303
|
+
"sources.modal.title": "Sources",
|
|
304
|
+
"sources.modal.description": "The following sources were used to generate this AI response and provide supporting information:",
|
|
305
|
+
"sources.popover.closeAriaLabel": "Close sources",
|
|
306
|
+
// Deep thinking
|
|
307
|
+
"reasoning.thinking": "Show thinking"
|
|
308
|
+
};
|
|
309
|
+
const intelligentAssistantTranslationRef = createTranslationRef({
|
|
310
|
+
id: "plugin.intelligent-assistant",
|
|
311
|
+
messages: intelligentAssistantMessages
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
export { intelligentAssistantMessages, intelligentAssistantTranslationRef };
|
|
315
|
+
//# sourceMappingURL=ref.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.esm.js","sources":["../../src/translations/ref.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Messages object containing all English translations.\n * This is our single source of truth for translations.\n * @alpha\n */\nexport const intelligentAssistantMessages = {\n // Page titles and headers\n 'page.title': 'Intelligent assistant',\n 'page.subtitle': 'AI-powered development assistant',\n 'tabs.ariaLabel': 'Intelligent assistant views',\n 'tabs.chat': 'Chat',\n 'tabs.notebooks': 'Notebooks',\n 'tabs.notebooks.devPreview': 'Developer preview',\n 'tabs.notebooks.empty': 'Notebooks content goes here.',\n 'notebooks.title': 'My Notebooks',\n 'notebooks.empty.title': 'No created notebooks',\n 'notebooks.empty.description':\n 'Start a new notebook to organize your sources and generate AI-powered insights.',\n 'notebooks.empty.action': 'Create a new notebook',\n 'notebooks.documents': 'Documents',\n 'notebooks.actions.rename': 'Rename',\n 'notebooks.actions.delete': 'Delete',\n 'notebooks.rename.title': 'Rename {{name}}?',\n 'notebooks.rename.description':\n 'Please input the new name for this notebook and click submit to proceed.',\n 'notebooks.rename.label': 'New name',\n 'notebooks.rename.placeholder': 'New name',\n 'notebooks.rename.action': 'Submit',\n 'notebooks.delete.title': 'Delete {{name}}?',\n 'notebooks.delete.message':\n \"You'll no longer see this notebook here. This will also delete related activity like prompts, responses, and feedback from your activity.\",\n 'notebooks.delete.action': 'Delete',\n 'notebooks.delete.toast': 'Notebook deleted!',\n 'notebooks.updated.today': 'Updated today',\n 'notebooks.updated.yesterday': 'Updated 1 day ago',\n 'notebooks.updated.days': 'Updated {{days}} days ago',\n 'notebooks.updated.on': 'Updated on',\n 'notebooks.card.openAria': 'Open notebook {{name}}',\n\n // Notebook sample prompts\n 'notebooks.prompts.coreConcepts.title': 'What are the core concepts?',\n 'notebooks.prompts.vulnerabilities.title': 'Show my critical vulnerabilities',\n 'notebooks.prompts.accessIssue.title': 'Help me with an access issue',\n\n // Notebook view\n 'notebook.view.title': 'Untitled notebook',\n 'notebook.view.close': 'Close notebook',\n 'notebook.view.documents.count': '{{count}} Documents',\n 'notebook.view.documents.add': 'Add',\n 'notebook.view.upload.heading': 'Upload a resource to get started',\n 'notebook.view.upload.action': 'Upload a resource',\n 'notebook.view.processing.heading': 'Processing resources...',\n 'notebook.view.processing.description':\n 'Your files are being indexed. You can start asking questions once processing is complete.',\n 'notebook.view.input.placeholder': 'Ask about your documents...',\n 'notebook.view.input.disabledTooltip':\n 'Select at least one loaded resource to start chatting',\n 'notebook.view.sidebar.collapse': 'Collapse sidebar',\n 'notebook.view.sidebar.expand': 'Expand sidebar',\n 'notebook.view.sidebar.resize': 'Resize sidebar',\n 'notebook.view.documents.uploading': 'Uploading document',\n 'notebook.view.documents.maxReached':\n 'Maximum 10 documents are allowed. Delete a document to upload a new document.',\n 'notebook.view.documents.uploadsInProgress':\n 'Please wait for current uploads to complete before adding more documents.',\n 'notebook.upload.failed': '\"{{fileName}}\" upload failed.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Add a document to Notebook',\n 'notebook.upload.modal.dragDropTitle': 'Drag and drop files here',\n 'notebook.upload.modal.browseButton': 'Upload',\n 'notebook.upload.modal.separator': 'or',\n 'notebook.upload.modal.infoText':\n 'Accepted file types: .md, .txt, .pdf, .json, .yaml, .log',\n 'notebook.upload.modal.selectedFiles': '{{count}} of {{max}} files selected',\n 'notebook.upload.modal.addButton': 'Add ({{count}})',\n 'notebook.upload.modal.removeFile': 'Remove {{fileName}}',\n 'notebook.upload.error.unsupportedType':\n 'Upload error: Unsupported file type(s) found. Please upload only supported file types.',\n 'notebook.upload.error.fileTooLarge':\n 'Upload error: File size exceeds 25 MB limit.',\n 'notebook.upload.error.tooManyFiles':\n 'Upload error: Maximum of {{max}} files allowed.',\n\n // Notebook overwrite modal\n 'notebook.overwrite.modal.title': 'Overwrite Files?',\n 'notebook.overwrite.modal.description':\n 'The following files already exist in this notebook. Do you want to overwrite them with the new versions?',\n 'notebook.overwrite.modal.action': 'Overwrite',\n 'notebook.document.delete': 'Delete',\n 'notebook.document.delete.title': 'Remove resource?',\n 'notebook.document.delete.description':\n 'Are you sure you want to remove <documentName/> from this notebook? This action cannot be undone.',\n 'notebook.document.delete.action': 'Remove',\n 'notebook.document.delete.success':\n '\"{{documentName}}\" removed successfully.',\n\n // Sample prompts - General Development\n 'prompts.codeReadability.title': 'Get Help On Code Readability',\n 'prompts.codeReadability.message':\n 'Can you suggest techniques I can use to make my code more readable and maintainable?',\n 'prompts.debugging.title': 'Get Help With Debugging',\n 'prompts.debugging.message':\n 'My application is throwing an error when trying to connect to the database. Can you help me identify the issue?',\n 'prompts.developmentConcept.title': 'Explain a Development Concept',\n 'prompts.developmentConcept.message':\n 'Can you explain how microservices architecture works and its advantages over a monolithic design?',\n 'prompts.codeOptimization.title': 'Suggest Code Optimizations',\n 'prompts.codeOptimization.message':\n 'Can you suggest common ways to optimize code to achieve better performance?',\n 'prompts.documentation.title': 'Documentation Summary',\n 'prompts.documentation.message':\n 'Can you summarize the documentation for implementing OAuth 2.0 authentication in a web app?',\n 'prompts.gitWorkflows.title': 'Workflows With Git',\n 'prompts.gitWorkflows.message':\n 'I want to make changes to code on another branch without losing my existing work. What is the procedure to do this using Git?',\n 'prompts.testingStrategies.title': 'Suggest Testing Strategies',\n 'prompts.testingStrategies.message':\n 'Can you recommend some common testing strategies that will make my application robust and error-free?',\n 'prompts.sortingAlgorithms.title': 'Demystify Sorting Algorithms',\n 'prompts.sortingAlgorithms.message':\n 'Can you explain the difference between a quicksort and a merge sort algorithm, and when to use each?',\n 'prompts.eventDriven.title': 'Understand Event-Driven Architecture',\n 'prompts.eventDriven.message':\n \"Can you explain what event-driven architecture is and when it's beneficial to use it in software development?\",\n\n // Sample prompts - RHDH Specific\n 'prompts.tekton.title': 'Deploy With Tekton',\n 'prompts.tekton.message':\n 'Can you help me automate the deployment of my application using Tekton pipelines?',\n 'prompts.openshift.title': 'Create An OpenShift Deployment',\n 'prompts.openshift.message':\n 'Can you guide me through creating a new deployment in OpenShift for a containerized application?',\n 'prompts.rhdh.title': 'Getting Started with Red Hat Developer Hub',\n 'prompts.rhdh.message':\n 'Can you guide me through the first steps to start using Developer Hub as a developer, like exploring the Software Catalog and adding my service?',\n\n // Conversation history\n 'conversation.delete.confirm.title': 'Delete \"{{chatName}}\"?',\n 'conversation.delete.confirm.message':\n \"You'll no longer see this chat here. This will also delete related activity like prompts, responses, and feedback from your activity.\",\n 'conversation.delete.confirm.action': 'Delete',\n 'conversation.rename.confirm.title': 'Rename chat?',\n 'conversation.rename.confirm.action': 'Rename',\n 'conversation.rename.placeholder': 'Chat name',\n\n // Permissions\n 'permission.required.title': 'Missing permissions',\n 'permission.required.description':\n 'To view <subject/>, contact your administrator to give the <permissions/> permission.',\n 'permission.subject.plugin': 'the intelligent assistant plugin',\n 'permission.subject.notebooks': 'the intelligent assistant notebooks',\n 'permission.notebooks.goBack': 'Go back',\n\n // LCORE / LLM (no models registered)\n 'lcore.notConfigured.title': 'Connect an LLM to get started',\n 'lcore.notConfigured.description':\n \"The intelligent assistant requires a registered LLM. Contact your organization's platform administrator to complete the setup.\",\n 'lcore.notConfigured.developerLightspeedDocs':\n 'Configuring Developer Hub Intelligent Assistant',\n 'lcore.notConfigured.backendDocs': 'Intelligent Assistant Backend Setup',\n 'lcore.loadError.title': 'Could not load models',\n 'lcore.loadError.description':\n 'The intelligent assistant backend did not return a model list. Check that the service is running and reachable, then try again.',\n\n // Disclaimers\n 'disclaimer.withValidation':\n \"This feature uses AI technology. Do not include any personal information or any other sensitive information in your input. Interactions may be used to improve Red Hat's products or services.\",\n 'disclaimer.withoutValidation':\n \"This feature uses AI technology. Do not include any personal information or any other sensitive information in your input. Interactions may be used to improve Red Hat's products or services.\",\n\n // Footer and feedback\n 'footer.accuracy.label': 'Always review AI generated content prior to use.',\n\n // Common actions\n 'common.cancel': 'Cancel',\n 'common.close': 'Close',\n 'common.readMore': 'Read more',\n 'common.retry': 'Try again',\n 'common.loading': 'Loading',\n 'common.noSearchResults': 'No result matches the search',\n\n // Menu items\n 'menu.newConversation': 'New Chat',\n\n // Chat-specific UI elements\n 'chatbox.header.title': 'Developer Hub Intelligent Assistant',\n 'chatbox.search.placeholder': 'Search',\n 'chatbox.provider.other': 'Other',\n 'chatbox.emptyState.noPinnedChats': 'Pin chats to keep them on top',\n 'chatbox.emptyState.noRecentChats': 'No recent chats',\n 'chatbox.emptyState.noResults.title': 'No results found',\n 'chatbox.emptyState.noResults.body':\n 'Adjust your search query and try again. Check your spelling or try a more general term.',\n 'chatbox.welcome.greeting': 'Hello, {{userName}}',\n 'chatbox.welcome.description': 'How can I help you today?',\n 'chatbox.message.placeholder': 'Send a message',\n 'chatbox.fileUpload.failed': 'File upload failed',\n 'chatbox.fileUpload.infoText':\n 'Supported file types are: .txt, .yaml, and .json. The maximum file size is 25 MB.',\n\n // Accessibility and ARIA labels\n 'aria.chatbotSelector': 'Chatbot selector',\n 'aria.important': 'Important',\n 'aria.chatHistoryMenu': 'Chat history menu',\n 'aria.closeDrawerPanel': 'Close drawer panel',\n 'aria.search.placeholder': 'Search',\n 'aria.searchPreviousConversations': 'Search previous conversations',\n 'aria.resize': 'Resize',\n 'aria.options.label': 'Options',\n 'aria.scroll.down': 'Back to bottom',\n 'aria.scroll.up': 'Back to top',\n 'aria.close': 'Close chatbot',\n\n // Modal actions\n 'modal.edit': 'Edit',\n 'modal.save': 'Save',\n 'modal.close': 'Close',\n 'modal.cancel': 'Cancel',\n\n // Conversation actions\n 'conversation.delete': 'Delete',\n 'conversation.rename': 'Rename',\n 'conversation.addToPinnedChats': 'Pin',\n 'conversation.removeFromPinnedChats': 'Unpin',\n 'conversation.announcement.userMessage':\n 'Message from User: {{prompt}}. Message from Bot is loading.',\n 'conversation.announcement.responseStopped': 'Response stopped.',\n\n // User states\n 'user.guest': 'Guest',\n 'user.loading': '...',\n\n // Button tooltips and labels\n 'tooltip.attach': 'Attach',\n 'tooltip.send': 'Send',\n 'tooltip.microphone.active': 'Stop listening',\n 'tooltip.microphone.inactive': 'Use microphone',\n 'tooltip.expandHistoryPanel': 'Expand chat history',\n 'tooltip.collapseHistoryPanel': 'Collapse chat history',\n 'tooltip.quickNewChat': 'New chat',\n 'button.newChat': 'New chat',\n 'tooltip.chatHistoryMenu': 'Chat history menu',\n 'tooltip.responseRecorded': 'Response recorded',\n 'tooltip.backToTop': 'Back to top',\n 'tooltip.backToBottom': 'Back to bottom',\n 'tooltip.settings': 'Chatbot options',\n 'tooltip.close': 'Close',\n 'tooltip.fab.open': 'Open intelligent assistant',\n 'tooltip.fab.close': 'Close intelligent assistant',\n\n // Attach menu\n 'attach.menu.title': 'Attach',\n 'attach.menu.description': 'Attach a JSON, YAML, or TXT file',\n\n // Modal titles\n 'modal.title.preview': 'Preview attachment',\n 'modal.title.edit': 'Edit attachment',\n\n // Alt texts for icons\n 'icon.lightspeed.alt': 'intelligent assistant icon',\n 'icon.permissionRequired.alt': 'permission required icon',\n\n // Message utilities\n 'message.options.label': 'Options',\n\n // File attachment errors\n 'file.upload.error.alreadyExists': 'File already exists.',\n 'file.upload.error.multipleFiles': 'Uploaded more than one file.',\n 'file.upload.error.unsupportedType':\n 'Unsupported file type. Supported types are: .txt, .yaml, and .json.',\n 'file.upload.error.fileTooLarge':\n 'Your file size is too large. Please ensure that your file is less than 25 MB.',\n 'file.upload.error.readFailed': 'Failed to read file: {{errorMessage}}',\n\n // Developer error messages\n 'error.context.fileAttachment':\n 'useFileAttachmentContext must be within a FileAttachmentContextProvider',\n\n // Feedback actions\n 'feedback.form.title': 'Why did you choose this rating?',\n 'feedback.form.textAreaPlaceholder': 'Provide optional additional feedback',\n 'feedback.form.submitWord': 'Submit',\n 'feedback.tooltips.goodResponse': 'Good Response',\n 'feedback.tooltips.badResponse': 'Bad Response',\n 'feedback.tooltips.copied': 'Copied',\n 'feedback.tooltips.copy': 'Copy',\n 'feedback.tooltips.listening': 'Listening',\n 'feedback.tooltips.listen': 'Listen',\n 'feedback.quickResponses.positive.helpful': 'Helpful information',\n 'feedback.quickResponses.positive.easyToUnderstand': 'Easy to understand',\n 'feedback.quickResponses.positive.resolvedIssue': 'Resolved my issue',\n 'feedback.quickResponses.negative.didntAnswer': \"Didn't answer my question\",\n 'feedback.quickResponses.negative.hardToUnderstand': 'Hard to understand',\n 'feedback.quickResponses.negative.notHelpful': 'Not Helpful',\n 'feedback.completion.title': 'Feedback submitted',\n 'feedback.completion.body':\n \"We've received your response. Thank you for sharing your feedback!\",\n\n // Conversation categorization\n 'conversation.category.pinnedChats': 'Pinned chats',\n 'conversation.category.recent': 'Chats',\n\n // lightspeed settings\n 'settings.pinned.enable': 'Enable pinned chats',\n 'settings.pinned.disable': 'Disable pinned chats',\n 'settings.pinned.enabled.description': 'Pinned chats are currently enabled',\n 'settings.pinned.disabled.description': 'Pinned chats are currently disabled',\n 'settings.mcp.label': 'MCP settings',\n 'settings.mcp.badge': 'New',\n\n // MCP settings\n 'mcp.settings.title': 'MCP servers',\n 'mcp.settings.selectedCount': '{{selectedCount}} of {{totalCount}} selected',\n 'mcp.settings.closeAriaLabel': 'Close MCP settings',\n 'mcp.settings.readOnlyAccess': 'You have read-only access to MCP servers.',\n 'mcp.settings.tableAriaLabel': 'MCP servers table',\n 'mcp.settings.enabled': 'Enabled',\n 'mcp.settings.name': 'Name',\n 'mcp.settings.status': 'Status',\n 'mcp.settings.edit': 'Edit',\n 'mcp.settings.loading': 'Loading MCP servers...',\n 'mcp.settings.noneAvailable': 'No MCP servers available.',\n 'mcp.settings.status.disabled': 'Disabled',\n 'mcp.settings.status.tokenRequired': 'Token required',\n 'mcp.settings.status.failed': 'Failed',\n 'mcp.settings.status.oneTool': '{{count}} tool',\n 'mcp.settings.status.manyTools': '{{count}} tools',\n 'mcp.settings.status.unknown': 'Unknown',\n 'mcp.settings.modalDescriptionDcr':\n 'This server uses Dynamic Client Registration (DCR). Tokens are minted automatically using your Backstage identity — no manual token is needed.',\n 'mcp.settings.toggleServerAriaLabel': 'Toggle {{serverName}}',\n 'mcp.settings.editServerAriaLabel': 'Edit {{serverName}}',\n 'mcp.settings.configureServerTitle': 'Configure {{serverName}} server',\n 'mcp.settings.closeConfigureModalAriaLabel': 'Close configure modal',\n 'mcp.settings.modalDescription':\n 'Credentials are encrypted at rest and scoped to your profile. The intelligent assistant will operate with your exact permissions.',\n 'mcp.settings.savedToken': 'Saved token',\n 'mcp.settings.personalAccessToken': 'Personal Access Token',\n 'mcp.settings.usingAdminCredential':\n 'Using Administrator provided credential. Enter a personal token to override for your account.',\n 'mcp.settings.enterToken': 'Enter your token',\n 'mcp.settings.removePersonalToken': 'Remove personal token',\n 'mcp.settings.token.clearAriaLabel': 'Clear token input',\n 'mcp.settings.token.validating': 'Validating token...',\n 'mcp.settings.token.savingAndValidating': 'Saving and validating token...',\n 'mcp.settings.token.urlUnavailableForValidation':\n 'Unable to validate token because server URL is not available.',\n 'mcp.settings.token.invalidCredentials':\n 'Invalid credentials. Check server URL and token.',\n 'mcp.settings.token.validationFailed':\n 'Validation failed. Check server URL and token.',\n 'mcp.settings.token.connectionSuccessful': 'Connection successful',\n\n // Tool calling\n 'toolCall.header': 'Tool response: {{toolName}}',\n 'toolCall.thinking': 'Thought for {{seconds}} seconds',\n 'toolCall.executionTime': 'Execution time: ',\n 'toolCall.parameters': 'Parameters',\n 'toolCall.response': 'Response',\n 'toolCall.showMore': 'show more',\n 'toolCall.showLess': 'show less',\n 'toolCall.loading': 'Executing tool...',\n 'toolCall.executing': 'Executing tool...',\n 'toolCall.copyResponse': 'Copy response',\n 'toolCall.summary': \"Here's a summary of your response\",\n 'toolCall.mcpServer': 'MCP Server',\n // Display modes\n 'settings.displayMode.label': 'Display mode',\n 'settings.displayMode.overlay': 'Overlay',\n 'settings.displayMode.docked': 'Dock to window',\n 'settings.displayMode.fullscreen': 'Fullscreen',\n\n // Sort options\n 'sort.label': 'Sort conversations',\n 'sort.newest': 'Date (newest first)',\n 'sort.oldest': 'Date (oldest first)',\n 'sort.alphabeticalAsc': 'Name (A-Z)',\n 'sort.alphabeticalDesc': 'Name (Z-A)',\n // Sources\n 'sources.chip.label_one': '{{count}} Source',\n 'sources.chip.label_other': '{{count}} Sources',\n 'sources.modal.title': 'Sources',\n 'sources.modal.description':\n 'The following sources were used to generate this AI response and provide supporting information:',\n 'sources.popover.closeAriaLabel': 'Close sources',\n\n // Deep thinking\n 'reasoning.thinking': 'Show thinking',\n};\n\n/**\n * Translation Reference for Developer Hub Intelligent Assistant\n * @alpha\n **/\nexport const intelligentAssistantTranslationRef = createTranslationRef({\n id: 'plugin.intelligent-assistant',\n messages: intelligentAssistantMessages,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var SupportedFileType = /* @__PURE__ */ ((SupportedFileType2) => {
|
|
2
|
+
SupportedFileType2["JSON"] = "application/json";
|
|
3
|
+
SupportedFileType2["YAML"] = "application/x-yaml";
|
|
4
|
+
SupportedFileType2["TEXT"] = "text/plain";
|
|
5
|
+
return SupportedFileType2;
|
|
6
|
+
})(SupportedFileType || {});
|
|
7
|
+
|
|
8
|
+
export { SupportedFileType };
|
|
9
|
+
//# sourceMappingURL=types.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.esm.js","sources":["../src/types.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SourcesCardProps } from '@patternfly/chatbot';\nimport { AlertProps } from '@patternfly/react-core';\n\nexport type Conversations = {\n [key: string]: {\n user: string;\n bot: string;\n model: string;\n loading: boolean;\n timestamp: string;\n botTimestamp: string;\n error?: AlertProps;\n };\n};\n\n/**\n * @public\n * Referenced document metadata\n */\nexport type ReferencedDocument = {\n doc_title: string;\n doc_url: string;\n doc_description?: string;\n};\n\n/**\n * @public\n * List of referenced documents\n */\nexport type ReferencedDocuments = ReferencedDocument[];\n\n/**\n * @public\n * LCS model type - embedding or llm\n */\nexport type LCSModelType = 'embedding' | 'llm';\n\n/**\n * @public\n * LCS model API model type\n */\nexport type LCSModelApiModelType = 'embedding' | 'llm';\n\n/**\n * @public\n * LCS Model interface\n */\nexport interface LCSModel {\n identifier: string;\n metadata: {\n embedding_dimension: number;\n };\n api_model_type: LCSModelApiModelType;\n provider_id: string;\n type: 'model';\n provider_resource_id: string;\n model_type: LCSModelType;\n}\nexport interface LCSConversation {\n provider: string;\n model: string;\n messages: BaseMessage[];\n started_at: string;\n completed_at: string;\n referenced_documents?: ReferencedDocuments;\n}\n\nexport interface LCSShield {\n identifier: string;\n provider_id: string;\n type: 'shield';\n params: {};\n provider_resource_id: string;\n}\n\n/**\n * @public\n * Base message interface for chat messages\n */\nexport interface BaseMessage {\n name: string;\n type: string;\n id: number;\n content: string;\n model: string;\n timestamp: string;\n sources?: SourcesCardProps;\n referenced_documents?: ReferencedDocuments;\n error?: AlertProps;\n}\n\n/**\n * @public\n * Conversation summary type\n */\nexport type ConversationSummary = {\n conversation_id: string;\n last_message_timestamp: number;\n topic_summary: string | null;\n};\n\nexport enum SupportedFileType {\n JSON = 'application/json',\n YAML = 'application/x-yaml',\n TEXT = 'text/plain',\n}\nexport interface FileContent {\n content: string;\n type: string;\n name: string;\n}\n\n/**\n * @public\n * Attachment type for file attachments in chat messages\n */\nexport type Attachment = {\n attachment_type: string;\n content_type: string;\n content: string;\n};\n\n/**\n * @public\n * List of conversation summaries\n */\nexport type ConversationList = ConversationSummary[];\n\nexport type SamplePrompt =\n | {\n title: string;\n message: string;\n }\n | {\n titleKey: string;\n messageKey: string;\n };\n\nexport type SamplePrompts = SamplePrompt[];\n\n/**\n * @public\n * Feedback capture payload for user feedback on AI responses\n */\nexport type CaptureFeedback = {\n conversation_id: string;\n user_question: string;\n llm_response: string;\n user_feedback: string;\n sentiment: number;\n};\n\n// Tool Calling Types\nexport interface ToolCall {\n id: number | string;\n toolName: string;\n description?: string;\n arguments: Record<string, any>;\n response?: string;\n startTime: number;\n endTime?: number;\n executionTime?: number; // in seconds\n isLoading: boolean;\n}\n\nexport interface ToolCallEvent {\n id: number | string;\n token?: string | { tool_name: string; arguments: Record<string, any> };\n name?: string;\n args?: Record<string, any>;\n arguments?: Record<string, any>;\n type?: string;\n}\n\nexport interface ToolResultEvent {\n id: number | string;\n token?: { tool_name: string; response: string };\n status?: string;\n content?: string;\n}\n\n/**\n * @public\n * Notebook session metadata from AI Notebooks API\n */\nexport type NotebookSessionMetadata = {\n category?: string;\n tags?: string[];\n project?: string;\n document_ids?: string[];\n conversation_id?: string;\n};\n\n/**\n * @public\n * Notebook session from AI Notebooks API\n */\nexport type NotebookSession = {\n session_id: string;\n user_id: string;\n name: string;\n description?: string;\n created_at: string;\n updated_at: string;\n document_count?: number;\n metadata?: NotebookSessionMetadata;\n};\n\n/**\n * @public\n * Supported file types for notebook document uploads\n */\nexport type NotebookDocumentSourceType =\n | 'text'\n | 'pdf'\n | 'md'\n | 'json'\n | 'yaml'\n | 'log';\n\n/**\n * @public\n * Document within a notebook session\n */\nexport type SessionDocument = {\n document_id: string;\n title: string;\n session_id: string;\n user_id: string;\n source_type: NotebookDocumentSourceType;\n created_at: string;\n metadata?: Record<string, any>;\n};\n\n/**\n * @public\n * Response from the document upload endpoint (HTTP 202)\n */\nexport type UploadDocumentResponse = {\n status: 'processing';\n document_id: string;\n session_id: string;\n message: string;\n};\n\n/**\n * @public\n * Document processing status from the status polling endpoint\n */\nexport type DocumentStatus = {\n status: 'in_progress' | 'completed' | 'failed' | 'cancelled';\n document_id: string;\n session_id: string;\n error?: string;\n};\n\n/**\n * @public\n * Response wrapper for session creation\n */\nexport type SessionResponse = {\n status: 'success' | 'error';\n session?: NotebookSession;\n message?: string;\n error?: string;\n};\n\n/**\n * @public\n * Response wrapper for document list\n */\nexport type DocumentListResponse = {\n status: 'success' | 'error';\n session_id?: string;\n documents?: SessionDocument[];\n count?: number;\n error?: string;\n};\n"],"names":["SupportedFileType"],"mappings":"AAqHO,IAAK,iBAAA,qBAAAA,kBAAAA,KAAL;AACL,EAAAA,mBAAA,MAAA,CAAA,GAAO,kBAAA;AACP,EAAAA,mBAAA,MAAA,CAAA,GAAO,oBAAA;AACP,EAAAA,mBAAA,MAAA,CAAA,GAAO,YAAA;AAHG,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SupportedFileType } from '../types.esm.js';
|
|
2
|
+
|
|
3
|
+
const isSupportedFileType = (file) => {
|
|
4
|
+
const isJson = file.type === SupportedFileType.JSON;
|
|
5
|
+
const isYaml = file.type === SupportedFileType.YAML || file.name.endsWith(".yaml") || file.name.endsWith(".yml");
|
|
6
|
+
const isText = file.type === SupportedFileType.TEXT;
|
|
7
|
+
return isJson || isYaml || isText;
|
|
8
|
+
};
|
|
9
|
+
const readFileAsText = (file) => new Promise((resolve, reject) => {
|
|
10
|
+
const reader = new FileReader();
|
|
11
|
+
reader.onload = () => resolve(reader.result);
|
|
12
|
+
reader.onerror = () => reject(reader.error);
|
|
13
|
+
reader.readAsText(file);
|
|
14
|
+
});
|
|
15
|
+
const sanitizeFileType = (fileContent) => {
|
|
16
|
+
switch (fileContent.type) {
|
|
17
|
+
case SupportedFileType.YAML:
|
|
18
|
+
return "application/yaml";
|
|
19
|
+
default:
|
|
20
|
+
return fileContent.type;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const getAttachments = (fileContents) => fileContents.map((file) => ({
|
|
24
|
+
attachment_type: "api object",
|
|
25
|
+
content_type: sanitizeFileType(file),
|
|
26
|
+
content: fileContents.find((f) => f.name === file.name)?.content || ""
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
export { getAttachments, isSupportedFileType, readFileAsText, sanitizeFileType };
|
|
30
|
+
//# sourceMappingURL=attachment-utils.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-utils.esm.js","sources":["../../src/utils/attachment-utils.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Attachment, FileContent, SupportedFileType } from '../types';\n\nexport const isSupportedFileType = (file: File) => {\n const isJson = file.type === SupportedFileType.JSON;\n const isYaml =\n file.type === SupportedFileType.YAML ||\n file.name.endsWith('.yaml') ||\n file.name.endsWith('.yml');\n const isText = file.type === SupportedFileType.TEXT;\n\n return isJson || isYaml || isText;\n};\n\nexport const readFileAsText = (file: File): Promise<string | null> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsText(file);\n });\n\nexport const sanitizeFileType = (fileContent: FileContent): string => {\n switch (fileContent.type) {\n case SupportedFileType.YAML:\n return 'application/yaml';\n default:\n return fileContent.type;\n }\n};\n\nexport const getAttachments = (fileContents: FileContent[]): Attachment[] =>\n fileContents.map(file => ({\n attachment_type: 'api object',\n content_type: sanitizeFileType(file),\n content: fileContents.find(f => f.name === file.name)?.content || '',\n }));\n"],"names":[],"mappings":";;AAiBO,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAe;AACjD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,KAAS,iBAAA,CAAkB,IAAA;AAC/C,EAAA,MAAM,MAAA,GACJ,IAAA,CAAK,IAAA,KAAS,iBAAA,CAAkB,IAAA,IAChC,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IAC1B,IAAA,CAAK,IAAA,CAAK,SAAS,MAAM,CAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,KAAS,iBAAA,CAAkB,IAAA;AAE/C,EAAA,OAAO,UAAU,MAAA,IAAU,MAAA;AAC7B;AAEO,MAAM,iBAAiB,CAAC,IAAA,KAC7B,IAAI,OAAA,CAAQ,CAAC,SAAS,MAAA,KAAW;AAC/B,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,EAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAgB,CAAA;AACrD,EAAA,MAAA,CAAO,OAAA,GAAU,MAAM,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,EAAA,MAAA,CAAO,WAAW,IAAI,CAAA;AACxB,CAAC;AAEI,MAAM,gBAAA,GAAmB,CAAC,WAAA,KAAqC;AACpE,EAAA,QAAQ,YAAY,IAAA;AAAM,IACxB,KAAK,iBAAA,CAAkB,IAAA;AACrB,MAAA,OAAO,kBAAA;AAAA,IACT;AACE,MAAA,OAAO,WAAA,CAAY,IAAA;AAAA;AAEzB;AAEO,MAAM,cAAA,GAAiB,CAAC,YAAA,KAC7B,YAAA,CAAa,IAAI,CAAA,IAAA,MAAS;AAAA,EACxB,eAAA,EAAiB,YAAA;AAAA,EACjB,YAAA,EAAc,iBAAiB,IAAI,CAAA;AAAA,EACnC,OAAA,EAAS,aAAa,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,IAAW;AACpE,CAAA,CAAE;;;;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const prettyPrintToolJson = (value) => {
|
|
2
|
+
if (value === null) {
|
|
3
|
+
return "null";
|
|
4
|
+
}
|
|
5
|
+
if (typeof value === "object") {
|
|
6
|
+
return JSON.stringify(value, null, 2);
|
|
7
|
+
}
|
|
8
|
+
if (typeof value === "string") {
|
|
9
|
+
try {
|
|
10
|
+
const inner = JSON.parse(value);
|
|
11
|
+
if (inner !== null && typeof inner === "object") {
|
|
12
|
+
return JSON.stringify(inner, null, 2);
|
|
13
|
+
}
|
|
14
|
+
} catch {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
};
|
|
21
|
+
const tryParseJson = (value) => {
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(value);
|
|
24
|
+
} catch {
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const deepParseJson = (value) => {
|
|
29
|
+
let current = value;
|
|
30
|
+
while (typeof current === "string") {
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(current);
|
|
33
|
+
if (parsed === current) break;
|
|
34
|
+
current = parsed;
|
|
35
|
+
} catch {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return current;
|
|
40
|
+
};
|
|
41
|
+
const formatPayload = (payload) => {
|
|
42
|
+
if (typeof payload === "string") {
|
|
43
|
+
const nested = deepParseJson(payload);
|
|
44
|
+
if (nested !== void 0 && nested !== null && typeof nested === "object") {
|
|
45
|
+
return `\`\`\`json
|
|
46
|
+
${JSON.stringify(nested, null, 2)}
|
|
47
|
+
\`\`\``;
|
|
48
|
+
}
|
|
49
|
+
if (payload.length > 120 || payload.includes("\n")) {
|
|
50
|
+
return `\`\`\`
|
|
51
|
+
${payload}
|
|
52
|
+
\`\`\``;
|
|
53
|
+
}
|
|
54
|
+
return payload;
|
|
55
|
+
}
|
|
56
|
+
const body = prettyPrintToolJson(payload);
|
|
57
|
+
return `\`\`\`json
|
|
58
|
+
${body}
|
|
59
|
+
\`\`\``;
|
|
60
|
+
};
|
|
61
|
+
const STATUS_PREFIX_REGEX = /^\[([^\]]+)\]\s+([\s\S]+)$/;
|
|
62
|
+
const extractToolResultPayload = (raw) => {
|
|
63
|
+
const trimmed = raw.trim();
|
|
64
|
+
const match = STATUS_PREFIX_REGEX.exec(trimmed);
|
|
65
|
+
if (match) {
|
|
66
|
+
const [, , payload] = match;
|
|
67
|
+
const parsed2 = tryParseJson(payload.trim());
|
|
68
|
+
if (parsed2 !== void 0) {
|
|
69
|
+
return parsed2;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const jsonSegment = trimmed.startsWith("data:") ? trimmed.slice("data:".length).trim() : trimmed;
|
|
73
|
+
const parsed = tryParseJson(jsonSegment);
|
|
74
|
+
if (!parsed || typeof parsed !== "object") {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
const parsedRecord = parsed;
|
|
78
|
+
if (parsedRecord.event === "tool_result" && parsedRecord.data && typeof parsedRecord.data === "object" && "content" in parsedRecord.data) {
|
|
79
|
+
const content = parsedRecord.data.content;
|
|
80
|
+
if (typeof content === "string") {
|
|
81
|
+
return deepParseJson(content);
|
|
82
|
+
}
|
|
83
|
+
return content;
|
|
84
|
+
}
|
|
85
|
+
return parsed;
|
|
86
|
+
};
|
|
87
|
+
const formatToolResponseForMarkdown = (raw) => {
|
|
88
|
+
if (!raw?.trim()) return "";
|
|
89
|
+
if (/^```/.test(raw)) return raw;
|
|
90
|
+
const payload = extractToolResultPayload(raw);
|
|
91
|
+
if (payload !== void 0) {
|
|
92
|
+
return formatPayload(payload);
|
|
93
|
+
}
|
|
94
|
+
return formatPayload(raw);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export { formatToolResponseForMarkdown };
|
|
98
|
+
//# sourceMappingURL=formatToolResponseForMarkdown.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatToolResponseForMarkdown.esm.js","sources":["../../src/utils/formatToolResponseForMarkdown.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst prettyPrintToolJson = (value: unknown): string => {\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'object') {\n return JSON.stringify(value, null, 2);\n }\n if (typeof value === 'string') {\n try {\n const inner = JSON.parse(value);\n if (inner !== null && typeof inner === 'object') {\n return JSON.stringify(inner, null, 2);\n }\n } catch {\n return value;\n }\n return value;\n }\n return JSON.stringify(value);\n};\n\nconst tryParseJson = (value: string) => {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n};\n\nconst deepParseJson = (value: unknown): unknown => {\n let current = value;\n\n while (typeof current === 'string') {\n try {\n const parsed = JSON.parse(current);\n\n // stop if parsing doesn't change type\n if (parsed === current) break;\n\n current = parsed;\n } catch {\n break;\n }\n }\n\n return current;\n};\n\nconst formatPayload = (payload: unknown): string => {\n if (typeof payload === 'string') {\n const nested = deepParseJson(payload);\n if (nested !== undefined && nested !== null && typeof nested === 'object') {\n return `\\`\\`\\`json\\n${JSON.stringify(nested, null, 2)}\\n\\`\\`\\``;\n }\n if (payload.length > 120 || payload.includes('\\n')) {\n return `\\`\\`\\`\\n${payload}\\n\\`\\`\\``;\n }\n return payload;\n }\n\n const body = prettyPrintToolJson(payload);\n return `\\`\\`\\`json\\n${body}\\n\\`\\`\\``;\n};\n\nconst STATUS_PREFIX_REGEX = /^\\[([^\\]]+)\\]\\s+([\\s\\S]+)$/;\n\nconst extractToolResultPayload = (raw: string): unknown | undefined => {\n const trimmed = raw.trim();\n\n const match = STATUS_PREFIX_REGEX.exec(trimmed);\n if (match) {\n const [, , payload] = match;\n\n const parsed = tryParseJson(payload.trim());\n if (parsed !== undefined) {\n return parsed;\n }\n }\n\n const jsonSegment = trimmed.startsWith('data:')\n ? trimmed.slice('data:'.length).trim()\n : trimmed;\n\n const parsed = tryParseJson(jsonSegment);\n if (!parsed || typeof parsed !== 'object') {\n return undefined;\n }\n\n const parsedRecord = parsed as Record<string, unknown>;\n\n if (\n parsedRecord.event === 'tool_result' &&\n parsedRecord.data &&\n typeof parsedRecord.data === 'object' &&\n 'content' in parsedRecord.data\n ) {\n const content = (parsedRecord.data as Record<string, unknown>).content;\n\n if (typeof content === 'string') {\n return deepParseJson(content);\n }\n\n return content;\n }\n\n return parsed;\n};\n\nexport const formatToolResponseForMarkdown = (raw: string): string => {\n if (!raw?.trim()) return '';\n\n if (/^```/.test(raw)) return raw;\n\n const payload = extractToolResultPayload(raw);\n\n if (payload !== undefined) {\n return formatPayload(payload);\n }\n\n return formatPayload(raw);\n};\n"],"names":["parsed"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createGenerateClassName as createGenerateClassName$1 } from '@material-ui/core/styles';
|
|
2
|
+
import { createGenerateClassName } from '@mui/styles';
|
|
3
|
+
|
|
4
|
+
const generateClassName = createGenerateClassName({
|
|
5
|
+
seed: "intelligent-assistant"
|
|
6
|
+
});
|
|
7
|
+
const generateClassNameV4 = createGenerateClassName$1({
|
|
8
|
+
seed: "intelligent-assistant"
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export { generateClassName, generateClassNameV4 };
|
|
12
|
+
//# sourceMappingURL=generateClassName.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateClassName.esm.js","sources":["../../src/utils/generateClassName.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createGenerateClassName as createGenerateClassNameV4 } from '@material-ui/core/styles';\nimport { createGenerateClassName } from '@mui/styles';\n\nexport const generateClassName = createGenerateClassName({\n seed: 'intelligent-assistant',\n});\n\nexport const generateClassNameV4 = createGenerateClassNameV4({\n seed: 'intelligent-assistant',\n});\n"],"names":["createGenerateClassNameV4"],"mappings":";;;AAmBO,MAAM,oBAAoB,uBAAA,CAAwB;AAAA,EACvD,IAAA,EAAM;AACR,CAAC;AAEM,MAAM,sBAAsBA,yBAAA,CAA0B;AAAA,EAC3D,IAAA,EAAM;AACR,CAAC;;;;"}
|