From 455f51898031cd09c10f13e61f86fb1847d89643 Mon Sep 17 00:00:00 2001 From: Yi Cai Date: Sun, 14 Jun 2026 23:58:44 -0400 Subject: [PATCH 1/4] fix(lightspeed): improved MCP ui Signed-off-by: Yi Cai --- .../lightspeed/.changeset/kind-radios-fold.md | 5 ++++ .../e2e-tests/pages/NotebookSurfacePage.ts | 2 +- .../e2e-tests/utils/chatManagement.ts | 4 +-- .../packages/app-legacy/knip-report.md | 20 +++++-------- .../lightspeed/packages/app/knip-report.md | 23 +++++++++++++++ .../packages/backend/knip-report.md | 24 +++++++-------- .../plugins/lightspeed-backend/knip-report.md | 8 +++++ .../plugins/lightspeed/knip-report.md | 18 +++++------- .../components/LightspeedChatBoxHeader.tsx | 5 ++-- .../src/components/McpServersSettings.tsx | 20 +++++++++---- .../__tests__/LightspeedChat.test.tsx | 29 ++++++++++++------- .../plugins/lightspeed/src/translations/de.ts | 2 -- .../plugins/lightspeed/src/translations/es.ts | 2 -- .../plugins/lightspeed/src/translations/fr.ts | 2 -- .../plugins/lightspeed/src/translations/it.ts | 2 -- .../plugins/lightspeed/src/translations/ja.ts | 2 -- 16 files changed, 102 insertions(+), 66 deletions(-) create mode 100644 workspaces/lightspeed/.changeset/kind-radios-fold.md create mode 100644 workspaces/lightspeed/packages/app/knip-report.md diff --git a/workspaces/lightspeed/.changeset/kind-radios-fold.md b/workspaces/lightspeed/.changeset/kind-radios-fold.md new file mode 100644 index 0000000000..bd7e14e883 --- /dev/null +++ b/workspaces/lightspeed/.changeset/kind-radios-fold.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-lightspeed': patch +--- + +Polish MCP settings and chatbot options menu: remove the settings button hover tooltip, relabel it to "Options", show MCP server edit actions on row hover only, display token-required status with a red warning icon, and align the MCP servers table background with the panel in dark mode. diff --git a/workspaces/lightspeed/e2e-tests/pages/NotebookSurfacePage.ts b/workspaces/lightspeed/e2e-tests/pages/NotebookSurfacePage.ts index e8fc6f6160..6193be563c 100644 --- a/workspaces/lightspeed/e2e-tests/pages/NotebookSurfacePage.ts +++ b/workspaces/lightspeed/e2e-tests/pages/NotebookSurfacePage.ts @@ -50,7 +50,7 @@ export class NotebookSurfacePage { async gotoFullscreenNotebooksTab(): Promise { await openLightspeed(this.page); await this.page - .getByRole('button', { name: this.t['aria.settings.label'] }) + .getByRole('button', { name: this.t['aria.options.label'] }) .click(); await this.page .getByRole('menuitem', { diff --git a/workspaces/lightspeed/e2e-tests/utils/chatManagement.ts b/workspaces/lightspeed/e2e-tests/utils/chatManagement.ts index 2bceff88be..bc3602059d 100644 --- a/workspaces/lightspeed/e2e-tests/utils/chatManagement.ts +++ b/workspaces/lightspeed/e2e-tests/utils/chatManagement.ts @@ -238,7 +238,7 @@ export const openChatbotSettings = async ( translations: LightspeedMessages, ) => { await page - .getByRole('button', { name: translations['aria.settings.label'] }) + .getByRole('button', { name: translations['aria.options.label'] }) .click(); }; @@ -247,7 +247,7 @@ export const verifyChatbotSettingsVisible = async ( translations: LightspeedMessages, ) => { await expect( - page.getByRole('button', { name: translations['aria.settings.label'] }), + page.getByRole('button', { name: translations['aria.options.label'] }), ).toBeVisible(); }; diff --git a/workspaces/lightspeed/packages/app-legacy/knip-report.md b/workspaces/lightspeed/packages/app-legacy/knip-report.md index ab02aca7b7..2048731d55 100644 --- a/workspaces/lightspeed/packages/app-legacy/knip-report.md +++ b/workspaces/lightspeed/packages/app-legacy/knip-report.md @@ -4,19 +4,15 @@ | Name | Location | Severity | | :----------- | :---------------- | :------- | -| react-router | package.json:51:6 | error | +| react-router | package.json:55:6 | error | -## Unused devDependencies (4) +## Unused devDependencies (6) | Name | Location | Severity | | :-------------------------- | :---------------- | :------- | -| @testing-library/user-event | package.json:60:6 | error | -| @backstage/test-utils | package.json:55:6 | error | -| @testing-library/dom | package.json:57:6 | error | -| cross-env | package.json:62:6 | error | - -## Unlisted dependencies (1) - -| Name | Location | Severity | -| :--------- | :---------------------------------- | :------- | -| playwright | ../../e2e-tests/utils/testHelper.ts | error | +| @testing-library/user-event | package.json:65:6 | error | +| @backstage/test-utils | package.json:60:6 | error | +| @axe-core/playwright | package.json:59:6 | error | +| @testing-library/dom | package.json:62:6 | error | +| @playwright/test | package.json:61:6 | error | +| cross-env | package.json:67:6 | error | diff --git a/workspaces/lightspeed/packages/app/knip-report.md b/workspaces/lightspeed/packages/app/knip-report.md new file mode 100644 index 0000000000..b9f559fca6 --- /dev/null +++ b/workspaces/lightspeed/packages/app/knip-report.md @@ -0,0 +1,23 @@ +# Knip report + +## Unused dependencies (7) + +| Name | Location | Severity | +| :------------------------------ | :---------------- | :------- | +| @backstage/plugin-user-settings | package.json:33:6 | error | +| @backstage/integration-react | package.json:28:6 | error | +| @backstage/plugin-scaffolder | package.json:31:6 | error | +| @backstage/core-compat-api | package.json:23:6 | error | +| @backstage/plugin-catalog | package.json:30:6 | error | +| @backstage/plugin-search | package.json:32:6 | error | +| react-router | package.json:42:6 | error | + +## Unused devDependencies (5) + +| Name | Location | Severity | +| :----------------------------- | :---------------- | :------- | +| @backstage/frontend-test-utils | package.json:46:6 | error | +| @testing-library/user-event | package.json:51:6 | error | +| @testing-library/dom | package.json:48:6 | error | +| @playwright/test | package.json:47:6 | error | +| cross-env | package.json:53:6 | error | diff --git a/workspaces/lightspeed/packages/backend/knip-report.md b/workspaces/lightspeed/packages/backend/knip-report.md index 703c1b4744..3a0daf286c 100644 --- a/workspaces/lightspeed/packages/backend/knip-report.md +++ b/workspaces/lightspeed/packages/backend/knip-report.md @@ -2,15 +2,15 @@ ## Unused dependencies (10) -| Name | Location | Severity | -| :---------------------------------------------------- | :---------------- | :------- | -| @backstage/plugin-auth-backend-module-github-provider | package.json:28:6 | error | -| @backstage/plugin-search-backend-node | package.json:45:6 | error | -| @backstage/plugin-permission-common | package.json:37:6 | error | -| @backstage/plugin-permission-node | package.json:38:6 | error | -| @backstage/plugin-auth-node | package.json:30:6 | error | -| @backstage/config | package.json:25:6 | error | -| better-sqlite3 | package.json:49:6 | error | -| node-gyp | package.json:50:6 | error | -| app | package.json:48:6 | error | -| pg | package.json:51:6 | error | +| Name | Location | Severity | +| :----------------------------------------------------------- | :---------------- | :------- | +| @backstage/plugin-permission-backend-module-allow-all-policy | package.json:37:6 | error | +| @backstage/plugin-search-backend-node | package.json:46:6 | error | +| @backstage/plugin-permission-backend | package.json:36:6 | error | +| @backstage/plugin-permission-common | package.json:38:6 | error | +| @backstage/plugin-permission-node | package.json:39:6 | error | +| @backstage/plugin-auth-node | package.json:31:6 | error | +| @backstage/config | package.json:26:6 | error | +| node-gyp | package.json:51:6 | error | +| app | package.json:49:6 | error | +| pg | package.json:52:6 | error | diff --git a/workspaces/lightspeed/plugins/lightspeed-backend/knip-report.md b/workspaces/lightspeed/plugins/lightspeed-backend/knip-report.md index 28921c328d..18dc025735 100644 --- a/workspaces/lightspeed/plugins/lightspeed-backend/knip-report.md +++ b/workspaces/lightspeed/plugins/lightspeed-backend/knip-report.md @@ -1 +1,9 @@ # Knip report + +## Unused dependencies (3) + +| Name | Location | Severity | +| :----------------- | :---------------- | :------- | +| llama-stack-client | package.json:60:6 | error | +| @langchain/openai | package.json:52:6 | error | +| @langchain/core | package.json:51:6 | error | diff --git a/workspaces/lightspeed/plugins/lightspeed/knip-report.md b/workspaces/lightspeed/plugins/lightspeed/knip-report.md index e293145d5a..209aadc0f6 100644 --- a/workspaces/lightspeed/plugins/lightspeed/knip-report.md +++ b/workspaces/lightspeed/plugins/lightspeed/knip-report.md @@ -4,15 +4,13 @@ | Name | Location | Severity | | :--------------- | :---------------- | :------- | -| @material-ui/lab | package.json:45:6 | error | -| react-markdown | package.json:52:6 | error | +| @material-ui/lab | package.json:63:6 | error | +| react-markdown | package.json:78:6 | error | -## Unused devDependencies (5) +## Unused devDependencies (3) -| Name | Location | Severity | -| :-------------------------- | :---------------- | :------- | -| @testing-library/user-event | package.json:70:6 | error | -| @backstage/core-app-api | package.json:61:6 | error | -| @emotion/is-prop-valid | package.json:64:6 | error | -| @testing-library/dom | package.json:67:6 | error | -| msw | package.json:71:6 | error | +| Name | Location | Severity | +| :---------------------- | :---------------- | :------- | +| @backstage/core-app-api | package.json:87:6 | error | +| @emotion/is-prop-valid | package.json:90:6 | error | +| msw | package.json:97:6 | error | diff --git a/workspaces/lightspeed/plugins/lightspeed/src/components/LightspeedChatBoxHeader.tsx b/workspaces/lightspeed/plugins/lightspeed/src/components/LightspeedChatBoxHeader.tsx index 9ef30eff01..5762bc4d21 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/components/LightspeedChatBoxHeader.tsx +++ b/workspaces/lightspeed/plugins/lightspeed/src/components/LightspeedChatBoxHeader.tsx @@ -177,11 +177,12 @@ export const LightspeedChatBoxHeader = ({ className={styles.dropdown} isCompact toggleProps={{ - 'aria-label': t('aria.settings.label'), + 'aria-label': t('aria.options.label'), className: styles.optionsToggle, }} tooltipProps={{ - content: t('tooltip.settings'), + trigger: 'manual', + content: '', }} > diff --git a/workspaces/lightspeed/plugins/lightspeed/src/components/McpServersSettings.tsx b/workspaces/lightspeed/plugins/lightspeed/src/components/McpServersSettings.tsx index 91d65d7987..72d543db4e 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/components/McpServersSettings.tsx +++ b/workspaces/lightspeed/plugins/lightspeed/src/components/McpServersSettings.tsx @@ -162,9 +162,6 @@ const useStyles = makeStyles(theme => ({ statusOk: { color: '#147878', }, - statusToken: { - color: '#147878', - }, statusWarn: { color: '#B1380B', }, @@ -173,6 +170,13 @@ const useStyles = makeStyles(theme => ({ }, actionButton: { color: theme.palette.text.secondary, + opacity: 0, + transition: 'opacity 0.15s ease-in-out', + }, + tableRow: { + '&:hover $actionButton, &:focus-within $actionButton': { + opacity: 1, + }, }, modalDescription: { color: theme.palette.text.secondary, @@ -316,6 +320,12 @@ const useStyles = makeStyles(theme => ({ }, table: { width: '100%', + backgroundColor: 'transparent', + '--pf-v6-c-table--BackgroundColor': 'transparent', + '--pf-v5-c-table--BackgroundColor': 'transparent', + '& table, & thead, & tbody, & tr, & th, & td': { + backgroundColor: 'transparent !important', + }, '& th': { borderBottom: 0, fontSize: '0.75rem', @@ -904,14 +914,12 @@ export const McpServersSettings = ({ let statusClass = classes.statusWarn; if (displayStatus === 'ok') { statusClass = classes.statusOk; - } else if (displayStatus === 'tokenRequired') { - statusClass = classes.statusToken; } else if (displayStatus === 'disabled') { statusClass = classes.statusDisabled; } return ( - + {(() => { const isUnavailable = diff --git a/workspaces/lightspeed/plugins/lightspeed/src/components/__tests__/LightspeedChat.test.tsx b/workspaces/lightspeed/plugins/lightspeed/src/components/__tests__/LightspeedChat.test.tsx index d5d4beef22..6aca340ba9 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/components/__tests__/LightspeedChat.test.tsx +++ b/workspaces/lightspeed/plugins/lightspeed/src/components/__tests__/LightspeedChat.test.tsx @@ -31,6 +31,7 @@ import { render, screen, waitFor, + within, } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; @@ -237,6 +238,10 @@ describe('LightspeedChat', () => { } as Partial> as ReturnType< typeof useConversations >); + mockUseNotebookSessions.mockReturnValue({ + data: [], + refetch: jest.fn(), + }); mockUseLightspeedDrawerContext.mockReturnValue({ isChatbotActive: false, toggleChatbot: jest.fn(), @@ -556,7 +561,7 @@ describe('LightspeedChat', () => { it('should open settings dropdown when clicking the settings button', async () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); expect(settingsButton).toBeInTheDocument(); await userEvent.click(settingsButton); @@ -570,7 +575,7 @@ describe('LightspeedChat', () => { it('should show all display mode options in the dropdown', async () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -584,7 +589,7 @@ describe('LightspeedChat', () => { it('should call setDisplayMode with default when clicking Overlay option', async () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -602,7 +607,7 @@ describe('LightspeedChat', () => { it('should call setDisplayMode with docked when clicking Dock to window option', async () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -620,7 +625,7 @@ describe('LightspeedChat', () => { it('should call setDisplayMode with embedded when clicking Fullscreen option', async () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -660,7 +665,9 @@ describe('LightspeedChat', () => { expect(screen.getByText('My Notebooks')).toBeInTheDocument(); }); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = within( + screen.getByRole('region', { name: 'Chatbot' }), + ).getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -696,7 +703,7 @@ describe('LightspeedChat', () => { render(setupLightspeedChat()); await waitFor(() => { - expect(screen.getByLabelText('Chatbot options')).toBeInTheDocument(); + expect(screen.getByLabelText('Options')).toBeInTheDocument(); }); expect( @@ -729,7 +736,7 @@ describe('LightspeedChat', () => { render(setupLightspeedChat()); await waitFor(() => { - expect(screen.getByLabelText('Chatbot options')).toBeInTheDocument(); + expect(screen.getByLabelText('Options')).toBeInTheDocument(); }); expect( @@ -761,7 +768,7 @@ describe('LightspeedChat', () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -795,7 +802,7 @@ describe('LightspeedChat', () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { @@ -829,7 +836,7 @@ describe('LightspeedChat', () => { render(setupLightspeedChat()); - const settingsButton = screen.getByLabelText('Chatbot options'); + const settingsButton = screen.getByLabelText('Options'); await userEvent.click(settingsButton); await waitFor(() => { diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/de.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/de.ts index c3cae22b4a..9d4627a49d 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/de.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/de.ts @@ -36,7 +36,6 @@ const lightspeedTranslationDe = createTranslationMessages({ 'aria.scroll.up': 'Zurück zum Anfang', 'aria.search.placeholder': 'Suchen', 'aria.searchPreviousConversations': 'Vorherige Unterhaltungen durchsuchen', - 'aria.settings.label': 'Chatbot-Optionen', 'attach.menu.description': 'Eine JSON-, YAML- oder TXT-Datei anhängen', 'attach.menu.title': 'Anhängen', 'button.newChat': 'Neuer Chat', @@ -347,7 +346,6 @@ const lightspeedTranslationDe = createTranslationMessages({ 'tooltip.quickNewChat': 'Neuer Chat', 'tooltip.responseRecorded': 'Antwort aufgezeichnet', 'tooltip.send': 'Senden', - 'tooltip.settings': 'Chatbot-Optionen', 'user.guest': 'Gast', 'user.loading': '...', }, diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/es.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/es.ts index 96aad294c3..e0b9498232 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/es.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/es.ts @@ -36,7 +36,6 @@ const lightspeedTranslationEs = createTranslationMessages({ 'aria.scroll.up': 'Volver arriba', 'aria.search.placeholder': 'Buscar', 'aria.searchPreviousConversations': 'Buscar conversaciones anteriores', - 'aria.settings.label': 'Opciones de chatbot', 'attach.menu.description': 'Adjuntar un archivo JSON, YAML o TXT', 'attach.menu.title': 'Adjuntar', 'button.newChat': 'Nuevo chat', @@ -344,7 +343,6 @@ const lightspeedTranslationEs = createTranslationMessages({ 'tooltip.quickNewChat': 'Nuevo chat', 'tooltip.responseRecorded': 'Respuesta grabada', 'tooltip.send': 'Enviar', - 'tooltip.settings': 'Opciones de chatbot', 'user.guest': 'Invitado', 'user.loading': '...', }, diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts index 501905d6f5..b4e94ca8a7 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/fr.ts @@ -36,7 +36,6 @@ const lightspeedTranslationFr = createTranslationMessages({ 'aria.scroll.up': 'De bas en haut', 'aria.search.placeholder': 'Recherche', 'aria.searchPreviousConversations': 'Recherche des anciennes conversations', - 'aria.settings.label': 'Options Chatbot', 'attach.menu.description': 'Attacher un fichier JSON, YAML ou TXT', 'attach.menu.title': 'Attacher', 'button.newChat': 'Nouvelle Conversation', @@ -347,7 +346,6 @@ const lightspeedTranslationFr = createTranslationMessages({ 'tooltip.quickNewChat': 'Nouveau chat', 'tooltip.responseRecorded': 'Réponse enregistrée', 'tooltip.send': 'Envoyer', - 'tooltip.settings': 'Options Chatbot', 'user.guest': 'Invité', 'user.loading': '...', }, diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts index 803d78e8e0..802229908f 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/it.ts @@ -36,7 +36,6 @@ const lightspeedTranslationIt = createTranslationMessages({ 'aria.scroll.up': "Torna all'inizio", 'aria.search.placeholder': 'Ricerca', 'aria.searchPreviousConversations': 'Cerca conversazioni precedenti', - 'aria.settings.label': 'Opzioni chatbot', 'attach.menu.description': 'Allega un file JSON, YAML o TXT', 'attach.menu.title': 'Allega', 'button.newChat': 'Nuova chat', @@ -346,7 +345,6 @@ const lightspeedTranslationIt = createTranslationMessages({ 'tooltip.quickNewChat': 'Nuova chat', 'tooltip.responseRecorded': 'Risposta registrata', 'tooltip.send': 'Invia', - 'tooltip.settings': 'Opzioni chatbot', 'user.guest': 'Ospite', 'user.loading': '...', }, diff --git a/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts b/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts index 03ac81af86..c0d3199f43 100644 --- a/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts +++ b/workspaces/lightspeed/plugins/lightspeed/src/translations/ja.ts @@ -36,7 +36,6 @@ const lightspeedTranslationJa = createTranslationMessages({ 'aria.scroll.up': '一番上に戻る', 'aria.search.placeholder': '検索', 'aria.searchPreviousConversations': '以前の会話の検索', - 'aria.settings.label': 'チャットボットのオプション', 'attach.menu.description': 'JSON、YAML、または TXT ファイルを添付', 'attach.menu.title': '添付', 'button.newChat': '新しいチャット', @@ -338,7 +337,6 @@ const lightspeedTranslationJa = createTranslationMessages({ 'tooltip.quickNewChat': '新しいチャット', 'tooltip.responseRecorded': '回答が記録されました', 'tooltip.send': '送信', - 'tooltip.settings': 'チャットボットのオプション', 'user.guest': 'ゲスト', 'user.loading': '...', }, From bd88798c0d3d8c23c1424051e5c0ddf9aef32370 Mon Sep 17 00:00:00 2001 From: Yi Cai Date: Mon, 15 Jun 2026 11:26:45 -0400 Subject: [PATCH 2/4] updated e2e tests Signed-off-by: Yi Cai --- .../lightspeed/e2e-tests/pages/LightspeedPage.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/workspaces/lightspeed/e2e-tests/pages/LightspeedPage.ts b/workspaces/lightspeed/e2e-tests/pages/LightspeedPage.ts index 2fbe82f1eb..11c27b9f40 100644 --- a/workspaces/lightspeed/e2e-tests/pages/LightspeedPage.ts +++ b/workspaces/lightspeed/e2e-tests/pages/LightspeedPage.ts @@ -39,7 +39,7 @@ export async function selectDisplayMode( t: LightspeedMessages, mode: DisplayMode, ) { - await page.getByRole('button', { name: t['aria.settings.label'] }).click(); + await page.getByRole('button', { name: t['aria.options.label'] }).click(); const modeMap: Record = { Overlay: t['settings.displayMode.overlay'], 'Dock to window': t['settings.displayMode.docked'], @@ -92,7 +92,7 @@ export async function expectChatbotControlsVisible( await expect(chatHistoryMenuButton).toBeVisible(); } await expect( - page.getByRole('button', { name: t['aria.settings.label'] }), + page.getByRole('button', { name: t['aria.options.label'] }), ).toBeVisible(); } @@ -100,7 +100,7 @@ export async function verifyDisplayModeMenuOptions( page: Page, t: LightspeedMessages, ) { - await page.getByRole('button', { name: t['aria.settings.label'] }).click(); + await page.getByRole('button', { name: t['aria.options.label'] }).click(); const settingsMenu = page .getByRole('menu') .filter({ @@ -145,7 +145,7 @@ export async function verifyDisplayModeMenuOptions( // MCP settings (McpServersSettings — strings from `mcp.settings.*` translations) export async function openMcpSettingsPanel(page: Page, t: LightspeedMessages) { - await page.getByRole('button', { name: t['aria.settings.label'] }).click(); + await page.getByRole('button', { name: t['aria.options.label'] }).click(); await expect( page.getByRole('menuitem', { name: t['settings.mcp.label'] }), ).toBeVisible(); @@ -359,7 +359,7 @@ export async function verifyMcpSettingsPanel( } await expect( - page.getByRole('button', { name: t['aria.settings.label'] }), + page.getByRole('button', { name: t['aria.options.label'] }), ).toBeVisible(); await closeMcpSettingsPanel(page, t); From 4fed4169e88efb32d25963e67acfce14fda38739 Mon Sep 17 00:00:00 2001 From: Yi Cai Date: Mon, 15 Jun 2026 15:42:08 -0400 Subject: [PATCH 3/4] addressed review comment Signed-off-by: Yi Cai --- .../extensions/plugins/extensions-backend/knip-report.md | 6 ++++++ .../extensions/plugins/extensions-backend/package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/workspaces/extensions/plugins/extensions-backend/knip-report.md b/workspaces/extensions/plugins/extensions-backend/knip-report.md index 2661c35327..601f7adc08 100644 --- a/workspaces/extensions/plugins/extensions-backend/knip-report.md +++ b/workspaces/extensions/plugins/extensions-backend/knip-report.md @@ -1,2 +1,8 @@ # Knip report +## Unused dependencies (1) + +| Name | Location | Severity | +| :--------------------------------------------------------- | :---------------- | :------- | +| @red-hat-developer-hub/backstage-plugin-extensions-backend | package.json:45:6 | error | + diff --git a/workspaces/extensions/plugins/extensions-backend/package.json b/workspaces/extensions/plugins/extensions-backend/package.json index 2df6569e27..60fbc5820f 100644 --- a/workspaces/extensions/plugins/extensions-backend/package.json +++ b/workspaces/extensions/plugins/extensions-backend/package.json @@ -42,6 +42,7 @@ "@backstage/plugin-catalog-node": "^2.2.1", "@backstage/plugin-permission-common": "^0.9.9", "@backstage/plugin-permission-node": "^0.11.0", + "@red-hat-developer-hub/backstage-plugin-extensions-backend": "workspace:^", "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "express": "^4.17.1", "express-promise-router": "^4.1.0", From d6dd53d5b8cef8801906479956e17e67d2aac4ef Mon Sep 17 00:00:00 2001 From: Yi Cai Date: Tue, 16 Jun 2026 13:19:50 -0400 Subject: [PATCH 4/4] Revert extensions-backend changes to match upstream main --- .../extensions/plugins/extensions-backend/knip-report.md | 6 ------ .../extensions/plugins/extensions-backend/package.json | 1 - 2 files changed, 7 deletions(-) diff --git a/workspaces/extensions/plugins/extensions-backend/knip-report.md b/workspaces/extensions/plugins/extensions-backend/knip-report.md index 601f7adc08..2661c35327 100644 --- a/workspaces/extensions/plugins/extensions-backend/knip-report.md +++ b/workspaces/extensions/plugins/extensions-backend/knip-report.md @@ -1,8 +1,2 @@ # Knip report -## Unused dependencies (1) - -| Name | Location | Severity | -| :--------------------------------------------------------- | :---------------- | :------- | -| @red-hat-developer-hub/backstage-plugin-extensions-backend | package.json:45:6 | error | - diff --git a/workspaces/extensions/plugins/extensions-backend/package.json b/workspaces/extensions/plugins/extensions-backend/package.json index 60fbc5820f..2df6569e27 100644 --- a/workspaces/extensions/plugins/extensions-backend/package.json +++ b/workspaces/extensions/plugins/extensions-backend/package.json @@ -42,7 +42,6 @@ "@backstage/plugin-catalog-node": "^2.2.1", "@backstage/plugin-permission-common": "^0.9.9", "@backstage/plugin-permission-node": "^0.11.0", - "@red-hat-developer-hub/backstage-plugin-extensions-backend": "workspace:^", "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "express": "^4.17.1", "express-promise-router": "^4.1.0",