@red-hat-developer-hub/backstage-plugin-lightspeed 2.8.0 → 2.8.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 (43) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/alpha.d.ts +4 -0
  3. package/dist/components/DeleteModal.esm.js +1 -1
  4. package/dist/components/DeleteModal.esm.js.map +1 -1
  5. package/dist/components/LightSpeedChat.esm.js +26 -2
  6. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  7. package/dist/components/McpServersSettings.esm.js +3 -4
  8. package/dist/components/McpServersSettings.esm.js.map +1 -1
  9. package/dist/components/RenameConversationModal.esm.js +1 -1
  10. package/dist/components/RenameConversationModal.esm.js.map +1 -1
  11. package/dist/components/notebooks/AddDocumentModal.esm.js +1 -1
  12. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  13. package/dist/components/notebooks/DeleteNotebookModal.esm.js +1 -1
  14. package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
  15. package/dist/components/notebooks/FileListItem.esm.js +1 -1
  16. package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
  17. package/dist/components/notebooks/NotebookView.esm.js +37 -19
  18. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  19. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
  20. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  21. package/dist/components/notebooks/RenameNotebookModal.esm.js +1 -1
  22. package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -1
  23. package/dist/const.esm.js +6 -1
  24. package/dist/const.esm.js.map +1 -1
  25. package/dist/hooks/useConversationMessages.esm.js +7 -3
  26. package/dist/hooks/useConversationMessages.esm.js.map +1 -1
  27. package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
  28. package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
  29. package/dist/translations/de.esm.js +5 -0
  30. package/dist/translations/de.esm.js.map +1 -1
  31. package/dist/translations/es.esm.js +5 -0
  32. package/dist/translations/es.esm.js.map +1 -1
  33. package/dist/translations/fr.esm.js +5 -0
  34. package/dist/translations/fr.esm.js.map +1 -1
  35. package/dist/translations/it.esm.js +5 -0
  36. package/dist/translations/it.esm.js.map +1 -1
  37. package/dist/translations/ja.esm.js +5 -0
  38. package/dist/translations/ja.esm.js.map +1 -1
  39. package/dist/translations/ref.esm.js +5 -0
  40. package/dist/translations/ref.esm.js.map +1 -1
  41. package/dist/utils/lightspeed-chatbox-utils.esm.js +55 -1
  42. package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
  43. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## @red-hat-developer-hub/backstage-plugin-lightspeed
2
2
 
3
+ ## 2.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e5d33ba: Improved normalization of user chat input before send and display. A short intro followed by a numbered list, ASCII bullet lists (hyphen, asterisk, or plus, with optional indentation), or Unicode bullet lines is folded into one Markdown paragraph using hard line breaks and marker escaping where needed. That preserves intended line breaks (soft breaks no longer collapse list lines into one sentence) and keeps list-oriented prompts from splitting awkwardly in the chat UI. Excessive blank lines are tightened, CRLF is normalized, and whitespace-only prompts are not submitted.
8
+ - e6cd084: Fix notebook prompts and add Developer preview badge for Notebooks tab
9
+ - @red-hat-developer-hub/backstage-plugin-lightspeed-common@2.8.1
10
+
3
11
  ## 2.8.0
4
12
 
5
13
  ### Minor Changes
package/dist/alpha.d.ts CHANGED
@@ -33,11 +33,15 @@ declare const lightspeedTranslationRef: _backstage_frontend_plugin_api.Translati
33
33
  readonly "prompts.openshift.message": string;
34
34
  readonly "prompts.rhdh.title": string;
35
35
  readonly "prompts.rhdh.message": string;
36
+ readonly "notebooks.prompts.coreConcepts.title": string;
37
+ readonly "notebooks.prompts.vulnerabilities.title": string;
38
+ readonly "notebooks.prompts.accessIssue.title": string;
36
39
  readonly "page.title": string;
37
40
  readonly "page.subtitle": string;
38
41
  readonly "tabs.ariaLabel": string;
39
42
  readonly "tabs.chat": string;
40
43
  readonly "tabs.notebooks": string;
44
+ readonly "tabs.notebooks.devPreview": string;
41
45
  readonly "tabs.notebooks.empty": string;
42
46
  readonly "notebooks.title": string;
43
47
  readonly "notebooks.empty.title": string;
