@red-hat-developer-hub/backstage-plugin-intelligent-assistant 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/README.md +7 -7
- package/config.d.ts +27 -0
- package/dist/alpha.d.ts +21 -7
- package/dist/api/NotebooksApiClient.esm.js +10 -0
- package/dist/api/NotebooksApiClient.esm.js.map +1 -1
- package/dist/api/notebooksApi.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +50 -37
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatContainer.esm.js +7 -5
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
- package/dist/components/McpServersSettings.esm.js +4 -3
- package/dist/components/McpServersSettings.esm.js.map +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js +181 -66
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DocumentSidebar.esm.js +258 -27
- package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
- package/dist/components/notebooks/FileListItem.esm.js +15 -9
- package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookCard.esm.js +71 -14
- package/dist/components/notebooks/NotebookCard.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +202 -42
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +122 -42
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
- package/dist/components/notebooks/UploadResourceScreen.esm.js +0 -1
- package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
- package/dist/const.esm.js +2 -1
- package/dist/const.esm.js.map +1 -1
- package/dist/hooks/notebooks/useInlineEdit.esm.js +60 -0
- package/dist/hooks/notebooks/useInlineEdit.esm.js.map +1 -0
- package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js +4 -3
- package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js.map +1 -1
- package/dist/hooks/notebooks/useRenameDocument.esm.js +50 -0
- package/dist/hooks/notebooks/useRenameDocument.esm.js.map +1 -0
- package/dist/hooks/notebooks/useRenameNotebook.esm.js +48 -1
- package/dist/hooks/notebooks/useRenameNotebook.esm.js.map +1 -1
- package/dist/hooks/notebooks/useRenameNotebookWithAlert.esm.js +34 -0
- package/dist/hooks/notebooks/useRenameNotebookWithAlert.esm.js.map +1 -0
- package/dist/hooks/useLightspeedDeletePermission.esm.js +2 -2
- package/dist/hooks/useLightspeedDeletePermission.esm.js.map +1 -1
- package/dist/hooks/useLightspeedUpdatePermission.esm.js +2 -2
- package/dist/hooks/useLightspeedUpdatePermission.esm.js.map +1 -1
- package/dist/hooks/useLightspeedViewPermission.esm.js +6 -4
- package/dist/hooks/useLightspeedViewPermission.esm.js.map +1 -1
- package/dist/translations/de.esm.js +31 -17
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +31 -17
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +31 -17
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +31 -17
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +31 -17
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +32 -18
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/utils/notebook-upload-runner.esm.js +16 -0
- package/dist/utils/notebook-upload-runner.esm.js.map +1 -0
- package/package.json +4 -3
- package/dist/components/notebooks/RenameNotebookModal.esm.js +0 -187
- package/dist/components/notebooks/RenameNotebookModal.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
# @red-hat-developer-hub/backstage-plugin-intelligent-assistant
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- adb65c9: Breaking changes to MCP permissions using behavior-linked vocabulary rather than CRUD-linked vocabulary:
|
|
8
|
+
|
|
9
|
+
| Before (Lightspeed) | Before (Intelligent Assistant) | After |
|
|
10
|
+
| ----------------------- | ---------------------------------- | ------------------ |
|
|
11
|
+
| `lightspeed.mcp.read` | `intelligent-assistant.mcp.read` | `mcp.tools.use` |
|
|
12
|
+
| `lightspeed.mcp.manage` | `intelligent-assistant.mcp.manage` | `mcp.tools.manage` |
|
|
13
|
+
|
|
14
|
+
Removed permission CRUD action attributes; RBAC entries for these permission sets now use the generic `use` action.
|
|
15
|
+
|
|
16
|
+
Permission variable renamed from `iaMcpReadPermission` to `iaMcpUsePermission`; `iaMcpManagePermission` keeps its name.
|
|
17
|
+
|
|
18
|
+
Plugin documentation and example RBAC policy CSV updated to reflect the new MCP permission names.
|
|
19
|
+
|
|
20
|
+
- 0ed3adc: Breaking changes to the notebooks permissions model that uses behavior-linked vocabulary:
|
|
21
|
+
|
|
22
|
+
| Before (Lightspeed) | Before (Intelligent Assistant) | After |
|
|
23
|
+
| -------------------------- | ------------------------------------- | ---------------------------------------- |
|
|
24
|
+
| `lightspeed.notebooks.use` | `intelligent-assistant.notebooks.use` | `intelligent-assistant.notebooks.use` |
|
|
25
|
+
| | | `intelligent-assistant.notebooks.manage` |
|
|
26
|
+
- `notebooks.use` covers list/read/create session, upload document, and query endpoints
|
|
27
|
+
- `notebooks.manage` covers update/delete session and document endpoints
|
|
28
|
+
|
|
29
|
+
Removed permission CRUD action attributes; RBAC entries for notebooks permission sets now use the generic `use` action.
|
|
30
|
+
|
|
31
|
+
Hard-coded permission names were replaced by constants from the permission entities.
|
|
32
|
+
|
|
33
|
+
Plugin documentation and example RBAC policy CSV updated to reflect the notebooks permission model.
|
|
34
|
+
|
|
35
|
+
- f1dba9b: Breaking changes to the permissions model that uses behavior-linked vocabulary rather than CRUD-linked vocabulary:
|
|
36
|
+
|
|
37
|
+
| Before (Lightspeed) | Before (Intelligent Assistant) | After |
|
|
38
|
+
| ------------------------ | ----------------------------------- | ----------------------------------- |
|
|
39
|
+
| `lightspeed.chat.read` | `intelligent-assistant.chat.read` | `intelligent-assistant.chat.access` |
|
|
40
|
+
| `lightspeed.chat.create` | `intelligent-assistant.chat.create` | `intelligent-assistant.chat.use` |
|
|
41
|
+
| `lightspeed.chat.delete` | `intelligent-assistant.chat.delete` | `intelligent-assistant.chat.manage` |
|
|
42
|
+
| `lightspeed.chat.update` | `intelligent-assistant.chat.update` | `intelligent-assistant.chat.manage` |
|
|
43
|
+
|
|
44
|
+
Changes are applied to `lightspeed` (Frontend), `lightspeed-backend`, and `lightspeed-common` plugins.
|
|
45
|
+
|
|
46
|
+
Removed permission CRUD action attributes, rbac entries for permission sets now to generic 'use' action, allows `intelligent-assistant.chat.manage` to combine the update and delete actions.
|
|
47
|
+
|
|
48
|
+
Any hard-coded permission names have been replaced by constants, source references permission names from the permission entities.
|
|
49
|
+
|
|
50
|
+
`Trans.test.tsx` component test unit has permission names to reflect Intelligent Assistant for RHDH.
|
|
51
|
+
|
|
52
|
+
Additionally, hard-coded permission names have been replaced by local constants with the new names set.
|
|
53
|
+
|
|
54
|
+
Plugin documentation changes to revise information to permissions model changes to Intelligent Assistant for RHDH.
|
|
55
|
+
|
|
56
|
+
Changed permission variable 'lightspeed' prefix to 'ia' to use Intelligent Assistant rebranding.
|
|
57
|
+
|
|
58
|
+
Changes to example RBAC policy CSV file to reflect Intelligent Assistant for RHDH.
|
|
59
|
+
|
|
60
|
+
### Minor Changes
|
|
61
|
+
|
|
62
|
+
- 4a8aa72: Replace modal-based notebook rename with inline double-click-to-edit rename on notebook cards and sidebar, and remove redundant PatternFly CSS overrides.
|
|
63
|
+
- e996529: Add inline rename for notebook resources with click or kebab menu, optimistic updates with rollback, frontend conflict validation, and backend PATCH endpoint with rollback on failure
|
|
64
|
+
- b2f8ea7: Add screenshot capture utility with sensitive data redaction and performance guardrails for deep context awareness
|
|
65
|
+
|
|
66
|
+
### Patch Changes
|
|
67
|
+
|
|
68
|
+
- fe5a58e: Improve notebook UI: enhance AddDocumentModal, OverwriteConfirmModal, NotebookCard, and NotebookView components with better UX text, document count formatting, and fix translation type errors
|
|
69
|
+
- bb7a863: Fix singular/plural handling for notebook card and document sidebar resource count using i18next `_one`/`_other` suffix keys.
|
|
70
|
+
- 549abd8: Fix MCP settings panel layout in docked and overlay modes to fill available space and remove gray borders
|
|
71
|
+
- 82742f0: Unify notebook terminology from "document" to "resource" across all UI strings, translations, and backend messages.
|
|
72
|
+
- e919230: bump monaco-editor to v0.56.0 to pick up dompurify update
|
|
73
|
+
- Updated dependencies [3d1d7d7]
|
|
74
|
+
- Updated dependencies [adb65c9]
|
|
75
|
+
- Updated dependencies [0ed3adc]
|
|
76
|
+
- Updated dependencies [f1dba9b]
|
|
77
|
+
- @red-hat-developer-hub/backstage-plugin-intelligent-assistant-common@4.0.0
|
|
78
|
+
|
|
3
79
|
## 3.2.0
|
|
4
80
|
|
|
5
81
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -37,17 +37,17 @@ The Lightspeed plugin has support for the permission framework.
|
|
|
37
37
|
- When [RBAC permission](https://github.com/backstage/community-plugins/tree/main/workspaces/rbac/plugins/rbac-backend#installation) framework is enabled, for non-admin users to access lightspeed UI, the role associated with your user should have the following permission policies associated with it. Add the following in your permission policies configuration file named `rbac-policy.csv`:
|
|
38
38
|
|
|
39
39
|
```CSV
|
|
40
|
-
p, role:default/team_a, intelligent-assistant.chat.
|
|
41
|
-
p, role:default/team_a, intelligent-assistant.chat.
|
|
42
|
-
p, role:default/team_a, intelligent-assistant.chat.
|
|
43
|
-
p, role:default/team_a, intelligent-assistant.chat.update, update, allow
|
|
40
|
+
p, role:default/team_a, intelligent-assistant.chat.access, use, allow
|
|
41
|
+
p, role:default/team_a, intelligent-assistant.chat.use, use, allow
|
|
42
|
+
p, role:default/team_a, intelligent-assistant.chat.manage, use, allow
|
|
44
43
|
|
|
45
44
|
# Required for Notebooks feature (if enabled)
|
|
46
|
-
p, role:default/team_a, intelligent-assistant.notebooks.use,
|
|
45
|
+
p, role:default/team_a, intelligent-assistant.notebooks.use, use, allow
|
|
46
|
+
p, role:default/team_a, intelligent-assistant.notebooks.manage, use, allow
|
|
47
47
|
|
|
48
48
|
# Required for MCP server management (if configured)
|
|
49
|
-
p, role:default/team_a,
|
|
50
|
-
p, role:default/team_a,
|
|
49
|
+
p, role:default/team_a, mcp.tools.use, use, allow
|
|
50
|
+
p, role:default/team_a, mcp.tools.manage, use, allow
|
|
51
51
|
|
|
52
52
|
# Required for saved prompts
|
|
53
53
|
p, role:default/team_a, intelligent-assistant.saved-prompts.manage, update, allow
|
package/config.d.ts
CHANGED
|
@@ -68,5 +68,32 @@ export interface Config {
|
|
|
68
68
|
provider_id: string;
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* Configuration for Screen Context (deep context awareness)
|
|
73
|
+
* @visibility frontend
|
|
74
|
+
*/
|
|
75
|
+
'screen-context'?: {
|
|
76
|
+
/**
|
|
77
|
+
* Enable/disable the Screen Context feature.
|
|
78
|
+
* When enabled, the assistant can capture the user's current RHDH screen
|
|
79
|
+
* to provide context-aware responses.
|
|
80
|
+
* @default false
|
|
81
|
+
* @visibility frontend
|
|
82
|
+
*/
|
|
83
|
+
enabled?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Screenshot capture configuration
|
|
86
|
+
* @visibility frontend
|
|
87
|
+
*/
|
|
88
|
+
screenshots?: {
|
|
89
|
+
/**
|
|
90
|
+
* Enable/disable screenshot capture within Screen Context.
|
|
91
|
+
* Admin can disable screenshots org-wide while keeping DOM text context.
|
|
92
|
+
* @default true
|
|
93
|
+
* @visibility frontend
|
|
94
|
+
*/
|
|
95
|
+
enabled?: boolean;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
71
98
|
};
|
|
72
99
|
}
|
package/dist/alpha.d.ts
CHANGED
|
@@ -45,14 +45,12 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
|
|
|
45
45
|
readonly 'notebooks.empty.title': string;
|
|
46
46
|
readonly 'notebooks.empty.description': string;
|
|
47
47
|
readonly 'notebooks.empty.action': string;
|
|
48
|
-
readonly 'notebooks.
|
|
48
|
+
readonly 'notebooks.documents_one': string;
|
|
49
|
+
readonly 'notebooks.documents_other': string;
|
|
49
50
|
readonly 'notebooks.actions.rename': string;
|
|
50
51
|
readonly 'notebooks.actions.delete': string;
|
|
51
|
-
readonly 'notebooks.rename.
|
|
52
|
-
readonly 'notebooks.rename.
|
|
53
|
-
readonly 'notebooks.rename.label': string;
|
|
54
|
-
readonly 'notebooks.rename.placeholder': string;
|
|
55
|
-
readonly 'notebooks.rename.action': string;
|
|
52
|
+
readonly 'notebooks.rename.inline.tooltip': string;
|
|
53
|
+
readonly 'notebooks.rename.inline.error': string;
|
|
56
54
|
readonly 'notebooks.delete.title': string;
|
|
57
55
|
readonly 'notebooks.delete.message': string;
|
|
58
56
|
readonly 'notebooks.delete.action': string;
|
|
@@ -64,7 +62,8 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
|
|
|
64
62
|
readonly 'notebooks.card.openAria': string;
|
|
65
63
|
readonly 'notebook.view.title': string;
|
|
66
64
|
readonly 'notebook.view.close': string;
|
|
67
|
-
readonly 'notebook.view.documents.
|
|
65
|
+
readonly 'notebook.view.documents.count_one': string;
|
|
66
|
+
readonly 'notebook.view.documents.count_other': string;
|
|
68
67
|
readonly 'notebook.view.documents.add': string;
|
|
69
68
|
readonly 'notebook.view.upload.heading': string;
|
|
70
69
|
readonly 'notebook.view.upload.action': string;
|
|
@@ -84,15 +83,30 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
|
|
|
84
83
|
readonly 'notebook.upload.modal.browseButton': string;
|
|
85
84
|
readonly 'notebook.upload.modal.separator': string;
|
|
86
85
|
readonly 'notebook.upload.modal.infoText': string;
|
|
86
|
+
readonly 'notebook.upload.modal.supportedFormats': string;
|
|
87
|
+
readonly 'notebook.upload.modal.maxFileSize': string;
|
|
87
88
|
readonly 'notebook.upload.modal.selectedFiles': string;
|
|
88
89
|
readonly 'notebook.upload.modal.addButton': string;
|
|
90
|
+
readonly 'notebook.upload.modal.addButtonEmpty': string;
|
|
89
91
|
readonly 'notebook.upload.modal.removeFile': string;
|
|
90
92
|
readonly 'notebook.upload.error.unsupportedType': string;
|
|
91
93
|
readonly 'notebook.upload.error.fileTooLarge': string;
|
|
92
94
|
readonly 'notebook.upload.error.tooManyFiles': string;
|
|
93
95
|
readonly 'notebook.overwrite.modal.title': string;
|
|
96
|
+
readonly 'notebook.overwrite.modal.title.one': string;
|
|
97
|
+
readonly 'notebook.overwrite.modal.title.other': string;
|
|
94
98
|
readonly 'notebook.overwrite.modal.description': string;
|
|
99
|
+
readonly 'notebook.overwrite.modal.description.one': string;
|
|
100
|
+
readonly 'notebook.overwrite.modal.description.other': string;
|
|
101
|
+
readonly 'notebook.overwrite.modal.replace': string;
|
|
102
|
+
readonly 'notebook.overwrite.modal.ignore': string;
|
|
95
103
|
readonly 'notebook.overwrite.modal.action': string;
|
|
104
|
+
readonly 'notebook.overwrite.modal.back': string;
|
|
105
|
+
readonly 'notebook.document.rename': string;
|
|
106
|
+
readonly 'notebook.document.rename.tooltip': string;
|
|
107
|
+
readonly 'notebook.document.rename.error': string;
|
|
108
|
+
readonly 'notebook.document.rename.conflict': string;
|
|
109
|
+
readonly 'notebook.document.rename.tooLong': string;
|
|
96
110
|
readonly 'notebook.document.delete': string;
|
|
97
111
|
readonly 'notebook.document.delete.title': string;
|
|
98
112
|
readonly 'notebook.document.delete.description': string;
|
|
@@ -132,6 +132,16 @@ class NotebooksApiClient {
|
|
|
132
132
|
title: doc.title ?? doc.document_id
|
|
133
133
|
}));
|
|
134
134
|
}
|
|
135
|
+
async renameDocument(sessionId, documentId, newTitle) {
|
|
136
|
+
const baseUrl = await this.getBaseUrl();
|
|
137
|
+
await this.fetchJson(
|
|
138
|
+
`${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}`,
|
|
139
|
+
{
|
|
140
|
+
method: "PATCH",
|
|
141
|
+
body: JSON.stringify({ title: newTitle })
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
135
145
|
async deleteDocument(sessionId, documentId) {
|
|
136
146
|
const baseUrl = await this.getBaseUrl();
|
|
137
147
|
await this.fetchJson(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebooksApiClient.esm.js","sources":["../../src/api/NotebooksApiClient.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 { ConfigApi, FetchApi } from '@backstage/core-plugin-api';\n\nimport {\n DocumentListResponse,\n DocumentStatus,\n NotebookSession,\n SessionResponse,\n UploadDocumentResponse,\n} from '../types';\nimport { NotebooksAPI } from './notebooksApi';\n\n/**\n * @public\n * AI Notebooks API client options\n */\nexport type NotebooksOptions = {\n configApi: ConfigApi;\n fetchApi: FetchApi;\n};\n\n/**\n * @public\n * AI Notebooks API client implementation\n */\nexport class NotebooksApiClient implements NotebooksAPI {\n private readonly configApi: ConfigApi;\n private readonly fetchApi: FetchApi;\n\n constructor(options: NotebooksOptions) {\n this.configApi = options.configApi;\n this.fetchApi = options.fetchApi;\n }\n\n async getBaseUrl() {\n return `${this.configApi.getString('backend.baseUrl')}/api/intelligent-assistant/notebooks`;\n }\n\n private async handleResponseError(response: Response): Promise<string> {\n let errorMessage = `failed to fetch data, status ${response.status}: ${response.statusText}`;\n try {\n const errorText = await response.text();\n if (errorText) {\n try {\n const errorBody = JSON.parse(errorText);\n if (errorBody?.error) {\n errorMessage = errorBody.error;\n }\n } catch {\n errorMessage = errorText;\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n return errorMessage;\n }\n\n private async fetchJson<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...init,\n });\n\n if (!response.ok) {\n throw new Error(await this.handleResponseError(response));\n }\n\n const text = await response.text();\n if (!text) {\n return {} as T;\n }\n return JSON.parse(text) as T;\n }\n\n private async fetchFormData<T>(\n url: string,\n formData: FormData,\n method: string = 'PUT',\n ): Promise<T> {\n const response = await this.fetchApi.fetch(url, {\n method,\n body: formData,\n });\n\n if (!response.ok && response.status !== 202) {\n throw new Error(await this.handleResponseError(response));\n }\n\n const text = await response.text();\n if (!text) {\n return {} as T;\n }\n return JSON.parse(text) as T;\n }\n\n async createSession(name: string, description?: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<SessionResponse>(\n `${baseUrl}/v1/sessions`,\n {\n method: 'POST',\n body: JSON.stringify({ name, description }),\n },\n );\n if (!response.session) {\n throw new Error(response.error ?? 'Failed to create session');\n }\n return response.session;\n }\n\n async listSessions() {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<{ sessions?: NotebookSession[] }>(\n `${baseUrl}/v1/sessions`,\n );\n return response?.sessions ?? [];\n }\n\n async getSession(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<SessionResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n );\n if (!response.session) {\n throw new Error(response.error ?? 'Session not found');\n }\n return response.session;\n }\n\n async renameSession(sessionId: string, name: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: 'PUT',\n body: JSON.stringify({ name }),\n },\n );\n }\n\n async deleteSession(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: 'DELETE',\n },\n );\n }\n\n async uploadDocument(\n sessionId: string,\n file: File,\n fileType: string,\n title: string,\n newTitle?: string,\n ) {\n const baseUrl = await this.getBaseUrl();\n const formData = new FormData();\n formData.append('file', file);\n formData.append('fileType', fileType);\n formData.append('title', title);\n if (newTitle) {\n formData.append('newTitle', newTitle);\n }\n return this.fetchFormData<UploadDocumentResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents`,\n formData,\n );\n }\n\n async listDocuments(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<DocumentListResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents`,\n );\n const docs = response?.documents ?? [];\n return docs.map(doc => ({\n ...doc,\n title: (doc as any).title ?? doc.document_id,\n }));\n }\n\n async deleteDocument(sessionId: string, documentId: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}`,\n {\n method: 'DELETE',\n },\n );\n }\n\n async getDocumentStatus(sessionId: string, documentId: string) {\n const baseUrl = await this.getBaseUrl();\n return this.fetchJson<DocumentStatus>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}/status`,\n );\n }\n\n async querySession(\n sessionId: string,\n query: string,\n ): Promise<ReadableStreamDefaultReader<Uint8Array>> {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchApi.fetch(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/query`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n },\n );\n\n if (!response.body) {\n throw new Error('Readable stream is not supported or there is no body.');\n }\n\n if (!response.ok) {\n const reader = response.body.getReader();\n const { done, value } = await reader.read();\n const text = done ? '' : new TextDecoder('utf-8').decode(value);\n const errorMessage = JSON.parse(text);\n if (errorMessage?.error) {\n throw new Error(\n `failed to query notebook session: ${errorMessage.error}`,\n );\n }\n }\n\n return response.body.getReader();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotebooksApiClient.esm.js","sources":["../../src/api/NotebooksApiClient.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 { ConfigApi, FetchApi } from '@backstage/core-plugin-api';\n\nimport {\n DocumentListResponse,\n DocumentStatus,\n NotebookSession,\n SessionResponse,\n UploadDocumentResponse,\n} from '../types';\nimport { NotebooksAPI } from './notebooksApi';\n\n/**\n * @public\n * AI Notebooks API client options\n */\nexport type NotebooksOptions = {\n configApi: ConfigApi;\n fetchApi: FetchApi;\n};\n\n/**\n * @public\n * AI Notebooks API client implementation\n */\nexport class NotebooksApiClient implements NotebooksAPI {\n private readonly configApi: ConfigApi;\n private readonly fetchApi: FetchApi;\n\n constructor(options: NotebooksOptions) {\n this.configApi = options.configApi;\n this.fetchApi = options.fetchApi;\n }\n\n async getBaseUrl() {\n return `${this.configApi.getString('backend.baseUrl')}/api/intelligent-assistant/notebooks`;\n }\n\n private async handleResponseError(response: Response): Promise<string> {\n let errorMessage = `failed to fetch data, status ${response.status}: ${response.statusText}`;\n try {\n const errorText = await response.text();\n if (errorText) {\n try {\n const errorBody = JSON.parse(errorText);\n if (errorBody?.error) {\n errorMessage = errorBody.error;\n }\n } catch {\n errorMessage = errorText;\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n return errorMessage;\n }\n\n private async fetchJson<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...init,\n });\n\n if (!response.ok) {\n throw new Error(await this.handleResponseError(response));\n }\n\n const text = await response.text();\n if (!text) {\n return {} as T;\n }\n return JSON.parse(text) as T;\n }\n\n private async fetchFormData<T>(\n url: string,\n formData: FormData,\n method: string = 'PUT',\n ): Promise<T> {\n const response = await this.fetchApi.fetch(url, {\n method,\n body: formData,\n });\n\n if (!response.ok && response.status !== 202) {\n throw new Error(await this.handleResponseError(response));\n }\n\n const text = await response.text();\n if (!text) {\n return {} as T;\n }\n return JSON.parse(text) as T;\n }\n\n async createSession(name: string, description?: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<SessionResponse>(\n `${baseUrl}/v1/sessions`,\n {\n method: 'POST',\n body: JSON.stringify({ name, description }),\n },\n );\n if (!response.session) {\n throw new Error(response.error ?? 'Failed to create session');\n }\n return response.session;\n }\n\n async listSessions() {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<{ sessions?: NotebookSession[] }>(\n `${baseUrl}/v1/sessions`,\n );\n return response?.sessions ?? [];\n }\n\n async getSession(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<SessionResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n );\n if (!response.session) {\n throw new Error(response.error ?? 'Session not found');\n }\n return response.session;\n }\n\n async renameSession(sessionId: string, name: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: 'PUT',\n body: JSON.stringify({ name }),\n },\n );\n }\n\n async deleteSession(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: 'DELETE',\n },\n );\n }\n\n async uploadDocument(\n sessionId: string,\n file: File,\n fileType: string,\n title: string,\n newTitle?: string,\n ) {\n const baseUrl = await this.getBaseUrl();\n const formData = new FormData();\n formData.append('file', file);\n formData.append('fileType', fileType);\n formData.append('title', title);\n if (newTitle) {\n formData.append('newTitle', newTitle);\n }\n return this.fetchFormData<UploadDocumentResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents`,\n formData,\n );\n }\n\n async listDocuments(sessionId: string) {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchJson<DocumentListResponse>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents`,\n );\n const docs = response?.documents ?? [];\n return docs.map(doc => ({\n ...doc,\n title: (doc as any).title ?? doc.document_id,\n }));\n }\n\n async renameDocument(\n sessionId: string,\n documentId: string,\n newTitle: string,\n ) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify({ title: newTitle }),\n },\n );\n }\n\n async deleteDocument(sessionId: string, documentId: string) {\n const baseUrl = await this.getBaseUrl();\n await this.fetchJson(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}`,\n {\n method: 'DELETE',\n },\n );\n }\n\n async getDocumentStatus(sessionId: string, documentId: string) {\n const baseUrl = await this.getBaseUrl();\n return this.fetchJson<DocumentStatus>(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/documents/${encodeURIComponent(documentId)}/status`,\n );\n }\n\n async querySession(\n sessionId: string,\n query: string,\n ): Promise<ReadableStreamDefaultReader<Uint8Array>> {\n const baseUrl = await this.getBaseUrl();\n const response = await this.fetchApi.fetch(\n `${baseUrl}/v1/sessions/${encodeURIComponent(sessionId)}/query`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n },\n );\n\n if (!response.body) {\n throw new Error('Readable stream is not supported or there is no body.');\n }\n\n if (!response.ok) {\n const reader = response.body.getReader();\n const { done, value } = await reader.read();\n const text = done ? '' : new TextDecoder('utf-8').decode(value);\n const errorMessage = JSON.parse(text);\n if (errorMessage?.error) {\n throw new Error(\n `failed to query notebook session: ${errorMessage.error}`,\n );\n }\n }\n\n return response.body.getReader();\n }\n}\n"],"names":[],"mappings":"AAwCO,MAAM,kBAAA,CAA2C;AAAA,EACrC,SAAA;AAAA,EACA,QAAA;AAAA,EAEjB,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,UAAA,GAAa;AACjB,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,iBAAiB,CAAC,CAAA,oCAAA,CAAA;AAAA,EACvD;AAAA,EAEA,MAAc,oBAAoB,QAAA,EAAqC;AACrE,IAAA,IAAI,eAAe,CAAA,6BAAA,EAAgC,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA,CAAA;AAC1F,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAI;AACF,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACtC,UAAA,IAAI,WAAW,KAAA,EAAO;AACpB,YAAA,YAAA,GAAe,SAAA,CAAU,KAAA;AAAA,UAC3B;AAAA,QACF,CAAA,CAAA,MAAQ;AACN,UAAA,YAAA,GAAe,SAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AAEV,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEA,MAAc,SAAA,CAAa,GAAA,EAAa,IAAA,EAAgC;AACtE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,GAAA,EAAK;AAAA,MAC9C,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,MAAM,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,MAAc,aAAA,CACZ,GAAA,EACA,QAAA,EACA,SAAiB,KAAA,EACL;AACZ,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,GAAA,EAAK;AAAA,MAC9C,MAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3C,MAAA,MAAM,IAAI,KAAA,CAAM,MAAM,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,aAAA,CAAc,IAAA,EAAc,WAAA,EAAsB;AACtD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA;AAAA,MAC1B,GAAG,OAAO,CAAA,YAAA,CAAA;AAAA,MACV;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,aAAa;AAAA;AAC5C,KACF;AACA,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,MAAA,MAAM,IAAI,KAAA,CAAM,QAAA,CAAS,KAAA,IAAS,0BAA0B,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,QAAA,CAAS,OAAA;AAAA,EAClB;AAAA,EAEA,MAAM,YAAA,GAAe;AACnB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA;AAAA,MAC1B,GAAG,OAAO,CAAA,YAAA;AAAA,KACZ;AACA,IAAA,OAAO,QAAA,EAAU,YAAY,EAAC;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW,SAAA,EAAmB;AAClC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA;AAAA,MAC1B,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA;AAAA,KACzD;AACA,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,MAAA,MAAM,IAAI,KAAA,CAAM,QAAA,CAAS,KAAA,IAAS,mBAAmB,CAAA;AAAA,IACvD;AACA,IAAA,OAAO,QAAA,CAAS,OAAA;AAAA,EAClB;AAAA,EAEA,MAAM,aAAA,CAAc,SAAA,EAAmB,IAAA,EAAc;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,IAAA,CAAK,SAAA;AAAA,MACT,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAM;AAAA;AAC/B,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAA,EAAmB;AACrC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,IAAA,CAAK,SAAA;AAAA,MACT,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,SAAA,EACA,IAAA,EACA,QAAA,EACA,OACA,QAAA,EACA;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,IAAA,QAAA,CAAS,MAAA,CAAO,YAAY,QAAQ,CAAA;AACpC,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,KAAK,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,MAAA,CAAO,YAAY,QAAQ,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,MACV,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,UAAA,CAAA;AAAA,MACvD;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAA,EAAmB;AACrC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA;AAAA,MAC1B,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,UAAA;AAAA,KACzD;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,EAAU,SAAA,IAAa,EAAC;AACrC,IAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAA,MAAQ;AAAA,MACtB,GAAG,GAAA;AAAA,MACH,KAAA,EAAQ,GAAA,CAAY,KAAA,IAAS,GAAA,CAAI;AAAA,KACnC,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,cAAA,CACJ,SAAA,EACA,UAAA,EACA,QAAA,EACA;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,IAAA,CAAK,SAAA;AAAA,MACT,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACnG;AAAA,QACE,MAAA,EAAQ,OAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,UAAU;AAAA;AAC1C,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CAAe,SAAA,EAAmB,UAAA,EAAoB;AAC1D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,IAAA,CAAK,SAAA;AAAA,MACT,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACnG;AAAA,QACE,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAA,CAAkB,SAAA,EAAmB,UAAA,EAAoB;AAC7D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACV,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,OAAA;AAAA,KACrG;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CACJ,SAAA,EACA,KAAA,EACkD;AAClD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA;AAAA,MACnC,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,MAAA,CAAA;AAAA,MACvD;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA;AAChC,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,OAAO,EAAA,GAAK,IAAI,YAAY,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9D,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACpC,MAAA,IAAI,cAAc,KAAA,EAAO;AACvB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,kCAAA,EAAqC,aAAa,KAAK,CAAA;AAAA,SACzD;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAA,CAAS,KAAK,SAAA,EAAU;AAAA,EACjC;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notebooksApi.esm.js","sources":["../../src/api/notebooksApi.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 { createApiRef, type ApiRef } from '@backstage/core-plugin-api';\n\nimport {\n DocumentStatus,\n NotebookSession,\n SessionDocument,\n UploadDocumentResponse,\n} from '../types';\n\n/**\n * @public\n * AI Notebooks API\n */\nexport type NotebooksAPI = {\n createSession: (\n name: string,\n description?: string,\n ) => Promise<NotebookSession>;\n listSessions: () => Promise<NotebookSession[]>;\n getSession: (sessionId: string) => Promise<NotebookSession>;\n renameSession: (sessionId: string, name: string) => Promise<void>;\n deleteSession: (sessionId: string) => Promise<void>;\n uploadDocument: (\n sessionId: string,\n file: File,\n fileType: string,\n title: string,\n newTitle?: string,\n ) => Promise<UploadDocumentResponse>;\n listDocuments: (sessionId: string) => Promise<SessionDocument[]>;\n deleteDocument: (sessionId: string, documentId: string) => Promise<void>;\n getDocumentStatus: (\n sessionId: string,\n documentId: string,\n ) => Promise<DocumentStatus>;\n querySession: (\n sessionId: string,\n query: string,\n ) => Promise<ReadableStreamDefaultReader<Uint8Array>>;\n};\n\n/**\n * @public\n * AI Notebooks API interface\n */\nexport const notebooksApiRef: ApiRef<NotebooksAPI> = createApiRef<NotebooksAPI>(\n {\n id: 'plugin.intelligent-assistant.notebooks.service',\n },\n);\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"notebooksApi.esm.js","sources":["../../src/api/notebooksApi.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 { createApiRef, type ApiRef } from '@backstage/core-plugin-api';\n\nimport {\n DocumentStatus,\n NotebookSession,\n SessionDocument,\n UploadDocumentResponse,\n} from '../types';\n\n/**\n * @public\n * AI Notebooks API\n */\nexport type NotebooksAPI = {\n createSession: (\n name: string,\n description?: string,\n ) => Promise<NotebookSession>;\n listSessions: () => Promise<NotebookSession[]>;\n getSession: (sessionId: string) => Promise<NotebookSession>;\n renameSession: (sessionId: string, name: string) => Promise<void>;\n deleteSession: (sessionId: string) => Promise<void>;\n uploadDocument: (\n sessionId: string,\n file: File,\n fileType: string,\n title: string,\n newTitle?: string,\n ) => Promise<UploadDocumentResponse>;\n listDocuments: (sessionId: string) => Promise<SessionDocument[]>;\n renameDocument: (\n sessionId: string,\n documentId: string,\n newTitle: string,\n ) => Promise<void>;\n deleteDocument: (sessionId: string, documentId: string) => Promise<void>;\n getDocumentStatus: (\n sessionId: string,\n documentId: string,\n ) => Promise<DocumentStatus>;\n querySession: (\n sessionId: string,\n query: string,\n ) => Promise<ReadableStreamDefaultReader<Uint8Array>>;\n};\n\n/**\n * @public\n * AI Notebooks API interface\n */\nexport const notebooksApiRef: ApiRef<NotebooksAPI> = createApiRef<NotebooksAPI>(\n {\n id: 'plugin.intelligent-assistant.notebooks.service',\n },\n);\n"],"names":[],"mappings":";;AAkEO,MAAM,eAAA,GAAwC,YAAA;AAAA,EACnD;AAAA,IACE,EAAA,EAAI;AAAA;AAER;;;;"}
|
|
@@ -28,6 +28,7 @@ import { useNotebookConversationIds } from '../hooks/useNotebookConversationIds.
|
|
|
28
28
|
import { useNotebookSession } from '../hooks/notebooks/useNotebookSession.esm.js';
|
|
29
29
|
import { useNotebookSessions } from '../hooks/notebooks/useNotebookSessions.esm.js';
|
|
30
30
|
import { usePinnedChatsSettings } from '../hooks/usePinnedChatsSettings.esm.js';
|
|
31
|
+
import { useRenameNotebookWithAlert } from '../hooks/notebooks/useRenameNotebookWithAlert.esm.js';
|
|
31
32
|
import { useSortSettings } from '../hooks/useSortSettings.esm.js';
|
|
32
33
|
import { useStopConversation } from '../hooks/useStopConversation.esm.js';
|
|
33
34
|
import { useCreateNotebook } from '../hooks/notebooks/useCreateNotebook.esm.js';
|
|
@@ -49,7 +50,6 @@ import { MessageBarModelSelector } from './MessageBarModelSelector.esm.js';
|
|
|
49
50
|
import { DeleteNotebookModal } from './notebooks/DeleteNotebookModal.esm.js';
|
|
50
51
|
import { NotebooksTab } from './notebooks/NotebooksTab.esm.js';
|
|
51
52
|
import { NotebookView } from './notebooks/NotebookView.esm.js';
|
|
52
|
-
import { RenameNotebookModal } from './notebooks/RenameNotebookModal.esm.js';
|
|
53
53
|
import PermissionRequiredState from './PermissionRequiredState.esm.js';
|
|
54
54
|
import { RenameConversationModal } from './RenameConversationModal.esm.js';
|
|
55
55
|
|
|
@@ -202,7 +202,7 @@ const useStyles = makeStyles((theme) => ({
|
|
|
202
202
|
}
|
|
203
203
|
},
|
|
204
204
|
notebookCardHeader: {
|
|
205
|
-
padding: theme.spacing(
|
|
205
|
+
padding: theme.spacing(3),
|
|
206
206
|
paddingBottom: 0,
|
|
207
207
|
alignItems: "center"
|
|
208
208
|
},
|
|
@@ -211,17 +211,16 @@ const useStyles = makeStyles((theme) => ({
|
|
|
211
211
|
marginTop: theme.spacing(1)
|
|
212
212
|
},
|
|
213
213
|
notebookCardBody: {
|
|
214
|
-
padding: theme.spacing(
|
|
215
|
-
paddingTop: theme.spacing(
|
|
214
|
+
padding: theme.spacing(3),
|
|
215
|
+
paddingTop: theme.spacing(2)
|
|
216
216
|
},
|
|
217
217
|
notebookDocuments: {
|
|
218
|
-
paddingTop: theme.spacing(1)
|
|
219
|
-
paddingLeft: theme.spacing(2)
|
|
218
|
+
paddingTop: theme.spacing(1)
|
|
220
219
|
},
|
|
221
220
|
notebookUpdated: {
|
|
222
|
-
paddingBottom: theme.spacing(
|
|
223
|
-
|
|
224
|
-
|
|
221
|
+
paddingBottom: theme.spacing(3),
|
|
222
|
+
paddingTop: theme.spacing(2),
|
|
223
|
+
fontStyle: "italic"
|
|
225
224
|
},
|
|
226
225
|
notebookTitle: {
|
|
227
226
|
display: "flex",
|
|
@@ -236,7 +235,13 @@ const useStyles = makeStyles((theme) => ({
|
|
|
236
235
|
notebookTitleText: {
|
|
237
236
|
overflow: "hidden",
|
|
238
237
|
textOverflow: "ellipsis",
|
|
239
|
-
whiteSpace: "nowrap"
|
|
238
|
+
whiteSpace: "nowrap",
|
|
239
|
+
cursor: "pointer",
|
|
240
|
+
borderRadius: 4,
|
|
241
|
+
padding: "2px 6px",
|
|
242
|
+
"&:hover": {
|
|
243
|
+
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
244
|
+
}
|
|
240
245
|
},
|
|
241
246
|
notebookMenuButton: {
|
|
242
247
|
color: theme.palette.text.secondary
|
|
@@ -253,8 +258,8 @@ const useStyles = makeStyles((theme) => ({
|
|
|
253
258
|
notebookDropdownItem: {
|
|
254
259
|
justifyContent: "flex-start",
|
|
255
260
|
textAlign: "left",
|
|
256
|
-
paddingLeft: theme.spacing(
|
|
257
|
-
paddingRight: theme.spacing(
|
|
261
|
+
paddingLeft: theme.spacing(0.5),
|
|
262
|
+
paddingRight: theme.spacing(0.5)
|
|
258
263
|
},
|
|
259
264
|
footer: {
|
|
260
265
|
"&.pf-chatbot__footer": {
|
|
@@ -348,32 +353,41 @@ const useStyles = makeStyles((theme) => ({
|
|
|
348
353
|
settingsFlat: {
|
|
349
354
|
height: "100%",
|
|
350
355
|
width: "100%",
|
|
356
|
+
flex: 1,
|
|
357
|
+
minHeight: 0,
|
|
351
358
|
"&.pf-chatbot__settings-form-container": {
|
|
352
|
-
background: "var(--pf-
|
|
359
|
+
background: "var(--pf-t--global--background--color--floating--default)",
|
|
353
360
|
padding: 0,
|
|
354
361
|
margin: 0,
|
|
355
|
-
minHeight:
|
|
362
|
+
minHeight: 0,
|
|
363
|
+
flex: 1,
|
|
356
364
|
display: "flex",
|
|
357
365
|
flexDirection: "column",
|
|
366
|
+
justifyContent: "flex-start",
|
|
358
367
|
width: "100%",
|
|
359
|
-
maxWidth: "none"
|
|
368
|
+
maxWidth: "none",
|
|
369
|
+
overflow: "hidden",
|
|
370
|
+
border: "none"
|
|
360
371
|
},
|
|
361
372
|
"& .pf-chatbot__settings-form": {
|
|
362
373
|
margin: 0,
|
|
363
374
|
padding: 0,
|
|
364
|
-
background: "var(--pf-
|
|
365
|
-
minHeight:
|
|
375
|
+
background: "var(--pf-t--global--background--color--floating--default)",
|
|
376
|
+
minHeight: 0,
|
|
377
|
+
flex: 1,
|
|
366
378
|
display: "flex",
|
|
367
379
|
flexDirection: "column",
|
|
368
380
|
width: "100%",
|
|
369
|
-
maxWidth: "none"
|
|
381
|
+
maxWidth: "none",
|
|
382
|
+
border: "none"
|
|
370
383
|
},
|
|
371
384
|
"& .pf-chatbot__settings-form-row": {
|
|
372
|
-
background: "var(--pf-
|
|
373
|
-
border:
|
|
385
|
+
background: "var(--pf-t--global--background--color--floating--default)",
|
|
386
|
+
border: "none",
|
|
374
387
|
margin: 0,
|
|
375
388
|
padding: 0,
|
|
376
|
-
minHeight:
|
|
389
|
+
minHeight: 0,
|
|
390
|
+
flex: 1,
|
|
377
391
|
display: "flex",
|
|
378
392
|
flexDirection: "column",
|
|
379
393
|
width: "100%",
|
|
@@ -407,7 +421,7 @@ const useStyles = makeStyles((theme) => ({
|
|
|
407
421
|
width: "100%",
|
|
408
422
|
minWidth: 0,
|
|
409
423
|
borderLeft: `1px solid ${theme.palette.divider}`,
|
|
410
|
-
backgroundColor: "var(--pf-
|
|
424
|
+
backgroundColor: "var(--pf-t--global--background--color--floating--default)",
|
|
411
425
|
display: "flex",
|
|
412
426
|
flexDirection: "column",
|
|
413
427
|
minHeight: 0,
|
|
@@ -564,7 +578,11 @@ const LightspeedChat = ({
|
|
|
564
578
|
}
|
|
565
579
|
return 0;
|
|
566
580
|
});
|
|
567
|
-
const {
|
|
581
|
+
const {
|
|
582
|
+
allowed: hasNotebooksAccess,
|
|
583
|
+
loading: notebooksPermissionLoading,
|
|
584
|
+
iaNotebooksUsePermissionName
|
|
585
|
+
} = useLightspeedNotebooksPermission();
|
|
568
586
|
const notebooksPermissionResolved = !notebooksPermissionLoading && hasNotebooksAccess;
|
|
569
587
|
const { data: notebookConversationIdsArray = [] } = useNotebookConversationIds();
|
|
570
588
|
const { data: notebooks = [], refetch: refetchNotebooks } = useNotebookSessions(notebooksPermissionResolved);
|
|
@@ -572,7 +590,6 @@ const LightspeedChat = ({
|
|
|
572
590
|
const [openNotebookMenuId, setOpenNotebookMenuId] = useState(
|
|
573
591
|
null
|
|
574
592
|
);
|
|
575
|
-
const [renameNotebookId, setRenameNotebookId] = useState(null);
|
|
576
593
|
const [deleteNotebookId, setDeleteNotebookId] = useState(null);
|
|
577
594
|
const [activeNotebook, setActiveNotebook] = useState(
|
|
578
595
|
null
|
|
@@ -602,6 +619,10 @@ const LightspeedChat = ({
|
|
|
602
619
|
[]
|
|
603
620
|
);
|
|
604
621
|
const createNotebookMutation = useCreateNotebook();
|
|
622
|
+
const handleRenameNotebook = useRenameNotebookWithAlert({
|
|
623
|
+
setAlerts: setNotebookAlerts,
|
|
624
|
+
getNotebookName: (sid) => notebooks.find((n) => n.session_id === sid)?.name ?? "notebook"
|
|
625
|
+
});
|
|
605
626
|
const { data: notebookDocuments = [], isFetching: isDocumentsFetching } = useNotebookDocuments(activeNotebook?.session_id);
|
|
606
627
|
const [conversationId, setConversationId] = useState("");
|
|
607
628
|
const [requestId, setRequestId] = useState("");
|
|
@@ -655,6 +676,7 @@ const LightspeedChat = ({
|
|
|
655
676
|
refetchNotebooks();
|
|
656
677
|
}
|
|
657
678
|
} else {
|
|
679
|
+
setActiveNotebook(null);
|
|
658
680
|
navigate(
|
|
659
681
|
routeConversationId ? `${LIGHTSPEED_PATH}/conversation/${routeConversationId}` : LIGHTSPEED_PATH
|
|
660
682
|
);
|
|
@@ -690,9 +712,9 @@ const LightspeedChat = ({
|
|
|
690
712
|
);
|
|
691
713
|
}, [createNotebookMutation, navigate]);
|
|
692
714
|
const handleCloseNotebook = useCallback(() => {
|
|
715
|
+
setActiveNotebook(null);
|
|
693
716
|
navigate(`${LIGHTSPEED_PATH}/notebooks`);
|
|
694
|
-
|
|
695
|
-
}, [navigate, refetchNotebooks]);
|
|
717
|
+
}, [navigate]);
|
|
696
718
|
const handleRemoveNotebookAlert = (key) => {
|
|
697
719
|
setNotebookAlerts(
|
|
698
720
|
(prevAlerts) => prevAlerts.filter((alert) => alert.key !== key)
|
|
@@ -1575,15 +1597,6 @@ const LightspeedChat = ({
|
|
|
1575
1597
|
conversationId: targetConversationId
|
|
1576
1598
|
}
|
|
1577
1599
|
),
|
|
1578
|
-
renameNotebookId && /* @__PURE__ */ jsx(
|
|
1579
|
-
RenameNotebookModal,
|
|
1580
|
-
{
|
|
1581
|
-
isOpen: Boolean(renameNotebookId),
|
|
1582
|
-
onClose: () => setRenameNotebookId(null),
|
|
1583
|
-
sessionId: renameNotebookId,
|
|
1584
|
-
currentName: notebooks.find((n) => n.session_id === renameNotebookId)?.name ?? ""
|
|
1585
|
-
}
|
|
1586
|
-
),
|
|
1587
1600
|
deleteNotebookId && /* @__PURE__ */ jsx(
|
|
1588
1601
|
DeleteNotebookModal,
|
|
1589
1602
|
{
|
|
@@ -1850,7 +1863,7 @@ const LightspeedChat = ({
|
|
|
1850
1863
|
onSelectNotebook: (notebook) => {
|
|
1851
1864
|
navigate(`${LIGHTSPEED_PATH}/notebooks/${notebook.session_id}`);
|
|
1852
1865
|
},
|
|
1853
|
-
onRename:
|
|
1866
|
+
onRename: handleRenameNotebook,
|
|
1854
1867
|
onDelete: setDeleteNotebookId,
|
|
1855
1868
|
onCreateNotebook: handleCreateNotebook,
|
|
1856
1869
|
t
|
|
@@ -1860,7 +1873,7 @@ const LightspeedChat = ({
|
|
|
1860
1873
|
PermissionRequiredState,
|
|
1861
1874
|
{
|
|
1862
1875
|
subject: t("permission.subject.notebooks"),
|
|
1863
|
-
permissions: [
|
|
1876
|
+
permissions: [iaNotebooksUsePermissionName],
|
|
1864
1877
|
action: /* @__PURE__ */ jsx(
|
|
1865
1878
|
Button,
|
|
1866
1879
|
{
|