@red-hat-developer-hub/backstage-plugin-intelligent-assistant 5.2.0 → 5.3.1

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.
Files changed (106) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +14 -2
  3. package/dist/alpha.d.ts +24 -0
  4. package/dist/components/AttachmentContext.esm.js +1 -1
  5. package/dist/components/ChatLoadingFallback.esm.js +37 -0
  6. package/dist/components/ChatLoadingFallback.esm.js.map +1 -0
  7. package/dist/components/CollapsedHistoryStrip.esm.js +1 -1
  8. package/dist/components/LightSpeedChat.esm.js +76 -29
  9. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  10. package/dist/components/LightspeedChatBox.esm.js +2 -2
  11. package/dist/components/LightspeedChatBoxHeader.esm.js +30 -2
  12. package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
  13. package/dist/components/LightspeedChatContainer.esm.js +20 -4
  14. package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
  15. package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
  16. package/dist/components/LightspeedDrawerProvider.esm.js +11 -25
  17. package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
  18. package/dist/components/LightspeedFABContent.esm.js +14 -2
  19. package/dist/components/LightspeedFABContent.esm.js.map +1 -1
  20. package/dist/components/LightspeedOverlayChat.esm.js +39 -0
  21. package/dist/components/LightspeedOverlayChat.esm.js.map +1 -0
  22. package/dist/components/McpConfigureServerModal.esm.js +2 -2
  23. package/dist/components/MessageBarModelSelector.esm.js +105 -13
  24. package/dist/components/MessageBarModelSelector.esm.js.map +1 -1
  25. package/dist/components/ScreenContextChip.esm.js +172 -0
  26. package/dist/components/ScreenContextChip.esm.js.map +1 -0
  27. package/dist/components/ToastAlertGroup.esm.js +1 -1
  28. package/dist/components/criticalFabBundle.esm.js +3 -0
  29. package/dist/components/criticalFabBundle.esm.js.map +1 -0
  30. package/dist/components/loaders.esm.js +11 -0
  31. package/dist/components/loaders.esm.js.map +1 -0
  32. package/dist/components/notebooks/AddDocumentModal.esm.js +2 -2
  33. package/dist/components/notebooks/DocumentSidebar.esm.js +1 -1
  34. package/dist/components/notebooks/NotebookCard.esm.js +1 -1
  35. package/dist/components/notebooks/NotebookStreamProvider.esm.js +1 -1
  36. package/dist/components/notebooks/NotebookView.esm.js +3 -3
  37. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
  38. package/dist/components/notebooks/UploadResourceScreen.esm.js +1 -1
  39. package/dist/components/notebooks/notebookStreamStore.esm.js +1 -1
  40. package/dist/components/notebooks/notebookStreamStore.esm.js.map +1 -1
  41. package/dist/const.esm.js +9 -1
  42. package/dist/const.esm.js.map +1 -1
  43. package/dist/fabModule.esm.js +51 -0
  44. package/dist/fabModule.esm.js.map +1 -0
  45. package/dist/hooks/screenContextLabelSubscription.esm.js +113 -0
  46. package/dist/hooks/screenContextLabelSubscription.esm.js.map +1 -0
  47. package/dist/hooks/useConversationMessages.esm.js +2 -1
  48. package/dist/hooks/useConversationMessages.esm.js.map +1 -1
  49. package/dist/hooks/useDisplayModeSettings.esm.js +1 -1
  50. package/dist/hooks/useDisplayModeSettings.esm.js.map +1 -1
  51. package/dist/hooks/useLightspeedProviderState.esm.js +1 -2
  52. package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -1
  53. package/dist/hooks/useScreenContextLabelRevision.esm.js +13 -0
  54. package/dist/hooks/useScreenContextLabelRevision.esm.js.map +1 -0
  55. package/dist/hooks/useScreenContextSettings.esm.js +110 -0
  56. package/dist/hooks/useScreenContextSettings.esm.js.map +1 -0
  57. package/dist/hooks/useWindowLocation.esm.js +28 -0
  58. package/dist/hooks/useWindowLocation.esm.js.map +1 -0
  59. package/dist/index.d.ts +1 -15
  60. package/dist/index.esm.js +7 -69
  61. package/dist/index.esm.js.map +1 -1
  62. package/dist/intelligent-assistant-fab-module.d.ts +12 -4
  63. package/dist/intelligent-assistant-fab-module.esm.js +1 -1
  64. package/dist/intelligent-assistant-translations-module.d.ts +10 -4
  65. package/dist/intelligent-assistant-translations-module.esm.js +1 -1
  66. package/dist/lazy/LazyLightspeedChatDrawerContent.esm.js +13 -0
  67. package/dist/lazy/LazyLightspeedChatDrawerContent.esm.js.map +1 -0
  68. package/dist/lazy/LazyLightspeedFabRootWrapper.esm.js +17 -0
  69. package/dist/lazy/LazyLightspeedFabRootWrapper.esm.js.map +1 -0
  70. package/dist/legacy.d.ts +14 -16
  71. package/dist/legacy.esm.js +2 -9
  72. package/dist/legacy.esm.js.map +1 -1
  73. package/dist/loadChatPatternflyStyles.esm.js +14 -0
  74. package/dist/loadChatPatternflyStyles.esm.js.map +1 -0
  75. package/dist/muiClassNameConfig.esm.js +6 -0
  76. package/dist/muiClassNameConfig.esm.js.map +1 -0
  77. package/dist/plugin.esm.js +4 -4
  78. package/dist/plugin.esm.js.map +1 -1
  79. package/dist/translations/de.esm.js +24 -0
  80. package/dist/translations/de.esm.js.map +1 -1
  81. package/dist/translations/es.esm.js +24 -0
  82. package/dist/translations/es.esm.js.map +1 -1
  83. package/dist/translations/fr.esm.js +24 -0
  84. package/dist/translations/fr.esm.js.map +1 -1
  85. package/dist/translations/it.esm.js +24 -0
  86. package/dist/translations/it.esm.js.map +1 -1
  87. package/dist/translations/ja.esm.js +24 -0
  88. package/dist/translations/ja.esm.js.map +1 -1
  89. package/dist/translations/ref.esm.js +24 -0
  90. package/dist/translations/ref.esm.js.map +1 -1
  91. package/dist/translationsModule.esm.js +18 -0
  92. package/dist/translationsModule.esm.js.map +1 -0
  93. package/dist/types.esm.js.map +1 -1
  94. package/dist/utils/dom-selectors.esm.js +22 -2
  95. package/dist/utils/dom-selectors.esm.js.map +1 -1
  96. package/dist/utils/lightspeed-chatbox-message-utils.esm.js +145 -0
  97. package/dist/utils/lightspeed-chatbox-message-utils.esm.js.map +1 -0
  98. package/dist/utils/lightspeed-chatbox-utils.esm.js +20 -144
  99. package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
  100. package/dist/utils/screen-capture.esm.js +116 -0
  101. package/dist/utils/screen-capture.esm.js.map +1 -0
  102. package/dist/utils/screen-context-utils.esm.js +343 -0
  103. package/dist/utils/screen-context-utils.esm.js.map +1 -0
  104. package/dist/utils/sensitive-data-redactor.esm.js +39 -1
  105. package/dist/utils/sensitive-data-redactor.esm.js.map +1 -1
  106. package/package.json +3 -3
