From 3d78e0deaf47d68af7a67e2b8a3509b897e03a3d Mon Sep 17 00:00:00 2001 From: mirivlad Date: Wed, 15 Jul 2026 02:32:08 +0800 Subject: [PATCH] fix: hide technical workbench metadata --- frontend/e2e/default-editor.spec.js | 6 +++--- frontend/e2e/files-plugin.spec.js | 4 ++-- frontend/e2e/plugin-api-bridge.spec.js | 10 ++++++---- frontend/src/lib/shell/WorkbenchHost.svelte | 14 +++++++++++--- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/frontend/e2e/default-editor.spec.js b/frontend/e2e/default-editor.spec.js index a85b0fc..d6d265b 100644 --- a/frontend/e2e/default-editor.spec.js +++ b/frontend/e2e/default-editor.spec.js @@ -175,10 +175,10 @@ test.describe('F: Default Editor Plugin', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); const title = workbench.locator('.workbench-title'); - await expect(title).toHaveText('Docs/readme.md'); + await expect(title).toHaveText('readme.md'); }); - test('open .md with notes context routes to highest-priority provider', async ({ page }) => { + test('opening a note uses its title rather than its technical path', async ({ page }) => { await page.evaluate(async () => { const [result, err] = await window.go.api.App.OpenWorkbenchResource('verstak.platform-test', { kind: 'vault-file', @@ -193,7 +193,7 @@ test.describe('F: Default Editor Plugin', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); const title = workbench.locator('.workbench-title'); - await expect(title).toHaveText('Notes/Overview.md'); + await expect(title).toHaveText('Overview'); }); test('default-editor plugin is listed as loaded in plugin manager', async ({ page }) => { diff --git a/frontend/e2e/files-plugin.spec.js b/frontend/e2e/files-plugin.spec.js index bf385f4..aaacd18 100644 --- a/frontend/e2e/files-plugin.spec.js +++ b/frontend/e2e/files-plugin.spec.js @@ -513,7 +513,7 @@ test.describe('G: Files Plugin', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); - await expect(workbench.locator('.workbench-title')).toHaveText('Docs/readme.md'); + await expect(workbench.locator('.workbench-title')).toHaveText('readme.md'); const preview = page.locator('.de-preview'); await expect(preview).toBeVisible({ timeout: 10000 }); @@ -535,7 +535,7 @@ test.describe('G: Files Plugin', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); - await expect(workbench.locator('.workbench-title')).toHaveText('Notes/Overview.md'); + await expect(workbench.locator('.workbench-title')).toHaveText('Overview'); }); test('files plugin card shows openProviders in contributions', async ({ page }) => { diff --git a/frontend/e2e/plugin-api-bridge.spec.js b/frontend/e2e/plugin-api-bridge.spec.js index 2c637e5..cd14676 100644 --- a/frontend/e2e/plugin-api-bridge.spec.js +++ b/frontend/e2e/plugin-api-bridge.spec.js @@ -58,7 +58,7 @@ test.describe('D: Plugin API bridge', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); - await expect(workbench.locator('.workbench-title')).toHaveText('Notes/Overview.md'); + await expect(workbench.locator('.workbench-title')).toHaveText('Overview'); }); test('workbench routes markdown files to default-editor provider', async ({ page }) => { @@ -76,7 +76,7 @@ test.describe('D: Plugin API bridge', () => { const workbench = page.locator('.workbench-host'); await expect(workbench).toBeVisible({ timeout: 10000 }); const title = workbench.locator('.workbench-title'); - await expect(title).toHaveText('Docs/readme.md'); + await expect(title).toHaveText('readme.md'); }); test('workbench shows no-provider fallback when no provider matches', async ({ page }) => { @@ -91,8 +91,10 @@ test.describe('D: Plugin API bridge', () => { window.dispatchEvent(new CustomEvent('verstak:workbench-opened', { detail: result })); }); - await expect(page.locator('[data-workbench-status="no-provider"]')).toBeVisible(); - await expect(page.locator('[data-workbench-status="no-provider"]')).toContainText('No viewer/editor available'); + const fallback = page.locator('[data-workbench-status="no-provider"]'); + await expect(fallback).toBeVisible(); + await expect(fallback).toContainText('No viewer/editor available'); + await expect(fallback).not.toContainText('generic-text'); }); test('sync plugin API routes through mocked Wails bridge', async ({ page }) => { diff --git a/frontend/src/lib/shell/WorkbenchHost.svelte b/frontend/src/lib/shell/WorkbenchHost.svelte index 25a9e9a..2bf5429 100644 --- a/frontend/src/lib/shell/WorkbenchHost.svelte +++ b/frontend/src/lib/shell/WorkbenchHost.svelte @@ -22,6 +22,7 @@ $: requestContext = openedResource?.request?.context?.notesMode || openedResource?.request?.context?.isInsideNotesFolder ? 'notes-markdown' : ((openedResource?.request?.extension === '.md' || openedResource?.request?.extension === '.markdown') ? 'generic-markdown' : 'generic-text'); + $: resourceTitle = resourceDisplayTitle(resourcePath, requestContext); $: componentProps = openedResource || {}; $: mountKey = [ providerPluginId, @@ -31,6 +32,11 @@ requestContext, ].join(':'); + function resourceDisplayTitle(path, context) { + const fileName = String(path || '').split('/').filter(Boolean).pop() || String(path || ''); + return context === 'notes-markdown' ? fileName.replace(/\.(md|markdown)$/i, '') : fileName; + } + function closeWorkbench() { window.dispatchEvent(new CustomEvent('verstak:close-workbench', { cancelable: true })); } @@ -41,7 +47,7 @@
{#if openedResource?.status === 'no-provider'}
- {resourcePath} + {resourceTitle} {tr('workbench.noProvider')}

{tr('workbench.noViewer')}

-

{requestMode} · {requestContext}

+ {#if debug.isEnabled()} +

{requestMode} · {requestContext}

+ {/if}
{:else if openedResource}
- {resourcePath} + {resourceTitle} {#if debug.isEnabled() && providerId} {providerId} {/if}