@red-hat-developer-hub/backstage-plugin-intelligent-assistant 3.0.3 → 3.1.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 (32) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/alpha.d.ts +15 -1
  3. package/dist/components/LightSpeedChat.esm.js +1 -1
  4. package/dist/components/LightspeedChatContainer.esm.js +4 -2
  5. package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
  6. package/dist/components/McpConfigureServerModal.esm.js +407 -0
  7. package/dist/components/McpConfigureServerModal.esm.js.map +1 -0
  8. package/dist/components/McpServersSettings.esm.js +92 -475
  9. package/dist/components/McpServersSettings.esm.js.map +1 -1
  10. package/dist/components/mcpServersDisplayUtils.esm.js +167 -0
  11. package/dist/components/mcpServersDisplayUtils.esm.js.map +1 -0
  12. package/dist/hooks/useMcpConfigureModal.esm.js +465 -0
  13. package/dist/hooks/useMcpConfigureModal.esm.js.map +1 -0
  14. package/dist/index.esm.js +5 -4
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/legacy.esm.js +0 -2
  17. package/dist/legacy.esm.js.map +1 -1
  18. package/dist/plugin.esm.js +0 -2
  19. package/dist/plugin.esm.js.map +1 -1
  20. package/dist/translations/de.esm.js +16 -2
  21. package/dist/translations/de.esm.js.map +1 -1
  22. package/dist/translations/es.esm.js +16 -2
  23. package/dist/translations/es.esm.js.map +1 -1
  24. package/dist/translations/fr.esm.js +16 -2
  25. package/dist/translations/fr.esm.js.map +1 -1
  26. package/dist/translations/it.esm.js +16 -2
  27. package/dist/translations/it.esm.js.map +1 -1
  28. package/dist/translations/ja.esm.js +16 -2
  29. package/dist/translations/ja.esm.js.map +1 -1
  30. package/dist/translations/ref.esm.js +17 -3
  31. package/dist/translations/ref.esm.js.map +1 -1
  32. package/package.json +2 -5
