@red-hat-developer-hub/backstage-plugin-intelligent-assistant 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/CHANGELOG.md +681 -0
  2. package/README.md +378 -0
  3. package/config.d.ts +70 -0
  4. package/dist/alpha.d.ts +285 -0
  5. package/dist/alpha.esm.js +3 -0
  6. package/dist/alpha.esm.js.map +1 -0
  7. package/dist/api/LightspeedApiClient.esm.js +234 -0
  8. package/dist/api/LightspeedApiClient.esm.js.map +1 -0
  9. package/dist/api/NotebooksApiClient.esm.js +179 -0
  10. package/dist/api/NotebooksApiClient.esm.js.map +1 -0
  11. package/dist/api/api.esm.js +8 -0
  12. package/dist/api/api.esm.js.map +1 -0
  13. package/dist/api/notebooksApi.esm.js +10 -0
  14. package/dist/api/notebooksApi.esm.js.map +1 -0
  15. package/dist/components/Attachment.esm.js +108 -0
  16. package/dist/components/Attachment.esm.js.map +1 -0
  17. package/dist/components/AttachmentContext.esm.js +125 -0
  18. package/dist/components/AttachmentContext.esm.js.map +1 -0
  19. package/dist/components/CollapsedHistoryStrip.esm.js +87 -0
  20. package/dist/components/CollapsedHistoryStrip.esm.js.map +1 -0
  21. package/dist/components/DeleteModal.esm.js +92 -0
  22. package/dist/components/DeleteModal.esm.js.map +1 -0
  23. package/dist/components/FilePreview.esm.js +49 -0
  24. package/dist/components/FilePreview.esm.js.map +1 -0
  25. package/dist/components/LightSpeedChat.esm.js +1898 -0
  26. package/dist/components/LightSpeedChat.esm.js.map +1 -0
  27. package/dist/components/LightspeedChatBox.esm.js +252 -0
  28. package/dist/components/LightspeedChatBox.esm.js.map +1 -0
  29. package/dist/components/LightspeedChatBoxHeader.esm.js +210 -0
  30. package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -0
  31. package/dist/components/LightspeedChatContainer.esm.js +162 -0
  32. package/dist/components/LightspeedChatContainer.esm.js.map +1 -0
  33. package/dist/components/LightspeedChatModelsState.esm.js +198 -0
  34. package/dist/components/LightspeedChatModelsState.esm.js.map +1 -0
  35. package/dist/components/LightspeedDrawerContext.esm.js +15 -0
  36. package/dist/components/LightspeedDrawerContext.esm.js.map +1 -0
  37. package/dist/components/LightspeedDrawerProvider.esm.js +44 -0
  38. package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -0
  39. package/dist/components/LightspeedDrawerStateExposer.esm.js +34 -0
  40. package/dist/components/LightspeedDrawerStateExposer.esm.js.map +1 -0
  41. package/dist/components/LightspeedFAB.esm.js +6 -0
  42. package/dist/components/LightspeedFAB.esm.js.map +1 -0
  43. package/dist/components/LightspeedFABContent.esm.js +65 -0
  44. package/dist/components/LightspeedFABContent.esm.js.map +1 -0
  45. package/dist/components/LightspeedIcon.esm.js +46 -0
  46. package/dist/components/LightspeedIcon.esm.js.map +1 -0
  47. package/dist/components/LightspeedPage.esm.js +31 -0
  48. package/dist/components/LightspeedPage.esm.js.map +1 -0
  49. package/dist/components/McpServersSettings.esm.js +953 -0
  50. package/dist/components/McpServersSettings.esm.js.map +1 -0
  51. package/dist/components/McpSettingsIcon.esm.js +18 -0
  52. package/dist/components/McpSettingsIcon.esm.js.map +1 -0
  53. package/dist/components/MessageBarModelSelector.esm.js +92 -0
  54. package/dist/components/MessageBarModelSelector.esm.js.map +1 -0
  55. package/dist/components/PermissionRequiredIcon.esm.js +18 -0
  56. package/dist/components/PermissionRequiredIcon.esm.js.map +1 -0
  57. package/dist/components/PermissionRequiredState.esm.js +88 -0
  58. package/dist/components/PermissionRequiredState.esm.js.map +1 -0
  59. package/dist/components/RenameConversationModal.esm.js +157 -0
  60. package/dist/components/RenameConversationModal.esm.js.map +1 -0
  61. package/dist/components/Router.esm.js +35 -0
  62. package/dist/components/Router.esm.js.map +1 -0
  63. package/dist/components/SourcesChipModal.esm.js +124 -0
  64. package/dist/components/SourcesChipModal.esm.js.map +1 -0
  65. package/dist/components/ToolCallContent.esm.js +208 -0
  66. package/dist/components/ToolCallContent.esm.js.map +1 -0
  67. package/dist/components/Trans.esm.js +33 -0
  68. package/dist/components/Trans.esm.js.map +1 -0
  69. package/dist/components/notebooks/AddDocumentModal.esm.js +271 -0
  70. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -0
  71. package/dist/components/notebooks/DeleteDocumentModal.esm.js +131 -0
  72. package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -0
  73. package/dist/components/notebooks/DeleteNotebookModal.esm.js +143 -0
  74. package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -0
  75. package/dist/components/notebooks/DocumentSidebar.esm.js +235 -0
  76. package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -0
  77. package/dist/components/notebooks/FileListItem.esm.js +94 -0
  78. package/dist/components/notebooks/FileListItem.esm.js.map +1 -0
  79. package/dist/components/notebooks/FileTypeIcon.esm.js +59 -0
  80. package/dist/components/notebooks/FileTypeIcon.esm.js.map +1 -0
  81. package/dist/components/notebooks/NotebookCard.esm.js +118 -0
  82. package/dist/components/notebooks/NotebookCard.esm.js.map +1 -0
  83. package/dist/components/notebooks/NotebookView.esm.js +681 -0
  84. package/dist/components/notebooks/NotebookView.esm.js.map +1 -0
  85. package/dist/components/notebooks/NotebooksTab.esm.js +71 -0
  86. package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -0
  87. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +142 -0
  88. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -0
  89. package/dist/components/notebooks/RenameNotebookModal.esm.js +187 -0
  90. package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -0
  91. package/dist/components/notebooks/SidebarCollapseIcon.esm.js +50 -0
  92. package/dist/components/notebooks/SidebarCollapseIcon.esm.js.map +1 -0
  93. package/dist/components/notebooks/UploadResourceScreen.esm.js +79 -0
  94. package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -0
  95. package/dist/const.esm.js +74 -0
  96. package/dist/const.esm.js.map +1 -0
  97. package/dist/dev.d.ts +2 -0
  98. package/dist/dev.esm.js +48 -0
  99. package/dist/dev.esm.js.map +1 -0
  100. package/dist/hooks/notebooks/useCreateNotebook.esm.js +19 -0
  101. package/dist/hooks/notebooks/useCreateNotebook.esm.js.map +1 -0
  102. package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js +24 -0
  103. package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js.map +1 -0
  104. package/dist/hooks/notebooks/useDeleteNotebook.esm.js +19 -0
  105. package/dist/hooks/notebooks/useDeleteNotebook.esm.js.map +1 -0
  106. package/dist/hooks/notebooks/useDocumentStatusPolling.esm.js +40 -0
  107. package/dist/hooks/notebooks/useDocumentStatusPolling.esm.js.map +1 -0
  108. package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js +15 -0
  109. package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js.map +1 -0
  110. package/dist/hooks/notebooks/useNotebookDocuments.esm.js +18 -0
  111. package/dist/hooks/notebooks/useNotebookDocuments.esm.js.map +1 -0
  112. package/dist/hooks/notebooks/useNotebookSession.esm.js +18 -0
  113. package/dist/hooks/notebooks/useNotebookSession.esm.js.map +1 -0
  114. package/dist/hooks/notebooks/useNotebookSessions.esm.js +18 -0
  115. package/dist/hooks/notebooks/useNotebookSessions.esm.js.map +1 -0
  116. package/dist/hooks/notebooks/useRenameNotebook.esm.js +19 -0
  117. package/dist/hooks/notebooks/useRenameNotebook.esm.js.map +1 -0
  118. package/dist/hooks/notebooks/useUploadDocument.esm.js +28 -0
  119. package/dist/hooks/notebooks/useUploadDocument.esm.js.map +1 -0
  120. package/dist/hooks/toolCallsCacheStore.esm.js +61 -0
  121. package/dist/hooks/toolCallsCacheStore.esm.js.map +1 -0
  122. package/dist/hooks/useAllModels.esm.js +20 -0
  123. package/dist/hooks/useAllModels.esm.js.map +1 -0
  124. package/dist/hooks/useAutoScroll.esm.js +78 -0
  125. package/dist/hooks/useAutoScroll.esm.js.map +1 -0
  126. package/dist/hooks/useBackstageUserIdentity.esm.js +14 -0
  127. package/dist/hooks/useBackstageUserIdentity.esm.js.map +1 -0
  128. package/dist/hooks/useBufferedMessages.esm.js +27 -0
  129. package/dist/hooks/useBufferedMessages.esm.js.map +1 -0
  130. package/dist/hooks/useCaptureFeedback.esm.js +21 -0
  131. package/dist/hooks/useCaptureFeedback.esm.js.map +1 -0
  132. package/dist/hooks/useConversationMessages.esm.js +544 -0
  133. package/dist/hooks/useConversationMessages.esm.js.map +1 -0
  134. package/dist/hooks/useConversations.esm.js +25 -0
  135. package/dist/hooks/useConversations.esm.js.map +1 -0
  136. package/dist/hooks/useCreateCoversationMessage.esm.js +33 -0
  137. package/dist/hooks/useCreateCoversationMessage.esm.js.map +1 -0
  138. package/dist/hooks/useDeleteConversation.esm.js +39 -0
  139. package/dist/hooks/useDeleteConversation.esm.js.map +1 -0
  140. package/dist/hooks/useDisplayModeSettings.esm.js +57 -0
  141. package/dist/hooks/useDisplayModeSettings.esm.js.map +1 -0
  142. package/dist/hooks/useFeedbackActions.esm.js +275 -0
  143. package/dist/hooks/useFeedbackActions.esm.js.map +1 -0
  144. package/dist/hooks/useFeedbackState.esm.js +93 -0
  145. package/dist/hooks/useFeedbackState.esm.js.map +1 -0
  146. package/dist/hooks/useFeedbackStatus.esm.js +14 -0
  147. package/dist/hooks/useFeedbackStatus.esm.js.map +1 -0
  148. package/dist/hooks/useIsMobile.esm.js +14 -0
  149. package/dist/hooks/useIsMobile.esm.js.map +1 -0
  150. package/dist/hooks/useLastOpenedConversation.esm.js +51 -0
  151. package/dist/hooks/useLastOpenedConversation.esm.js.map +1 -0
  152. package/dist/hooks/useLightspeedDeletePermission.esm.js +12 -0
  153. package/dist/hooks/useLightspeedDeletePermission.esm.js.map +1 -0
  154. package/dist/hooks/useLightspeedDrawerContext.esm.js +15 -0
  155. package/dist/hooks/useLightspeedDrawerContext.esm.js.map +1 -0
  156. package/dist/hooks/useLightspeedProviderState.esm.js +277 -0
  157. package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -0
  158. package/dist/hooks/useLightspeedUpdatePermission.esm.js +12 -0
  159. package/dist/hooks/useLightspeedUpdatePermission.esm.js.map +1 -0
  160. package/dist/hooks/useLightspeedViewPermission.esm.js +18 -0
  161. package/dist/hooks/useLightspeedViewPermission.esm.js.map +1 -0
  162. package/dist/hooks/useNotebookConversationIds.esm.js +19 -0
  163. package/dist/hooks/useNotebookConversationIds.esm.js.map +1 -0
  164. package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
  165. package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
  166. package/dist/hooks/usePinnedChatsSettings.esm.js +118 -0
  167. package/dist/hooks/usePinnedChatsSettings.esm.js.map +1 -0
  168. package/dist/hooks/useQuestionValidation.esm.js +16 -0
  169. package/dist/hooks/useQuestionValidation.esm.js.map +1 -0
  170. package/dist/hooks/useRenameConversation.esm.js +44 -0
  171. package/dist/hooks/useRenameConversation.esm.js.map +1 -0
  172. package/dist/hooks/useSortSettings.esm.js +60 -0
  173. package/dist/hooks/useSortSettings.esm.js.map +1 -0
  174. package/dist/hooks/useStopConversation.esm.js +18 -0
  175. package/dist/hooks/useStopConversation.esm.js.map +1 -0
  176. package/dist/hooks/useTranslation.esm.js +7 -0
  177. package/dist/hooks/useTranslation.esm.js.map +1 -0
  178. package/dist/hooks/useWelcomePrompts.esm.js +36 -0
  179. package/dist/hooks/useWelcomePrompts.esm.js.map +1 -0
  180. package/dist/images/bot-avatar-dark.svg +4 -0
  181. package/dist/images/bot-avatar.svg +4 -0
  182. package/dist/images/permission-required.svg +319 -0
  183. package/dist/images/user-avatar.svg +4 -0
  184. package/dist/index.d.ts +113 -0
  185. package/dist/index.esm.js +137 -0
  186. package/dist/index.esm.js.map +1 -0
  187. package/dist/intelligent-assistant-fab-module.d.ts +4 -0
  188. package/dist/intelligent-assistant-fab-module.esm.js +2 -0
  189. package/dist/intelligent-assistant-fab-module.esm.js.map +1 -0
  190. package/dist/intelligent-assistant-translations-module.d.ts +4 -0
  191. package/dist/intelligent-assistant-translations-module.esm.js +2 -0
  192. package/dist/intelligent-assistant-translations-module.esm.js.map +1 -0
  193. package/dist/legacy.d.ts +75 -0
  194. package/dist/legacy.esm.js +13 -0
  195. package/dist/legacy.esm.js.map +1 -0
  196. package/dist/plugin.esm.js +84 -0
  197. package/dist/plugin.esm.js.map +1 -0
  198. package/dist/routes.esm.js +23 -0
  199. package/dist/routes.esm.js.map +1 -0
  200. package/dist/translations/de.esm.js +278 -0
  201. package/dist/translations/de.esm.js.map +1 -0
  202. package/dist/translations/es.esm.js +278 -0
  203. package/dist/translations/es.esm.js.map +1 -0
  204. package/dist/translations/fr.esm.js +278 -0
  205. package/dist/translations/fr.esm.js.map +1 -0
  206. package/dist/translations/index.esm.js +16 -0
  207. package/dist/translations/index.esm.js.map +1 -0
  208. package/dist/translations/it.esm.js +278 -0
  209. package/dist/translations/it.esm.js.map +1 -0
  210. package/dist/translations/ja.esm.js +278 -0
  211. package/dist/translations/ja.esm.js.map +1 -0
  212. package/dist/translations/ref.esm.js +315 -0
  213. package/dist/translations/ref.esm.js.map +1 -0
  214. package/dist/types.esm.js +9 -0
  215. package/dist/types.esm.js.map +1 -0
  216. package/dist/utils/attachment-utils.esm.js +30 -0
  217. package/dist/utils/attachment-utils.esm.js.map +1 -0
  218. package/dist/utils/formatToolResponseForMarkdown.esm.js +98 -0
  219. package/dist/utils/formatToolResponseForMarkdown.esm.js.map +1 -0
  220. package/dist/utils/generateClassName.esm.js +12 -0
  221. package/dist/utils/generateClassName.esm.js.map +1 -0
  222. package/dist/utils/lightspeed-chatbox-utils.esm.js +232 -0
  223. package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -0
  224. package/dist/utils/notebook-upload-utils.esm.js +48 -0
  225. package/dist/utils/notebook-upload-utils.esm.js.map +1 -0
  226. package/dist/utils/notebooks-utils.esm.js +25 -0
  227. package/dist/utils/notebooks-utils.esm.js.map +1 -0
  228. package/dist/utils/prompt-utils.esm.js +17 -0
  229. package/dist/utils/prompt-utils.esm.js.map +1 -0
  230. package/dist/utils/queryClient.esm.js +6 -0
  231. package/dist/utils/queryClient.esm.js.map +1 -0
  232. package/dist/utils/reasoningParser.esm.js +33 -0
  233. package/dist/utils/reasoningParser.esm.js.map +1 -0
  234. package/dist/utils/toolCallMapper.esm.js +15 -0
  235. package/dist/utils/toolCallMapper.esm.js.map +1 -0
  236. package/dist/utils/user-utils.esm.js +7 -0
  237. package/dist/utils/user-utils.esm.js.map +1 -0
  238. package/package.json +182 -0
