From 8c1bf6493c290f467c3340507c6248f527dc592f Mon Sep 17 00:00:00 2001 From: Shaojin Wen Date: Fri, 24 Jul 2026 18:17:39 +0800 Subject: [PATCH 1/2] fix(web-shell): show full session names on hover Co-authored-by: Qwen-Coder --- .../WebShellSidebar.collapse-persist.test.tsx | 10 +++++++ .../components/sidebar/WebShellSidebar.tsx | 6 ++-- .../sidebar/WorkspaceSection.test.tsx | 30 +++++++++++++++++++ .../components/sidebar/WorkspaceSection.tsx | 4 ++- 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx b/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx index ad38f0c3b60..be477bb277f 100644 --- a/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx +++ b/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx @@ -234,6 +234,16 @@ afterEach(() => { }); describe('WebShellSidebar collapsed session group persistence', () => { + it('shows the complete session name in a native tooltip', async () => { + renderSidebar(); + await flushSidebar(); + + const sessionName = container.querySelector( + '[title="API review"]', + ); + expect(sessionName?.textContent).toContain('API review'); + }); + it('writes collapsed section ids with the qwen-code-web-shell-* key', async () => { renderSidebar(); await flushSidebar(); diff --git a/packages/web-shell/client/components/sidebar/WebShellSidebar.tsx b/packages/web-shell/client/components/sidebar/WebShellSidebar.tsx index 586fc867822..1c816c89da8 100644 --- a/packages/web-shell/client/components/sidebar/WebShellSidebar.tsx +++ b/packages/web-shell/client/components/sidebar/WebShellSidebar.tsx @@ -2808,7 +2808,9 @@ export function WebShellSidebar({ busy && styles.busySession, )} > - {label} + + {label} +
{time} {hasArchivedActions && ( @@ -2966,7 +2968,7 @@ export function WebShellSidebar({ ) : ( <> - + {session.worktree && ( void; client: DaemonClient; reloadToken: number; + expanded: boolean; }> = {}, ): void { act(() => { @@ -79,6 +80,7 @@ function renderSection( workspace={overrides.workspace ?? trustedWorkspace} client={overrides.client ?? makeClient()} reloadToken={overrides.reloadToken ?? 0} + expanded={overrides.expanded} untrustedLabel="Untrusted" readOnlyLabel="Read-only" trustToOpenLabel="Trust to open" @@ -132,6 +134,34 @@ describe('WorkspaceSection label', () => { expect(container.textContent).toContain('Payments API'); expect(container.textContent).not.toContain('project'); }); + + it('shows the complete read-only session name in a native tooltip', async () => { + const listWorkspaceSessions = vi.fn().mockResolvedValue([ + { + sessionId: 'session-1', + displayName: 'A very long session name', + createdAt: '2026-01-01T00:00:00.000Z', + } as DaemonSessionSummary, + ]); + const client = { + workspaceByCwd: vi.fn(() => ({ + workspaceGit, + listWorkspaceSessions, + listSessionGroups: vi.fn().mockResolvedValue({ groups: [] }), + })), + } as unknown as DaemonClient; + + renderSection({ + workspace: untrustedWorkspace, + client, + expanded: true, + }); + await flush(); + + expect( + container.querySelector('[title="A very long session name"]'), + ).not.toBeNull(); + }); }); describe('WorkspaceSection git chip', () => { diff --git a/packages/web-shell/client/components/sidebar/WorkspaceSection.tsx b/packages/web-shell/client/components/sidebar/WorkspaceSection.tsx index 9f383833962..e5792a6ac77 100644 --- a/packages/web-shell/client/components/sidebar/WorkspaceSection.tsx +++ b/packages/web-shell/client/components/sidebar/WorkspaceSection.tsx @@ -444,7 +444,9 @@ export function WorkspaceSection({ role="note" aria-label={`${label}${time ? `, ${time}` : ''}. ${trustToOpenLabel}`} > - {label} + + {label} + {time && {time}}
); From efcc69a9c0c8b76e7b4f6adf09526e42c01ddd2b Mon Sep 17 00:00:00 2001 From: Qwen Code Autofix Date: Fri, 24 Jul 2026 11:28:04 +0000 Subject: [PATCH 2/2] test(web-shell): cover archived session tooltip attribute (#7662) --- .../WebShellSidebar.collapse-persist.test.tsx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx b/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx index be477bb277f..eb2e55edb07 100644 --- a/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx +++ b/packages/web-shell/client/components/sidebar/WebShellSidebar.collapse-persist.test.tsx @@ -244,6 +244,35 @@ describe('WebShellSidebar collapsed session group persistence', () => { expect(sessionName?.textContent).toContain('API review'); }); + it('shows the complete archived session name in a native tooltip', async () => { + connection.capabilities = { + qwenCodeVersion: '1.2.3', + features: ['session_organization', 'session_archive'], + }; + archived.sessions = [ + makeSession('session-archived', { + displayName: 'Archived task', + isArchived: true, + }), + ]; + archived.data = archived.sessions; + + renderSidebar(); + await flushSidebar(); + + const archivedHeader = Array.from( + container.querySelectorAll('button[aria-expanded]'), + ).find((btn) => btn.textContent?.includes('Archived')); + expect(archivedHeader).not.toBeNull(); + act(() => click(archivedHeader!)); + await flushSidebar(); + + const sessionName = container.querySelector( + '[title="Archived task"]', + ); + expect(sessionName?.textContent).toContain('Archived task'); + }); + it('writes collapsed section ids with the qwen-code-web-shell-* key', async () => { renderSidebar(); await flushSidebar();