diff --git a/packages/frontend/@n8n/design-system/src/components/N8nIcon/icons.ts b/packages/frontend/@n8n/design-system/src/components/N8nIcon/icons.ts index 91cae049f21..e7bb7647506 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nIcon/icons.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nIcon/icons.ts @@ -56,6 +56,7 @@ import IconLucideAtSign from '~icons/lucide/at-sign'; import IconLucideBadgeCheck from '~icons/lucide/badge-check'; import IconLucideBan from '~icons/lucide/ban'; import IconLucideBell from '~icons/lucide/bell'; +import IconLucideBlocks from '~icons/lucide/blocks'; import IconLucideBold from '~icons/lucide/bold'; import IconLucideBook from '~icons/lucide/book'; import IconLucideBookOpen from '~icons/lucide/book-open'; @@ -132,6 +133,7 @@ import IconLucideFolder from '~icons/lucide/folder'; import IconLucideFolderOpen from '~icons/lucide/folder-open'; import IconLucideFolderPlus from '~icons/lucide/folder-plus'; import IconLucideFunnel from '~icons/lucide/funnel'; +import IconLucideGauge from '~icons/lucide/gauge'; import IconLucideGem from '~icons/lucide/gem'; import IconLucideGift from '~icons/lucide/gift'; import IconLucideGitBranch from '~icons/lucide/git-branch'; @@ -549,6 +551,7 @@ export const updatedIconSet = { ban: IconLucideBan, 'badge-check': IconLucideBadgeCheck, bell: IconLucideBell, + blocks: IconLucideBlocks, bold: IconLucideBold, book: IconLucideBook, 'book-open': IconLucideBookOpen, @@ -622,6 +625,7 @@ export const updatedIconSet = { 'folder-open': IconLucideFolderOpen, 'folder-plus': IconLucideFolderPlus, funnel: IconLucideFunnel, + gauge: IconLucideGauge, gem: IconLucideGem, gift: IconLucideGift, 'git-branch': IconLucideGitBranch, diff --git a/packages/frontend/@n8n/i18n/src/locales/en.json b/packages/frontend/@n8n/i18n/src/locales/en.json index 5e754ae52db..b7869a0fa3e 100644 --- a/packages/frontend/@n8n/i18n/src/locales/en.json +++ b/packages/frontend/@n8n/i18n/src/locales/en.json @@ -3741,6 +3741,7 @@ "nodeIssues.credentials.doNotExist.hint": "You can create credentials with the exact name and then they get auto-selected on refresh..", "nodeIssues.credentials.notIdentified": "Credentials with name {name} exist for {type}.", "nodeIssues.credentials.notIdentified.hint": "Credentials are not clearly identified. Please select the correct credentials.", + "nodeIssues.credentials.privateNotConnected": "'{name}' private credential is not connected for you. Connect yours to execute this step manually.", "nodeIssues.credentials.privateRequiresManualTrigger": "Private credentials only work in manually triggered workflows. Change the trigger to a Manual trigger, or switch this credential to Static.", "nodeIssues.input.missing": "No node connected to required input \"{inputName}\"", "ndv.trigger.moreInfo": "More info", @@ -5439,6 +5440,15 @@ "evaluations.wizardSidepanel.step3.outputPlaceholder": "Run the evaluation to view the captured output.", "evaluations.wizardSidepanel.step3.noRun": "Run the evaluation to see results.", "evaluations.wizardSidepanel.hydrate.error": "Couldn’t load your previous setup. Starting with a blank wizard.", + "evaluations.emptyState.title": "Evaluations", + "evaluations.emptyState.description": "Evals are automated tests that evaluate agent workflow outputs using model-graded checks.", + "evaluations.emptyState.catchIssues.title": "Catch issues early", + "evaluations.emptyState.catchIssues.description": "Spot failures and unexpected behaviour before going live.", + "evaluations.emptyState.buildConfidence.title": "Build with confidence", + "evaluations.emptyState.buildConfidence.description": "Make changes and iterate without relying on guesswork.", + "evaluations.emptyState.measurePerformance.title": "Measure performance", + "evaluations.emptyState.measurePerformance.description": "Track performance and areas for improvement in workflows.", + "evaluations.emptyState.getStarted": "Get started", "evaluations.wizardSidepanel.customCheck.title": "Custom check", "evaluations.wizardSidepanel.customCheck.name": "Name", "evaluations.wizardSidepanel.customCheck.name.placeholder": "My custom check", @@ -5827,6 +5837,7 @@ "instanceAi.settings.sandboxTimeout.label": "Sandbox timeout (ms)", "instanceAi.settings.searchCredential.label": "Search credential", "instanceAi.settings.subAgentMaxSteps.label": "Sub-agent max steps", + "instanceAi.settings.browserMcp.label": "Chrome DevTools MCP", "instanceAi.settings.mcpServers.label": "MCP servers", "instanceAi.settings.mcpServers.placeholder": "name=url, comma-separated", "instanceAi.settings.section.permissions": "Permissions", diff --git a/packages/frontend/editor-ui/src/__tests__/setup.ts b/packages/frontend/editor-ui/src/__tests__/setup.ts index 278bbf015da..0f475de6ae2 100644 --- a/packages/frontend/editor-ui/src/__tests__/setup.ts +++ b/packages/frontend/editor-ui/src/__tests__/setup.ts @@ -467,11 +467,21 @@ XMLHttpRequest.prototype.send = function (this: XMLHttpRequest) { // broad filter would mask that signal. Sibling to the rAF polyfill (DEVP-201, // DEVP-206) and the XHR short-circuit above — both narrow harness defences // against Vitest 4's post-teardown rejection promotion. +// +// Match BOTH module and non-module SCSS style blocks. `@vitejs/plugin-vue` +// emits ` diff --git a/packages/frontend/editor-ui/src/features/ai/evaluation.ee/views/EvaluationsRootView.vue b/packages/frontend/editor-ui/src/features/ai/evaluation.ee/views/EvaluationsRootView.vue index 74e71c8aaae..536e2c43e19 100644 --- a/packages/frontend/editor-ui/src/features/ai/evaluation.ee/views/EvaluationsRootView.vue +++ b/packages/frontend/editor-ui/src/features/ai/evaluation.ee/views/EvaluationsRootView.vue @@ -1,7 +1,7 @@