From b2426c57053497e6c1eea406b8f2855e442992b4 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 21 Nov 2025 14:13:41 +0100 Subject: [PATCH] agent sessions - allow `description` during progress (#278765) --- .../agentSessions/agentSessionsViewer.ts | 41 ++++++++----------- .../media/agentsessionsactions.css | 1 + .../media/agentsessionsviewer.css | 1 + 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts index b9140f2095f..cbd6058efd6 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts @@ -164,15 +164,8 @@ export class AgentSessionRenderer implements ICompressibleTreeRenderer, template: IAgentSessionItemTemplate): void { - // In progress: show duration - if (session.element.status === ChatSessionStatus.InProgress) { - template.description.textContent = this.getInProgressDescription(session.element); - const timer = template.elementDisposable.add(new IntervalTimer()); - timer.cancelAndSet(() => template.description.textContent = this.getInProgressDescription(session.element), 1000 /* every second */); - } - - // Otherwise support description as string - else if (typeof session.element.description === 'string') { + // Support description as string + if (typeof session.element.description === 'string') { template.description.textContent = session.element.description; } @@ -191,7 +184,9 @@ export class AgentSessionRenderer implements ICompressibleTreeRenderer session.element.timing.inProgressTime @@ -209,17 +204,6 @@ export class AgentSessionRenderer implements ICompressibleTreeRenderer, template: IAgentSessionItemTemplate): void { - const getStatus = (session: IAgentSessionViewModel) => `${session.providerLabel} • ${fromNow(session.timing.endTime || session.timing.startTime)}`; + + const getStatus = (session: IAgentSessionViewModel) => { + let timeLabel: string | undefined; + if (session.status === ChatSessionStatus.InProgress && session.timing.inProgressTime) { + timeLabel = this.toDuration(session.timing.inProgressTime, Date.now()); + } + + if (!timeLabel) { + timeLabel = fromNow(session.timing.endTime || session.timing.startTime, true); + } + return `${session.providerLabel} • ${timeLabel}`; + }; template.status.textContent = getStatus(session.element); const timer = template.elementDisposable.add(new IntervalTimer()); - timer.cancelAndSet(() => template.status.textContent = getStatus(session.element), 60 * 1000 /* every minute */); + timer.cancelAndSet(() => template.status.textContent = getStatus(session.element), session.element.status === ChatSessionStatus.InProgress ? 1000 /* every second */ : 60 * 1000 /* every minute */); } private renderHover(session: ITreeNode, template: IAgentSessionItemTemplate): void { diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsactions.css b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsactions.css index 9d5a967ce23..85e5adecffb 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsactions.css +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsactions.css @@ -15,6 +15,7 @@ display: flex; gap: 4px; padding: 0 4px; /* to make space for hover effect */ + font-variant-numeric: tabular-nums; } .agent-session-diff-files { diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css index 16017adb600..25a25fd83b1 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css @@ -90,6 +90,7 @@ .agent-session-status { padding: 0 4px 0 0; /* to align with diff area above */ + font-variant-numeric: tabular-nums; } } }