@@ -1 +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_one': '{{count}} Resource',\n 'notebooks.documents_other': '{{count}} Resources',\n 'notebooks.actions.rename': 'Rename',\n 'notebooks.actions.delete': 'Delete',\n 'notebooks.rename.inline.tooltip': 'Click to rename',\n 'notebooks.rename.inline.error': 'Failed to rename \"{{notebookName}}\".',\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_one': '{{count}} Resource',\n 'notebook.view.documents.count_other': '{{count}} Resources',\n 'notebook.view.documents.add': 'Add',\n 'notebook.view.upload.heading': 'Add a resource to get started',\n 'notebook.view.upload.action': 'Add 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 resources...',\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 resource',\n 'notebook.view.documents.maxReached':\n 'Maximum 10 resources are allowed. Delete a resource to upload a new resource.',\n 'notebook.view.documents.uploadsInProgress':\n 'Please wait for current uploads to complete before adding more resources.',\n 'notebook.upload.failed': '\"{{fileName}}\" upload failed.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Add resources',\n 'notebook.upload.modal.dragDropTitle':\n 'Drag and drop files here, or click to browse',\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.supportedFormats': 'Supported formats:',\n 'notebook.upload.modal.maxFileSize': 'Maximum file size is 25 MB.',\n 'notebook.upload.modal.selectedFiles': '{{count}} of {{max}} files selected',\n 'notebook.upload.modal.addButton': 'Add ({{count}})',\n 'notebook.upload.modal.addButtonEmpty': 'Add',\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': 'File already exists',\n 'notebook.overwrite.modal.title.one': 'File already exists',\n 'notebook.overwrite.modal.title.other': 'Files already exist',\n 'notebook.overwrite.modal.description':\n '{{duplicateCount}} files already exist in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.description.one':\n '{{duplicateCount}} file already exists in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.description.other':\n '{{duplicateCount}} files already exist in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.replace': 'Replace existing files',\n 'notebook.overwrite.modal.ignore': 'Ignore duplicated files',\n 'notebook.overwrite.modal.action': 'Upload ({{count}})',\n 'notebook.overwrite.modal.back': 'Back',\n 'notebook.document.rename': 'Rename',\n 'notebook.document.rename.tooltip': 'Click to rename',\n 'notebook.document.rename.error': 'Failed to rename \"{{documentName}}\".',\n 'notebook.document.rename.conflict': 'Name already exists.',\n 'notebook.document.rename.tooLong': 'Name too long (max 255).',\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 // 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:\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 // Model selector\n 'modelSelector.disabledTooltip':\n 'Each chat session supports only one model. To switch models, open a new chat.',\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\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 'conversation.category.savedPrompts': 'Saved prompts',\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.savedPrompts.enable': 'Enable saved prompts',\n 'settings.savedPrompts.disable': 'Disable saved prompts',\n 'settings.savedPrompts.enabled.description':\n 'Saved prompts are currently enabled',\n 'settings.savedPrompts.disabled.description':\n 'Saved prompts are currently disabled',\n 'settings.panel.title': 'Settings',\n 'settings.mcp.label': 'MCP and Prompt Settings',\n 'settings.prompt.label': 'Prompt 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.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': '{{serverName}} MCP server settings',\n 'mcp.settings.closeConfigureModalAriaLabel': 'Close configure modal',\n 'mcp.settings.modalDescription':\n 'Credentials are encrypted and operations use your exact permissions.',\n 'mcp.settings.authenticationToken': 'Authentication token',\n 'mcp.settings.modal.authenticationHeading': 'Authentication',\n 'mcp.settings.modal.credentialMode.organization':\n 'Use organization default token',\n 'mcp.settings.modal.credentialMode.organizationDescription':\n 'Uses the token configured by your administrator.',\n 'mcp.settings.modal.credentialMode.personal': 'Use personal token',\n 'mcp.settings.modal.toolsHeading': 'Tools ({{count}})',\n 'mcp.settings.modal.loadingTools': 'Loading tools...',\n 'mcp.settings.modal.fetchingStatus': 'Fetching status...',\n 'mcp.settings.modal.loadingStatus': 'Disconnecting...',\n 'mcp.settings.modal.tokenRemovedWarning':\n 'Token has been removed. To use this MCP server again, provide a new token.',\n 'mcp.settings.modal.noToolsAvailable': 'No tools available.',\n 'mcp.settings.modal.toolsLoadFailed': 'Failed to load tools.',\n 'mcp.settings.modal.enabledDescription':\n 'This server is active and available in chat.',\n 'mcp.settings.modal.enabledDescriptionOff':\n 'This server is disabled and unavailable in chat.',\n 'mcp.settings.modal.enabledDescriptionTokenRequired':\n 'This server is currently disabled. Provide a token to enable.',\n 'mcp.settings.savedToken': 'Saved token',\n 'mcp.settings.personalAccessToken': 'Personal Access Token',\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 // Saved prompts settings\n 'savedPrompts.tab.title': 'Saved prompts',\n 'savedPrompts.disabled.title': 'Saved prompts are disabled',\n 'savedPrompts.disabled.body':\n 'Saved prompts are hidden from the chat history panel. Enable them to display your prompts in the sidebar.',\n 'savedPrompts.disabled.enableLink': 'Enable saved prompts',\n 'savedPrompts.count.zero': 'No prompts',\n 'savedPrompts.count_one': '1 prompt',\n 'savedPrompts.count_other': '{{count}} prompts',\n 'savedPrompts.newPrompt': '+ New prompt',\n 'savedPrompts.form.titleLabel': 'Title',\n 'savedPrompts.form.titlePlaceholder': 'Prompt title',\n 'savedPrompts.form.contentLabel': 'Prompt',\n 'savedPrompts.form.contentPlaceholder': 'Prompt content',\n 'savedPrompts.form.save': 'Save',\n 'savedPrompts.form.cancel': 'Cancel',\n 'savedPrompts.validation.titleMaxLength':\n 'Title must be {{max}} characters or fewer.',\n 'savedPrompts.validation.contentMaxLength':\n 'Prompt must be {{max}} characters or fewer.',\n 'savedPrompts.limitReached':\n 'Prompt limit reached. Delete an existing prompt to create a new one.',\n 'savedPrompts.actions.apply': 'Apply in input box',\n 'savedPrompts.actions.send': 'Send directly',\n 'savedPrompts.actions.sendDisabledStreaming': 'Wait for response to finish',\n 'savedPrompts.actions.delete': 'Delete',\n 'savedPrompts.actions.menuAriaLabel': 'Actions for {{name}}',\n 'savedPrompts.delete.confirm.title': \"Delete '{{name}}'?\",\n 'savedPrompts.delete.confirm.message':\n 'This saved prompt will be permanently removed.',\n 'savedPrompts.delete.confirm.action': 'Delete',\n 'savedPrompts.empty.description':\n 'Save frequently used prompts to quickly reuse them in your conversations without typing them again. Saved prompts also appear in the chat history panel for quick access.',\n 'savedPrompts.sidebar.showAll': 'Show all',\n 'savedPrompts.sidebar.showLess': 'Show less',\n 'savedPrompts.sidebar.openSettings': 'Open saved prompts settings',\n 'savedPrompts.sidebar.empty': 'No saved prompts yet',\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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"}
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_one': '{{count}} Resource',\n 'notebooks.documents_other': '{{count}} Resources',\n 'notebooks.actions.rename': 'Rename',\n 'notebooks.actions.delete': 'Delete',\n 'notebooks.rename.inline.tooltip': 'Click to rename',\n 'notebooks.rename.inline.error': 'Failed to rename \"{{notebookName}}\".',\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_one': '{{count}} Resource',\n 'notebook.view.documents.count_other': '{{count}} Resources',\n 'notebook.view.documents.add': 'Add',\n 'notebook.view.upload.heading': 'Add a resource to get started',\n 'notebook.view.upload.action': 'Add 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 resources...',\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 resource',\n 'notebook.view.documents.maxReached':\n 'Maximum 10 resources are allowed. Delete a resource to upload a new resource.',\n 'notebook.view.documents.uploadsInProgress':\n 'Please wait for current uploads to complete before adding more resources.',\n 'notebook.upload.failed': '\"{{fileName}}\" upload failed.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Add resources',\n 'notebook.upload.modal.dragDropTitle':\n 'Drag and drop files here, or click to browse',\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.supportedFormats': 'Supported formats:',\n 'notebook.upload.modal.maxFileSize': 'Maximum file size is 25 MB.',\n 'notebook.upload.modal.selectedFiles': '{{count}} of {{max}} files selected',\n 'notebook.upload.modal.addButton': 'Add ({{count}})',\n 'notebook.upload.modal.addButtonEmpty': 'Add',\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': 'File already exists',\n 'notebook.overwrite.modal.title.one': 'File already exists',\n 'notebook.overwrite.modal.title.other': 'Files already exist',\n 'notebook.overwrite.modal.description':\n '{{duplicateCount}} files already exist in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.description.one':\n '{{duplicateCount}} file already exists in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.description.other':\n '{{duplicateCount}} files already exist in this notebook. {{newCount}} new resources will be added regardless.',\n 'notebook.overwrite.modal.replace': 'Replace existing files',\n 'notebook.overwrite.modal.ignore': 'Ignore duplicated files',\n 'notebook.overwrite.modal.action': 'Upload ({{count}})',\n 'notebook.overwrite.modal.back': 'Back',\n 'notebook.document.rename': 'Rename',\n 'notebook.document.rename.tooltip': 'Click to rename',\n 'notebook.document.rename.error': 'Failed to rename \"{{documentName}}\".',\n 'notebook.document.rename.conflict': 'Name already exists.',\n 'notebook.document.rename.tooLong': 'Name too long (max 255).',\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 // 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:\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 // Model selector\n 'modelSelector.disabledTooltip':\n 'Each chat session supports only one model. To switch models, open a new chat.',\n 'modelSelector.visionScreenshot.line1': 'Image analysis supported.',\n 'modelSelector.visionScreenshot.line2':\n 'A screenshot will be included with your message.',\n 'modelSelector.visionScreenshot.ariaLabel': 'Vision model screenshot context',\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\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 'conversation.category.savedPrompts': 'Saved prompts',\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.savedPrompts.enable': 'Enable saved prompts',\n 'settings.savedPrompts.disable': 'Disable saved prompts',\n 'settings.savedPrompts.enabled.description':\n 'Saved prompts are currently enabled',\n 'settings.savedPrompts.disabled.description':\n 'Saved prompts are currently disabled',\n 'settings.screenContext.enable': 'Enable screen context',\n 'settings.screenContext.disable': 'Disable screen context',\n 'settings.screenContext.enabled.description':\n 'Screen context sharing is currently enabled',\n 'settings.screenContext.disabled.description':\n 'Screen context sharing is currently disabled',\n\n 'contextChip.label.paused': 'Context: paused',\n 'contextChip.label.unavailable': 'Context: unavailable',\n 'contextChip.label.softwareTemplates': 'Software templates',\n 'contextChip.tooltip.askAbout': 'Ask about {{label}}.',\n 'contextChip.tooltip.template': 'Ask how to fill in the {{label}} template.',\n 'contextChip.tooltip.search': 'Ask about your search: {{label}}.',\n 'contextChip.tooltip.paused':\n 'Screen context is paused. Click to resume sharing your current screen with the intelligent assistant.',\n 'contextChip.tooltip.unavailable':\n 'Screen context is not available in fullscreen mode. Switch to Overlay or Docked mode to enable it.',\n 'contextChip.tooltip.line2.fullContext':\n 'Page text and a screenshot will be sent with your message.',\n 'contextChip.tooltip.line2.adminLimited':\n 'Screen context sharing is limited by administrator settings.',\n 'contextChip.tooltip.line2.screenshotOnly':\n 'Text extraction is disabled by your administrator. Screenshot only.',\n 'contextChip.tooltip.line2.domOffNoVision':\n 'Text extraction is disabled by your administrator. Your model does not support image analysis.',\n 'contextChip.tooltip.line2.textOnlyNoVision':\n 'Text context only - your model does not support image analysis.',\n 'contextChip.tooltip.line2.textOnlyAdminScreenshotsOff':\n 'Text context only - screenshot capture is disabled by your administrator.',\n 'contextChip.tooltip.line2.textOnlyCombined':\n 'Text context only - your model does not support image analysis and screenshot capture is disabled by your administrator.',\n 'contextChip.aria.pause': 'Pause screen context: {{label}}',\n 'contextChip.aria.resume': 'Resume screen context',\n 'settings.panel.title': 'Settings',\n 'settings.mcp.label': 'MCP and Prompt Settings',\n 'settings.prompt.label': 'Prompt 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.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': '{{serverName}} MCP server settings',\n 'mcp.settings.closeConfigureModalAriaLabel': 'Close configure modal',\n 'mcp.settings.modalDescription':\n 'Credentials are encrypted and operations use your exact permissions.',\n 'mcp.settings.authenticationToken': 'Authentication token',\n 'mcp.settings.modal.authenticationHeading': 'Authentication',\n 'mcp.settings.modal.credentialMode.organization':\n 'Use organization default token',\n 'mcp.settings.modal.credentialMode.organizationDescription':\n 'Uses the token configured by your administrator.',\n 'mcp.settings.modal.credentialMode.personal': 'Use personal token',\n 'mcp.settings.modal.toolsHeading': 'Tools ({{count}})',\n 'mcp.settings.modal.loadingTools': 'Loading tools...',\n 'mcp.settings.modal.fetchingStatus': 'Fetching status...',\n 'mcp.settings.modal.loadingStatus': 'Disconnecting...',\n 'mcp.settings.modal.tokenRemovedWarning':\n 'Token has been removed. To use this MCP server again, provide a new token.',\n 'mcp.settings.modal.noToolsAvailable': 'No tools available.',\n 'mcp.settings.modal.toolsLoadFailed': 'Failed to load tools.',\n 'mcp.settings.modal.enabledDescription':\n 'This server is active and available in chat.',\n 'mcp.settings.modal.enabledDescriptionOff':\n 'This server is disabled and unavailable in chat.',\n 'mcp.settings.modal.enabledDescriptionTokenRequired':\n 'This server is currently disabled. Provide a token to enable.',\n 'mcp.settings.savedToken': 'Saved token',\n 'mcp.settings.personalAccessToken': 'Personal Access Token',\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 // Saved prompts settings\n 'savedPrompts.tab.title': 'Saved prompts',\n 'savedPrompts.disabled.title': 'Saved prompts are disabled',\n 'savedPrompts.disabled.body':\n 'Saved prompts are hidden from the chat history panel. Enable them to display your prompts in the sidebar.',\n 'savedPrompts.disabled.enableLink': 'Enable saved prompts',\n 'savedPrompts.count.zero': 'No prompts',\n 'savedPrompts.count_one': '1 prompt',\n 'savedPrompts.count_other': '{{count}} prompts',\n 'savedPrompts.newPrompt': '+ New prompt',\n 'savedPrompts.form.titleLabel': 'Title',\n 'savedPrompts.form.titlePlaceholder': 'Prompt title',\n 'savedPrompts.form.contentLabel': 'Prompt',\n 'savedPrompts.form.contentPlaceholder': 'Prompt content',\n 'savedPrompts.form.save': 'Save',\n 'savedPrompts.form.cancel': 'Cancel',\n 'savedPrompts.validation.titleMaxLength':\n 'Title must be {{max}} characters or fewer.',\n 'savedPrompts.validation.contentMaxLength':\n 'Prompt must be {{max}} characters or fewer.',\n 'savedPrompts.limitReached':\n 'Prompt limit reached. Delete an existing prompt to create a new one.',\n 'savedPrompts.actions.apply': 'Apply in input box',\n 'savedPrompts.actions.send': 'Send directly',\n 'savedPrompts.actions.sendDisabledStreaming': 'Wait for response to finish',\n 'savedPrompts.actions.delete': 'Delete',\n 'savedPrompts.actions.menuAriaLabel': 'Actions for {{name}}',\n 'savedPrompts.delete.confirm.title': \"Delete '{{name}}'?\",\n 'savedPrompts.delete.confirm.message':\n 'This saved prompt will be permanently removed.',\n 'savedPrompts.delete.confirm.action': 'Delete',\n 'savedPrompts.empty.description':\n 'Save frequently used prompts to quickly reuse them in your conversations without typing them again. Saved prompts also appear in the chat history panel for quick access.',\n 'savedPrompts.sidebar.showAll': 'Show all',\n 'savedPrompts.sidebar.showLess': 'Show less',\n 'savedPrompts.sidebar.openSettings': 'Open saved prompts settings',\n 'savedPrompts.sidebar.empty': 'No saved prompts yet',\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,18 @@
1
+ import { createFrontendModule } from '@backstage/frontend-plugin-api';
2
+ import { TranslationBlueprint } from '@backstage/plugin-app-react';
3
+ import { lightspeedTranslations } from './translations/index.esm.js';
4
+
5
+ const intelligentAssistantTranslationsModule = createFrontendModule({
6
+ pluginId: "app",
7
+ extensions: [
8
+ TranslationBlueprint.make({
9
+ name: "intelligent-assistant-translations",
10
+ params: {
11
+ resource: lightspeedTranslations
12
+ }
13
+ })
14
+ ]
15
+ });
16
+
17
+ export { intelligentAssistantTranslationsModule };
18
+ //# sourceMappingURL=translationsModule.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translationsModule.esm.js","sources":["../src/translationsModule.tsx"],"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 { createFrontendModule } from '@backstage/frontend-plugin-api';\nimport { TranslationBlueprint } from '@backstage/plugin-app-react';\n\nimport { lightspeedTranslations } from './translations';\n\n/**\n * Translation wiring for the language selector (app-config `app.extensions`).\n *\n * @public\n */\nexport const intelligentAssistantTranslationsModule = createFrontendModule({\n pluginId: 'app',\n extensions: [\n TranslationBlueprint.make({\n name: 'intelligent-assistant-translations',\n params: {\n resource: lightspeedTranslations,\n },\n }),\n ],\n});\n"],"names":[],"mappings":";;;;AA0BO,MAAM,yCAAyC,oBAAA,CAAqB;AAAA,EACzE,QAAA,EAAU,KAAA;AAAA,EACV,UAAA,EAAY;AAAA,IACV,qBAAqB,IAAA,CAAK;AAAA,MACxB,IAAA,EAAM,oCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU;AAAA;AACZ,KACD;AAAA;AAEL,CAAC;;;;"}
@@ -1 +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 source?: 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 /**\n * Whether the model supports vision (JPEG image) input, set by the backend\n * GET /v1/models handler; absent if capability could not be determined.\n */\n supportsVision?: boolean;\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' | 'pdf' | 'md' | 'json' | 'yaml' | '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":"AA2HO,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;;;;"}
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 type { SourcesCardProps } from '@patternfly/chatbot';\nimport type { 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 source?: 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 /**\n * Whether the model supports vision (JPEG image) input, set by the backend\n * GET /v1/models handler; absent if capability could not be determined.\n */\n supportsVision?: boolean;\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' | 'pdf' | 'md' | 'json' | 'yaml' | '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":"AA2HO,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;;;;"}
@@ -17,9 +17,29 @@ const NOISE_SELECTORS = [
17
17
  ];
18
18
  const NOISE_SELECTOR = NOISE_SELECTORS.join(", ");
19
19
  const PLUGIN_NAME_SELECTOR = ".bui-PluginHeaderToolbarName";
20
+ const PLUGIN_HEADER_TOOLBAR_NAME_SELECTOR = '.bui-PluginHeaderToolbarName, [class*="bui-PluginHeaderToolbarName"]';
21
+ const PLUGIN_HEADER_BREADCRUMBS_SELECTOR = '#Breadcrumbs, nav[aria-label="Breadcrumbs"], nav[aria-label="breadcrumb" i], [class*="PluginHeaderBreadcrumbs"]';
20
22
  const PAGE_TITLE_SELECTOR = ".bui-HeaderTitle";
23
+ const PAGE_TITLE_SCOPED_SELECTORS = [
24
+ PAGE_TITLE_SELECTOR,
25
+ '[class*="bui-HeaderTitle"]'
26
+ ];
27
+ const TEMPLATE_INFO_CARD_TITLE_SELECTORS = [
28
+ '[class*="BackstageInfoCard-headerTitle"]',
29
+ '[class*="MuiCardHeader-title"]'
30
+ ];
31
+ const LEGACY_PAGE_TITLE_SELECTORS = [
32
+ '[data-testid="header-title"]',
33
+ '[class*="Header-title"]',
34
+ "header h1"
35
+ ];
36
+ const PAGE_CHROME_ROOT_SELECTORS = [
37
+ "#root main",
38
+ 'main[class*="BackstagePage-root"]',
39
+ "#root"
40
+ ];
21
41
  const ACTIVE_TAB_SELECTOR = '[role="tab"][aria-selected="true"]';
22
- const BREADCRUMB_SELECTOR = '[aria-label="breadcrumb"], [class*="MuiBreadcrumbs-root"], [class*="bui-HeaderBreadcrumb"]';
42
+ const BREADCRUMB_SELECTOR = '[aria-label="Breadcrumbs"], [aria-label="breadcrumb" i], [class*="MuiBreadcrumbs-root"], [class*="bui-HeaderBreadcrumb"], [class*="PluginHeaderBreadcrumbs"], #Breadcrumbs';
23
43
  const ACTIVE_NAV_SELECTOR = '[aria-current="page"]';
24
44
  const TAB_LIST_SELECTOR = '[role="tablist"]';
25
45
  const TAB_SELECTOR = '[role="tab"]';
@@ -87,5 +107,5 @@ const EMPTY_STATE_BODY_SELECTOR = '[class*="body1"]';
87
107
  const SHADOW_HOST_SELECTOR = '[data-testid="techdocs-native-shadowroot"], [class*="shadowDom" i]';
88
108
  const SHADOW_NOISE_SELECTOR = "style, script, link, noscript, svg, img, template";
89
109
 
90
- export { ACCORDION_DETAILS_SELECTOR, ACCORDION_ROOT_SELECTOR, ACCORDION_SUMMARY_CONTENT_SELECTOR, ACTIVE_NAV_SELECTOR, ACTIVE_TAB_SELECTOR, ALERT_SELECTOR, BREADCRUMB_SELECTOR, BUI_NAV_ITEM_SELECTOR, BUI_NAV_SELECTOR, CARD_ITEM_SELECTOR, CARD_LAYOUT_SELECTOR, CARD_ROOT_SELECTOR, CARD_TITLE_SELECTOR, CHIP_LABEL_SELECTOR, DIALOG_CONTENT_SELECTOR, DIALOG_TITLE_SELECTOR, DOCKED_DRAWER_BODY_CLASS, DRAWER_PAPER_SELECTOR, EMPTY_STATE_BODY_SELECTOR, EMPTY_STATE_SELECTOR, FILTER_BOX_SELECTOR, FILTER_CONTAINER_SELECTOR, FILTER_NAV_SELECTOR, FORM_CONTROL_LABEL_SELECTOR, FORM_CONTROL_SELECTOR, FORM_HTML_STRIP_SELECTOR, FORM_LABEL_SELECTOR, LIST_ITEM_TEXT_PRIMARY_SELECTOR, LIST_ITEM_TEXT_ROOT_SELECTOR, LIST_ITEM_TEXT_SECONDARY_SELECTOR, MENU_SELECTOR, MODAL_DIALOG_SELECTOR, NOISE_SELECTOR, NOISE_SELECTORS, PAGE_TITLE_SELECTOR, PAGINATION_ACTIONS_SELECTOR, PAGINATION_ROOT_SELECTOR, PLUGIN_NAME_SELECTOR, RECHARTS_LEGEND_SELECTOR, RJSF_FORM_SELECTOR, SEARCH_INPUT_SELECTOR, SELECTED_ITEM_SELECTOR, SELECT_DISPLAY_SELECTOR, SHADOW_HOST_SELECTOR, SHADOW_NOISE_SELECTOR, STATUS_INDICATOR_SELECTOR, STEPPER_ACTIVE_CLASS, STEPPER_COMPLETED_CLASS, STEPPER_LABEL_SELECTOR, STEPPER_ROOT_SELECTOR, TAB_LIST_SELECTOR, TAB_SELECTOR };
110
+ export { ACCORDION_DETAILS_SELECTOR, ACCORDION_ROOT_SELECTOR, ACCORDION_SUMMARY_CONTENT_SELECTOR, ACTIVE_NAV_SELECTOR, ACTIVE_TAB_SELECTOR, ALERT_SELECTOR, BREADCRUMB_SELECTOR, BUI_NAV_ITEM_SELECTOR, BUI_NAV_SELECTOR, CARD_ITEM_SELECTOR, CARD_LAYOUT_SELECTOR, CARD_ROOT_SELECTOR, CARD_TITLE_SELECTOR, CHIP_LABEL_SELECTOR, DIALOG_CONTENT_SELECTOR, DIALOG_TITLE_SELECTOR, DOCKED_DRAWER_BODY_CLASS, DRAWER_PAPER_SELECTOR, EMPTY_STATE_BODY_SELECTOR, EMPTY_STATE_SELECTOR, FILTER_BOX_SELECTOR, FILTER_CONTAINER_SELECTOR, FILTER_NAV_SELECTOR, FORM_CONTROL_LABEL_SELECTOR, FORM_CONTROL_SELECTOR, FORM_HTML_STRIP_SELECTOR, FORM_LABEL_SELECTOR, LEGACY_PAGE_TITLE_SELECTORS, LIST_ITEM_TEXT_PRIMARY_SELECTOR, LIST_ITEM_TEXT_ROOT_SELECTOR, LIST_ITEM_TEXT_SECONDARY_SELECTOR, MENU_SELECTOR, MODAL_DIALOG_SELECTOR, NOISE_SELECTOR, NOISE_SELECTORS, PAGE_CHROME_ROOT_SELECTORS, PAGE_TITLE_SCOPED_SELECTORS, PAGE_TITLE_SELECTOR, PAGINATION_ACTIONS_SELECTOR, PAGINATION_ROOT_SELECTOR, PLUGIN_HEADER_BREADCRUMBS_SELECTOR, PLUGIN_HEADER_TOOLBAR_NAME_SELECTOR, PLUGIN_NAME_SELECTOR, RECHARTS_LEGEND_SELECTOR, RJSF_FORM_SELECTOR, SEARCH_INPUT_SELECTOR, SELECTED_ITEM_SELECTOR, SELECT_DISPLAY_SELECTOR, SHADOW_HOST_SELECTOR, SHADOW_NOISE_SELECTOR, STATUS_INDICATOR_SELECTOR, STEPPER_ACTIVE_CLASS, STEPPER_COMPLETED_CLASS, STEPPER_LABEL_SELECTOR, STEPPER_ROOT_SELECTOR, TAB_LIST_SELECTOR, TAB_SELECTOR, TEMPLATE_INFO_CARD_TITLE_SELECTORS };
91
111
  //# sourceMappingURL=dom-selectors.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom-selectors.esm.js","sources":["../../src/utils/dom-selectors.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\n/**\n * Centralized CSS selectors for DOM extraction.\n * Library-specific selectors (MUI, BUI, PF) are grouped here so they can be\n * updated in one place when BUI equivalents land upstream.\n *\n * MUI selectors use [class*=\"...\"] because JSS emits hashed class names\n * (e.g. MuiFormControl-root-12213) that do not match exact class selectors.\n */\n\n// ── Noise / exclusion ──\n\nexport const NOISE_SELECTORS = [\n '.pf-chatbot',\n 'script',\n 'style',\n 'noscript',\n 'svg',\n 'canvas',\n 'img',\n 'video',\n 'iframe',\n '[aria-hidden=\"true\"]:not([aria-label^=\"Status\"])',\n '[data-screen-capture-exclude]',\n '[hidden]',\n 'footer',\n '[class*=\"MuiCollapse-hidden\"]',\n '[data-testid=\"techdocs-native-shadowroot\"]',\n] as const;\n\nexport const NOISE_SELECTOR = NOISE_SELECTORS.join(', ');\n\n// ── Header ──\n\nexport const PLUGIN_NAME_SELECTOR = '.bui-PluginHeaderToolbarName';\nexport const PAGE_TITLE_SELECTOR = '.bui-HeaderTitle';\nexport const ACTIVE_TAB_SELECTOR = '[role=\"tab\"][aria-selected=\"true\"]';\nexport const BREADCRUMB_SELECTOR =\n '[aria-label=\"breadcrumb\"], [class*=\"MuiBreadcrumbs-root\"], [class*=\"bui-HeaderBreadcrumb\"]';\nexport const ACTIVE_NAV_SELECTOR = '[aria-current=\"page\"]';\n\n// ── Tabs ──\n\nexport const TAB_LIST_SELECTOR = '[role=\"tablist\"]';\nexport const TAB_SELECTOR = '[role=\"tab\"]';\nexport const BUI_NAV_SELECTOR =\n 'nav[aria-label*=\"navigation\" i], nav[class*=\"bui-HeaderNav\"]';\nexport const BUI_NAV_ITEM_SELECTOR = 'a[class*=\"NavItem\"], a[href]';\n\n// ── Dialog / overlay ──\n\nexport const MODAL_DIALOG_SELECTOR = '[role=\"dialog\"][aria-modal=\"true\"]';\nexport const DIALOG_TITLE_SELECTOR =\n '[class*=\"MuiDialogTitle\"], [class*=\"bui-DialogHeaderTitle\"]';\nexport const DIALOG_CONTENT_SELECTOR =\n '[class*=\"MuiDialogContent\"], [class*=\"bui-DialogBody\"]';\nexport const DRAWER_PAPER_SELECTOR = '[class*=\"MuiDrawer-paper\"]';\nexport const DOCKED_DRAWER_BODY_CLASS = 'docked-drawer-open';\n\n// ── Alerts ──\n\nexport const ALERT_SELECTOR =\n '[role=\"alert\"], [aria-live=\"assertive\"], [class*=\"MuiAlert-root\"], [class*=\"bui-Alert\"]';\n\n// ── Stepper ──\n\nexport const STEPPER_ROOT_SELECTOR = '[class*=\"MuiStepper-root\"]';\nexport const STEPPER_LABEL_SELECTOR =\n '[class*=\"MuiStepLabel-label\"]:not([class*=\"labelContainer\"])';\nexport const STEPPER_ACTIVE_CLASS = 'Mui-active';\nexport const STEPPER_COMPLETED_CLASS = 'Mui-completed';\n\n// ── Status ──\n\nexport const STATUS_INDICATOR_SELECTOR = '[aria-label^=\"Status\"]';\n\n// ── Forms ──\n\nexport const RJSF_FORM_SELECTOR = 'form.rjsf, form[class*=\"rjsf\"]';\nexport const FORM_CONTROL_SELECTOR =\n '[class*=\"MuiFormControl-root\"], [class*=\"MuiTextField-root\"], [class*=\"bui-TextField\"]';\nexport const FORM_HELPER_SELECTOR =\n '[class*=\"MuiFormHelperText-root\"], [slot=\"description\"]';\nexport const AUTOCOMPLETE_ROOT_SELECTOR = '[class*=\"MuiAutocomplete-root\"]';\nexport const TYPOGRAPHY_SELECTOR = '[class*=\"MuiTypography\"]';\nexport const CHIP_LABEL_SELECTOR = '[class*=\"MuiChip-label\"]';\nexport const SELECT_DISPLAY_SELECTOR =\n '[class*=\"MuiSelect-select\"]:not([class*=\"MuiTablePagination-select\"])';\nexport const SELECT_NATIVE_INPUT_SELECTOR = '[class*=\"MuiSelect-nativeInput\"]';\nexport const FORM_CONTROL_LABEL_SELECTOR =\n '[class*=\"MuiFormControlLabel-label\"]';\nexport const FORM_LABEL_SELECTOR =\n '[class*=\"MuiFormLabel-root\"], [class*=\"MuiInputLabel-root\"]';\n\n/** Nodes stripped when serializing form controls to compact HTML */\nexport const FORM_HTML_STRIP_SELECTOR = [\n 'script',\n 'style',\n 'svg',\n 'input[aria-hidden=\"true\"]',\n '[aria-hidden=\"true\"]',\n '[class*=\"MuiTouchRipple-root\"]',\n '[class*=\"MuiInputAdornment-root\"]',\n 'fieldset',\n 'button',\n].join(', ');\n\n// ── Search ──\n\nexport const SEARCH_INPUT_SELECTOR =\n 'input[placeholder*=\"earch\" i], input[aria-label*=\"earch\" i], [aria-label=\"search\" i] input';\n\n// ── Filters ──\n\nexport const FILTER_CONTAINER_SELECTOR = '[data-testid*=\"filter\"]';\nexport const FILTER_NAV_SELECTOR =\n 'nav[aria-label*=\"filter\"], [class*=\"MuiAccordionDetails-root\"] nav';\nexport const ACCORDION_ROOT_SELECTOR = '[class*=\"MuiAccordion-root\"]';\nexport const ACCORDION_DETAILS_SELECTOR = '[class*=\"MuiAccordionDetails-root\"]';\nexport const ACCORDION_SUMMARY_CONTENT_SELECTOR =\n '[class*=\"MuiAccordionSummary-content\"]';\nexport const FILTER_BOX_SELECTOR = '[class*=\"MuiBox-root\"]';\nexport const SELECTED_ITEM_SELECTOR = '[class*=\"Mui-selected\"]';\nexport const LIST_ITEM_TEXT_PRIMARY_SELECTOR =\n '[class*=\"MuiListItemText-primary\"]';\nexport const LIST_ITEM_TEXT_SECONDARY_SELECTOR =\n '[class*=\"MuiListItemText-secondary\"]';\nexport const MENU_SELECTOR = 'ul[role=\"menu\"]';\nexport const CARD_ROOT_SELECTOR = '[class*=\"MuiCard-root\"]';\nexport const LIST_ITEM_TEXT_ROOT_SELECTOR = '[class*=\"MuiListItemText-root\"]';\n\n// ── Pagination ──\n\nexport const PAGINATION_ROOT_SELECTOR =\n '[class*=\"MuiTablePagination-root\"], [class*=\"TablePagination\"], [class*=\"bui-TablePagination\"]';\nexport const PAGINATION_ACTIONS_SELECTOR =\n '[class*=\"MuiTablePagination-actions\"] button:not([disabled]), [class*=\"PaginationActions\"] button:not([disabled])';\n\n// ── Cards / Dashboard layout ──\n\nexport const CARD_LAYOUT_SELECTOR = [\n '[class*=\"MuiMasonry-root\"]',\n '[class*=\"MuiGrid-container\"]',\n '[class*=\"pf-l-gallery\"]',\n '[class*=\"bui-Grid\"]',\n].join(', ');\n\nexport const CARD_ITEM_SELECTOR = [\n '[class*=\"MuiPaper-root\"]',\n '[class*=\"MuiCard-root\"]',\n '.pf-v5-c-card, [class*=\"pf-c-card\"]',\n '[class*=\"bui-Card\"]',\n].join(', ');\n\nexport const CARD_TITLE_SELECTOR =\n 'h3, h4, h5, h6, [class*=\"CardHeader-title\"]';\n\nexport const RECHARTS_LEGEND_SELECTOR =\n '.recharts-legend-wrapper p, .recharts-legend-wrapper span[class*=\"Text\"]';\n\n// ── Empty state ──\n\nexport const EMPTY_STATE_SELECTOR = '[class*=\"BackstageEmptyState\"]';\nexport const EMPTY_STATE_BODY_SELECTOR = '[class*=\"body1\"]';\n\n// ── Shadow DOM (TechDocs) ──\n\nexport const SHADOW_HOST_SELECTOR =\n '[data-testid=\"techdocs-native-shadowroot\"], [class*=\"shadowDom\" i]';\nexport const SHADOW_NOISE_SELECTOR =\n 'style, script, link, noscript, svg, img, template';\n"],"names":[],"mappings":"AA2BO,MAAM,eAAA,GAAkB;AAAA,EAC7B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,kDAAA;AAAA,EACA,+BAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,+BAAA;AAAA,EACA;AACF;AAEO,MAAM,cAAA,GAAiB,eAAA,CAAgB,IAAA,CAAK,IAAI;AAIhD,MAAM,oBAAA,GAAuB;AAC7B,MAAM,mBAAA,GAAsB;AAC5B,MAAM,mBAAA,GAAsB;AAC5B,MAAM,mBAAA,GACX;AACK,MAAM,mBAAA,GAAsB;AAI5B,MAAM,iBAAA,GAAoB;AAC1B,MAAM,YAAA,GAAe;AACrB,MAAM,gBAAA,GACX;AACK,MAAM,qBAAA,GAAwB;AAI9B,MAAM,qBAAA,GAAwB;AAC9B,MAAM,qBAAA,GACX;AACK,MAAM,uBAAA,GACX;AACK,MAAM,qBAAA,GAAwB;AAC9B,MAAM,wBAAA,GAA2B;AAIjC,MAAM,cAAA,GACX;AAIK,MAAM,qBAAA,GAAwB;AAC9B,MAAM,sBAAA,GACX;AACK,MAAM,oBAAA,GAAuB;AAC7B,MAAM,uBAAA,GAA0B;AAIhC,MAAM,yBAAA,GAA4B;AAIlC,MAAM,kBAAA,GAAqB;AAC3B,MAAM,qBAAA,GACX;AAKK,MAAM,mBAAA,GAAsB;AAC5B,MAAM,uBAAA,GACX;AAEK,MAAM,2BAAA,GACX;AACK,MAAM,mBAAA,GACX;AAGK,MAAM,wBAAA,GAA2B;AAAA,EACtC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,2BAAA;AAAA,EACA,sBAAA;AAAA,EACA,gCAAA;AAAA,EACA,mCAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,IAAI;AAIJ,MAAM,qBAAA,GACX;AAIK,MAAM,yBAAA,GAA4B;AAClC,MAAM,mBAAA,GACX;AACK,MAAM,uBAAA,GAA0B;AAChC,MAAM,0BAAA,GAA6B;AACnC,MAAM,kCAAA,GACX;AACK,MAAM,mBAAA,GAAsB;AAC5B,MAAM,sBAAA,GAAyB;AAC/B,MAAM,+BAAA,GACX;AACK,MAAM,iCAAA,GACX;AACK,MAAM,aAAA,GAAgB;AACtB,MAAM,kBAAA,GAAqB;AAC3B,MAAM,4BAAA,GAA+B;AAIrC,MAAM,wBAAA,GACX;AACK,MAAM,2BAAA,GACX;AAIK,MAAM,oBAAA,GAAuB;AAAA,EAClC,4BAAA;AAAA,EACA,8BAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,IAAI;AAEJ,MAAM,kBAAA,GAAqB;AAAA,EAChC,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qCAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,IAAI;AAEJ,MAAM,mBAAA,GACX;AAEK,MAAM,wBAAA,GACX;AAIK,MAAM,oBAAA,GAAuB;AAC7B,MAAM,yBAAA,GAA4B;AAIlC,MAAM,oBAAA,GACX;AACK,MAAM,qBAAA,GACX;;;;"}
1
+ {"version":3,"file":"dom-selectors.esm.js","sources":["../../src/utils/dom-selectors.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\n/**\n * Centralized CSS selectors for DOM extraction.\n * Library-specific selectors (MUI, BUI, PF) are grouped here so they can be\n * updated in one place when BUI equivalents land upstream.\n *\n * MUI selectors use [class*=\"...\"] because JSS emits hashed class names\n * (e.g. MuiFormControl-root-12213) that do not match exact class selectors.\n */\n\n// ── Noise / exclusion ──\n\nexport const NOISE_SELECTORS = [\n '.pf-chatbot',\n 'script',\n 'style',\n 'noscript',\n 'svg',\n 'canvas',\n 'img',\n 'video',\n 'iframe',\n '[aria-hidden=\"true\"]:not([aria-label^=\"Status\"])',\n '[data-screen-capture-exclude]',\n '[hidden]',\n 'footer',\n '[class*=\"MuiCollapse-hidden\"]',\n '[data-testid=\"techdocs-native-shadowroot\"]',\n] as const;\n\nexport const NOISE_SELECTOR = NOISE_SELECTORS.join(', ');\n\n// ── Header ──\n\nexport const PLUGIN_NAME_SELECTOR = '.bui-PluginHeaderToolbarName';\n/** BUI NFS plugin header name area (hashed class names). */\nexport const PLUGIN_HEADER_TOOLBAR_NAME_SELECTOR =\n '.bui-PluginHeaderToolbarName, [class*=\"bui-PluginHeaderToolbarName\"]';\n/** Breadcrumbs inside BUI plugin header toolbar (Settings → General, etc.). */\nexport const PLUGIN_HEADER_BREADCRUMBS_SELECTOR =\n '#Breadcrumbs, nav[aria-label=\"Breadcrumbs\"], nav[aria-label=\"breadcrumb\" i], [class*=\"PluginHeaderBreadcrumbs\"]';\nexport const PAGE_TITLE_SELECTOR = '.bui-HeaderTitle';\n\n/** BUI / NFS header title (class may be hashed). */\nexport const PAGE_TITLE_SCOPED_SELECTORS = [\n PAGE_TITLE_SELECTOR,\n '[class*=\"bui-HeaderTitle\"]',\n] as const;\n\n/** Software template entity page (scaffolder) info card title. */\nexport const TEMPLATE_INFO_CARD_TITLE_SELECTORS = [\n '[class*=\"BackstageInfoCard-headerTitle\"]',\n '[class*=\"MuiCardHeader-title\"]',\n] as const;\n\n/** Legacy Backstage core-components Header title. */\nexport const LEGACY_PAGE_TITLE_SELECTORS = [\n '[data-testid=\"header-title\"]',\n '[class*=\"Header-title\"]',\n 'header h1',\n] as const;\n\n/** Roots to search for page chrome (exclude Lightspeed overlay). */\nexport const PAGE_CHROME_ROOT_SELECTORS = [\n '#root main',\n 'main[class*=\"BackstagePage-root\"]',\n '#root',\n] as const;\nexport const ACTIVE_TAB_SELECTOR = '[role=\"tab\"][aria-selected=\"true\"]';\nexport const BREADCRUMB_SELECTOR =\n '[aria-label=\"Breadcrumbs\"], [aria-label=\"breadcrumb\" i], [class*=\"MuiBreadcrumbs-root\"], [class*=\"bui-HeaderBreadcrumb\"], [class*=\"PluginHeaderBreadcrumbs\"], #Breadcrumbs';\nexport const ACTIVE_NAV_SELECTOR = '[aria-current=\"page\"]';\n\n// ── Tabs ──\n\nexport const TAB_LIST_SELECTOR = '[role=\"tablist\"]';\nexport const TAB_SELECTOR = '[role=\"tab\"]';\nexport const BUI_NAV_SELECTOR =\n 'nav[aria-label*=\"navigation\" i], nav[class*=\"bui-HeaderNav\"]';\nexport const BUI_NAV_ITEM_SELECTOR = 'a[class*=\"NavItem\"], a[href]';\n\n// ── Dialog / overlay ──\n\nexport const MODAL_DIALOG_SELECTOR = '[role=\"dialog\"][aria-modal=\"true\"]';\nexport const DIALOG_TITLE_SELECTOR =\n '[class*=\"MuiDialogTitle\"], [class*=\"bui-DialogHeaderTitle\"]';\nexport const DIALOG_CONTENT_SELECTOR =\n '[class*=\"MuiDialogContent\"], [class*=\"bui-DialogBody\"]';\nexport const DRAWER_PAPER_SELECTOR = '[class*=\"MuiDrawer-paper\"]';\nexport const DOCKED_DRAWER_BODY_CLASS = 'docked-drawer-open';\n\n// ── Alerts ──\n\nexport const ALERT_SELECTOR =\n '[role=\"alert\"], [aria-live=\"assertive\"], [class*=\"MuiAlert-root\"], [class*=\"bui-Alert\"]';\n\n// ── Stepper ──\n\nexport const STEPPER_ROOT_SELECTOR = '[class*=\"MuiStepper-root\"]';\nexport const STEPPER_LABEL_SELECTOR =\n '[class*=\"MuiStepLabel-label\"]:not([class*=\"labelContainer\"])';\nexport const STEPPER_ACTIVE_CLASS = 'Mui-active';\nexport const STEPPER_COMPLETED_CLASS = 'Mui-completed';\n\n// ── Status ──\n\nexport const STATUS_INDICATOR_SELECTOR = '[aria-label^=\"Status\"]';\n\n// ── Forms ──\n\nexport const RJSF_FORM_SELECTOR = 'form.rjsf, form[class*=\"rjsf\"]';\nexport const FORM_CONTROL_SELECTOR =\n '[class*=\"MuiFormControl-root\"], [class*=\"MuiTextField-root\"], [class*=\"bui-TextField\"]';\nexport const FORM_HELPER_SELECTOR =\n '[class*=\"MuiFormHelperText-root\"], [slot=\"description\"]';\nexport const AUTOCOMPLETE_ROOT_SELECTOR = '[class*=\"MuiAutocomplete-root\"]';\nexport const TYPOGRAPHY_SELECTOR = '[class*=\"MuiTypography\"]';\nexport const CHIP_LABEL_SELECTOR = '[class*=\"MuiChip-label\"]';\nexport const SELECT_DISPLAY_SELECTOR =\n '[class*=\"MuiSelect-select\"]:not([class*=\"MuiTablePagination-select\"])';\nexport const SELECT_NATIVE_INPUT_SELECTOR = '[class*=\"MuiSelect-nativeInput\"]';\nexport const FORM_CONTROL_LABEL_SELECTOR =\n '[class*=\"MuiFormControlLabel-label\"]';\nexport const FORM_LABEL_SELECTOR =\n '[class*=\"MuiFormLabel-root\"], [class*=\"MuiInputLabel-root\"]';\n\n/** Nodes stripped when serializing form controls to compact HTML */\nexport const FORM_HTML_STRIP_SELECTOR = [\n 'script',\n 'style',\n 'svg',\n 'input[aria-hidden=\"true\"]',\n '[aria-hidden=\"true\"]',\n '[class*=\"MuiTouchRipple-root\"]',\n '[class*=\"MuiInputAdornment-root\"]',\n 'fieldset',\n 'button',\n].join(', ');\n\n// ── Search ──\n\nexport const SEARCH_INPUT_SELECTOR =\n 'input[placeholder*=\"earch\" i], input[aria-label*=\"earch\" i], [aria-label=\"search\" i] input';\n\n// ── Filters ──\n\nexport const FILTER_CONTAINER_SELECTOR = '[data-testid*=\"filter\"]';\nexport const FILTER_NAV_SELECTOR =\n 'nav[aria-label*=\"filter\"], [class*=\"MuiAccordionDetails-root\"] nav';\nexport const ACCORDION_ROOT_SELECTOR = '[class*=\"MuiAccordion-root\"]';\nexport const ACCORDION_DETAILS_SELECTOR = '[class*=\"MuiAccordionDetails-root\"]';\nexport const ACCORDION_SUMMARY_CONTENT_SELECTOR =\n '[class*=\"MuiAccordionSummary-content\"]';\nexport const FILTER_BOX_SELECTOR = '[class*=\"MuiBox-root\"]';\nexport const SELECTED_ITEM_SELECTOR = '[class*=\"Mui-selected\"]';\nexport const LIST_ITEM_TEXT_PRIMARY_SELECTOR =\n '[class*=\"MuiListItemText-primary\"]';\nexport const LIST_ITEM_TEXT_SECONDARY_SELECTOR =\n '[class*=\"MuiListItemText-secondary\"]';\nexport const MENU_SELECTOR = 'ul[role=\"menu\"]';\nexport const CARD_ROOT_SELECTOR = '[class*=\"MuiCard-root\"]';\nexport const LIST_ITEM_TEXT_ROOT_SELECTOR = '[class*=\"MuiListItemText-root\"]';\n\n// ── Pagination ──\n\nexport const PAGINATION_ROOT_SELECTOR =\n '[class*=\"MuiTablePagination-root\"], [class*=\"TablePagination\"], [class*=\"bui-TablePagination\"]';\nexport const PAGINATION_ACTIONS_SELECTOR =\n '[class*=\"MuiTablePagination-actions\"] button:not([disabled]), [class*=\"PaginationActions\"] button:not([disabled])';\n\n// ── Cards / Dashboard layout ──\n\nexport const CARD_LAYOUT_SELECTOR = [\n '[class*=\"MuiMasonry-root\"]',\n '[class*=\"MuiGrid-container\"]',\n '[class*=\"pf-l-gallery\"]',\n '[class*=\"bui-Grid\"]',\n].join(', ');\n\nexport const CARD_ITEM_SELECTOR = [\n '[class*=\"MuiPaper-root\"]',\n '[class*=\"MuiCard-root\"]',\n '.pf-v5-c-card, [class*=\"pf-c-card\"]',\n '[class*=\"bui-Card\"]',\n].join(', ');\n\nexport const CARD_TITLE_SELECTOR =\n 'h3, h4, h5, h6, [class*=\"CardHeader-title\"]';\n\nexport const RECHARTS_LEGEND_SELECTOR =\n '.recharts-legend-wrapper p, .recharts-legend-wrapper span[class*=\"Text\"]';\n\n// ── Empty state ──\n\nexport const EMPTY_STATE_SELECTOR = '[class*=\"BackstageEmptyState\"]';\nexport const EMPTY_STATE_BODY_SELECTOR = '[class*=\"body1\"]';\n\n// ── Shadow DOM (TechDocs) ──\n\nexport const SHADOW_HOST_SELECTOR =\n '[data-testid=\"techdocs-native-shadowroot\"], [class*=\"shadowDom\" i]';\nexport const SHADOW_NOISE_SELECTOR =\n 'style, script, link, noscript, svg, img, template';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ const getTimestampVariablesString = (v) => {
2
+ if (v < 10) {
3
+ return `0${v}`;
4
+ }
5
+ return `${v}`;
6
+ };
7
+ const isBlankLine = (line) => !line.trim();
8
+ const isOrderedListLine = (line) => /^\s*\d+\.\s/.test(line);
9
+ const isBulletListLine = (line) => /^\s*[-*+]\s/.test(line) || /^\s*\u2022(?:\s+|\S|$)/u.test(line);
10
+ const escapeBulletListMarker = (line) => {
11
+ if (/^\s*\u2022/u.test(line)) {
12
+ return line;
13
+ }
14
+ return line.replace(/^(\s*)([*+-])(\s)/, String.raw`$1\$2$3`);
15
+ };
16
+ const escapeOrderedListMarker = (line) => line.replace(/^(\s*)(\d+)\.(\s)/, String.raw`$1$2\.$3`);
17
+ const foldListWithIntro = (s, isListItemLine, escapeListLine) => {
18
+ const lines = s.split("\n");
19
+ let firstListIdx = -1;
20
+ for (let i = 0; i < lines.length; i++) {
21
+ const line = lines[i];
22
+ if (line !== void 0 && isListItemLine(line)) {
23
+ firstListIdx = i;
24
+ break;
25
+ }
26
+ }
27
+ if (firstListIdx < 0) {
28
+ return s;
29
+ }
30
+ const intro = lines.slice(0, firstListIdx);
31
+ if (intro.some(isBlankLine)) {
32
+ return s;
33
+ }
34
+ const rest = lines.slice(firstListIdx);
35
+ const restItems = rest.filter((l) => !isBlankLine(l));
36
+ if (restItems.length === 0 || !restItems.every(isListItemLine)) {
37
+ return s;
38
+ }
39
+ const escaped = restItems.map(escapeListLine);
40
+ if (intro.length === 0) {
41
+ return escaped.join(" \n");
42
+ }
43
+ return `${intro.join(" \n")}
44
+ ${escaped.join(" \n")}`;
45
+ };
46
+ const foldOrderedListWithIntro = (s) => foldListWithIntro(s, isOrderedListLine, escapeOrderedListMarker);
47
+ const foldBulletListWithIntro = (s) => foldListWithIntro(s, isBulletListLine, escapeBulletListMarker);
48
+ const normalizeChatUserInput = (input) => {
49
+ let s = input.replaceAll("\r\n", "\n").trim();
50
+ if (!s) {
51
+ return s;
52
+ }
53
+ s = s.replace(/\n{3,}/g, "\n\n");
54
+ s = s.replace(/\n\n(?=[ \t]*\d+\.\s)/gm, "\n");
55
+ s = s.replace(/\n\n(?=[ \t]*[-*+]\s)/gm, "\n");
56
+ s = s.replace(/\n\n(?=[ \t]*\u2022)/gm, "\n");
57
+ s = foldOrderedListWithIntro(s);
58
+ s = foldBulletListWithIntro(s);
59
+ return s.trim();
60
+ };
61
+ const getTimestamp = (unix_timestamp) => {
62
+ if (typeof unix_timestamp !== "number" || Number.isNaN(unix_timestamp)) {
63
+ console.error("Invalid Unix timestamp provided");
64
+ return "";
65
+ }
66
+ const a = new Date(unix_timestamp);
67
+ const month = getTimestampVariablesString(a.getMonth() + 1);
68
+ const year = a.getFullYear();
69
+ const date = getTimestampVariablesString(a.getDate());
70
+ const hour = getTimestampVariablesString(a.getHours());
71
+ const min = getTimestampVariablesString(a.getMinutes());
72
+ const sec = getTimestampVariablesString(a.getSeconds());
73
+ const time = `${date}/${month}/${year}, ${hour}:${min}:${sec}`;
74
+ return time;
75
+ };
76
+ const createMessage = ({
77
+ role,
78
+ name,
79
+ avatar,
80
+ isLoading = false,
81
+ content,
82
+ timestamp,
83
+ error,
84
+ sources,
85
+ toolCalls,
86
+ defaultUserName = "Guest"
87
+ }) => ({
88
+ role,
89
+ name: name || defaultUserName,
90
+ avatar,
91
+ isLoading,
92
+ content,
93
+ timestamp,
94
+ error,
95
+ sources,
96
+ toolCalls
97
+ });
98
+ const createUserMessage = (props) => createMessage({
99
+ ...props,
100
+ role: "user",
101
+ defaultUserName: props.defaultUserName
102
+ });
103
+ const createBotMessage = (props) => createMessage({
104
+ ...props,
105
+ role: "bot"
106
+ });
107
+ const getConversationsData = (conversation) => {
108
+ const [userMessage, botMessage] = conversation.messages || [];
109
+ return [
110
+ {
111
+ ...userMessage,
112
+ timestamp: getTimestamp(
113
+ conversation.started_at ? new Date(conversation.started_at).getTime() : Date.now()
114
+ )
115
+ },
116
+ {
117
+ ...botMessage,
118
+ timestamp: getTimestamp(
119
+ conversation.completed_at ? new Date(conversation.completed_at).getTime() : Date.now()
120
+ ),
121
+ referenced_documents: botMessage?.referenced_documents ?? []
122
+ }
123
+ ];
124
+ };
125
+ const transformDocumentsToSources = (referenced_documents) => {
126
+ if (!referenced_documents || referenced_documents?.length === 0) {
127
+ return void 0;
128
+ }
129
+ return {
130
+ sources: referenced_documents.map(
131
+ (doc) => ({
132
+ body: doc.doc_description,
133
+ title: doc.doc_title,
134
+ link: doc?.doc_url,
135
+ isExternal: !!doc?.doc_url,
136
+ ...doc.source ? {
137
+ ragSource: doc.source
138
+ } : {}
139
+ })
140
+ )
141
+ };
142
+ };
143
+
144
+ export { createBotMessage, createMessage, createUserMessage, getConversationsData, getTimestamp, getTimestampVariablesString, normalizeChatUserInput, transformDocumentsToSources };
145
+ //# sourceMappingURL=lightspeed-chatbox-message-utils.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightspeed-chatbox-message-utils.esm.js","sources":["../../src/utils/lightspeed-chatbox-message-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 */\n\n/**\n * Pure message helpers with no PatternFly CSS side effects.\n *\n * Kept separate from `lightspeed-chatbox-utils.tsx` so\n * `NotebookStreamProvider` (always mounted under the FAB drawer provider)\n * does not pull chatbot / react-core styles into the critical FAB graph.\n */\n\nimport type { SourcesCardProps } from '@patternfly/chatbot';\n\nimport type {\n BaseMessage,\n LCSConversation,\n ReferencedDocument,\n ReferencedDocuments,\n ToolCall,\n} from '../types';\n\nexport type SourceWithRagId = SourcesCardProps['sources'][number] & {\n /** Full LCORE RAG source id for chip-modal labels. */\n ragSource?: string;\n};\n\ntype MessageProps = {\n content: string;\n timestamp: string;\n name?: string;\n avatar?: string;\n isLoading?: boolean;\n error?: {\n title: string;\n };\n sources?: SourcesCardProps;\n toolCalls?: ToolCall[];\n};\n\nexport const getTimestampVariablesString = (v: number) => {\n if (v < 10) {\n return `0${v}`;\n }\n return `${v}`;\n};\n\nconst isBlankLine = (line: string) => !line.trim();\n\n/** Ordered list item at line start (CommonMark), ignoring leading spaces. */\nconst isOrderedListLine = (line: string) => /^\\s*\\d+\\.\\s/.test(line);\n\n/** ASCII bullets; also U+2022 (•) — not a CommonMark marker, but users paste it as a list. */\nconst isBulletListLine = (line: string) =>\n /^\\s*[-*+]\\s/.test(line) || /^\\s*\\u2022(?:\\s+|\\S|$)/u.test(line);\n\nconst escapeBulletListMarker = (line: string) => {\n if (/^\\s*\\u2022/u.test(line)) {\n return line;\n }\n return line.replace(/^(\\s*)([*+-])(\\s)/, String.raw`$1\\$2$3`);\n};\n\nconst escapeOrderedListMarker = (line: string) =>\n line.replace(/^(\\s*)(\\d+)\\.(\\s)/, String.raw`$1$2\\.$3`);\n\n/**\n * When intro lines (no blank lines among them) are followed by a contiguous run of\n * list lines, join intro + list into one Markdown paragraph using hard breaks and\n * per-line escaping so the block does not split awkwardly in the chat UI.\n */\nconst foldListWithIntro = (\n s: string,\n isListItemLine: (line: string) => boolean,\n escapeListLine: (line: string) => string,\n): string => {\n const lines = s.split('\\n');\n let firstListIdx = -1;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line !== undefined && isListItemLine(line)) {\n firstListIdx = i;\n break;\n }\n }\n if (firstListIdx < 0) {\n return s;\n }\n\n const intro = lines.slice(0, firstListIdx);\n if (intro.some(isBlankLine)) {\n return s;\n }\n\n const rest = lines.slice(firstListIdx);\n const restItems = rest.filter(l => !isBlankLine(l));\n if (restItems.length === 0 || !restItems.every(isListItemLine)) {\n return s;\n }\n\n const escaped = restItems.map(escapeListLine);\n if (intro.length === 0) {\n return escaped.join(' \\n');\n }\n return `${intro.join(' \\n')} \\n${escaped.join(' \\n')}`;\n};\n\nconst foldOrderedListWithIntro = (s: string) =>\n foldListWithIntro(s, isOrderedListLine, escapeOrderedListMarker);\n\nconst foldBulletListWithIntro = (s: string) =>\n foldListWithIntro(s, isBulletListLine, escapeBulletListMarker);\n\n/**\n * Trims user chat input and reduces blank lines that split Markdown blocks\n * (e.g. paragraph + blank line + ordered list) so PatternFly renders one user bubble.\n */\nexport const normalizeChatUserInput = (input: string): string => {\n let s = input.replaceAll('\\r\\n', '\\n').trim();\n if (!s) {\n return s;\n }\n // Use [ \\t]* (not \\s*) in lookaheads so newlines cannot participate in\n // quantifier backtracking (typescript:S8786).\n s = s.replace(/\\n{3,}/g, '\\n\\n');\n s = s.replace(/\\n\\n(?=[ \\t]*\\d+\\.\\s)/gm, '\\n');\n s = s.replace(/\\n\\n(?=[ \\t]*[-*+]\\s)/gm, '\\n');\n s = s.replace(/\\n\\n(?=[ \\t]*\\u2022)/gm, '\\n');\n s = foldOrderedListWithIntro(s);\n s = foldBulletListWithIntro(s);\n return s.trim();\n};\n\nexport const getTimestamp = (unix_timestamp: number) => {\n if (typeof unix_timestamp !== 'number' || Number.isNaN(unix_timestamp)) {\n // eslint-disable-next-line no-console\n console.error('Invalid Unix timestamp provided');\n return '';\n }\n\n const a = new Date(unix_timestamp);\n const month = getTimestampVariablesString(a.getMonth() + 1);\n const year = a.getFullYear();\n const date = getTimestampVariablesString(a.getDate());\n const hour = getTimestampVariablesString(a.getHours());\n const min = getTimestampVariablesString(a.getMinutes());\n const sec = getTimestampVariablesString(a.getSeconds());\n const time = `${date}/${month}/${year}, ${hour}:${min}:${sec}`;\n return time;\n};\n\nexport const createMessage = ({\n role,\n name,\n avatar,\n isLoading = false,\n content,\n timestamp,\n error,\n sources,\n toolCalls,\n defaultUserName = 'Guest',\n}: MessageProps & { role: 'user' | 'bot'; defaultUserName?: string }) => ({\n role,\n name: name || defaultUserName,\n avatar,\n isLoading,\n content,\n timestamp,\n error,\n sources,\n toolCalls,\n});\n\nexport const createUserMessage = (\n props: MessageProps & { defaultUserName?: string },\n) =>\n createMessage({\n ...props,\n role: 'user',\n defaultUserName: props.defaultUserName,\n });\n\nexport const createBotMessage = (props: MessageProps) =>\n createMessage({\n ...props,\n role: 'bot',\n });\n\nexport const getConversationsData = (\n conversation: LCSConversation,\n): [BaseMessage, BaseMessage] => {\n const [userMessage, botMessage] = conversation.messages || [];\n return [\n {\n ...userMessage,\n timestamp: getTimestamp(\n conversation.started_at\n ? new Date(conversation.started_at).getTime()\n : Date.now(),\n ),\n },\n {\n ...botMessage,\n timestamp: getTimestamp(\n conversation.completed_at\n ? new Date(conversation.completed_at).getTime()\n : Date.now(),\n ),\n referenced_documents: botMessage?.referenced_documents ?? [],\n },\n ];\n};\n\n/**\n * Maps LCORE referenced documents to chatbot sources (data only).\n * Inline SourcesCard pills are attached in `lightspeed-chatbox-utils`\n * (`headerContent`); SourcesChipModal reads `ragSource`. Keep this free of\n * JSX so the notebook stream store stays CSS-clean.\n */\nexport const transformDocumentsToSources = (\n referenced_documents: ReferencedDocuments,\n): SourcesCardProps | undefined => {\n if (!referenced_documents || referenced_documents?.length === 0) {\n return undefined;\n }\n return {\n sources: referenced_documents.map(\n (doc: ReferencedDocument): SourceWithRagId => ({\n body: doc.doc_description,\n title: doc.doc_title,\n link: doc?.doc_url,\n isExternal: !!doc?.doc_url,\n ...(doc.source\n ? {\n ragSource: doc.source,\n }\n : {}),\n }),\n ),\n };\n};\n"],"names":[],"mappings":"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"}