@@ -0,0 +1,465 @@
1
+ import { useState, useMemo, useCallback, useEffect } from 'react';
2
+ import { getInitialCredentialMode, formatApiError, isSaveTokenDisabled, getModalVerifiedHasToken, getModalDisplayStatus, getModalDisplayHasToken, isEnabledToggleUnavailable, getDisplayDetail, isModalEnabledChecked } from '../components/mcpServersDisplayUtils.esm.js';
3
+ import { useTranslation } from './useTranslation.esm.js';
4
+
5
+ const SAVED_TOKEN_MASK = "********************";
6
+ const useMcpConfigureModal = ({
7
+ servers,
8
+ canManageMcp,
9
+ isSaving,
10
+ patchServer,
11
+ validateServer,
12
+ validateCredentials,
13
+ fetchServerValidation
14
+ }) => {
15
+ const { t } = useTranslation();
16
+ const [editingServerId, setEditingServerId] = useState(null);
17
+ const [tokenInputValue, setTokenInputValue] = useState("");
18
+ const [initialTokenInputValue, setInitialTokenInputValue] = useState("");
19
+ const [hasSavedTokenInModal, setHasSavedTokenInModal] = useState(false);
20
+ const [modalCredentialMode, setModalCredentialMode] = useState("personal");
21
+ const [initialCredentialMode, setInitialCredentialMode] = useState("personal");
22
+ const [tokenValidationState, setTokenValidationState] = useState("idle");
23
+ const [tokenValidationMessage, setTokenValidationMessage] = useState("");
24
+ const [modalEnabled, setModalEnabled] = useState(true);
25
+ const [modalTools, setModalTools] = useState([]);
26
+ const [isLoadingModalTools, setIsLoadingModalTools] = useState(false);
27
+ const [modalToolsError, setModalToolsError] = useState(null);
28
+ const [canRemovePersonalToken, setCanRemovePersonalToken] = useState(false);
29
+ const [isUpdatingModalStatus, setIsUpdatingModalStatus] = useState(false);
30
+ const [hasRemovedPersonalToken, setHasRemovedPersonalToken] = useState(false);
31
+ const editingServer = useMemo(
32
+ () => servers.find((server) => server.id === editingServerId),
33
+ [servers, editingServerId]
34
+ );
35
+ const close = useCallback(() => {
36
+ setEditingServerId(null);
37
+ setTokenInputValue("");
38
+ setInitialTokenInputValue("");
39
+ setHasSavedTokenInModal(false);
40
+ setModalCredentialMode("personal");
41
+ setInitialCredentialMode("personal");
42
+ setTokenValidationState("idle");
43
+ setTokenValidationMessage("");
44
+ setModalEnabled(true);
45
+ setModalTools([]);
46
+ setIsLoadingModalTools(false);
47
+ setModalToolsError(null);
48
+ setCanRemovePersonalToken(false);
49
+ setIsUpdatingModalStatus(false);
50
+ setHasRemovedPersonalToken(false);
51
+ }, []);
52
+ const open = useCallback(
53
+ (server) => {
54
+ setEditingServerId(server.id);
55
+ const credentialMode = getInitialCredentialMode(server);
56
+ const hasSavedPersonalToken = server.hasUserToken;
57
+ setModalCredentialMode(credentialMode);
58
+ setInitialCredentialMode(credentialMode);
59
+ setHasSavedTokenInModal(hasSavedPersonalToken);
60
+ setCanRemovePersonalToken(server.hasUserToken && !server.hasOrgToken);
61
+ const initialToken = hasSavedPersonalToken ? SAVED_TOKEN_MASK : "";
62
+ setInitialTokenInputValue(initialToken);
63
+ setTokenInputValue(initialToken);
64
+ setModalEnabled(server.enabled);
65
+ setModalTools([]);
66
+ setModalToolsError(null);
67
+ setIsUpdatingModalStatus(false);
68
+ setHasRemovedPersonalToken(false);
69
+ if (server.status === "error" && server.validationError) {
70
+ setTokenValidationState("error");
71
+ setTokenValidationMessage(
72
+ formatApiError(server.validationError) || t("mcp.settings.token.validationFailed")
73
+ );
74
+ } else {
75
+ setTokenValidationState("idle");
76
+ setTokenValidationMessage("");
77
+ }
78
+ },
79
+ [t]
80
+ );
81
+ useEffect(() => {
82
+ if (!editingServer) {
83
+ return void 0;
84
+ }
85
+ if (!editingServer.hasToken) {
86
+ setModalTools([]);
87
+ setModalToolsError(null);
88
+ setIsLoadingModalTools(false);
89
+ return void 0;
90
+ }
91
+ let cancelled = false;
92
+ setIsLoadingModalTools(true);
93
+ setModalToolsError(null);
94
+ void fetchServerValidation(editingServer.name).then((data) => {
95
+ if (cancelled) {
96
+ return;
97
+ }
98
+ const tools = data.validation?.tools?.map((tool) => tool.name) ?? [];
99
+ setModalTools(tools);
100
+ if (data.status === "error") {
101
+ setModalToolsError(
102
+ formatApiError(data.validation?.error) || t("mcp.settings.token.validationFailed")
103
+ );
104
+ } else {
105
+ setModalToolsError(null);
106
+ }
107
+ }).catch((e) => {
108
+ if (cancelled) {
109
+ return;
110
+ }
111
+ setModalTools([]);
112
+ setModalToolsError(
113
+ e instanceof Error ? e.message : t("mcp.settings.modal.toolsLoadFailed")
114
+ );
115
+ }).finally(() => {
116
+ if (!cancelled) {
117
+ setIsLoadingModalTools(false);
118
+ }
119
+ });
120
+ return () => {
121
+ cancelled = true;
122
+ };
123
+ }, [editingServer, fetchServerValidation, t]);
124
+ const onTokenInputChange = useCallback(
125
+ (value) => {
126
+ if (hasSavedTokenInModal && value !== SAVED_TOKEN_MASK) {
127
+ setHasSavedTokenInModal(false);
128
+ }
129
+ setTokenInputValue(value);
130
+ setTokenValidationState("idle");
131
+ setTokenValidationMessage("");
132
+ },
133
+ [hasSavedTokenInModal]
134
+ );
135
+ const onCredentialModeChange = useCallback(
136
+ (mode) => {
137
+ if (mode === modalCredentialMode) {
138
+ return;
139
+ }
140
+ setModalCredentialMode(mode);
141
+ setTokenValidationState("idle");
142
+ setTokenValidationMessage("");
143
+ if (mode === "organization") {
144
+ setHasSavedTokenInModal(false);
145
+ setTokenInputValue("");
146
+ return;
147
+ }
148
+ if (editingServer?.hasUserToken) {
149
+ setHasSavedTokenInModal(true);
150
+ setTokenInputValue(SAVED_TOKEN_MASK);
151
+ setInitialTokenInputValue(SAVED_TOKEN_MASK);
152
+ return;
153
+ }
154
+ setHasSavedTokenInModal(false);
155
+ setTokenInputValue("");
156
+ setInitialTokenInputValue("");
157
+ },
158
+ [modalCredentialMode, editingServer]
159
+ );
160
+ const clearTokenInput = useCallback(() => {
161
+ if (hasSavedTokenInModal) {
162
+ setHasSavedTokenInModal(false);
163
+ }
164
+ setTokenInputValue("");
165
+ setTokenValidationState("idle");
166
+ setTokenValidationMessage("");
167
+ }, [hasSavedTokenInModal]);
168
+ const showCredentialRadios = Boolean(
169
+ editingServer?.hasOrgToken && editingServer.auth !== "dcr"
170
+ );
171
+ const showPersonalTokenField = editingServer?.auth !== "dcr" && (!showCredentialRadios || modalCredentialMode === "personal");
172
+ let tokenInputValidated;
173
+ if (tokenValidationState === "success") {
174
+ tokenInputValidated = "success";
175
+ } else if (tokenValidationState === "error") {
176
+ tokenInputValidated = "error";
177
+ }
178
+ let tokenHelperVariant = "default";
179
+ if (tokenValidationState === "success") {
180
+ tokenHelperVariant = "success";
181
+ } else if (tokenValidationState === "error") {
182
+ tokenHelperVariant = "error";
183
+ }
184
+ const showTokenHelperText = !hasSavedTokenInModal || tokenValidationState !== "idle";
185
+ const tokenHelperText = tokenValidationMessage || t("mcp.settings.enterToken");
186
+ const configureModalTitle = t("mcp.settings.configureServerTitle", {
187
+ serverName: editingServer?.name ?? ""
188
+ });
189
+ const isConfigureModalSaving = Boolean(isSaving[editingServer?.name ?? ""]);
190
+ const isSaveTokenButtonDisabled = isSaveTokenDisabled({
191
+ tokenInputValue,
192
+ initialTokenInputValue,
193
+ modalEnabled,
194
+ serverEnabled: editingServer?.enabled ?? true,
195
+ credentialMode: modalCredentialMode,
196
+ initialCredentialMode,
197
+ hasOrgToken: editingServer?.hasOrgToken ?? false,
198
+ hasSavedPersonalTokenInModal: hasSavedTokenInModal,
199
+ tokenValidationState,
200
+ hasRemovedPersonalToken,
201
+ isDcrServer: editingServer?.auth === "dcr"
202
+ });
203
+ const removePersonalToken = useCallback(async () => {
204
+ if (!editingServer || !canManageMcp || isUpdatingModalStatus || editingServer.hasOrgToken) {
205
+ return;
206
+ }
207
+ setIsUpdatingModalStatus(true);
208
+ setTokenInputValue("");
209
+ setTokenValidationState("idle");
210
+ setTokenValidationMessage("");
211
+ setModalTools([]);
212
+ setModalToolsError(null);
213
+ setIsLoadingModalTools(false);
214
+ try {
215
+ await patchServer(editingServer.name, { token: null, enabled: false });
216
+ setHasSavedTokenInModal(false);
217
+ setInitialTokenInputValue("");
218
+ setModalEnabled(false);
219
+ setHasRemovedPersonalToken(true);
220
+ } catch {
221
+ const server = servers.find((item) => item.id === editingServerId);
222
+ if (server?.hasUserToken) {
223
+ setHasSavedTokenInModal(true);
224
+ setCanRemovePersonalToken(true);
225
+ setTokenInputValue(SAVED_TOKEN_MASK);
226
+ }
227
+ setHasRemovedPersonalToken(false);
228
+ } finally {
229
+ setIsUpdatingModalStatus(false);
230
+ }
231
+ }, [
232
+ canManageMcp,
233
+ editingServer,
234
+ editingServerId,
235
+ isUpdatingModalStatus,
236
+ patchServer,
237
+ servers
238
+ ]);
239
+ const save = useCallback(async () => {
240
+ if (!editingServer || !canManageMcp) return;
241
+ const hasCredentialModeChange = modalCredentialMode !== initialCredentialMode;
242
+ const hasTokenInputChange = tokenInputValue !== initialTokenInputValue;
243
+ const hasEnabledInputChange = modalEnabled !== editingServer.enabled;
244
+ if (!hasCredentialModeChange && !hasTokenInputChange && !hasEnabledInputChange) {
245
+ close();
246
+ return;
247
+ }
248
+ if (modalCredentialMode === "organization" && (hasCredentialModeChange || hasEnabledInputChange)) {
249
+ setTokenValidationState("validating");
250
+ setTokenValidationMessage(t("mcp.settings.token.savingAndValidating"));
251
+ try {
252
+ await patchServer(editingServer.name, {
253
+ token: null,
254
+ enabled: modalEnabled
255
+ });
256
+ const validationResult = await validateServer(editingServer.name);
257
+ if (validationResult.status === "error") {
258
+ setTokenValidationState("error");
259
+ setTokenValidationMessage(
260
+ formatApiError(validationResult.validation?.error) || t("mcp.settings.token.validationFailed")
261
+ );
262
+ return;
263
+ }
264
+ close();
265
+ } catch (e) {
266
+ setTokenValidationState("error");
267
+ setTokenValidationMessage(
268
+ e instanceof Error ? e.message : `Failed to update ${editingServer.name} settings`
269
+ );
270
+ }
271
+ return;
272
+ }
273
+ if (!hasTokenInputChange && hasEnabledInputChange) {
274
+ await patchServer(editingServer.name, { enabled: modalEnabled });
275
+ close();
276
+ return;
277
+ }
278
+ const markFailedTokenAttempt = () => {
279
+ setInitialTokenInputValue(tokenInputValue);
280
+ };
281
+ const token = tokenInputValue.trim();
282
+ const hasToken = token.length > 0;
283
+ setTokenValidationState("validating");
284
+ setTokenValidationMessage(t("mcp.settings.token.validating"));
285
+ try {
286
+ if (hasToken) {
287
+ if (!editingServer.url) {
288
+ setTokenValidationState("error");
289
+ setTokenValidationMessage(
290
+ t("mcp.settings.token.urlUnavailableForValidation")
291
+ );
292
+ markFailedTokenAttempt();
293
+ return;
294
+ }
295
+ const credentialValidation = await validateCredentials(
296
+ editingServer.url,
297
+ token
298
+ );
299
+ if (!credentialValidation.valid) {
300
+ setTokenValidationState("error");
301
+ setTokenValidationMessage(
302
+ formatApiError(credentialValidation.error) || t("mcp.settings.token.invalidCredentials")
303
+ );
304
+ markFailedTokenAttempt();
305
+ return;
306
+ }
307
+ setModalTools(credentialValidation.tools?.map((tool) => tool.name) ?? []);
308
+ }
309
+ setTokenValidationMessage(t("mcp.settings.token.savingAndValidating"));
310
+ await patchServer(editingServer.name, {
311
+ enabled: modalEnabled,
312
+ token: hasToken ? token : null
313
+ });
314
+ const validationResult = await validateServer(editingServer.name);
315
+ if (validationResult.status === "error") {
316
+ setTokenValidationState("error");
317
+ setTokenValidationMessage(
318
+ formatApiError(validationResult.validation?.error) || t("mcp.settings.token.validationFailed")
319
+ );
320
+ markFailedTokenAttempt();
321
+ return;
322
+ }
323
+ if (hasToken && validationResult.status === "connected") {
324
+ await patchServer(editingServer.name, { enabled: true });
325
+ setModalEnabled(true);
326
+ }
327
+ setTokenValidationState("success");
328
+ setTokenValidationMessage(t("mcp.settings.token.connectionSuccessful"));
329
+ close();
330
+ } catch (e) {
331
+ setTokenValidationState("error");
332
+ setTokenValidationMessage(
333
+ e instanceof Error ? e.message : `Failed to update ${editingServer.name} token`
334
+ );
335
+ markFailedTokenAttempt();
336
+ }
337
+ }, [
338
+ canManageMcp,
339
+ close,
340
+ editingServer,
341
+ initialCredentialMode,
342
+ initialTokenInputValue,
343
+ modalCredentialMode,
344
+ modalEnabled,
345
+ patchServer,
346
+ t,
347
+ tokenInputValue,
348
+ validateCredentials,
349
+ validateServer
350
+ ]);
351
+ const onModalEnabledChange = useCallback(
352
+ (_event, checked) => {
353
+ if (!editingServer || !canManageMcp) {
354
+ return;
355
+ }
356
+ setModalEnabled(checked);
357
+ },
358
+ [editingServer, canManageMcp]
359
+ );
360
+ const modalVerifiedHasToken = editingServer ? editingServer.auth === "dcr" || getModalVerifiedHasToken({
361
+ hasOrgToken: editingServer.hasOrgToken,
362
+ credentialMode: modalCredentialMode,
363
+ hasSavedPersonalTokenInModal: hasSavedTokenInModal
364
+ }) : false;
365
+ const modalDisplayStatus = editingServer ? getModalDisplayStatus(
366
+ {
367
+ ...editingServer,
368
+ hasToken: getModalDisplayHasToken({
369
+ modalVerifiedHasToken,
370
+ modalEnabled,
371
+ serverHasToken: editingServer.hasToken
372
+ })
373
+ },
374
+ modalEnabled
375
+ ) : "unknown";
376
+ const isModalEnabledToggleDisabled = !canManageMcp || !editingServer || isUpdatingModalStatus || isEnabledToggleUnavailable(modalDisplayStatus) || Boolean(isSaving[editingServer?.name ?? ""]);
377
+ const isModalEnabledChecked$1 = isModalEnabledChecked({
378
+ displayStatus: modalDisplayStatus,
379
+ modalEnabled
380
+ });
381
+ const modalStatusDetail = editingServer ? getDisplayDetail(editingServer, modalDisplayStatus, t) : "";
382
+ const modalToolCount = modalTools.length || editingServer?.toolCount || 0;
383
+ const modalEnabledDescription = (() => {
384
+ if (isModalEnabledChecked$1) {
385
+ return t("mcp.settings.modal.enabledDescription");
386
+ }
387
+ if (modalDisplayStatus === "tokenRequired") {
388
+ return t("mcp.settings.modal.enabledDescriptionTokenRequired");
389
+ }
390
+ return t("mcp.settings.modal.enabledDescriptionOff");
391
+ })();
392
+ const modalStatusText = (() => {
393
+ if (isUpdatingModalStatus) {
394
+ return t("mcp.settings.modal.loadingStatus");
395
+ }
396
+ if (isLoadingModalTools) {
397
+ return t("mcp.settings.modal.fetchingStatus");
398
+ }
399
+ if (modalDisplayStatus === "disabled") {
400
+ return t("mcp.settings.status.disabled");
401
+ }
402
+ if (modalDisplayStatus === "tokenRequired") {
403
+ return t("mcp.settings.status.tokenRequired");
404
+ }
405
+ if (modalDisplayStatus === "ok" && modalTools.length > 0) {
406
+ if (modalTools.length === 1) {
407
+ return t("mcp.settings.status.oneTool", {
408
+ count: String(modalTools.length)
409
+ });
410
+ }
411
+ return t("mcp.settings.status.manyTools", {
412
+ count: String(modalTools.length)
413
+ });
414
+ }
415
+ if (modalToolsError) {
416
+ return modalToolsError;
417
+ }
418
+ return modalStatusDetail;
419
+ })();
420
+ const modalToolsEmptyText = modalToolsError ?? t("mcp.settings.modal.noToolsAvailable");
421
+ return {
422
+ isOpen: Boolean(editingServer),
423
+ editingServer,
424
+ open,
425
+ close,
426
+ save,
427
+ removePersonalToken,
428
+ canManageMcp,
429
+ configureModalTitle,
430
+ isConfigureModalSaving,
431
+ isSaveTokenButtonDisabled,
432
+ isUpdatingModalStatus,
433
+ tokenInputValue,
434
+ onTokenInputChange,
435
+ clearTokenInput,
436
+ tokenInputValidated,
437
+ tokenValidationState,
438
+ tokenHelperVariant,
439
+ showTokenHelperText,
440
+ tokenHelperText,
441
+ modalCredentialMode,
442
+ onCredentialModeChange,
443
+ showCredentialRadios,
444
+ showPersonalTokenField,
445
+ onModalEnabledChange,
446
+ isModalEnabledChecked: isModalEnabledChecked$1,
447
+ isModalEnabledToggleDisabled,
448
+ modalDisplayStatus,
449
+ modalStatusDetail,
450
+ modalStatusText,
451
+ modalTools,
452
+ modalToolCount,
453
+ isLoadingModalTools,
454
+ modalToolsError,
455
+ modalToolsEmptyText,
456
+ modalVerifiedHasToken,
457
+ modalEnabledDescription,
458
+ canRemovePersonalToken,
459
+ hasSavedTokenInModal,
460
+ hasRemovedPersonalToken
461
+ };
462
+ };
463
+
464
+ export { useMcpConfigureModal };
465
+ //# sourceMappingURL=useMcpConfigureModal.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMcpConfigureModal.esm.js","sources":["../../src/hooks/useMcpConfigureModal.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 {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type FormEvent,\n} from 'react';\n\nimport {\n formatApiError,\n getDisplayDetail,\n getInitialCredentialMode,\n getModalDisplayHasToken,\n getModalDisplayStatus,\n isModalEnabledChecked as getModalEnabledChecked,\n getModalVerifiedHasToken,\n isSaveTokenDisabled as getSaveTokenDisabled,\n isEnabledToggleUnavailable,\n type CredentialMode,\n type McpConfigureServer,\n type ServerStatus,\n type TokenValidationState,\n} from '../components/mcpServersDisplayUtils';\nimport { useTranslation } from './useTranslation';\n\nconst SAVED_TOKEN_MASK = '********************';\n\nexport type McpToolInfo = {\n name: string;\n description?: string;\n};\n\nexport type McpServerValidationResult = {\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n validation?: {\n error?: unknown;\n tools?: McpToolInfo[];\n };\n};\n\nexport type McpCredentialsValidationResult = {\n valid: boolean;\n error?: unknown;\n toolCount: number;\n tools?: McpToolInfo[];\n};\n\nexport type UseMcpConfigureModalOptions = {\n servers: McpConfigureServer[];\n canManageMcp: boolean;\n isSaving: Record<string, boolean>;\n patchServer: (\n serverName: string,\n body: { enabled?: boolean; token?: string | null },\n ) => Promise<void>;\n validateServer: (serverName: string) => Promise<McpServerValidationResult>;\n validateCredentials: (\n url: string,\n token: string,\n ) => Promise<McpCredentialsValidationResult>;\n fetchServerValidation: (\n serverName: string,\n ) => Promise<McpServerValidationResult>;\n};\n\n/**\n * Owns all state, handlers and derived display data for the MCP \"configure\n * server\" modal. Rendering (JSX/styles) lives in `McpConfigureServerModal`.\n */\nexport const useMcpConfigureModal = ({\n servers,\n canManageMcp,\n isSaving,\n patchServer,\n validateServer,\n validateCredentials,\n fetchServerValidation,\n}: UseMcpConfigureModalOptions) => {\n const { t } = useTranslation();\n const [editingServerId, setEditingServerId] = useState<string | null>(null);\n const [tokenInputValue, setTokenInputValue] = useState('');\n const [initialTokenInputValue, setInitialTokenInputValue] = useState('');\n const [hasSavedTokenInModal, setHasSavedTokenInModal] = useState(false);\n const [modalCredentialMode, setModalCredentialMode] =\n useState<CredentialMode>('personal');\n const [initialCredentialMode, setInitialCredentialMode] =\n useState<CredentialMode>('personal');\n const [tokenValidationState, setTokenValidationState] =\n useState<TokenValidationState>('idle');\n const [tokenValidationMessage, setTokenValidationMessage] = useState('');\n const [modalEnabled, setModalEnabled] = useState(true);\n const [modalTools, setModalTools] = useState<string[]>([]);\n const [isLoadingModalTools, setIsLoadingModalTools] = useState(false);\n const [modalToolsError, setModalToolsError] = useState<string | null>(null);\n const [canRemovePersonalToken, setCanRemovePersonalToken] = useState(false);\n const [isUpdatingModalStatus, setIsUpdatingModalStatus] = useState(false);\n const [hasRemovedPersonalToken, setHasRemovedPersonalToken] = useState(false);\n\n const editingServer = useMemo(\n () => servers.find(server => server.id === editingServerId),\n [servers, editingServerId],\n );\n\n const close = useCallback(() => {\n setEditingServerId(null);\n setTokenInputValue('');\n setInitialTokenInputValue('');\n setHasSavedTokenInModal(false);\n setModalCredentialMode('personal');\n setInitialCredentialMode('personal');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n setModalEnabled(true);\n setModalTools([]);\n setIsLoadingModalTools(false);\n setModalToolsError(null);\n setCanRemovePersonalToken(false);\n setIsUpdatingModalStatus(false);\n setHasRemovedPersonalToken(false);\n }, []);\n\n const open = useCallback(\n (server: McpConfigureServer) => {\n setEditingServerId(server.id);\n const credentialMode = getInitialCredentialMode(server);\n const hasSavedPersonalToken = server.hasUserToken;\n setModalCredentialMode(credentialMode);\n setInitialCredentialMode(credentialMode);\n setHasSavedTokenInModal(hasSavedPersonalToken);\n setCanRemovePersonalToken(server.hasUserToken && !server.hasOrgToken);\n const initialToken = hasSavedPersonalToken ? SAVED_TOKEN_MASK : '';\n setInitialTokenInputValue(initialToken);\n setTokenInputValue(initialToken);\n setModalEnabled(server.enabled);\n setModalTools([]);\n setModalToolsError(null);\n setIsUpdatingModalStatus(false);\n setHasRemovedPersonalToken(false);\n if (server.status === 'error' && server.validationError) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n formatApiError(server.validationError) ||\n t('mcp.settings.token.validationFailed'),\n );\n } else {\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }\n },\n [t],\n );\n\n useEffect(() => {\n if (!editingServer) {\n return undefined;\n }\n\n if (!editingServer.hasToken) {\n setModalTools([]);\n setModalToolsError(null);\n setIsLoadingModalTools(false);\n return undefined;\n }\n\n let cancelled = false;\n setIsLoadingModalTools(true);\n setModalToolsError(null);\n\n void fetchServerValidation(editingServer.name)\n .then(data => {\n if (cancelled) {\n return;\n }\n const tools = data.validation?.tools?.map(tool => tool.name) ?? [];\n setModalTools(tools);\n if (data.status === 'error') {\n setModalToolsError(\n formatApiError(data.validation?.error) ||\n t('mcp.settings.token.validationFailed'),\n );\n } else {\n setModalToolsError(null);\n }\n })\n .catch(e => {\n if (cancelled) {\n return;\n }\n setModalTools([]);\n setModalToolsError(\n e instanceof Error\n ? e.message\n : t('mcp.settings.modal.toolsLoadFailed'),\n );\n })\n .finally(() => {\n if (!cancelled) {\n setIsLoadingModalTools(false);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [editingServer, fetchServerValidation, t]);\n\n const onTokenInputChange = useCallback(\n (value: string) => {\n if (hasSavedTokenInModal && value !== SAVED_TOKEN_MASK) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue(value);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n },\n [hasSavedTokenInModal],\n );\n\n const onCredentialModeChange = useCallback(\n (mode: CredentialMode) => {\n if (mode === modalCredentialMode) {\n return;\n }\n setModalCredentialMode(mode);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n\n if (mode === 'organization') {\n setHasSavedTokenInModal(false);\n setTokenInputValue('');\n return;\n }\n\n if (editingServer?.hasUserToken) {\n setHasSavedTokenInModal(true);\n setTokenInputValue(SAVED_TOKEN_MASK);\n setInitialTokenInputValue(SAVED_TOKEN_MASK);\n return;\n }\n\n setHasSavedTokenInModal(false);\n setTokenInputValue('');\n setInitialTokenInputValue('');\n },\n [modalCredentialMode, editingServer],\n );\n\n const clearTokenInput = useCallback(() => {\n if (hasSavedTokenInModal) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }, [hasSavedTokenInModal]);\n\n const showCredentialRadios = Boolean(\n editingServer?.hasOrgToken && editingServer.auth !== 'dcr',\n );\n const showPersonalTokenField =\n editingServer?.auth !== 'dcr' &&\n (!showCredentialRadios || modalCredentialMode === 'personal');\n\n let tokenInputValidated: 'success' | 'error' | undefined;\n if (tokenValidationState === 'success') {\n tokenInputValidated = 'success';\n } else if (tokenValidationState === 'error') {\n tokenInputValidated = 'error';\n }\n\n let tokenHelperVariant: 'success' | 'error' | 'default' = 'default';\n if (tokenValidationState === 'success') {\n tokenHelperVariant = 'success';\n } else if (tokenValidationState === 'error') {\n tokenHelperVariant = 'error';\n }\n\n const showTokenHelperText =\n !hasSavedTokenInModal || tokenValidationState !== 'idle';\n\n const tokenHelperText =\n tokenValidationMessage || t('mcp.settings.enterToken');\n\n const configureModalTitle = t('mcp.settings.configureServerTitle' as any, {\n serverName: editingServer?.name ?? '',\n });\n\n const isConfigureModalSaving = Boolean(isSaving[editingServer?.name ?? '']);\n const isSaveTokenButtonDisabled = getSaveTokenDisabled({\n tokenInputValue,\n initialTokenInputValue,\n modalEnabled,\n serverEnabled: editingServer?.enabled ?? true,\n credentialMode: modalCredentialMode,\n initialCredentialMode,\n hasOrgToken: editingServer?.hasOrgToken ?? false,\n hasSavedPersonalTokenInModal: hasSavedTokenInModal,\n tokenValidationState,\n hasRemovedPersonalToken,\n isDcrServer: editingServer?.auth === 'dcr',\n });\n\n const removePersonalToken = useCallback(async () => {\n if (\n !editingServer ||\n !canManageMcp ||\n isUpdatingModalStatus ||\n editingServer.hasOrgToken\n ) {\n return;\n }\n\n setIsUpdatingModalStatus(true);\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n setModalTools([]);\n setModalToolsError(null);\n setIsLoadingModalTools(false);\n\n try {\n await patchServer(editingServer.name, { token: null, enabled: false });\n setHasSavedTokenInModal(false);\n setInitialTokenInputValue('');\n setModalEnabled(false);\n setHasRemovedPersonalToken(true);\n } catch {\n const server = servers.find(item => item.id === editingServerId);\n if (server?.hasUserToken) {\n setHasSavedTokenInModal(true);\n setCanRemovePersonalToken(true);\n setTokenInputValue(SAVED_TOKEN_MASK);\n }\n setHasRemovedPersonalToken(false);\n } finally {\n setIsUpdatingModalStatus(false);\n }\n }, [\n canManageMcp,\n editingServer,\n editingServerId,\n isUpdatingModalStatus,\n patchServer,\n servers,\n ]);\n\n const save = useCallback(async () => {\n if (!editingServer || !canManageMcp) return;\n\n const hasCredentialModeChange =\n modalCredentialMode !== initialCredentialMode;\n const hasTokenInputChange = tokenInputValue !== initialTokenInputValue;\n const hasEnabledInputChange = modalEnabled !== editingServer.enabled;\n\n if (\n !hasCredentialModeChange &&\n !hasTokenInputChange &&\n !hasEnabledInputChange\n ) {\n close();\n return;\n }\n\n if (\n modalCredentialMode === 'organization' &&\n (hasCredentialModeChange || hasEnabledInputChange)\n ) {\n setTokenValidationState('validating');\n setTokenValidationMessage(t('mcp.settings.token.savingAndValidating'));\n try {\n await patchServer(editingServer.name, {\n token: null,\n enabled: modalEnabled,\n });\n const validationResult = await validateServer(editingServer.name);\n if (validationResult.status === 'error') {\n setTokenValidationState('error');\n setTokenValidationMessage(\n formatApiError(validationResult.validation?.error) ||\n t('mcp.settings.token.validationFailed'),\n );\n return;\n }\n close();\n } catch (e) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n e instanceof Error\n ? e.message\n : `Failed to update ${editingServer.name} settings`,\n );\n }\n return;\n }\n\n if (!hasTokenInputChange && hasEnabledInputChange) {\n await patchServer(editingServer.name, { enabled: modalEnabled });\n close();\n return;\n }\n\n const markFailedTokenAttempt = () => {\n setInitialTokenInputValue(tokenInputValue);\n };\n\n const token = tokenInputValue.trim();\n const hasToken = token.length > 0;\n\n setTokenValidationState('validating');\n setTokenValidationMessage(t('mcp.settings.token.validating'));\n\n try {\n if (hasToken) {\n if (!editingServer.url) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n t('mcp.settings.token.urlUnavailableForValidation'),\n );\n markFailedTokenAttempt();\n return;\n }\n\n const credentialValidation = await validateCredentials(\n editingServer.url,\n token,\n );\n if (!credentialValidation.valid) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n formatApiError(credentialValidation.error) ||\n t('mcp.settings.token.invalidCredentials'),\n );\n markFailedTokenAttempt();\n return;\n }\n setModalTools(credentialValidation.tools?.map(tool => tool.name) ?? []);\n }\n\n setTokenValidationMessage(t('mcp.settings.token.savingAndValidating'));\n await patchServer(editingServer.name, {\n enabled: modalEnabled,\n token: hasToken ? token : null,\n });\n const validationResult = await validateServer(editingServer.name);\n if (validationResult.status === 'error') {\n setTokenValidationState('error');\n setTokenValidationMessage(\n formatApiError(validationResult.validation?.error) ||\n t('mcp.settings.token.validationFailed'),\n );\n markFailedTokenAttempt();\n return;\n }\n if (hasToken && validationResult.status === 'connected') {\n await patchServer(editingServer.name, { enabled: true });\n setModalEnabled(true);\n }\n setTokenValidationState('success');\n setTokenValidationMessage(t('mcp.settings.token.connectionSuccessful'));\n close();\n } catch (e) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n e instanceof Error\n ? e.message\n : `Failed to update ${editingServer.name} token`,\n );\n markFailedTokenAttempt();\n }\n }, [\n canManageMcp,\n close,\n editingServer,\n initialCredentialMode,\n initialTokenInputValue,\n modalCredentialMode,\n modalEnabled,\n patchServer,\n t,\n tokenInputValue,\n validateCredentials,\n validateServer,\n ]);\n\n const onModalEnabledChange = useCallback(\n (_event: FormEvent, checked: boolean) => {\n if (!editingServer || !canManageMcp) {\n return;\n }\n setModalEnabled(checked);\n },\n [editingServer, canManageMcp],\n );\n\n const modalVerifiedHasToken = editingServer\n ? editingServer.auth === 'dcr' ||\n getModalVerifiedHasToken({\n hasOrgToken: editingServer.hasOrgToken,\n credentialMode: modalCredentialMode,\n hasSavedPersonalTokenInModal: hasSavedTokenInModal,\n })\n : false;\n\n const modalDisplayStatus: ServerStatus = editingServer\n ? getModalDisplayStatus(\n {\n ...editingServer,\n hasToken: getModalDisplayHasToken({\n modalVerifiedHasToken,\n modalEnabled,\n serverHasToken: editingServer.hasToken,\n }),\n },\n modalEnabled,\n )\n : 'unknown';\n\n const isModalEnabledToggleDisabled =\n !canManageMcp ||\n !editingServer ||\n isUpdatingModalStatus ||\n isEnabledToggleUnavailable(modalDisplayStatus) ||\n Boolean(isSaving[editingServer?.name ?? '']);\n\n const isModalEnabledChecked = getModalEnabledChecked({\n displayStatus: modalDisplayStatus,\n modalEnabled,\n });\n\n const modalStatusDetail = editingServer\n ? getDisplayDetail(editingServer, modalDisplayStatus, t)\n : '';\n\n const modalToolCount = modalTools.length || editingServer?.toolCount || 0;\n\n const modalEnabledDescription = (() => {\n if (isModalEnabledChecked) {\n return t('mcp.settings.modal.enabledDescription');\n }\n if (modalDisplayStatus === 'tokenRequired') {\n return t('mcp.settings.modal.enabledDescriptionTokenRequired');\n }\n return t('mcp.settings.modal.enabledDescriptionOff');\n })();\n\n const modalStatusText = (() => {\n if (isUpdatingModalStatus) {\n return t('mcp.settings.modal.loadingStatus');\n }\n if (isLoadingModalTools) {\n return t('mcp.settings.modal.fetchingStatus');\n }\n if (modalDisplayStatus === 'disabled') {\n return t('mcp.settings.status.disabled');\n }\n if (modalDisplayStatus === 'tokenRequired') {\n return t('mcp.settings.status.tokenRequired');\n }\n if (modalDisplayStatus === 'ok' && modalTools.length > 0) {\n if (modalTools.length === 1) {\n return t('mcp.settings.status.oneTool' as any, {\n count: String(modalTools.length),\n });\n }\n return t('mcp.settings.status.manyTools' as any, {\n count: String(modalTools.length),\n });\n }\n if (modalToolsError) {\n return modalToolsError;\n }\n return modalStatusDetail;\n })();\n\n const modalToolsEmptyText =\n modalToolsError ?? t('mcp.settings.modal.noToolsAvailable');\n\n return {\n isOpen: Boolean(editingServer),\n editingServer,\n open,\n close,\n save,\n removePersonalToken,\n canManageMcp,\n configureModalTitle,\n isConfigureModalSaving,\n isSaveTokenButtonDisabled,\n isUpdatingModalStatus,\n tokenInputValue,\n onTokenInputChange,\n clearTokenInput,\n tokenInputValidated,\n tokenValidationState,\n tokenHelperVariant,\n showTokenHelperText,\n tokenHelperText,\n modalCredentialMode,\n onCredentialModeChange,\n showCredentialRadios,\n showPersonalTokenField,\n onModalEnabledChange,\n isModalEnabledChecked,\n isModalEnabledToggleDisabled,\n modalDisplayStatus,\n modalStatusDetail,\n modalStatusText,\n modalTools,\n modalToolCount,\n isLoadingModalTools,\n modalToolsError,\n modalToolsEmptyText,\n modalVerifiedHasToken,\n modalEnabledDescription,\n canRemovePersonalToken,\n hasSavedTokenInModal,\n hasRemovedPersonalToken,\n };\n};\n\nexport type UseMcpConfigureModalResult = ReturnType<\n typeof useMcpConfigureModal\n>;\n"],"names":["getSaveTokenDisabled","isModalEnabledChecked","getModalEnabledChecked"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,11 +1,9 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { unstable_ClassNameGenerator } from '@mui/material/className';
3
- import '@patternfly/react-core/dist/styles/base-no-reset.css';
4
- import '@patternfly/chatbot/dist/css/main.css';
5
- import { useEffect } from 'react';
2
+ import { useEffect, useLayoutEffect } from 'react';
6
3
  import { useLocation, useNavigate } from 'react-router-dom';
