Skip to content

Commit 86bfa25

Browse files
committed
agent sessions - make full list the default and change showing recent to a setting
1 parent 209376d commit 86bfa25

File tree

6 files changed

+99
-64
lines changed

6 files changed

+99
-64
lines changed

src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { IAgentSessionsService, AgentSessionsService } from './agentSessionsServ
1717
import { LocalAgentsSessionsProvider } from './localAgentSessionsProvider.js';
1818
import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../common/contributions.js';
1919
import { ISubmenuItem, MenuId, MenuRegistry, registerAction2, SubmenuItemAction } from '../../../../../platform/actions/common/actions.js';
20-
import { ArchiveAgentSessionAction, ArchiveAgentSessionSectionAction, UnarchiveAgentSessionSectionAction, UnarchiveAgentSessionAction, OpenAgentSessionInEditorGroupAction, OpenAgentSessionInNewEditorGroupAction, OpenAgentSessionInNewWindowAction, ShowAgentSessionsSidebar, HideAgentSessionsSidebar, ToggleAgentSessionsSidebar, RefreshAgentSessionsViewerAction, FindAgentSessionInViewerAction, MarkAgentSessionUnreadAction, MarkAgentSessionReadAction, MarkAgentSessionSectionReadAction, FocusAgentSessionsAction, SetAgentSessionsOrientationStackedAction, SetAgentSessionsOrientationSideBySideAction, ToggleChatViewSessionsAction, PickAgentSessionAction, ArchiveAllAgentSessionsAction, RenameAgentSessionAction, DeleteAgentSessionAction, DeleteAllLocalSessionsAction } from './agentSessionsActions.js';
20+
import { ArchiveAgentSessionAction, ArchiveAgentSessionSectionAction, UnarchiveAgentSessionSectionAction, UnarchiveAgentSessionAction, OpenAgentSessionInEditorGroupAction, OpenAgentSessionInNewEditorGroupAction, OpenAgentSessionInNewWindowAction, ShowAgentSessionsSidebar, HideAgentSessionsSidebar, ToggleAgentSessionsSidebar, RefreshAgentSessionsViewerAction, FindAgentSessionInViewerAction, MarkAgentSessionUnreadAction, MarkAgentSessionReadAction, MarkAgentSessionSectionReadAction, FocusAgentSessionsAction, SetAgentSessionsOrientationStackedAction, SetAgentSessionsOrientationSideBySideAction, ShowAllAgentSessionsAction, ShowRecentAgentSessionsAction, HideAgentSessionsAction, PickAgentSessionAction, ArchiveAllAgentSessionsAction, RenameAgentSessionAction, DeleteAgentSessionAction, DeleteAllLocalSessionsAction } from './agentSessionsActions.js';
2121
import { AgentSessionsQuickAccessProvider, AGENT_SESSIONS_QUICK_ACCESS_PREFIX } from './agentSessionsQuickAccess.js';
2222
import { IAgentSessionProjectionService, AgentSessionProjectionService } from './agentSessionProjectionService.js';
2323
import { EnterAgentSessionProjectionAction, ExitAgentSessionProjectionAction, ToggleAgentStatusAction, ToggleAgentSessionProjectionAction } from './agentSessionProjectionActions.js';
@@ -52,7 +52,9 @@ registerAction2(FindAgentSessionInViewerAction);
5252
registerAction2(ShowAgentSessionsSidebar);
5353
registerAction2(HideAgentSessionsSidebar);
5454
registerAction2(ToggleAgentSessionsSidebar);
55-
registerAction2(ToggleChatViewSessionsAction);
55+
registerAction2(ShowAllAgentSessionsAction);
56+
registerAction2(ShowRecentAgentSessionsAction);
57+
registerAction2(HideAgentSessionsAction);
5658
registerAction2(SetAgentSessionsOrientationStackedAction);
5759
registerAction2(SetAgentSessionsOrientationSideBySideAction);
5860

src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.ts

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,86 @@ import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
3636

3737
//#region Chat View
3838

