From e916e9e9271ec2b215979374a170f27f3738786a Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Wed, 16 Sep 2026 11:14:55 +0800 Subject: [PATCH] feat(mcp): add WorkBuddy client config template --- .../editor/EditorSettingsDialog.vue | 34 +++++++++++++++++-- apps/desktop/src/i18n/locales/az.ts | 1 + apps/desktop/src/i18n/locales/en.ts | 1 + apps/desktop/src/i18n/locales/es.ts | 1 + apps/desktop/src/i18n/locales/it.ts | 1 + apps/desktop/src/i18n/locales/ja.ts | 1 + apps/desktop/src/i18n/locales/ko.ts | 1 + apps/desktop/src/i18n/locales/pt-BR.ts | 1 + apps/desktop/src/i18n/locales/tr.ts | 1 + apps/desktop/src/i18n/locales/zh-CN.ts | 1 + apps/desktop/src/i18n/locales/zh-TW.ts | 1 + .../__tests__/mcp/mcpConfigTemplates.spec.ts | 12 ++++++- .../__tests__/mcp/mcpPolicySelection.spec.ts | 3 +- .../desktop/src/lib/mcp/mcpConfigTemplates.ts | 4 +++ 14 files changed, 59 insertions(+), 4 deletions(-) diff --git a/apps/desktop/src/components/editor/EditorSettingsDialog.vue b/apps/desktop/src/components/editor/EditorSettingsDialog.vue index 7ee6fa97ff..cf73608536 100644 --- a/apps/desktop/src/components/editor/EditorSettingsDialog.vue +++ b/apps/desktop/src/components/editor/EditorSettingsDialog.vue @@ -181,7 +181,20 @@ import { currentExecutableStatementRange, type SqlTextRange } from "@/lib/sql/sq import { executableStatementRangeCacheForDoc, executableStatementRangeStartingAt, type ExecutableStatementRangeCache } from "@/lib/sql/executableStatementRangeCache"; import { EMPTY_TABLE_COLUMN_TEMPLATE_DATA_TYPE, parseTableColumnTemplateFields, TABLE_COLUMN_TEMPLATE_DATABASE_TYPES, tableColumnTemplateRowsToSettings } from "@/lib/table/tableColumnTemplates"; import { DEFAULT_SQL_VARIABLE_SYNTAX_TOGGLES, normalizeSqlVariableSyntaxOverrides, SQL_VARIABLE_SYNTAX_DATABASE_TYPES, SQL_VARIABLE_SYNTAX_KEYS, SQL_VARIABLE_SYNTAX_TOKENS, type SqlVariableSyntaxOverrides, type SqlVariableSyntaxToggles } from "@/lib/sql/sqlVariableSyntax"; -import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, mcpWebBackendUrl, type McpLaunchConfig } from "@/lib/mcp/mcpConfigTemplates"; +import { + buildMcpCherryStudioConfig, + buildMcpCodexConfig, + buildMcpDeepSeekHarnessConfig, + buildMcpJsonConfig, + buildMcpOpenCodeConfig, + buildMcpPiConfig, + buildMcpQoderConfig, + buildMcpTraeConfig, + buildMcpVsCodeConfig, + buildMcpWorkBuddyConfig, + mcpWebBackendUrl, + type McpLaunchConfig, +} from "@/lib/mcp/mcpConfigTemplates"; import { beginMcpStatusRequest, mcpUpdateAvailability } from "@/lib/mcp/mcpUpdateStatus"; import { isMcpPolicyMutationBlocked, MCP_CAPABILITY_ROWS, MCP_EXECUTION_MODE_COLUMNS, MCP_TOOL_OPTIONS, mcpExecutionModeFromPolicy, mcpPolicyFieldsForExecutionMode, toggleMcpAllowedToolName, type McpExecutionMode } from "@/lib/mcp/mcpPolicySelection"; import { isMacOS, isWindows } from "@/lib/backend/platform"; @@ -2630,7 +2643,7 @@ async function exportDebugLogs() { } // ---------- MCP Server ---------- -type McpConfigTab = "claude" | "cursor" | "codebuddy" | "zcode" | "trae" | "vscode" | "windsurf" | "codex" | "deepseek-harness" | "opencode" | "pi" | "cherry-studio" | "qoder"; +type McpConfigTab = "claude" | "cursor" | "codebuddy" | "zcode" | "trae" | "vscode" | "windsurf" | "codex" | "deepseek-harness" | "opencode" | "pi" | "cherry-studio" | "qoder" | "workbuddy"; type McpCopyKind = "install" | "uninstall" | "http-endpoint" | "http-token" | "http-config" | `${McpConfigTab}-config`; type McpTransportTab = "stdio" | "http"; type McpManagementTab = "access" | "permissions"; @@ -3214,6 +3227,7 @@ const mcpDeepSeekHarnessRecommendedConfig = computed(() => buildMcpDeepSeekHarne const mcpOpenCodeRecommendedConfig = computed(() => buildMcpOpenCodeConfig(mcpLaunchConfig.value)); const mcpPiRecommendedConfig = computed(() => buildMcpPiConfig(mcpLaunchConfig.value)); +const mcpWorkBuddyRecommendedConfig = computed(() => buildMcpWorkBuddyConfig(mcpLaunchConfig.value)); const mcpStatusTone = computed<"ok" | "warning" | "muted">(() => { if (!mcpStatus.value) return "muted"; @@ -9107,6 +9121,7 @@ LIMIT 100;Pi Cherry Studio Qoder + WorkBuddy @@ -9298,6 +9313,21 @@ LIMIT 100; + + +
+
+ {{ t("settings.mcpWorkBuddyConfigPath") }} +
+
+
{{ mcpWorkBuddyRecommendedConfig }}
+ +
+
+
diff --git a/apps/desktop/src/i18n/locales/az.ts b/apps/desktop/src/i18n/locales/az.ts index 7f03c8bd0f..66cf864833 100644 --- a/apps/desktop/src/i18n/locales/az.ts +++ b/apps/desktop/src/i18n/locales/az.ts @@ -7537,6 +7537,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: Parametrlər > MCP serverləri > Yeni MCP serveri > Tam konfiqurasiya; İstifadəçi və ya İş sahəsi əhatəsini seçin, sonra JSON konfiqurasiyasını yerləşdirin.", mcpTraeConfigPath: "TRAE: Parametrlər > MCP > Əlavə et > Əl ilə əlavə et, sonra JSON konfiqurasiyasını yerləşdirin.", mcpQoderConfigPath: "Qoder: Parametrlər > MCP > Əl ilə əlavə et, sonra JSON konfiqurasiyasını yerləşdirin.", + mcpWorkBuddyConfigPath: "WorkBuddy: yan paneldə Qoşmaları açın, MCP Servers (yuxarı sağ) > MCP-ni Konfiqurasiya et ilə JSON-u yerləşdirin; ya da ~/.workbuddy/mcp.json (qlobal) və ya layihədəki .workbuddy/mcp.json faylına saxlayın.", mcpCherryStudioConfigPath: "Cherry Studio: Parametrlər > MCP serverləri > Server əlavə et > JSON idxal et, sonra konfiqurasiyanı yerləşdirin.", mcpVsCodeConfigPath: "VS Code/Copilot iş sahəsində .vscode/mcp.json və ya istifadəçi profilində mcp.json faylından istifadə edə bilər.", mcpWindsurfConfigPath: "Windsurf ~/.codeium/windsurf/mcp_config.json faylından istifadə edə bilər.", diff --git a/apps/desktop/src/i18n/locales/en.ts b/apps/desktop/src/i18n/locales/en.ts index 03ac3a09dc..9a7679b502 100644 --- a/apps/desktop/src/i18n/locales/en.ts +++ b/apps/desktop/src/i18n/locales/en.ts @@ -7722,6 +7722,7 @@ export default { mcpZCodeConfigPath: "ZCode: Settings > MCP Servers > New MCP Server > Full configuration; choose the User or Workspace scope, then paste the JSON configuration.", mcpTraeConfigPath: "TRAE: Settings > MCP > Add > Add Manually, then paste the JSON configuration.", mcpQoderConfigPath: "Qoder: Settings > MCP > Add Manually, then paste the JSON configuration.", + mcpWorkBuddyConfigPath: "WorkBuddy: open Plugins in the sidebar, click MCP Servers (top right) > Configure MCP and paste the JSON; or save it to ~/.workbuddy/mcp.json (global) or .workbuddy/mcp.json in your project.", mcpCherryStudioConfigPath: "Cherry Studio: Settings > MCP Servers > Add Server > Import JSON, then paste the configuration.", mcpVsCodeConfigPath: "VS Code/Copilot can use .vscode/mcp.json in the workspace or mcp.json in the user profile.", mcpWindsurfConfigPath: "Windsurf can use ~/.codeium/windsurf/mcp_config.json.", diff --git a/apps/desktop/src/i18n/locales/es.ts b/apps/desktop/src/i18n/locales/es.ts index 86a65e23d2..31e1c7c7ce 100644 --- a/apps/desktop/src/i18n/locales/es.ts +++ b/apps/desktop/src/i18n/locales/es.ts @@ -7231,6 +7231,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: Configuración > Servidores MCP > Nuevo servidor MCP > Configuración completa; elige el ámbito Usuario o Espacio de trabajo y pega la configuración JSON.", mcpTraeConfigPath: "TRAE: Configuración > MCP > Agregar > Agregar manualmente; luego pega la configuración JSON.", mcpQoderConfigPath: "Qoder: Configuración > MCP > Agregar manualmente; luego pega la configuración JSON.", + mcpWorkBuddyConfigPath: "WorkBuddy: abre Plugins en la barra lateral, haz clic en MCP Servers (arriba a la derecha) > Configurar MCP y pega el JSON; o guárdalo en ~/.workbuddy/mcp.json (global) o en .workbuddy/mcp.json del proyecto.", mcpCherryStudioConfigPath: "Cherry Studio: Configuración > Servidores MCP > Agregar servidor > Importar JSON; luego pega la configuración.", mcpVsCodeConfigPath: "VS Code/Copilot puede usar .vscode/mcp.json en el espacio de trabajo o mcp.json en el perfil de usuario.", mcpWindsurfConfigPath: "Windsurf puede usar ~/.codeium/windsurf/mcp_config.json.", diff --git a/apps/desktop/src/i18n/locales/it.ts b/apps/desktop/src/i18n/locales/it.ts index 6b163ec57c..8eab3a392d 100644 --- a/apps/desktop/src/i18n/locales/it.ts +++ b/apps/desktop/src/i18n/locales/it.ts @@ -7231,6 +7231,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: Impostazioni > Server MCP > Nuovo server MCP > Configurazione completa; scegli l'ambito Utente o Area di lavoro, quindi incolla la configurazione JSON.", mcpTraeConfigPath: "TRAE: Impostazioni > MCP > Aggiungi > Aggiungi manualmente, poi incolla la configurazione JSON.", mcpQoderConfigPath: "Qoder: Impostazioni > MCP > Aggiungi manualmente, poi incolla la configurazione JSON.", + mcpWorkBuddyConfigPath: "WorkBuddy: apri Plugin nella barra laterale, clicca MCP Servers (in alto a destra) > Configura MCP e incolla il JSON; oppure salvalo in ~/.workbuddy/mcp.json (globale) o in .workbuddy/mcp.json del progetto.", mcpCherryStudioConfigPath: "Cherry Studio: Impostazioni > Server MCP > Aggiungi server > Importa JSON, quindi incolla la configurazione.", mcpVsCodeConfigPath: "VS Code/Copilot può usare .vscode/mcp.json nell'area di lavoro o mcp.json nel profilo utente.", mcpWindsurfConfigPath: "Windsurf può usare ~/.codeium/windsurf/mcp_config.json.", diff --git a/apps/desktop/src/i18n/locales/ja.ts b/apps/desktop/src/i18n/locales/ja.ts index 4ab5ec7615..fc9daefad5 100644 --- a/apps/desktop/src/i18n/locales/ja.ts +++ b/apps/desktop/src/i18n/locales/ja.ts @@ -7236,6 +7236,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode:設定 > MCP サーバー > 新しい MCP サーバー > 完全な設定を開き、ユーザーまたはワークスペースのスコープを選択して JSON 設定を貼り付けます。", mcpTraeConfigPath: "TRAE: 設定 > MCP > 追加 > 手動で追加 からJSON設定を貼り付けます。", mcpQoderConfigPath: "Qoder: 設定 > MCP > 手動で追加 からJSON設定を貼り付けます。", + mcpWorkBuddyConfigPath: "WorkBuddy: サイドバーのプラグイン → 右上の MCP サーバー → MCP を設定 に JSON を貼り付けて保存します。または ~/.workbuddy/mcp.json(グローバル)またはプロジェクト内の .workbuddy/mcp.json に保存してください。", mcpCherryStudioConfigPath: "Cherry Studio: 設定 > MCPサーバー > サーバーを追加 > JSONをインポート から設定を貼り付けます。", mcpVsCodeConfigPath: "VS Code/Copilotはワークスペースの .vscode/mcp.json またはユーザープロファイルの mcp.json を使用できます。", mcpWindsurfConfigPath: "Windsurfは ~/.codeium/windsurf/mcp_config.json を使用できます。", diff --git a/apps/desktop/src/i18n/locales/ko.ts b/apps/desktop/src/i18n/locales/ko.ts index fb3169c5bf..748479f9ee 100644 --- a/apps/desktop/src/i18n/locales/ko.ts +++ b/apps/desktop/src/i18n/locales/ko.ts @@ -7001,6 +7001,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: 설정 > MCP 서버 > 새 MCP 서버 > 전체 구성에서 사용자 또는 작업 영역 범위를 선택한 다음 JSON 구성을 붙여넣으세요.", mcpTraeConfigPath: "TRAE: 설정 > MCP > 추가 > 수동 추가 후 JSON 설정을 붙여넣으세요.", mcpQoderConfigPath: "Qoder: 설정 > MCP > 수동 추가 후 JSON 설정을 붙여넣으세요.", + mcpWorkBuddyConfigPath: "WorkBuddy: 사이드바의 플러그인 → 오른쪽 위 MCP 서버 > MCP 구성에 JSON을 붙여넣어 저장하세요. 또는 ~/.workbuddy/mcp.json(전역) 또는 프로젝트의 .workbuddy/mcp.json에 저장하세요.", mcpCherryStudioConfigPath: "Cherry Studio: 설정 > MCP 서버 > 서버 추가 > JSON 가져오기 후 설정을 붙여넣으세요.", mcpVsCodeConfigPath: "VS Code/Copilot은 작업 영역의 .vscode/mcp.json 또는 사용자 프로필의 mcp.json을 사용할 수 있습니다.", mcpWindsurfConfigPath: "Windsurf는 ~/.codeium/windsurf/mcp_config.json을 사용할 수 있습니다.", diff --git a/apps/desktop/src/i18n/locales/pt-BR.ts b/apps/desktop/src/i18n/locales/pt-BR.ts index 72cb9f8fb2..61e52b5d7d 100644 --- a/apps/desktop/src/i18n/locales/pt-BR.ts +++ b/apps/desktop/src/i18n/locales/pt-BR.ts @@ -7233,6 +7233,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: Configurações > Servidores MCP > Novo servidor MCP > Configuração completa; escolha o escopo Usuário ou Espaço de trabalho e cole a configuração JSON.", mcpTraeConfigPath: "TRAE: Configurações > MCP > Adicionar > Adicionar manualmente; depois cole a configuração JSON.", mcpQoderConfigPath: "Qoder: Configurações > MCP > Adicionar manualmente; depois cole a configuração JSON.", + mcpWorkBuddyConfigPath: "WorkBuddy: abra Plugins na barra lateral, clique em MCP Servers (canto superior direito) > Configurar MCP e cole o JSON; ou salve em ~/.workbuddy/mcp.json (global) ou em .workbuddy/mcp.json do projeto.", mcpCherryStudioConfigPath: "Cherry Studio: Configurações > Servidores MCP > Adicionar servidor > Importar JSON; depois cole a configuração.", mcpVsCodeConfigPath: "O VS Code/Copilot pode usar .vscode/mcp.json no workspace ou mcp.json no perfil do usuário.", mcpWindsurfConfigPath: "O Windsurf pode usar ~/.codeium/windsurf/mcp_config.json.", diff --git a/apps/desktop/src/i18n/locales/tr.ts b/apps/desktop/src/i18n/locales/tr.ts index 05dc9e66cc..316cd3ef8c 100644 --- a/apps/desktop/src/i18n/locales/tr.ts +++ b/apps/desktop/src/i18n/locales/tr.ts @@ -7418,6 +7418,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode: Ayarlar > MCP Sunucuları > Yeni MCP Sunucusu > Tam yapılandırma; Kullanıcı ya da Çalışma Alanı kapsamını seçip JSON yapılandırmasını yapıştırın.", mcpTraeConfigPath: "TRAE: Ayarlar > MCP > Ekle > Elle Ekle, ardından JSON yapılandırmasını yapıştırın.", mcpQoderConfigPath: "Qoder: Ayarlar > MCP > Elle Ekle, ardından JSON yapılandırmasını yapıştırın.", + mcpWorkBuddyConfigPath: "WorkBuddy: kenar çubuğunda Eklentiler'i açın, MCP Servers (sağ üst) > MCP'yi Yapılandır ile JSON'u yapıştırın; ya da ~/.workbuddy/mcp.json (genel) veya proje içindeki .workbuddy/mcp.json dosyasına kaydedin.", mcpCherryStudioConfigPath: "Cherry Studio: Ayarlar > MCP Sunucuları > Sunucu Ekle > JSON İçe Aktar, ardından yapılandırmayı yapıştırın.", mcpVsCodeConfigPath: "VS Code/Copilot, çalışma alanında .vscode/mcp.json ya da kullanıcı profilinde mcp.json kullanabilir.", mcpWindsurfConfigPath: "Windsurf, ~/.codeium/windsurf/mcp_config.json kullanabilir.", diff --git a/apps/desktop/src/i18n/locales/zh-CN.ts b/apps/desktop/src/i18n/locales/zh-CN.ts index e288e91d3a..e2c4691b03 100644 --- a/apps/desktop/src/i18n/locales/zh-CN.ts +++ b/apps/desktop/src/i18n/locales/zh-CN.ts @@ -7698,6 +7698,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode:设置 > MCP 服务器 > 新建 MCP 服务器 > 完整配置,选择用户或工作区作用域后粘贴 JSON 配置。", mcpTraeConfigPath: "TRAE:设置 > MCP > 添加 > 手动添加,然后粘贴 JSON 配置。", mcpQoderConfigPath: "Qoder:设置 > MCP > 手动添加,然后粘贴 JSON 配置。", + mcpWorkBuddyConfigPath: "WorkBuddy:侧边栏 插件 → 右上角 MCP 服务器 → 配置 MCP,粘贴 JSON 保存;或写入 ~/.workbuddy/mcp.json(全局)或项目目录 .workbuddy/mcp.json。", mcpCherryStudioConfigPath: "Cherry Studio:设置 > MCP 服务器 > 添加服务器 > 导入 JSON,然后粘贴配置。", mcpVsCodeConfigPath: "VS Code/Copilot 可放在工作区 .vscode/mcp.json 或用户配置文件 mcp.json。", mcpWindsurfConfigPath: "Windsurf 可放在 ~/.codeium/windsurf/mcp_config.json。", diff --git a/apps/desktop/src/i18n/locales/zh-TW.ts b/apps/desktop/src/i18n/locales/zh-TW.ts index 583e8f4867..1ef4721286 100644 --- a/apps/desktop/src/i18n/locales/zh-TW.ts +++ b/apps/desktop/src/i18n/locales/zh-TW.ts @@ -6590,6 +6590,7 @@ export default withEnglishFallback({ mcpZCodeConfigPath: "ZCode:設定 > MCP 伺服器 > 新增 MCP 伺服器 > 完整設定,選擇使用者或工作區範圍後貼上 JSON 設定。", mcpTraeConfigPath: "TRAE:設定 > MCP > 新增 > 手動新增,然後貼上 JSON 設定。", mcpQoderConfigPath: "Qoder:設定 > MCP > 手動新增,然後貼上 JSON 設定。", + mcpWorkBuddyConfigPath: "WorkBuddy:側邊欄 插件 → 右上角 MCP 伺服器 → 設定 MCP,貼上 JSON 儲存;或寫入 ~/.workbuddy/mcp.json(全域)或專案目錄 .workbuddy/mcp.json。", mcpCherryStudioConfigPath: "Cherry Studio:設定 > MCP 伺服器 > 新增伺服器 > 匯入 JSON,然後貼上設定。", mcpVsCodeConfigPath: "VS Code/Copilot 可放在工作區 .vscode/mcp.json 或使用者設定檔 mcp.json。", mcpWindsurfConfigPath: "Windsurf 可放在 ~/.codeium/windsurf/mcp_config.json。", diff --git a/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts b/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts index f970cf52af..5bf1bc6425 100644 --- a/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts +++ b/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, mcpWebBackendUrl } from "@/lib/mcp/mcpConfigTemplates"; +import { buildMcpCherryStudioConfig, buildMcpCodexConfig, buildMcpDeepSeekHarnessConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpPiConfig, buildMcpQoderConfig, buildMcpTraeConfig, buildMcpVsCodeConfig, buildMcpWorkBuddyConfig, mcpWebBackendUrl } from "@/lib/mcp/mcpConfigTemplates"; describe("MCP config templates", () => { it("builds the standard mcpServers JSON used by Claude, Cursor, TRAE, and Windsurf", () => { @@ -37,6 +37,16 @@ describe("MCP config templates", () => { expect(buildMcpPiConfig({ command: "npx", args: ["-y", "@dbx-app/mcp-server"] })).toContain('"npx"'); }); + it("builds the standard mcpServers JSON used by WorkBuddy", () => { + const launch = { command: "dbx-mcp-server", env: { DBX_DATA_DIR: "D:\\DBX Data" } }; + + expect(JSON.parse(buildMcpWorkBuddyConfig(launch))).toEqual({ + mcpServers: { + dbx: launch, + }, + }); + }); + it("builds standard JSON configs with a direct node launch command", () => { const config = JSON.parse(buildMcpJsonConfig({ command: "C:\\Program Files\\nodejs\\node.exe", args: ["C:\\Users\\zhiyo\\AppData\\Roaming\\npm\\node_modules\\@dbx-app\\mcp-server\\dist\\index.js"] })); diff --git a/apps/desktop/src/lib/__tests__/mcp/mcpPolicySelection.spec.ts b/apps/desktop/src/lib/__tests__/mcp/mcpPolicySelection.spec.ts index 92ef184626..6585086e6e 100644 --- a/apps/desktop/src/lib/__tests__/mcp/mcpPolicySelection.spec.ts +++ b/apps/desktop/src/lib/__tests__/mcp/mcpPolicySelection.spec.ts @@ -165,11 +165,12 @@ describe("MCP policy settings state", () => { expect(tabsSource).toContain("overscroll-x-contain"); expect(tabsSource).not.toContain("flex-wrap"); expect(tabsSource).not.toContain("grid-cols-"); - expect(tabsSource.match(/flex-none shrink-0/g)).toHaveLength(13); + expect(tabsSource.match(/flex-none shrink-0/g)).toHaveLength(14); expect(tabsSource).toContain('