7
4
  import { createRouteRef, createSubRouteRef, ApiBlueprint, createApiFactory, fetchApiRef, configApiRef, PageBlueprint, createFrontendModule, createFrontendPlugin } from '@backstage/frontend-plugin-api';
8
5
  import { AppRootWrapperBlueprint, TranslationBlueprint } from '@backstage/plugin-app-react';
6
+ import { unstable_ClassNameGenerator } from '@mui/material/className';
9
7
  import { AppDrawerContentBlueprint } from '@red-hat-developer-hub/backstage-plugin-app-react/alpha';
10
8
  import { lightspeedApiRef } from './api/api.esm.js';
11
9
  import { LightspeedApiClient } from './api/LightspeedApiClient.esm.js';
@@ -83,6 +81,9 @@ const LightspeedLegacyRedirect = ({ children }) => {
83
81
  });
84
82
  }
85
83
  }, [location, navigate]);
84
+ useLayoutEffect(() => {
85
+ document.documentElement.style.containerType = "normal";
86
+ }, []);
86
87
  return /* @__PURE__ */ jsx(Fragment, { children });
87
88
  };
88
89
  const intelligentAssistantRedirect = AppRootWrapperBlueprint.make({
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/index.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 { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nimport '@patternfly/react-core/dist/styles/base-no-reset.css';\nimport '@patternfly/chatbot/dist/css/main.css';\n\nimport { useEffect, type ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport {\n ApiBlueprint,\n configApiRef,\n createApiFactory,\n createFrontendModule,\n createFrontendPlugin,\n createRouteRef,\n createSubRouteRef,\n fetchApiRef,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n AppRootWrapperBlueprint,\n TranslationBlueprint,\n} from '@backstage/plugin-app-react';\n\nimport { AppDrawerContentBlueprint } from '@red-hat-developer-hub/backstage-plugin-app-react/alpha';\n\nimport { lightspeedApiRef } from './api/api';\nimport { LightspeedApiClient } from './api/LightspeedApiClient';\nimport { notebooksApiRef } from './api/notebooksApi';\nimport { NotebooksApiClient } from './api/NotebooksApiClient';\nimport { LightspeedChatContainer as LightspeedChatContainerElement } from './components/LightspeedChatContainer';\nimport { LightspeedDrawerProvider as LightspeedProvider } from './components/LightspeedDrawerProvider';\nimport { LightspeedFABContent as LightspeedFABComponent } from './components/LightspeedFABContent';\nimport {\n LIGHTSPEED_APP_DRAWER_ID,\n LIGHTSPEED_LEGACY_PATH,\n LIGHTSPEED_PATH,\n} from './const';\nimport { lightspeedTranslations } from './translations';\n\nClassNameGenerator.configure(componentName =>\n componentName.startsWith('v5-') ? componentName : `v5-${componentName}`,\n);\n\nconst nfsRootRouteRef = createRouteRef();\nconst nfsConversationRouteRef = createSubRouteRef({\n parent: nfsRootRouteRef,\n path: '/conversation/:conversationId',\n});\n\nconst intelligentAssistantApi = ApiBlueprint.make({\n name: 'intelligent-assistant',\n params: defineParams =>\n defineParams(\n createApiFactory({\n api: lightspeedApiRef,\n deps: {\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, fetchApi }) =>\n new LightspeedApiClient({ configApi, fetchApi }),\n }),\n ),\n});\n\nconst notebooksApi = ApiBlueprint.make({\n name: 'notebooks',\n params: defineParams =>\n defineParams(\n createApiFactory({\n api: notebooksApiRef,\n deps: {\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, fetchApi }) =>\n new NotebooksApiClient({ configApi, fetchApi }),\n }),\n ),\n});\n\nconst intelligentAssistantPage = PageBlueprint.make({\n params: {\n path: LIGHTSPEED_PATH,\n routeRef: nfsRootRouteRef,\n noHeader: true,\n loader: () => import('./components/Router').then(m => <m.Router />),\n },\n});\n\nconst intelligentAssistantDrawer = AppDrawerContentBlueprint.make({\n name: 'intelligent-assistant',\n params: {\n id: LIGHTSPEED_APP_DRAWER_ID,\n element: <LightspeedChatContainerElement />,\n resizable: false,\n defaultWidth: 400,\n priority: 100,\n },\n});\n\nconst LightspeedLegacyRedirect = ({ children }: { children: ReactNode }) => {\n const location = useLocation();\n const navigate = useNavigate();\n useEffect(() => {\n if (location.pathname.startsWith(LIGHTSPEED_LEGACY_PATH)) {\n const newPath = location.pathname.replace(\n LIGHTSPEED_LEGACY_PATH,\n LIGHTSPEED_PATH,\n );\n navigate(newPath + location.search + location.hash, {\n replace: true,\n });\n }\n }, [location, navigate]);\n return <>{children}</>;\n};\n\nconst intelligentAssistantRedirect = AppRootWrapperBlueprint.make({\n name: 'intelligent-assistant-redirect',\n params: {\n component: LightspeedLegacyRedirect,\n },\n});\n\n/**\n * @public\n */\nexport const intelligentAssistantRedirectModule = createFrontendModule({\n pluginId: 'app',\n extensions: [intelligentAssistantRedirect],\n});\n\n/**\n * Lightspeed FAB module\n * @public\n */\nconst intelligentAssistantFABExtension = AppRootWrapperBlueprint.make({\n name: 'intelligent-assistant-fab',\n params: {\n component: ({ children }) => (\n <LightspeedProvider>\n <LightspeedFABComponent />\n {children}\n </LightspeedProvider>\n ),\n },\n});\n\n/**\n * @public\n */\nexport const intelligentAssistantFABModule = createFrontendModule({\n pluginId: 'app',\n extensions: [intelligentAssistantFABExtension, intelligentAssistantRedirect],\n});\n\n/**\n * Translation wiring for the language selector (app-config `app.extensions`).\n *\n * @public\n */\nexport const intelligentAssistantTranslationsModule = createFrontendModule({\n pluginId: 'app',\n extensions: [\n TranslationBlueprint.make({\n name: 'intelligent-assistant-translations',\n params: {\n resource: lightspeedTranslations,\n },\n }),\n ],\n});\n\n/**\n * Lightspeed plugin for the Backstage new frontend system.\n *\n * @public\n */\nexport default createFrontendPlugin({\n pluginId: 'intelligent-assistant',\n extensions: [\n intelligentAssistantApi,\n notebooksApi,\n intelligentAssistantPage,\n intelligentAssistantDrawer,\n ],\n routes: {\n root: nfsRootRouteRef,\n lightspeedConversation: nfsConversationRouteRef,\n },\n});\n"],"names":["ClassNameGenerator","LightspeedChatContainerElement","LightspeedProvider","LightspeedFABComponent"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/index.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 { useEffect, useLayoutEffect, type ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport {\n ApiBlueprint,\n configApiRef,\n createApiFactory,\n createFrontendModule,\n createFrontendPlugin,\n createRouteRef,\n createSubRouteRef,\n fetchApiRef,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n AppRootWrapperBlueprint,\n TranslationBlueprint,\n} from '@backstage/plugin-app-react';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nimport { AppDrawerContentBlueprint } from '@red-hat-developer-hub/backstage-plugin-app-react/alpha';\n\nimport { lightspeedApiRef } from './api/api';\nimport { LightspeedApiClient } from './api/LightspeedApiClient';\nimport { notebooksApiRef } from './api/notebooksApi';\nimport { NotebooksApiClient } from './api/NotebooksApiClient';\nimport { LightspeedChatContainer as LightspeedChatContainerElement } from './components/LightspeedChatContainer';\nimport { LightspeedDrawerProvider as LightspeedProvider } from './components/LightspeedDrawerProvider';\nimport { LightspeedFABContent as LightspeedFABComponent } from './components/LightspeedFABContent';\nimport {\n LIGHTSPEED_APP_DRAWER_ID,\n LIGHTSPEED_LEGACY_PATH,\n LIGHTSPEED_PATH,\n} from './const';\nimport { lightspeedTranslations } from './translations';\n\nClassNameGenerator.configure(componentName =>\n componentName.startsWith('v5-') ? componentName : `v5-${componentName}`,\n);\n\nconst nfsRootRouteRef = createRouteRef();\nconst nfsConversationRouteRef = createSubRouteRef({\n parent: nfsRootRouteRef,\n path: '/conversation/:conversationId',\n});\n\nconst intelligentAssistantApi = ApiBlueprint.make({\n name: 'intelligent-assistant',\n params: defineParams =>\n defineParams(\n createApiFactory({\n api: lightspeedApiRef,\n deps: {\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, fetchApi }) =>\n new LightspeedApiClient({ configApi, fetchApi }),\n }),\n ),\n});\n\nconst notebooksApi = ApiBlueprint.make({\n name: 'notebooks',\n params: defineParams =>\n defineParams(\n createApiFactory({\n api: notebooksApiRef,\n deps: {\n configApi: configApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, fetchApi }) =>\n new NotebooksApiClient({ configApi, fetchApi }),\n }),\n ),\n});\n\nconst intelligentAssistantPage = PageBlueprint.make({\n params: {\n path: LIGHTSPEED_PATH,\n routeRef: nfsRootRouteRef,\n noHeader: true,\n loader: () => import('./components/Router').then(m => <m.Router />),\n },\n});\n\nconst intelligentAssistantDrawer = AppDrawerContentBlueprint.make({\n name: 'intelligent-assistant',\n params: {\n id: LIGHTSPEED_APP_DRAWER_ID,\n element: <LightspeedChatContainerElement />,\n resizable: false,\n defaultWidth: 400,\n priority: 100,\n },\n});\n\nconst LightspeedLegacyRedirect = ({ children }: { children: ReactNode }) => {\n const location = useLocation();\n const navigate = useNavigate();\n useEffect(() => {\n if (location.pathname.startsWith(LIGHTSPEED_LEGACY_PATH)) {\n const newPath = location.pathname.replace(\n LIGHTSPEED_LEGACY_PATH,\n LIGHTSPEED_PATH,\n );\n navigate(newPath + location.search + location.hash, {\n replace: true,\n });\n }\n }, [location, navigate]);\n\n // Workaround: PF 6.6.0 base-no-reset.css sets container-type: inline-size on :root,\n // breaking body height. Remove after https://github.com/patternfly/patternfly-react/issues/12568\n useLayoutEffect(() => {\n document.documentElement.style.containerType = 'normal';\n }, []);\n\n return <>{children}</>;\n};\n\nconst intelligentAssistantRedirect = AppRootWrapperBlueprint.make({\n name: 'intelligent-assistant-redirect',\n params: {\n component: LightspeedLegacyRedirect,\n },\n});\n\n/**\n * @public\n */\nexport const intelligentAssistantRedirectModule = createFrontendModule({\n pluginId: 'app',\n extensions: [intelligentAssistantRedirect],\n});\n\n/**\n * Lightspeed FAB module\n * @public\n */\nconst intelligentAssistantFABExtension = AppRootWrapperBlueprint.make({\n name: 'intelligent-assistant-fab',\n params: {\n component: ({ children }) => (\n <LightspeedProvider>\n <LightspeedFABComponent />\n {children}\n </LightspeedProvider>\n ),\n },\n});\n\n/**\n * @public\n */\nexport const intelligentAssistantFABModule = createFrontendModule({\n pluginId: 'app',\n extensions: [intelligentAssistantFABExtension, intelligentAssistantRedirect],\n});\n\n/**\n * Translation wiring for the language selector (app-config `app.extensions`).\n *\n * @public\n */\nexport const intelligentAssistantTranslationsModule = createFrontendModule({\n pluginId: 'app',\n extensions: [\n TranslationBlueprint.make({\n name: 'intelligent-assistant-translations',\n params: {\n resource: lightspeedTranslations,\n },\n }),\n ],\n});\n\n/**\n * Lightspeed plugin for the Backstage new frontend system.\n *\n * @public\n */\nexport default createFrontendPlugin({\n pluginId: 'intelligent-assistant',\n extensions: [\n intelligentAssistantApi,\n notebooksApi,\n intelligentAssistantPage,\n intelligentAssistantDrawer,\n ],\n routes: {\n root: nfsRootRouteRef,\n lightspeedConversation: nfsConversationRouteRef,\n },\n});\n"],"names":["ClassNameGenerator","LightspeedChatContainerElement","LightspeedProvider","LightspeedFABComponent"],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- import '@patternfly/react-core/dist/styles/base-no-reset.css';
2
- import '@patternfly/chatbot/dist/css/main.css';
3
1
  import { unstable_ClassNameGenerator } from '@mui/material/className';
4
2
  export { LightspeedDrawerProvider, LightspeedPage, lightspeedPlugin } from './plugin.esm.js';
5
3
  export { LightspeedIcon } from './components/LightspeedIcon.esm.js';
@@ -1 +1 @@
1
- {"version":3,"file":"legacy.esm.js","sources":["../src/legacy.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 '@patternfly/react-core/dist/styles/base-no-reset.css';\nimport '@patternfly/chatbot/dist/css/main.css';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nClassNameGenerator.configure(componentName =>\n componentName.startsWith('v5-') ? componentName : `v5-${componentName}`,\n);\n\nexport {\n lightspeedPlugin,\n LightspeedPage,\n LightspeedDrawerProvider,\n} from './plugin';\nexport { LightspeedIcon } from './components/LightspeedIcon';\nexport { LightspeedFAB } from './components/LightspeedFAB';\nexport { LightspeedChatContainer } from './components/LightspeedChatContainer';\nexport { LightspeedDrawerStateExposer } from './components/LightspeedDrawerStateExposer';\nexport type {\n DrawerStateExposerProps,\n DrawerState,\n} from './components/LightspeedDrawerStateExposer';\n"],"names":["ClassNameGenerator"],"mappings":";;;;;;;;;AAqBAA,2BAAA,CAAmB,SAAA;AAAA,EAAU,mBAC3B,aAAA,CAAc,UAAA,CAAW,KAAK,CAAA,GAAI,aAAA,GAAgB,MAAM,aAAa,CAAA;AACvE,CAAA"}
1
+ {"version":3,"file":"legacy.esm.js","sources":["../src/legacy.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 { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';\n\nClassNameGenerator.configure(componentName =>\n componentName.startsWith('v5-') ? componentName : `v5-${componentName}`,\n);\n\nexport {\n lightspeedPlugin,\n LightspeedPage,\n LightspeedDrawerProvider,\n} from './plugin';\nexport { LightspeedIcon } from './components/LightspeedIcon';\nexport { LightspeedFAB } from './components/LightspeedFAB';\nexport { LightspeedChatContainer } from './components/LightspeedChatContainer';\nexport { LightspeedDrawerStateExposer } from './components/LightspeedDrawerStateExposer';\nexport type {\n DrawerStateExposerProps,\n DrawerState,\n} from './components/LightspeedDrawerStateExposer';\n"],"names":["ClassNameGenerator"],"mappings":";;;;;;;AAkBAA,2BAAA,CAAmB,SAAA;AAAA,EAAU,mBAC3B,aAAA,CAAc,UAAA,CAAW,KAAK,CAAA,GAAI,aAAA,GAAgB,MAAM,aAAa,CAAA;AACvE,CAAA"}
@@ -1,5 +1,3 @@
1
- import '@patternfly/react-core/dist/styles/base-no-reset.css';
2
- import '@patternfly/chatbot/dist/css/main.css';
3
1
  import { createPlugin, createApiFactory, fetchApiRef, configApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
4
2
  import { lightspeedApiRef } from './api/api.esm.js';
5
3
  import { LightspeedApiClient } from './api/LightspeedApiClient.esm.js';