39-
export class ToggleChatViewSessionsAction extends Action2 {
39+
const showSessionsSubmenu = new MenuId('chatShowSessionsSubmenu');
40+
MenuRegistry.appendMenuItem(MenuId.ChatWelcomeContext, {
41+
submenu: showSessionsSubmenu,
42+
title: localize2('chat.showSessions', "Show Sessions"),
43+
group: '0_sessions',
44+
order: 1,
45+
when: ChatContextKeys.inChatEditor.negate()
46+
});
47+
48+
export class ShowAllAgentSessionsAction extends Action2 {
4049

4150
constructor() {
4251
super({
43-
id: 'workbench.action.chat.toggleChatViewSessions',
44-
title: localize2('chat.toggleChatViewSessions.label', "Show Sessions"),
45-
toggled: ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsEnabled}`, true),
52+
id: 'workbench.action.chat.showAllAgentSessions',
53+
title: localize2('chat.showSessions.all', "All"),
54+
toggled: ContextKeyExpr.and(
55+
ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsEnabled}`, true),
56+
ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsShowRecentOnly}`, false)
57+
),
4658
menu: {
47-
id: MenuId.ChatWelcomeContext,
48-
group: '0_sessions',
49-
order: 1,
50-
when: ChatContextKeys.inChatEditor.negate()
59+
id: showSessionsSubmenu,
60+
group: 'navigation',
61+
order: 1
5162
}
5263
});
5364
}
5465

5566
async run(accessor: ServicesAccessor): Promise<void> {
5667
const configurationService = accessor.get(IConfigurationService);
5768

58-
const chatViewSessionsEnabled = configurationService.getValue<boolean>(ChatConfiguration.ChatViewSessionsEnabled);
59-
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsEnabled, !chatViewSessionsEnabled);
69+
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsEnabled, true);
70+
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsShowRecentOnly, false);
71+
}
72+
}
73+
74+
export class ShowRecentAgentSessionsAction extends Action2 {
75+
76+
constructor() {
77+
super({
78+
id: 'workbench.action.chat.showRecentAgentSessions',
79+
title: localize2('chat.showSessions.recent', "Recent"),
80+
toggled: ContextKeyExpr.and(
81+
ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsEnabled}`, true),
82+
ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsShowRecentOnly}`, true)
83+
),
84+
menu: {
85+
id: showSessionsSubmenu,
86+
group: 'navigation',
87+
order: 2
88+
}
89+
});
90+
}
91+
92+
async run(accessor: ServicesAccessor): Promise<void> {
93+
const configurationService = accessor.get(IConfigurationService);
94+
95+
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsEnabled, true);
96+
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsShowRecentOnly, true);
97+
}
98+
}
99+
100+
export class HideAgentSessionsAction extends Action2 {
101+
102+
constructor() {
103+
super({
104+
id: 'workbench.action.chat.hideAgentSessions',
105+
title: localize2('chat.showSessions.none', "None"),
106+
toggled: ContextKeyExpr.equals(`config.${ChatConfiguration.ChatViewSessionsEnabled}`, false),
107+
menu: {
108+
id: showSessionsSubmenu,
109+
group: 'navigation',
110+
order: 3
111+
}
112+
});
113+
}
114+
115+
async run(accessor: ServicesAccessor): Promise<void> {
116+
const configurationService = accessor.get(IConfigurationService);
117+
118+
await configurationService.updateValue(ChatConfiguration.ChatViewSessionsEnabled, false);
60119
}
61120
}
62121

src/vs/workbench/contrib/chat/browser/chat.contribution.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,11 @@ configurationRegistry.registerConfiguration({
387387
default: true,
388388
description: nls.localize('chat.viewSessions.enabled', "Show chat agent sessions when chat is empty or to the side when chat view is wide enough."),
389389
},
390+
[ChatConfiguration.ChatViewSessionsShowRecentOnly]: {
391+
type: 'boolean',
392+
default: false,
393+
description: nls.localize('chat.viewSessions.showRecentOnly', "When enabled, only show recent sessions in the stacked sessions view. When disabled, show all sessions."),
394+
},
390395
[ChatConfiguration.ChatViewSessionsOrientation]: {
391396
type: 'string',
392397
enum: ['stacked', 'sideBySide'],

src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import { ChatWidget } from '../../widget/chatWidget.js';
5050
import { ChatViewWelcomeController, IViewWelcomeDelegate } from '../../viewsWelcome/chatViewWelcomeController.js';
5151
import { IWorkbenchLayoutService, LayoutSettings, Position } from '../../../../../services/layout/browser/layoutService.js';
5252
import { AgentSessionsViewerOrientation, AgentSessionsViewerPosition } from '../../agentSessions/agentSessions.js';
53-
import { Link } from '../../../../../../platform/opener/browser/link.js';
5453
import { IProgressService } from '../../../../../../platform/progress/common/progress.js';
5554
import { ChatViewId } from '../../chat.js';
5655
import { disposableTimeout } from '../../../../../../base/common/async.js';
@@ -63,7 +62,6 @@ import { IChatEntitlementService } from '../../../../../services/chat/common/cha
6362
interface IChatViewPaneState extends Partial<IChatModelInputState> {
6463
sessionId?: string;
6564

66-
sessionsViewerLimited?: boolean;
6765
sessionsSidebarWidth?: number;
6866
}
6967

@@ -123,7 +121,7 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
123121
) {
124122
this.viewState.sessionId = undefined; // clear persisted session on fresh start
125123
}
126-
this.sessionsViewerLimited = this.viewState.sessionsViewerLimited ?? true;
124+
this.sessionsViewerLimited = this.configurationService.getValue<boolean>(ChatConfiguration.ChatViewSessionsShowRecentOnly) ?? false;
127125
this.sessionsViewerVisible = false; // will be updated from layout code
128126
this.sessionsViewerSidebarWidth = Math.max(ChatViewPane.SESSIONS_SIDEBAR_MIN_WIDTH, this.viewState.sessionsSidebarWidth ?? ChatViewPane.SESSIONS_SIDEBAR_DEFAULT_WIDTH);
129127

@@ -214,6 +212,22 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
214212
return e.affectsConfiguration(LayoutSettings.ACTIVITY_BAR_LOCATION);
215213
})(() => this.updateViewPaneClasses(true)));
216214

215+
// Sessions viewer limited setting changes
216+
this._register(Event.filter(this.configurationService.onDidChangeConfiguration, e => {
217+
return e.affectsConfiguration(ChatConfiguration.ChatViewSessionsShowRecentOnly);
218+
})(() => {
219+
const oldSessionsViewerLimited = this.sessionsViewerLimited;
220+
if (this.sessionsViewerOrientation === AgentSessionsViewerOrientation.SideBySide) {
221+
this.sessionsViewerLimited = false; // side by side always shows all
222+
} else {
223+
this.sessionsViewerLimited = this.configurationService.getValue<boolean>(ChatConfiguration.ChatViewSessionsShowRecentOnly) ?? false;
224+
}
225+
226+
if (oldSessionsViewerLimited !== this.sessionsViewerLimited) {
227+
this.notifySessionsControlLimitedChanged(true /* layout */, true /* update */);
228+
}
229+
}));
230+
217231
// Entitlement changes
218232
this._register(this.chatEntitlementService.onDidChangeSentiment(() => {
219233
this.updateViewPaneClasses(true);
@@ -305,8 +319,6 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
305319
private sessionsTitle: HTMLElement | undefined;
306320
private sessionsControlContainer: HTMLElement | undefined;
307321
private sessionsControl: AgentSessionsControl | undefined;
308-
private sessionsLinkContainer: HTMLElement | undefined;
309-
private sessionsLink: Link | undefined;
310322
private sessionsCount = 0;
311323
private sessionsViewerLimited: boolean;
312324
private sessionsViewerVisible: boolean;
@@ -401,22 +413,6 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
401413

402414
sessionsToolbar.context = sessionsControl;
403415

404-
// Link to Sessions View
405-
this.sessionsLinkContainer = append(sessionsContainer, $('.agent-sessions-link-container'));
406-
this.sessionsLink = this._register(this.instantiationService.createInstance(Link, this.sessionsLinkContainer, {
407-
label: this.sessionsViewerLimited ? localize('showAllSessions', "Show More") : localize('showRecentSessions', "Show Less"),
408-
href: '',
409-
}, {
410-
opener: () => {
411-
this.sessionsViewerLimited = !this.sessionsViewerLimited;
412-
this.viewState.sessionsViewerLimited = this.sessionsViewerLimited;
413-
414-
this.notifySessionsControlLimitedChanged(true /* layout */, true /* update */);
415-
416-
sessionsControl.focus();
417-
}
418-
}));
419-
420416
// Deal with orientation configuration
421417
this._register(Event.runAndSubscribe(Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration(ChatConfiguration.ChatViewSessionsOrientation)), e => {
422418
const newSessionsViewerOrientationConfiguration = this.configurationService.getValue<'stacked' | 'sideBySide' | unknown>(ChatConfiguration.ChatViewSessionsOrientation);
@@ -463,13 +459,6 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
463459

464460
this.updateSessionsControlTitle();
465461

466-
if (this.sessionsLink) {
467-
this.sessionsLink.link = {
468-
label: this.sessionsViewerLimited ? localize('showAllSessions', "Show More") : localize('showRecentSessions', "Show Less"),
469-
href: ''
470-
};
471-
}
472-
473462
const updatePromise = triggerUpdate ? this.sessionsControl?.update() : undefined;
474463

475464
if (triggerLayout) {
@@ -850,7 +839,7 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
850839
let heightReduction = 0;
851840
let widthReduction = 0;
852841

853-
if (!this.sessionsContainer || !this.sessionsControlContainer || !this.sessionsControl || !this.viewPaneContainer || !this.sessionsTitleContainer || !this.sessionsLinkContainer || !this.sessionsTitle || !this.sessionsLink) {
842+
if (!this.sessionsContainer || !this.sessionsControlContainer || !this.sessionsControl || !this.viewPaneContainer || !this.sessionsTitleContainer || !this.sessionsTitle) {
854843
return { heightReduction, widthReduction };
855844
}
856845

@@ -894,7 +883,7 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
894883
if (this.sessionsViewerOrientation === AgentSessionsViewerOrientation.SideBySide) {
895884
this.sessionsViewerLimited = false; // side by side always shows all
896885
} else {
897-
this.sessionsViewerLimited = this.viewState.sessionsViewerLimited ?? true;
886+
this.sessionsViewerLimited = this.configurationService.getValue<boolean>(ChatConfiguration.ChatViewSessionsShowRecentOnly) ?? false;
898887
}
899888

900889
let updatePromise: Promise<void>;
@@ -932,7 +921,7 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate {
932921
return { heightReduction: 0, widthReduction: 0 };
933922
}
934923

935-
let availableSessionsHeight = height - this.sessionsTitleContainer.offsetHeight - this.sessionsLinkContainer.offsetHeight;
924+
let availableSessionsHeight = height - this.sessionsTitleContainer.offsetHeight;
936925
if (this.sessionsViewerOrientation === AgentSessionsViewerOrientation.Stacked) {
937926
availableSessionsHeight -= Math.max(ChatViewPane.MIN_CHAT_WIDGET_HEIGHT, this._widget?.input?.contentHeight ?? 0);
938927
}

src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,6 @@
7777
background-color: var(--vscode-inputOption-activeBackground);
7878
}
7979
}
80-
81-
.agent-sessions-link-container {
82-
padding: 8px 0;
83-
font-size: 12px;
84-
text-align: center;
85-
}
86-
87-
.agent-sessions-link-container a {
88-
color: var(--vscode-descriptionForeground);
89-
}
90-
91-
.agent-sessions-link-container a:hover,
92-
.agent-sessions-link-container a:active {
93-
text-decoration: none;
94-
color: var(--vscode-textLink-foreground);
95-
}
9680
}
9781

9882
/* Sessions control: stacked */
@@ -121,11 +105,6 @@
121105
border-left: 1px solid var(--vscode-panel-border);
122106
}
123107
}
124-
125-
.agent-sessions-link-container {
126-
/* hide link to show more when side by side */
127-
display: none;
128-
}
129108
}
130109

131110
/*

src/vs/workbench/contrib/chat/common/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export enum ChatConfiguration {
2828
TodosShowWidget = 'chat.tools.todos.showWidget',
2929
NotifyWindowOnResponseReceived = 'chat.notifyWindowOnResponseReceived',
3030
ChatViewSessionsEnabled = 'chat.viewSessions.enabled',
31+
ChatViewSessionsShowRecentOnly = 'chat.viewSessions.showRecentOnly',
3132
ChatViewSessionsOrientation = 'chat.viewSessions.orientation',
3233
ChatViewTitleEnabled = 'chat.viewTitle.enabled',
3334
SubagentToolCustomAgents = 'chat.customAgentInSubagent.enabled',

0 commit comments

Comments
 (0)