Skip to content

Commit a11231a

Browse files
authored
1 parent bc99db7 commit a11231a

4 files changed

Lines changed: 27 additions & 41 deletions

File tree

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

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import * as dom from '../../../../base/browser/dom.js';
77
import { raceCancellationError } from '../../../../base/common/async.js';
88
import { CancellationToken } from '../../../../base/common/cancellation.js';
9-
import { Schemas } from '../../../../base/common/network.js';
109
import { IContextKeyService, IScopedContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
1110
import { IEditorOptions } from '../../../../platform/editor/common/editor.js';
1211
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
@@ -24,16 +23,15 @@ import { ChatContextKeys } from '../common/chatContextKeys.js';
2423
import { IChatModel, IExportableChatData, ISerializableChatData } from '../common/chatModel.js';
2524
import { CHAT_PROVIDER_ID } from '../common/chatParticipantContribTypes.js';
2625
import { IChatSessionsService } from '../common/chatSessionsService.js';
27-
import { ChatSessionUri } from '../common/chatUri.js';
2826
import { ChatAgentLocation, ChatModeKind } from '../common/constants.js';
2927
import { clearChatEditor } from './actions/chatClear.js';
3028
import { ChatEditorInput } from './chatEditorInput.js';
29+
import { getChatSessionType } from './chatSessions/common.js';
3130
import { ChatWidget, IChatViewState } from './chatWidget.js';
3231

3332
export interface IChatEditorOptions extends IEditorOptions {
3433
target?: { sessionId: string } | { data: IExportableChatData | ISerializableChatData };
3534
preferredTitle?: string;
36-
chatSessionType?: string;
3735
ignoreInView?: boolean;
3836
}
3937

@@ -138,18 +136,14 @@ export class ChatEditor extends EditorPane {
138136
}
139137

140138
let isContributedChatSession = false;
141-
if (options?.chatSessionType || input.resource.scheme === Schemas.vscodeChatSession) {
142-
const chatSessionType = options?.chatSessionType ?? ChatSessionUri.parse(input.resource)?.chatSessionType;
143-
if (chatSessionType) {
144-
await raceCancellationError(this.chatSessionsService.canResolveContentProvider(chatSessionType), token);
145-
const contributions = this.chatSessionsService.getAllChatSessionContributions();
146-
const contribution = contributions.find(c => c.type === chatSessionType);
147-
if (contribution) {
148-
this.widget.lockToCodingAgent(contribution.name, contribution.displayName, contribution.type);
149-
isContributedChatSession = true;
150-
} else {
151-
this.widget.unlockFromCodingAgent();
152-
}
139+
const chatSessionType = getChatSessionType(input);
140+
if (chatSessionType !== 'local') {
141+
await raceCancellationError(this.chatSessionsService.canResolveContentProvider(chatSessionType), token);
142+
const contributions = this.chatSessionsService.getAllChatSessionContributions();
143+
const contribution = contributions.find(c => c.type === chatSessionType);
144+
if (contribution) {
145+
this.widget.lockToCodingAgent(contribution.name, contribution.displayName, contribution.type);
146+
isContributedChatSession = true;
153147
} else {
154148
this.widget.unlockFromCodingAgent();
155149
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,9 @@ export class ChatSessionsService extends Disposable implements IChatSessionsServ
274274
const options: IChatEditorOptions = {
275275
override: ChatEditorInput.EditorID,
276276
pinned: true,
277-
chatSessionType: type, // This will 'lock' the UI of the new, unattached editor to our chat session type
278277
};
279278
await editorService.openEditor({
280-
resource: ChatEditorInput.getNewEditorUri(),
279+
resource: ChatEditorInput.getNewEditorUri().with({ query: `chatSessionType=${type}` }),
281280
options,
282281
});
283282
} catch (e) {

src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionTracker.ts

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { GroupModelChangeKind } from '../../../../common/editor.js';
99
import { IEditorGroup, IEditorGroupsService } from '../../../../services/editor/common/editorGroupsService.js';
1010
import { ChatEditorInput } from '../chatEditorInput.js';
1111
import { EditorInput } from '../../../../common/editor/editorInput.js';
12-
import { ChatSessionUri } from '../../common/chatUri.js';
13-
import { ChatSessionItemWithProvider, isChatSession } from './common.js';
12+
import { ChatSessionItemWithProvider, getChatSessionType, isChatSession } from './common.js';
1413
import { ChatSessionStatus, IChatSessionItem, IChatSessionItemProvider } from '../../common/chatSessionsService.js';
1514
import { ILocalChatSessionItem } from '../chatSessions.js';
1615
import { IChatService } from '../../common/chatService.js';
@@ -48,34 +47,19 @@ export class ChatSessionTracker extends Disposable {
4847
}
4948

5049
const editor = e.editor as ChatEditorInput;
51-
const sessionType = this.getChatSessionType(editor);
50+
const sessionType = getChatSessionType(editor);
5251

5352
// Emit targeted event for this session type
5453
this._onDidChangeEditors.fire({ sessionType, kind: e.kind });
5554
}));
5655
}
5756

58-
private getChatSessionType(editor: ChatEditorInput): string {
59-
if (editor.options.chatSessionType) {
60-
return editor.options.chatSessionType;
61-
}
62-
63-
if (editor.resource?.scheme === 'vscode-chat-session') {
64-
const parsed = ChatSessionUri.parse(editor.resource);
65-
if (parsed) {
66-
return parsed.chatSessionType;
67-
}
68-
}
69-
70-
return 'local';
71-
}
72-
7357
public getLocalEditorsForSessionType(sessionType: string): ChatEditorInput[] {
7458
const localEditors: ChatEditorInput[] = [];
7559

7660
this.editorGroupsService.groups.forEach(group => {
7761
group.editors.forEach(editor => {
78-
if (editor instanceof ChatEditorInput && this.getChatSessionType(editor) === sessionType) {
62+
if (editor instanceof ChatEditorInput && getChatSessionType(editor) === sessionType) {
7963
localEditors.push(editor);
8064
}
8165
});

src/vs/workbench/contrib/chat/browser/chatSessions/common.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { Schemas } from '../../../../../base/common/network.js';
67
import { EditorInput } from '../../../../common/editor/editorInput.js';
78
import { IChatSessionItem, IChatSessionItemProvider } from '../../common/chatSessionsService.js';
89
import { ChatSessionUri } from '../../common/chatUri.js';
@@ -34,20 +35,28 @@ export function isChatSession(editor?: EditorInput): boolean {
3435
return true;
3536
}
3637

38+
/**
39+
* Returns chat session type from a URI, or 'local' if not specified or cannot be determined.
40+
*/
3741
export function getChatSessionType(editor: ChatEditorInput): string {
38-
// Check if the editor has an explicit chatSessionType in options
39-
if (editor.options.chatSessionType) {
40-
return editor.options.chatSessionType;
42+
if (!editor.resource) {
43+
return 'local';
4144
}
4245

43-
// For vscode-chat-session URIs, extract from authority
44-
if (editor.resource?.scheme === 'vscode-chat-session') {
46+
const { scheme, query } = editor.resource;
47+
48+
if (scheme === Schemas.vscodeChatSession) {
4549
const parsed = ChatSessionUri.parse(editor.resource);
4650
if (parsed) {
4751
return parsed.chatSessionType;
4852
}
4953
}
5054

55+
const sessionTypeFromQuery = new URLSearchParams(query).get('chatSessionType');
56+
if (sessionTypeFromQuery) {
57+
return sessionTypeFromQuery;
58+
}
59+
5160
// Default to 'local' for vscode-chat-editor scheme or when type cannot be determined
5261
return 'local';
5362
}

0 commit comments

Comments
 (0)