@@ -76,7 +76,7 @@ const DeleteModal = ({
76
76
  position: "absolute",
77
77
  right: 1,
78
78
  top: 1,
79
- color: "grey.700"
79
+ color: "text.primary"
80
80
  },
81
81
  children: /* @__PURE__ */ jsx(CloseIcon, {})
82
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteModal.esm.js","sources":["../../src/components/DeleteModal.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 CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useDeleteConversation } from '../hooks';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const DeleteModal = ({\n isOpen,\n conversationId,\n onClose,\n onConfirm,\n}: {\n isOpen: boolean;\n conversationId: string;\n onClose: () => void;\n onConfirm: () => void;\n}) => {\n const { t } = useTranslation();\n const {\n mutateAsync: deleteConversation,\n isError,\n error,\n isPending,\n } = useDeleteConversation();\n\n const handleDeleteConversation = async () => {\n try {\n await deleteConversation({\n conversation_id: conversationId,\n invalidateCache: false,\n });\n onConfirm();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-modal\"\n aria-describedby=\"delete-modal-confiramtion\"\n >\n <DialogTitle sx={{ p: '16px 20px', fontStyle: 'inherit' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {t('conversation.delete.confirm.title')}\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n sx={{\n position: 'absolute',\n right: 1,\n top: 1,\n color: 'grey.700',\n }}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent id=\"delete-modal-body-confirmation\">\n {t('conversation.delete.confirm.message')}\n </DialogContent>\n {isError && (\n <Box maxWidth=\"650px\" marginLeft=\"20px\" marginRight=\"20px\">\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions style={{ justifyContent: 'left', padding: '20px' }}>\n <Button\n key=\"confirm\"\n variant=\"contained\"\n color=\"error\"\n onClick={handleDeleteConversation}\n style={{ marginRight: '16px' }}\n disabled={isPending}\n >\n {t('conversation.delete.confirm.action')}\n </Button>\n <Button key=\"cancel\" variant=\"outlined\" onClick={onClose}>\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA8BO,MAAM,cAAc,CAAC;AAAA,EAC1B,MAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAKM;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM;AAAA,IACJ,WAAA,EAAa,kBAAA;AAAA,IACb,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,qBAAA,EAAsB;AAE1B,EAAA,MAAM,2BAA2B,YAAY;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,kBAAA,CAAmB;AAAA,QACvB,eAAA,EAAiB,cAAA;AAAA,QACjB,eAAA,EAAiB;AAAA,OAClB,CAAA;AACD,MAAA,SAAA,EAAU;AAAA,IACZ,SAAS,CAAA,EAAG;AAEV,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,OAAA;AAAA,MACA,iBAAA,EAAgB,cAAA;AAAA,MAChB,kBAAA,EAAiB,2BAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAY,EAAA,EAAI,EAAE,GAAG,WAAA,EAAa,SAAA,EAAW,WAAU,EACtD,QAAA,kBAAA,IAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI;AAAA,cACF,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK;AAAA,aACP;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EAAO,EAAA,EAAI,EAAE,YAAY,MAAA,EAAO,EACnD,QAAA,EAAA,CAAA,CAAE,mCAAmC,CAAA,EACxC,CAAA;AAAA,8BAEA,GAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,YAAA,EAAW,OAAA;AAAA,kBACX,OAAA,EAAS,OAAA;AAAA,kBACT,KAAA,EAAO,EAAE,cAAc,CAAA;AAAA,kBACvB,IAAA,EAAK,OAAA;AAAA,kBACL,EAAA,EAAI;AAAA,oBACF,QAAA,EAAU,UAAA;AAAA,oBACV,KAAA,EAAO,CAAA;AAAA,oBACP,GAAA,EAAK,CAAA;AAAA,oBACL,KAAA,EAAO;AAAA,mBACT;AAAA,kBAEA,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb;AAAA;AAAA,SACF,EACF,CAAA;AAAA,4BACC,aAAA,EAAA,EAAc,EAAA,EAAG,gCAAA,EACf,QAAA,EAAA,CAAA,CAAE,qCAAqC,CAAA,EAC1C,CAAA;AAAA,QACC,2BACC,GAAA,CAAC,GAAA,EAAA,EAAI,QAAA,EAAS,OAAA,EAAQ,YAAW,MAAA,EAAO,WAAA,EAAY,MAAA,EAClD,QAAA,kBAAA,GAAA,CAAC,SAAM,QAAA,EAAS,OAAA,EAAS,QAAA,EAAA,MAAA,CAAO,KAAK,GAAE,CAAA,EACzC,CAAA;AAAA,wBAEF,IAAA,CAAC,iBAAc,KAAA,EAAO,EAAE,gBAAgB,MAAA,EAAQ,OAAA,EAAS,QAAO,EAC9D,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAQ,WAAA;AAAA,cACR,KAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAS,wBAAA;AAAA,cACT,KAAA,EAAO,EAAE,WAAA,EAAa,MAAA,EAAO;AAAA,cAC7B,QAAA,EAAU,SAAA;AAAA,cAET,YAAE,oCAAoC;AAAA,aAAA;AAAA,YAPnC;AAAA,WAQN;AAAA,0BACA,GAAA,CAAC,UAAoB,OAAA,EAAQ,UAAA,EAAW,SAAS,OAAA,EAC9C,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EAAA,EADR,QAEZ;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"DeleteModal.esm.js","sources":["../../src/components/DeleteModal.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 CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useDeleteConversation } from '../hooks';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const DeleteModal = ({\n isOpen,\n conversationId,\n onClose,\n onConfirm,\n}: {\n isOpen: boolean;\n conversationId: string;\n onClose: () => void;\n onConfirm: () => void;\n}) => {\n const { t } = useTranslation();\n const {\n mutateAsync: deleteConversation,\n isError,\n error,\n isPending,\n } = useDeleteConversation();\n\n const handleDeleteConversation = async () => {\n try {\n await deleteConversation({\n conversation_id: conversationId,\n invalidateCache: false,\n });\n onConfirm();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-modal\"\n aria-describedby=\"delete-modal-confiramtion\"\n >\n <DialogTitle sx={{ p: '16px 20px', fontStyle: 'inherit' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {t('conversation.delete.confirm.title')}\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n sx={{\n position: 'absolute',\n right: 1,\n top: 1,\n color: 'text.primary',\n }}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent id=\"delete-modal-body-confirmation\">\n {t('conversation.delete.confirm.message')}\n </DialogContent>\n {isError && (\n <Box maxWidth=\"650px\" marginLeft=\"20px\" marginRight=\"20px\">\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions style={{ justifyContent: 'left', padding: '20px' }}>\n <Button\n key=\"confirm\"\n variant=\"contained\"\n color=\"error\"\n onClick={handleDeleteConversation}\n style={{ marginRight: '16px' }}\n disabled={isPending}\n >\n {t('conversation.delete.confirm.action')}\n </Button>\n <Button key=\"cancel\" variant=\"outlined\" onClick={onClose}>\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import Tab from '@mui/material/Tab';
7
7
  import Tabs from '@mui/material/Tabs';
8
8
  import { ChatbotDisplayMode, ChatbotContent, ChatbotFooter, MessageBar, ChatbotFootnote, Settings, Chatbot, ChatbotHeader, ChatbotHeaderMain, ChatbotHeaderMenu, ChatbotHeaderTitle, FileDropZone, ChatbotAlert } from '@patternfly/chatbot';
9
9
  import ChatbotConversationHistoryNav from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav';
10
- import { DropdownItem, Tooltip, MenuToggle, Select, SelectList, SelectOption, AlertGroup, Alert, AlertVariant, AlertActionCloseButton, Title } from '@patternfly/react-core';
10
+ import { DropdownItem, Tooltip, MenuToggle, Select, SelectList, SelectOption, AlertGroup, Alert, AlertVariant, AlertActionCloseButton, Title, Label } from '@patternfly/react-core';
11
11
  import { SortAmountDownAltIcon, SortAmountDownIcon, PlusIcon, SearchIcon } from '@patternfly/react-icons';
12
12
  import { useQueryClient } from '@tanstack/react-query';
13
13
  import { UNTITLED_NOTEBOOK_NAME, TEMP_CONVERSATION_ID, supportedFileTypes } from '../const.esm.js';
@@ -1642,7 +1642,31 @@ const LightspeedChat = ({
1642
1642
  Tab,
1643
1643
  {
1644
1644
  disableRipple: true,
1645
- label: t("tabs.notebooks"),
1645
+ label: /* @__PURE__ */ jsxs(
1646
+ "span",
1647
+ {
1648
+ style: {
1649
+ display: "inline-flex",
1650
+ alignItems: "center",
1651
+ gap: 8
1652
+ },
1653
+ children: [
1654
+ t("tabs.notebooks"),
1655
+ /* @__PURE__ */ jsx(
1656
+ Label,
1657
+ {
1658
+ color: "purple",
1659
+ style: {
1660
+ alignSelf: "center",
1661
+ margin: 0,
1662
+ lineHeight: 1
1663
+ },
1664
+ children: t("tabs.notebooks.devPreview")
1665
+ }
1666
+ )
1667
+ ]
1668
+ }
1669
+ ),
1646
1670
  "aria-label": t("tabs.notebooks")
1647
1671
  }
1648
1672
  )