@@ -0,0 +1,79 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { makeStyles, Typography } from '@material-ui/core';
3
+ import { Spinner, Button } from '@patternfly/react-core';
4
+ import { AddCircleOIcon } from '@patternfly/react-icons';
5
+ import { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';
6
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
7
+
8
+ const useStyles = makeStyles((theme) => ({
9
+ container: {
10
+ display: "flex",
11
+ flexDirection: "column",
12
+ alignItems: "center",
13
+ justifyContent: "center",
14
+ flex: 1,
15
+ textAlign: "center",
16
+ gap: theme.spacing(2)
17
+ },
18
+ icon: {
19
+ fontSize: 48,
20
+ color: "var(--pf-t--global--icon--color--subtle)",
21
+ "& > .pf-v6-icon-rh-ui": {
22
+ display: "none !important"
23
+ }
24
+ },
25
+ headingRow: {
26
+ display: "flex",
27
+ alignItems: "center",
28
+ gap: theme.spacing(1)
29
+ },
30
+ heading: {
31
+ fontWeight: 500,
32
+ fontSize: "1.5rem",
33
+ lineHeight: "2rem",
34
+ letterSpacing: "-0.25px"
35
+ },
36
+ description: {
37
+ color: "var(--pf-t--global--text--color--subtle)",
38
+ maxWidth: 400
39
+ },
40
+ uploadButton: {
41
+ textTransform: "none",
42
+ borderRadius: 999,
43
+ paddingLeft: theme.spacing(3),
44
+ paddingRight: theme.spacing(3)
45
+ }
46
+ }));
47
+ const UploadResourceScreen = ({
48
+ onUploadClick,
49
+ isProcessing = false
50
+ }) => {
51
+ const classes = useStyles();
52
+ const { t } = useTranslation();
53
+ return /* @__PURE__ */ jsxs("div", { className: classes.container, children: [
54
+ /* @__PURE__ */ jsx(CatalogIcon, { className: classes.icon }),
55
+ isProcessing ? /* @__PURE__ */ jsxs(Fragment, { children: [
56
+ /* @__PURE__ */ jsxs("div", { className: classes.headingRow, children: [
57
+ /* @__PURE__ */ jsx(Spinner, { size: "md" }),
58
+ /* @__PURE__ */ jsx(Typography, { className: classes.heading, children: t("notebook.view.processing.heading") })
59
+ ] }),
60
+ /* @__PURE__ */ jsx(Typography, { className: classes.description, children: t("notebook.view.processing.description") })
61
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
62
+ /* @__PURE__ */ jsx(Typography, { className: classes.heading, children: t("notebook.view.upload.heading") }),
63
+ /* @__PURE__ */ jsx(
64
+ Button,
65
+ {
66
+ variant: "secondary",
67
+ className: classes.uploadButton,
68
+ icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
69
+ iconPosition: "end",
70
+ onClick: onUploadClick,
71
+ children: t("notebook.view.upload.action")
72
+ }
73
+ )
74
+ ] })
75
+ ] });
76
+ };
77
+
78
+ export { UploadResourceScreen };
79
+ //# sourceMappingURL=UploadResourceScreen.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadResourceScreen.esm.js","sources":["../../../src/components/notebooks/UploadResourceScreen.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 { makeStyles, Typography } from '@material-ui/core';\nimport { Button, Spinner } from '@patternfly/react-core';\nimport { AddCircleOIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n textAlign: 'center',\n gap: theme.spacing(2),\n },\n icon: {\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n '& > .pf-v6-icon-rh-ui': {\n display: 'none !important',\n },\n },\n headingRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n heading: {\n fontWeight: 500,\n fontSize: '1.5rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n },\n description: {\n color: 'var(--pf-t--global--text--color--subtle)',\n maxWidth: 400,\n },\n uploadButton: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n}));\n\ntype UploadResourceScreenProps = {\n onUploadClick: () => void;\n isProcessing?: boolean;\n};\n\nexport const UploadResourceScreen = ({\n onUploadClick,\n isProcessing = false,\n}: UploadResourceScreenProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.container}>\n <CatalogIcon className={classes.icon} />\n {isProcessing ? (\n <>\n <div className={classes.headingRow}>\n <Spinner size=\"md\" />\n <Typography className={classes.heading}>\n {t('notebook.view.processing.heading')}\n </Typography>\n </div>\n <Typography className={classes.description}>\n {t('notebook.view.processing.description')}\n </Typography>\n </>\n ) : (\n <>\n <Typography className={classes.heading}>\n {t('notebook.view.upload.heading')}\n </Typography>\n <Button\n variant=\"secondary\"\n className={classes.uploadButton}\n icon={<AddCircleOIcon />}\n iconPosition=\"end\"\n onClick={onUploadClick}\n >\n {t('notebook.view.upload.action')}\n </Button>\n </>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAuBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,SAAA,EAAW;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,QAAA;AAAA,IACX,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,0CAAA;AAAA,IACP,uBAAA,EAAyB;AAAA,MACvB,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,0CAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,aAAA,EAAe,MAAA;AAAA,IACf,YAAA,EAAc,GAAA;AAAA,IACd,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA;AAEjC,CAAA,CAAE,CAAA;AAOK,MAAM,uBAAuB,CAAC;AAAA,EACnC,aAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,KAAiC;AAC/B,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,SAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,IACrC,+BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,UAAA,EACtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAK,IAAA,EAAK,CAAA;AAAA,4BAClB,UAAA,EAAA,EAAW,SAAA,EAAW,QAAQ,OAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,kCAAkC,CAAA,EACvC;AAAA,OAAA,EACF,CAAA;AAAA,0BACC,UAAA,EAAA,EAAW,SAAA,EAAW,QAAQ,WAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAAA,EAC3C;AAAA,KAAA,EACF,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,OAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,8BAA8B,CAAA,EACnC,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,WAAW,OAAA,CAAQ,YAAA;AAAA,UACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,UACtB,YAAA,EAAa,KAAA;AAAA,UACb,OAAA,EAAS,aAAA;AAAA,UAER,YAAE,6BAA6B;AAAA;AAAA;AAClC,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
@@ -0,0 +1,74 @@
1
+ const TEMP_CONVERSATION_ID = "temp-conversation-id";
2
+ const LIGHTSPEED_APP_DRAWER_ID = "intelligent-assistant";
3
+ const createPrompt = (titleKey, messageKey) => {
4
+ return { titleKey, messageKey };
5
+ };
6
+ const supportedFileTypes = {
7
+ "text/plain": [".txt"],
8
+ "application/json": [".json"],
9
+ "application/yaml": [".yaml", ".yml"]
10
+ };
11
+ const NOTEBOOK_MAX_FILES = 10;
12
+ const NOTEBOOK_MAX_FILE_SIZE_BYTES = 25 * 1024 * 1024;
13
+ const UNTITLED_NOTEBOOK_NAME = "Untitled Notebook";
14
+ const NOTEBOOK_ALLOWED_EXTENSIONS = {
15
+ "text/plain": [".txt", ".log"],
16
+ "text/markdown": [".md"],
17
+ "application/pdf": [".pdf"],
18
+ "application/json": [".json"],
19
+ "application/x-yaml": [".yaml", ".yml"]
20
+ };
21
+ const NOTEBOOK_EXTENSION_TO_FILE_TYPE = {
22
+ ".txt": "txt",
23
+ ".md": "md",
24
+ ".pdf": "pdf",
25
+ ".json": "json",
26
+ ".yaml": "yaml",
27
+ ".yml": "yaml",
28
+ ".log": "log"
29
+ };
30
+ const DEFAULT_SAMPLE_PROMPTS = [
31
+ createPrompt(
32
+ "prompts.codeReadability.title",
33
+ "prompts.codeReadability.message"
34
+ ),
35
+ createPrompt("prompts.debugging.title", "prompts.debugging.message"),
36
+ createPrompt(
37
+ "prompts.developmentConcept.title",
38
+ "prompts.developmentConcept.message"
39
+ ),
40
+ createPrompt(
41
+ "prompts.codeOptimization.title",
42
+ "prompts.codeOptimization.message"
43
+ ),
44
+ createPrompt("prompts.documentation.title", "prompts.documentation.message"),
45
+ createPrompt("prompts.gitWorkflows.title", "prompts.gitWorkflows.message"),
46
+ createPrompt(
47
+ "prompts.testingStrategies.title",
48
+ "prompts.testingStrategies.message"
49
+ ),
50
+ createPrompt(
51
+ "prompts.sortingAlgorithms.title",
52
+ "prompts.sortingAlgorithms.message"
53
+ ),
54
+ createPrompt("prompts.eventDriven.title", "prompts.eventDriven.message")
55
+ ];
56
+ const RHDH_SAMPLE_PROMPTS = [
57
+ createPrompt("prompts.tekton.title", "prompts.tekton.message"),
58
+ createPrompt("prompts.openshift.title", "prompts.openshift.message"),
59
+ createPrompt("prompts.rhdh.title", "prompts.rhdh.message")
60
+ ];
61
+ const NOTEBOOK_PROMPT_KEYS = [
62
+ "notebooks.prompts.coreConcepts.title",
63
+ "notebooks.prompts.vulnerabilities.title",
64
+ "notebooks.prompts.accessIssue.title"
65
+ ];
66
+ const VALID_TOPIC_RESTRICTION_PROVIDER_IDS = [
67
+ "lightspeed_question_validity-shield"
68
+ ];
69
+ const DOCKED_CONTENT_OFFSET = "calc(var(--docked-drawer-width, 500px) + 1.5em)";
70
+ const LIGHTSPEED_PATH = "/intelligent-assistant";
71
+ const LIGHTSPEED_LEGACY_PATH = "/lightspeed";
72
+
73
+ export { DEFAULT_SAMPLE_PROMPTS, DOCKED_CONTENT_OFFSET, LIGHTSPEED_APP_DRAWER_ID, LIGHTSPEED_LEGACY_PATH, LIGHTSPEED_PATH, NOTEBOOK_ALLOWED_EXTENSIONS, NOTEBOOK_EXTENSION_TO_FILE_TYPE, NOTEBOOK_MAX_FILES, NOTEBOOK_MAX_FILE_SIZE_BYTES, NOTEBOOK_PROMPT_KEYS, RHDH_SAMPLE_PROMPTS, TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME, VALID_TOPIC_RESTRICTION_PROVIDER_IDS, supportedFileTypes };
74
+ //# sourceMappingURL=const.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.esm.js","sources":["../src/const.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 { SamplePrompts } from './types';\n\nexport const TEMP_CONVERSATION_ID = 'temp-conversation-id';\n\nexport const LIGHTSPEED_APP_DRAWER_ID = 'intelligent-assistant';\n\n// Translation keys for disclaimers\nexport const FUNCTION_DISCLAIMER_WITHOUT_QUESTION_VALIDATION_KEY =\n 'disclaimer.withoutValidation';\nexport const FUNCTION_DISCLAIMER_KEY = 'disclaimer.withValidation';\n\nconst createPrompt = (titleKey: string, messageKey: string) => {\n return { titleKey, messageKey };\n};\n\nexport const supportedFileTypes = {\n 'text/plain': ['.txt'],\n 'application/json': ['.json'],\n 'application/yaml': ['.yaml', '.yml'],\n};\n\nexport const NOTEBOOK_MAX_FILES = 10;\nexport const NOTEBOOK_MAX_FILE_SIZE_BYTES = 25 * 1024 * 1024; // 25 MB\nexport const UNTITLED_NOTEBOOK_NAME = 'Untitled Notebook';\n\nexport const NOTEBOOK_ALLOWED_EXTENSIONS: Record<string, string[]> = {\n 'text/plain': ['.txt', '.log'],\n 'text/markdown': ['.md'],\n 'application/pdf': ['.pdf'],\n 'application/json': ['.json'],\n 'application/x-yaml': ['.yaml', '.yml'],\n};\n\nexport const NOTEBOOK_EXTENSION_TO_FILE_TYPE: Record<string, string> = {\n '.txt': 'txt',\n '.md': 'md',\n '.pdf': 'pdf',\n '.json': 'json',\n '.yaml': 'yaml',\n '.yml': 'yaml',\n '.log': 'log',\n};\n\nexport const DEFAULT_SAMPLE_PROMPTS: SamplePrompts = [\n createPrompt(\n 'prompts.codeReadability.title',\n 'prompts.codeReadability.message',\n ),\n createPrompt('prompts.debugging.title', 'prompts.debugging.message'),\n createPrompt(\n 'prompts.developmentConcept.title',\n 'prompts.developmentConcept.message',\n ),\n createPrompt(\n 'prompts.codeOptimization.title',\n 'prompts.codeOptimization.message',\n ),\n createPrompt('prompts.documentation.title', 'prompts.documentation.message'),\n createPrompt('prompts.gitWorkflows.title', 'prompts.gitWorkflows.message'),\n createPrompt(\n 'prompts.testingStrategies.title',\n 'prompts.testingStrategies.message',\n ),\n createPrompt(\n 'prompts.sortingAlgorithms.title',\n 'prompts.sortingAlgorithms.message',\n ),\n createPrompt('prompts.eventDriven.title', 'prompts.eventDriven.message'),\n];\n\nexport const RHDH_SAMPLE_PROMPTS: SamplePrompts = [\n createPrompt('prompts.tekton.title', 'prompts.tekton.message'),\n createPrompt('prompts.openshift.title', 'prompts.openshift.message'),\n createPrompt('prompts.rhdh.title', 'prompts.rhdh.message'),\n];\n\nexport const NOTEBOOK_PROMPT_KEYS: string[] = [\n 'notebooks.prompts.coreConcepts.title',\n 'notebooks.prompts.vulnerabilities.title',\n 'notebooks.prompts.accessIssue.title',\n];\n\n// Topic restriction valid provider IDs\nexport const VALID_TOPIC_RESTRICTION_PROVIDER_IDS = [\n 'lightspeed_question_validity-shield',\n];\n\n// Matches app shell margin on main when ApplicationDrawer is docked (e.g. Root.tsx).\nexport const DOCKED_CONTENT_OFFSET =\n 'calc(var(--docked-drawer-width, 500px) + 1.5em)';\n\nexport const LIGHTSPEED_PATH = '/intelligent-assistant';\nexport const LIGHTSPEED_LEGACY_PATH = '/lightspeed';\n"],"names":[],"mappings":"AAkBO,MAAM,oBAAA,GAAuB;AAE7B,MAAM,wBAAA,GAA2B;AAOxC,MAAM,YAAA,GAAe,CAAC,QAAA,EAAkB,UAAA,KAAuB;AAC7D,EAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAChC,CAAA;AAEO,MAAM,kBAAA,GAAqB;AAAA,EAChC,YAAA,EAAc,CAAC,MAAM,CAAA;AAAA,EACrB,kBAAA,EAAoB,CAAC,OAAO,CAAA;AAAA,EAC5B,kBAAA,EAAoB,CAAC,OAAA,EAAS,MAAM;AACtC;AAEO,MAAM,kBAAA,GAAqB;AAC3B,MAAM,4BAAA,GAA+B,KAAK,IAAA,GAAO;AACjD,MAAM,sBAAA,GAAyB;AAE/B,MAAM,2BAAA,GAAwD;AAAA,EACnE,YAAA,EAAc,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC7B,eAAA,EAAiB,CAAC,KAAK,CAAA;AAAA,EACvB,iBAAA,EAAmB,CAAC,MAAM,CAAA;AAAA,EAC1B,kBAAA,EAAoB,CAAC,OAAO,CAAA;AAAA,EAC5B,oBAAA,EAAsB,CAAC,OAAA,EAAS,MAAM;AACxC;AAEO,MAAM,+BAAA,GAA0D;AAAA,EACrE,MAAA,EAAQ,KAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,KAAA;AAAA,EACR,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAEO,MAAM,sBAAA,GAAwC;AAAA,EACnD,YAAA;AAAA,IACE,+BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA,CAAa,2BAA2B,2BAA2B,CAAA;AAAA,EACnE,YAAA;AAAA,IACE,kCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA;AAAA,IACE,gCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA,CAAa,+BAA+B,+BAA+B,CAAA;AAAA,EAC3E,YAAA,CAAa,8BAA8B,8BAA8B,CAAA;AAAA,EACzE,YAAA;AAAA,IACE,iCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA;AAAA,IACE,iCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA,CAAa,6BAA6B,6BAA6B;AACzE;AAEO,MAAM,mBAAA,GAAqC;AAAA,EAChD,YAAA,CAAa,wBAAwB,wBAAwB,CAAA;AAAA,EAC7D,YAAA,CAAa,2BAA2B,2BAA2B,CAAA;AAAA,EACnE,YAAA,CAAa,sBAAsB,sBAAsB;AAC3D;AAEO,MAAM,oBAAA,GAAiC;AAAA,EAC5C,sCAAA;AAAA,EACA,yCAAA;AAAA,EACA;AACF;AAGO,MAAM,oCAAA,GAAuC;AAAA,EAClD;AACF;AAGO,MAAM,qBAAA,GACX;AAEK,MAAM,eAAA,GAAkB;AACxB,MAAM,sBAAA,GAAyB;;;;"}
package/dist/dev.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,48 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import Box from '@mui/material/Box';
3
+ import Drawer from '@mui/material/Drawer';
4
+
5
+ const CustomDrawer = (props) => {
6
+ const {
7
+ children,
8
+ minWidth = 400,
9
+ maxWidth = 800,
10
+ initialWidth = 400,
11
+ isDrawerOpen,
12
+ drawerWidth,
13
+ onWidthChange,
14
+ ...drawerProps
15
+ } = props;
16
+ const { anchor: _, ...restDrawerProps } = drawerProps;
17
+ return /* @__PURE__ */ jsx(
18
+ Drawer,
19
+ {
20
+ ...restDrawerProps,
21
+ anchor: "right",
22
+ sx: {
23
+ "& .v5-MuiDrawer-paper": {
24
+ width: drawerWidth || initialWidth,
25
+ boxSizing: "border-box",
26
+ backgroundColor: (theme) => {
27
+ const themeConfig = theme;
28
+ return themeConfig.palette?.rhdh?.general?.sidebarBackgroundColor || theme.palette.background.paper;
29
+ },
30
+ justifyContent: "space-between"
31
+ },
32
+ // Only apply header offset when global header exists
33
+ "body:has(#global-header) &": {
34
+ "& .v5-MuiDrawer-paper": {
35
+ top: "64px !important",
36
+ height: "calc(100vh - 64px) !important"
37
+ }
38
+ }
39
+ },
40
+ variant: "persistent",
41
+ open: isDrawerOpen,
42
+ children: /* @__PURE__ */ jsx(Box, { sx: { height: "100%", position: "relative" }, children })
43
+ }
44
+ );
45
+ };
46
+
47
+ export { CustomDrawer };
48
+ //# sourceMappingURL=dev.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.esm.js","sources":["../dev/CustomDrawer.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 Box from '@mui/material/Box';\nimport Drawer from '@mui/material/Drawer';\n\nimport { ThemeConfig } from '@red-hat-developer-hub/backstage-plugin-theme';\n\n/**\n * @internal\n */\nexport type CustomDrawerProps = {\n children: React.ReactNode;\n minWidth?: number;\n maxWidth?: number;\n initialWidth?: number;\n isDrawerOpen: boolean;\n drawerWidth?: number;\n onWidthChange?: (width: number) => void;\n [key: string]: any;\n};\n\n/**\n * @internal\n */\nexport const CustomDrawer = (props: CustomDrawerProps) => {\n const {\n children,\n minWidth = 400,\n maxWidth = 800,\n initialWidth = 400,\n isDrawerOpen,\n drawerWidth,\n onWidthChange,\n ...drawerProps\n } = props;\n\n // Ensure anchor is always 'right' and not overridden by drawerProps\n const { anchor: _, ...restDrawerProps } = drawerProps;\n\n return (\n <Drawer\n {...restDrawerProps}\n anchor=\"right\"\n sx={{\n '& .v5-MuiDrawer-paper': {\n width: drawerWidth || initialWidth,\n boxSizing: 'border-box',\n backgroundColor: theme => {\n const themeConfig = theme as ThemeConfig;\n return (\n themeConfig.palette?.rhdh?.general?.sidebarBackgroundColor ||\n theme.palette.background.paper\n );\n },\n justifyContent: 'space-between',\n },\n // Only apply header offset when global header exists\n 'body:has(#global-header) &': {\n '& .v5-MuiDrawer-paper': {\n top: '64px !important',\n height: 'calc(100vh - 64px) !important',\n },\n },\n }}\n variant=\"persistent\"\n open={isDrawerOpen}\n >\n <Box sx={{ height: '100%', position: 'relative' }}>{children}</Box>\n </Drawer>\n );\n};\n"],"names":[],"mappings":";;;;AAsCO,MAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,QAAA,GAAW,GAAA;AAAA,IACX,QAAA,GAAW,GAAA;AAAA,IACX,YAAA,GAAe,GAAA;AAAA,IACf,YAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAGJ,EAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,GAAG,iBAAgB,GAAI,WAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,eAAA;AAAA,MACJ,MAAA,EAAO,OAAA;AAAA,MACP,EAAA,EAAI;AAAA,QACF,uBAAA,EAAyB;AAAA,UACvB,OAAO,WAAA,IAAe,YAAA;AAAA,UACtB,SAAA,EAAW,YAAA;AAAA,UACX,iBAAiB,CAAA,KAAA,KAAS;AACxB,YAAA,MAAM,WAAA,GAAc,KAAA;AACpB,YAAA,OACE,YAAY,OAAA,EAAS,IAAA,EAAM,SAAS,sBAAA,IACpC,KAAA,CAAM,QAAQ,UAAA,CAAW,KAAA;AAAA,UAE7B,CAAA;AAAA,UACA,cAAA,EAAgB;AAAA,SAClB;AAAA;AAAA,QAEA,4BAAA,EAA8B;AAAA,UAC5B,uBAAA,EAAyB;AAAA,YACvB,GAAA,EAAK,iBAAA;AAAA,YACL,MAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,OAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAM,YAAA;AAAA,MAEN,QAAA,kBAAA,GAAA,CAAC,OAAI,EAAA,EAAI,EAAE,QAAQ,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAW,EAAI,QAAA,EAAS;AAAA;AAAA,GAC/D;AAEJ;;;;"}
@@ -0,0 +1,19 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useCreateNotebook = () => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ const queryClient = useQueryClient();
8
+ return useMutation({
9
+ mutationFn: async ({ name, description }) => {
10
+ return notebooksApi.createSession(name, description);
11
+ },
12
+ onSuccess: () => {
13
+ queryClient.invalidateQueries({ queryKey: ["notebooks", "sessions"] });
14
+ }
15
+ });
16
+ };
17
+
18
+ export { useCreateNotebook };
19
+ //# sourceMappingURL=useCreateNotebook.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateNotebook.esm.js","sources":["../../../src/hooks/notebooks/useCreateNotebook.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 { useApi } from '@backstage/core-plugin-api';\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { NotebookSession } from '../../types';\n\ntype CreateNotebookParams = {\n name: string;\n description?: string;\n};\n\nexport const useCreateNotebook = (): UseMutationResult<\n NotebookSession,\n unknown,\n CreateNotebookParams\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ name, description }: CreateNotebookParams) => {\n return notebooksApi.createSession(name, description);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['notebooks', 'sessions'] });\n },\n });\n};\n"],"names":[],"mappings":";;;;AAgCO,MAAM,oBAAoB,MAI5B;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,EAAE,IAAA,EAAM,aAAY,KAA4B;AACjE,MAAA,OAAO,YAAA,CAAa,aAAA,CAAc,IAAA,EAAM,WAAW,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,IACvE;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,24 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useMutation } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useCreateNotebookMessage = () => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ return useMutation({
8
+ mutationFn: async ({
9
+ prompt,
10
+ sessionId
11
+ }) => {
12
+ if (!sessionId) {
13
+ throw new Error("Failed to generate AI response");
14
+ }
15
+ return await notebooksApi.querySession(sessionId, prompt);
16
+ },
17
+ onError: (error) => {
18
+ console.warn(error);
19
+ }
20
+ });
21
+ };
22
+
23
+ export { useCreateNotebookMessage };
24
+ //# sourceMappingURL=useCreateNotebookMessage.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateNotebookMessage.esm.js","sources":["../../../src/hooks/notebooks/useCreateNotebookMessage.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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\n\nexport type CreateNotebookMessageVariables = {\n prompt: string;\n sessionId: string;\n};\n\nexport const useCreateNotebookMessage = (): UseMutationResult<\n ReadableStreamDefaultReader<Uint8Array>,\n Error,\n CreateNotebookMessageVariables\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n\n return useMutation({\n mutationFn: async ({\n prompt,\n sessionId,\n }: CreateNotebookMessageVariables) => {\n if (!sessionId) {\n throw new Error('Failed to generate AI response');\n }\n\n return await notebooksApi.querySession(sessionId, prompt);\n },\n onError: error => {\n // eslint-disable-next-line\n console.warn(error);\n },\n });\n};\n"],"names":[],"mappings":";;;;AA2BO,MAAM,2BAA2B,MAInC;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAE3C,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,YAAY,OAAO;AAAA,MACjB,MAAA;AAAA,MACA;AAAA,KACF,KAAsC;AACpC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,MAAM,YAAA,CAAa,YAAA,CAAa,SAAA,EAAW,MAAM,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,SAAS,CAAA,KAAA,KAAS;AAEhB,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,19 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useDeleteNotebook = () => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ const queryClient = useQueryClient();
8
+ return useMutation({
9
+ mutationFn: async (sessionId) => {
10
+ await notebooksApi.deleteSession(sessionId);
11
+ },
12
+ onSuccess: () => {
13
+ queryClient.invalidateQueries({ queryKey: ["notebooks", "sessions"] });
14
+ }
15
+ });
16
+ };
17
+
18
+ export { useDeleteNotebook };
19
+ //# sourceMappingURL=useDeleteNotebook.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDeleteNotebook.esm.js","sources":["../../../src/hooks/notebooks/useDeleteNotebook.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 { useApi } from '@backstage/core-plugin-api';\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\n\nexport const useDeleteNotebook = (): UseMutationResult<\n void,\n unknown,\n string\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (sessionId: string) => {\n await notebooksApi.deleteSession(sessionId);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['notebooks', 'sessions'] });\n },\n });\n};\n"],"names":[],"mappings":";;;;AA0BO,MAAM,oBAAoB,MAI5B;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,SAAA,KAAsB;AACvC,MAAA,MAAM,YAAA,CAAa,cAAc,SAAS,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,IACvE;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,40 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQueries } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const POLL_INTERVAL_MS = 5e3;
6
+ const useDocumentStatusPolling = (sessionId, pendingUploads) => {
7
+ const notebooksApi = useApi(notebooksApiRef);
8
+ const results = useQueries({
9
+ queries: pendingUploads.map((upload) => ({
10
+ queryKey: ["notebooks", "documentStatus", sessionId, upload.documentId],
11
+ queryFn: () => notebooksApi.getDocumentStatus(sessionId, upload.documentId),
12
+ refetchInterval: (query) => {
13
+ if (query.state.status === "error") {
14
+ return false;
15
+ }
16
+ const status = query.state.data?.status;
17
+ if (status === "completed" || status === "failed" || status === "cancelled") {
18
+ return false;
19
+ }
20
+ return POLL_INTERVAL_MS;
21
+ },
22
+ retry: 10,
23
+ enabled: Boolean(upload.documentId)
24
+ }))
25
+ });
26
+ return pendingUploads.map((upload, index) => {
27
+ const result = results[index];
28
+ const dataStatus = result?.data?.status;
29
+ const isQueryError = result?.isError;
30
+ return {
31
+ fileName: upload.fileName,
32
+ documentId: upload.documentId,
33
+ status: isQueryError ? "failed" : dataStatus ?? "polling",
34
+ error: result?.data?.error
35
+ };
36
+ });
37
+ };
38
+
39
+ export { useDocumentStatusPolling };
40
+ //# sourceMappingURL=useDocumentStatusPolling.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDocumentStatusPolling.esm.js","sources":["../../../src/hooks/notebooks/useDocumentStatusPolling.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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useQueries } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { DocumentStatus } from '../../types';\n\nexport type PendingUpload = {\n fileName: string;\n documentId: string;\n};\n\nexport type DocumentPollingResult = {\n fileName: string;\n documentId: string;\n status: DocumentStatus['status'] | 'polling';\n error?: string;\n};\n\nconst POLL_INTERVAL_MS = 5000;\n\nexport const useDocumentStatusPolling = (\n sessionId: string,\n pendingUploads: PendingUpload[],\n): DocumentPollingResult[] => {\n const notebooksApi = useApi(notebooksApiRef);\n\n const results = useQueries({\n queries: pendingUploads.map(upload => ({\n queryKey: ['notebooks', 'documentStatus', sessionId, upload.documentId],\n queryFn: () =>\n notebooksApi.getDocumentStatus(sessionId, upload.documentId),\n refetchInterval: (query: {\n state: { data?: DocumentStatus; status: string };\n }) => {\n if (query.state.status === 'error') {\n return false;\n }\n const status = query.state.data?.status;\n if (\n status === 'completed' ||\n status === 'failed' ||\n status === 'cancelled'\n ) {\n return false;\n }\n return POLL_INTERVAL_MS;\n },\n retry: 10,\n enabled: Boolean(upload.documentId),\n })),\n });\n\n return pendingUploads.map((upload, index) => {\n const result = results[index];\n const dataStatus = result?.data?.status;\n const isQueryError = result?.isError;\n return {\n fileName: upload.fileName,\n documentId: upload.documentId,\n status: isQueryError ? 'failed' : (dataStatus ?? 'polling'),\n error: result?.data?.error,\n };\n });\n};\n"],"names":[],"mappings":";;;;AAmCA,MAAM,gBAAA,GAAmB,GAAA;AAElB,MAAM,wBAAA,GAA2B,CACtC,SAAA,EACA,cAAA,KAC4B;AAC5B,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAE3C,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,OAAA,EAAS,cAAA,CAAe,GAAA,CAAI,CAAA,MAAA,MAAW;AAAA,MACrC,UAAU,CAAC,WAAA,EAAa,gBAAA,EAAkB,SAAA,EAAW,OAAO,UAAU,CAAA;AAAA,MACtE,SAAS,MACP,YAAA,CAAa,iBAAA,CAAkB,SAAA,EAAW,OAAO,UAAU,CAAA;AAAA,MAC7D,eAAA,EAAiB,CAAC,KAAA,KAEZ;AACJ,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,OAAA,EAAS;AAClC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,MAAA;AACjC,QAAA,IACE,MAAA,KAAW,WAAA,IACX,MAAA,KAAW,QAAA,IACX,WAAW,WAAA,EACX;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,gBAAA;AAAA,MACT,CAAA;AAAA,MACA,KAAA,EAAO,EAAA;AAAA,MACP,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,UAAU;AAAA,KACpC,CAAE;AAAA,GACH,CAAA;AAED,EAAA,OAAO,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAC3C,IAAA,MAAM,MAAA,GAAS,QAAQ,KAAK,CAAA;AAC5B,IAAA,MAAM,UAAA,GAAa,QAAQ,IAAA,EAAM,MAAA;AACjC,IAAA,MAAM,eAAe,MAAA,EAAQ,OAAA;AAC7B,IAAA,OAAO;AAAA,MACL,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,MAAA,EAAQ,YAAA,GAAe,QAAA,GAAY,UAAA,IAAc,SAAA;AAAA,MACjD,KAAA,EAAO,QAAQ,IAAA,EAAM;AAAA,KACvB;AAAA,EACF,CAAC,CAAA;AACH;;;;"}
@@ -0,0 +1,15 @@
1
+ import { usePermission } from '@backstage/plugin-permission-react';
2
+ import { lightspeedNotebooksUsePermission } from '@red-hat-developer-hub/backstage-plugin-intelligent-assistant-common';
3
+
4
+ const useLightspeedNotebooksPermission = () => {
5
+ const result = usePermission({
6
+ permission: lightspeedNotebooksUsePermission
7
+ });
8
+ return {
9
+ loading: result.loading,
10
+ allowed: result.allowed
11
+ };
12
+ };
13
+
14
+ export { useLightspeedNotebooksPermission };
15
+ //# sourceMappingURL=useLightspeedNotebooksPermission.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLightspeedNotebooksPermission.esm.js","sources":["../../../src/hooks/notebooks/useLightspeedNotebooksPermission.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 { usePermission } from '@backstage/plugin-permission-react';\n\nimport { lightspeedNotebooksUsePermission } from '@red-hat-developer-hub/backstage-plugin-intelligent-assistant-common';\n\nexport const useLightspeedNotebooksPermission = () => {\n const result = usePermission({\n permission: lightspeedNotebooksUsePermission,\n });\n\n return {\n loading: result.loading,\n allowed: result.allowed,\n };\n};\n"],"names":[],"mappings":";;;AAoBO,MAAM,mCAAmC,MAAM;AACpD,EAAA,MAAM,SAAS,aAAA,CAAc;AAAA,IAC3B,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO;AAAA,GAClB;AACF;;;;"}
@@ -0,0 +1,18 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useNotebookDocuments = (sessionId) => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ return useQuery({
8
+ queryKey: ["notebooks", "documents", sessionId],
9
+ queryFn: async () => {
10
+ return await notebooksApi.listDocuments(sessionId);
11
+ },
12
+ enabled: Boolean(sessionId),
13
+ staleTime: 0
14
+ });
15
+ };
16
+
17
+ export { useNotebookDocuments };
18
+ //# sourceMappingURL=useNotebookDocuments.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNotebookDocuments.esm.js","sources":["../../../src/hooks/notebooks/useNotebookDocuments.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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { SessionDocument } from '../../types';\n\nexport const useNotebookDocuments = (\n sessionId?: string,\n): UseQueryResult<SessionDocument[], Error> => {\n const notebooksApi = useApi(notebooksApiRef);\n return useQuery({\n queryKey: ['notebooks', 'documents', sessionId],\n queryFn: async () => {\n return await notebooksApi.listDocuments(sessionId!);\n },\n enabled: Boolean(sessionId),\n staleTime: 0,\n });\n};\n"],"names":[],"mappings":";;;;AAuBO,MAAM,oBAAA,GAAuB,CAClC,SAAA,KAC6C;AAC7C,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,SAAS,CAAA;AAAA,IAC9C,SAAS,YAAY;AACnB,MAAA,OAAO,MAAM,YAAA,CAAa,aAAA,CAAc,SAAU,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA,IAC1B,SAAA,EAAW;AAAA,GACZ,CAAA;AACH;;;;"}
@@ -0,0 +1,18 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useNotebookSession = (sessionId) => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ return useQuery({
8
+ queryKey: ["notebooks", "session", sessionId],
9
+ queryFn: async () => {
10
+ return await notebooksApi.getSession(sessionId);
11
+ },
12
+ enabled: Boolean(sessionId),
13
+ staleTime: 1e3 * 60
14
+ });
15
+ };
16
+
17
+ export { useNotebookSession };
18
+ //# sourceMappingURL=useNotebookSession.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNotebookSession.esm.js","sources":["../../../src/hooks/notebooks/useNotebookSession.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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { NotebookSession } from '../../types';\n\nexport const useNotebookSession = (\n sessionId?: string,\n): UseQueryResult<NotebookSession, Error> => {\n const notebooksApi = useApi(notebooksApiRef);\n return useQuery({\n queryKey: ['notebooks', 'session', sessionId],\n queryFn: async () => {\n return await notebooksApi.getSession(sessionId!);\n },\n enabled: Boolean(sessionId),\n staleTime: 1000 * 60,\n });\n};\n"],"names":[],"mappings":";;;;AAuBO,MAAM,kBAAA,GAAqB,CAChC,SAAA,KAC2C;AAC3C,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,WAAA,EAAa,SAAA,EAAW,SAAS,CAAA;AAAA,IAC5C,SAAS,YAAY;AACnB,MAAA,OAAO,MAAM,YAAA,CAAa,UAAA,CAAW,SAAU,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA,IAC1B,WAAW,GAAA,GAAO;AAAA,GACnB,CAAA;AACH;;;;"}
@@ -0,0 +1,18 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useNotebookSessions = (enabled = true) => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ return useQuery({
8
+ queryKey: ["notebooks", "sessions"],
9
+ queryFn: async () => {
10
+ return await notebooksApi.listSessions();
11
+ },
12
+ enabled,
13
+ staleTime: 1e3 * 60
14
+ });
15
+ };
16
+
17
+ export { useNotebookSessions };
18
+ //# sourceMappingURL=useNotebookSessions.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNotebookSessions.esm.js","sources":["../../../src/hooks/notebooks/useNotebookSessions.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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { NotebookSession } from '../../types';\n\nexport const useNotebookSessions = (\n enabled: boolean = true,\n): UseQueryResult<NotebookSession[], Error> => {\n const notebooksApi = useApi(notebooksApiRef);\n return useQuery({\n queryKey: ['notebooks', 'sessions'],\n queryFn: async () => {\n return await notebooksApi.listSessions();\n },\n enabled,\n staleTime: 1000 * 60,\n });\n};\n"],"names":[],"mappings":";;;;AAuBO,MAAM,mBAAA,GAAsB,CACjC,OAAA,GAAmB,IAAA,KAC0B;AAC7C,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,WAAA,EAAa,UAAU,CAAA;AAAA,IAClC,SAAS,YAAY;AACnB,MAAA,OAAO,MAAM,aAAa,YAAA,EAAa;AAAA,IACzC,CAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAW,GAAA,GAAO;AAAA,GACnB,CAAA;AACH;;;;"}
@@ -0,0 +1,19 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+
5
+ const useRenameNotebook = () => {
6
+ const notebooksApi = useApi(notebooksApiRef);
7
+ const queryClient = useQueryClient();
8
+ return useMutation({
9
+ mutationFn: async (payload) => {
10
+ await notebooksApi.renameSession(payload.sessionId, payload.name);
11
+ },
12
+ onSuccess: () => {
13
+ queryClient.invalidateQueries({ queryKey: ["notebooks", "sessions"] });
14
+ }
15
+ });
16
+ };
17
+
18
+ export { useRenameNotebook };
19
+ //# sourceMappingURL=useRenameNotebook.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRenameNotebook.esm.js","sources":["../../../src/hooks/notebooks/useRenameNotebook.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 { useApi } from '@backstage/core-plugin-api';\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\n\ntype RenameNotebookPayload = {\n sessionId: string;\n name: string;\n};\n\nexport const useRenameNotebook = (): UseMutationResult<\n void,\n unknown,\n RenameNotebookPayload\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: RenameNotebookPayload) => {\n await notebooksApi.renameSession(payload.sessionId, payload.name);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['notebooks', 'sessions'] });\n },\n });\n};\n"],"names":[],"mappings":";;;;AA+BO,MAAM,oBAAoB,MAI5B;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,OAAA,KAAmC;AACpD,MAAA,MAAM,YAAA,CAAa,aAAA,CAAc,OAAA,CAAQ,SAAA,EAAW,QAAQ,IAAI,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,IACvE;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,28 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
3
+ import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
4
+ import { NOTEBOOK_EXTENSION_TO_FILE_TYPE } from '../../const.esm.js';
5
+
6
+ const getFileType = (fileName) => {
7
+ const lastDot = fileName.lastIndexOf(".");
8
+ const ext = lastDot >= 0 ? fileName.slice(lastDot).toLowerCase() : "";
9
+ return NOTEBOOK_EXTENSION_TO_FILE_TYPE[ext] ?? "txt";
10
+ };
11
+ const useUploadDocument = () => {
12
+ const notebooksApi = useApi(notebooksApiRef);
13
+ const queryClient = useQueryClient();
14
+ return useMutation({
15
+ mutationFn: async ({ sessionId, file }) => {
16
+ const fileType = getFileType(file.name);
17
+ return notebooksApi.uploadDocument(sessionId, file, fileType, file.name);
18
+ },
19
+ onSuccess: (_data, variables) => {
20
+ queryClient.invalidateQueries({
21
+ queryKey: ["notebooks", "documents", variables.sessionId]
22
+ });
23
+ }
24
+ });
25
+ };
26
+
27
+ export { useUploadDocument };
28
+ //# sourceMappingURL=useUploadDocument.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadDocument.esm.js","sources":["../../../src/hooks/notebooks/useUploadDocument.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 { useApi } from '@backstage/core-plugin-api';\n\nimport {\n useMutation,\n useQueryClient,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { NOTEBOOK_EXTENSION_TO_FILE_TYPE } from '../../const';\nimport { UploadDocumentResponse } from '../../types';\n\ntype UploadDocumentParams = {\n sessionId: string;\n file: File;\n};\n\nconst getFileType = (fileName: string): string => {\n const lastDot = fileName.lastIndexOf('.');\n const ext = lastDot >= 0 ? fileName.slice(lastDot).toLowerCase() : '';\n return NOTEBOOK_EXTENSION_TO_FILE_TYPE[ext] ?? 'txt';\n};\n\nexport const useUploadDocument = (): UseMutationResult<\n UploadDocumentResponse,\n Error,\n UploadDocumentParams\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ sessionId, file }: UploadDocumentParams) => {\n const fileType = getFileType(file.name);\n return notebooksApi.uploadDocument(sessionId, file, fileType, file.name);\n },\n onSuccess: (_data, variables) => {\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', variables.sessionId],\n });\n },\n });\n};\n"],"names":[],"mappings":";;;;;AAiCA,MAAM,WAAA,GAAc,CAAC,QAAA,KAA6B;AAChD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,WAAW,CAAA,GAAI,QAAA,CAAS,MAAM,OAAO,CAAA,CAAE,aAAY,GAAI,EAAA;AACnE,EAAA,OAAO,+BAAA,CAAgC,GAAG,CAAA,IAAK,KAAA;AACjD,CAAA;AAEO,MAAM,oBAAoB,MAI5B;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,EAAE,SAAA,EAAW,MAAK,KAA4B;AAC/D,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACtC,MAAA,OAAO,aAAa,cAAA,CAAe,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,KAAK,IAAI,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAO,SAAA,KAAc;AAC/B,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,UAAU,SAAS;AAAA,OACzD,CAAA;AAAA,IACH;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,61 @@
1
+ const MAX_TOOL_CALLS_CACHE_KEYS = 256;
2
+ const sharedToolCallsCache = {};
3
+ const keyOrder = [];
4
+ function removeKeyFromOrder(key) {
5
+ const i = keyOrder.indexOf(key);
6
+ if (i >= 0) {
7
+ keyOrder.splice(i, 1);
8
+ }
9
+ }
10
+ function touchCacheKey(key) {
11
+ removeKeyFromOrder(key);
12
+ keyOrder.push(key);
13
+ while (keyOrder.length > MAX_TOOL_CALLS_CACHE_KEYS) {
14
+ const oldest = keyOrder.shift();
15
+ if (oldest) {
16
+ delete sharedToolCallsCache[oldest];
17
+ }
18
+ }
19
+ }
20
+ function getSharedToolCallsCache(key) {
21
+ const v = sharedToolCallsCache[key];
22
+ return v?.length ? v : void 0;
23
+ }
24
+ function setSharedToolCallsCache(key, toolCalls) {
25
+ sharedToolCallsCache[key] = toolCalls;
26
+ touchCacheKey(key);
27
+ }
28
+ function clearSharedToolCallsCacheForConversation(conversationId) {
29
+ const prefix = `${conversationId}-`;
30
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
31
+ if (key.startsWith(prefix)) {
32
+ delete sharedToolCallsCache[key];
33
+ removeKeyFromOrder(key);
34
+ }
35
+ }
36
+ }
37
+ function migrateSharedToolCallsCacheSessionPrefixToConversation(sessionPrefix, newConversationId) {
38
+ const keyPrefix = `${sessionPrefix}-`;
39
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
40
+ if (key.startsWith(keyPrefix)) {
41
+ const messageIndex = key.slice(keyPrefix.length);
42
+ const newKey = `${newConversationId}-${messageIndex}`;
43
+ sharedToolCallsCache[newKey] = sharedToolCallsCache[key];
44
+ delete sharedToolCallsCache[key];
45
+ removeKeyFromOrder(key);
46
+ touchCacheKey(newKey);
47
+ }
48
+ }
49
+ }
50
+ function clearSharedToolCallsCacheSessionPrefix(sessionPrefix) {
51
+ const keyPrefix = `${sessionPrefix}-`;
52
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
53
+ if (key.startsWith(keyPrefix)) {
54
+ delete sharedToolCallsCache[key];
55
+ removeKeyFromOrder(key);
56
+ }
57
+ }
58
+ }
59
+
60
+ export { clearSharedToolCallsCacheForConversation, clearSharedToolCallsCacheSessionPrefix, getSharedToolCallsCache, migrateSharedToolCallsCacheSessionPrefixToConversation, setSharedToolCallsCache };
61
+ //# sourceMappingURL=toolCallsCacheStore.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolCallsCacheStore.esm.js","sources":["../../src/hooks/toolCallsCacheStore.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 { ToolCall } from '../types';\n\n/**\n * Caps how many conversation/message-index entries we retain. Oldest touched\n * entries are evicted first (approximate LRU via insertion order in keyOrder).\n */\nconst MAX_TOOL_CALLS_CACHE_KEYS = 256;\n\nconst sharedToolCallsCache: Record<string, ToolCall[]> = {};\nconst keyOrder: string[] = [];\n\nfunction removeKeyFromOrder(key: string) {\n const i = keyOrder.indexOf(key);\n if (i >= 0) {\n keyOrder.splice(i, 1);\n }\n}\n\nfunction touchCacheKey(key: string) {\n removeKeyFromOrder(key);\n keyOrder.push(key);\n while (keyOrder.length > MAX_TOOL_CALLS_CACHE_KEYS) {\n const oldest = keyOrder.shift();\n if (oldest) {\n delete sharedToolCallsCache[oldest];\n }\n }\n}\n\nexport function getSharedToolCallsCache(key: string): ToolCall[] | undefined {\n const v = sharedToolCallsCache[key];\n return v?.length ? v : undefined;\n}\n\nexport function setSharedToolCallsCache(key: string, toolCalls: ToolCall[]) {\n sharedToolCallsCache[key] = toolCalls;\n touchCacheKey(key);\n}\n\n/**\n * Drop all cached tool rows for a conversation (e.g. after server delete).\n */\nexport function clearSharedToolCallsCacheForConversation(\n conversationId: string,\n) {\n const prefix = `${conversationId}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(prefix)) {\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n }\n }\n}\n\n/**\n * Moves tool-call cache entries from a per-stream session prefix (used while\n * conversation id is still temp) to the persisted conversation id. Only keys\n * for this prefix are migrated so a late stream cannot clobber another temp\n * session.\n */\nexport function migrateSharedToolCallsCacheSessionPrefixToConversation(\n sessionPrefix: string,\n newConversationId: string,\n) {\n const keyPrefix = `${sessionPrefix}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(keyPrefix)) {\n const messageIndex = key.slice(keyPrefix.length);\n const newKey = `${newConversationId}-${messageIndex}`;\n sharedToolCallsCache[newKey] = sharedToolCallsCache[key];\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n touchCacheKey(newKey);\n }\n }\n}\n\n/** Removes cache entries written under a per-temp-stream session prefix. */\nexport function clearSharedToolCallsCacheSessionPrefix(sessionPrefix: string) {\n const keyPrefix = `${sessionPrefix}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(keyPrefix)) {\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n }\n }\n}\n\n/** Clears the store; only used from unit tests. */\nexport function resetSharedToolCallsCacheStoreForTests() {\n for (const key of Object.keys(sharedToolCallsCache)) {\n delete sharedToolCallsCache[key];\n }\n keyOrder.length = 0;\n}\n"],"names":[],"mappings":"AAsBA,MAAM,yBAAA,GAA4B,GAAA;AAElC,MAAM,uBAAmD,EAAC;AAC1D,MAAM,WAAqB,EAAC;AAE5B,SAAS,mBAAmB,GAAA,EAAa;AACvC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,KAAK,CAAA,EAAG;AACV,IAAA,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACtB;AACF;AAEA,SAAS,cAAc,GAAA,EAAa;AAClC,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACtB,EAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,EAAA,OAAO,QAAA,CAAS,SAAS,yBAAA,EAA2B;AAClD,IAAA,MAAM,MAAA,GAAS,SAAS,KAAA,EAAM;AAC9B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,qBAAqB,MAAM,CAAA;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB,GAAA,EAAqC;AAC3E,EAAA,MAAM,CAAA,GAAI,qBAAqB,GAAG,CAAA;AAClC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,GAAI,MAAA;AACzB;AAEO,SAAS,uBAAA,CAAwB,KAAa,SAAA,EAAuB;AAC1E,EAAA,oBAAA,CAAqB,GAAG,CAAA,GAAI,SAAA;AAC5B,EAAA,aAAA,CAAc,GAAG,CAAA;AACnB;AAKO,SAAS,yCACd,cAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,GAAG,cAAc,CAAA,CAAA,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAA,CAAK,oBAAoB,CAAC,CAAA,EAAG;AACxD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,IACxB;AAAA,EACF;AACF;AAQO,SAAS,sDAAA,CACd,eACA,iBAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,GAAG,aAAa,CAAA,CAAA,CAAA;AAClC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAA,CAAK,oBAAoB,CAAC,CAAA,EAAG;AACxD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,YAAA,GAAe,GAAA,CAAI,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAC/C,MAAA,MAAM,MAAA,GAAS,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AACnD,MAAA,oBAAA,CAAqB,MAAM,CAAA,GAAI,oBAAA,CAAqB,GAAG,CAAA;AACvD,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AACtB,MAAA,aAAA,CAAc,MAAM,CAAA;AAAA,IACtB;AAAA,EACF;AACF;AAGO,SAAS,uCAAuC,aAAA,EAAuB;AAC5E,EAAA,MAAM,SAAA,GAAY,GAAG,aAAa,CAAA,CAAA,CAAA;AAClC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAA,CAAK,oBAAoB,CAAC,CAAA,EAAG;AACxD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,IACxB;AAAA,EACF;AACF;;;;"}