mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
Fix attach to chat not working after window reload (#275142)
This commit is contained in:
@@ -28,12 +28,14 @@ import { ILifecycleService } from '../../../../services/lifecycle/common/lifecyc
|
||||
import { IHoverService } from '../../../../../platform/hover/browser/hover.js';
|
||||
import { MarkdownString } from '../../../../../base/common/htmlContent.js';
|
||||
import { IChatContextPickService } from '../../../chat/browser/chatContextPickService.js';
|
||||
import { IChatWidgetService } from '../../../chat/browser/chat.js';
|
||||
import { IChatWidgetService, showChatView } from '../../../chat/browser/chat.js';
|
||||
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
|
||||
import { TerminalContext } from '../../../chat/browser/actions/chatContext.js';
|
||||
import { getTerminalUri, parseTerminalUri } from '../terminalUri.js';
|
||||
import { URI } from '../../../../../base/common/uri.js';
|
||||
import { ChatAgentLocation } from '../../../chat/common/constants.js';
|
||||
import { IViewsService } from '../../../../services/views/common/viewsService.js';
|
||||
import { IWorkbenchLayoutService } from '../../../../services/layout/browser/layoutService.js';
|
||||
|
||||
interface IDisposableDecoration { decoration: IDecoration; disposables: IDisposable[]; exitCode?: number; markProperties?: IMarkProperties }
|
||||
|
||||
@@ -67,7 +69,9 @@ export class DecorationAddon extends Disposable implements ITerminalAddon, IDeco
|
||||
@IHoverService private readonly _hoverService: IHoverService,
|
||||
@IChatContextPickService private readonly _contextPickService: IChatContextPickService,
|
||||
@IChatWidgetService private readonly _chatWidgetService: IChatWidgetService,
|
||||
@IInstantiationService private readonly _instantiationService: IInstantiationService
|
||||
@IInstantiationService private readonly _instantiationService: IInstantiationService,
|
||||
@IViewsService private readonly _viewsService: IViewsService,
|
||||
@IWorkbenchLayoutService private readonly _layoutService: IWorkbenchLayoutService
|
||||
) {
|
||||
super();
|
||||
this._register(toDisposable(() => this._dispose()));
|
||||
@@ -527,14 +531,24 @@ export class DecorationAddon extends Disposable implements ITerminalAddon, IDeco
|
||||
return {
|
||||
class: undefined, tooltip: labelAttachToChat, id: 'terminal.attachToChat', label: labelAttachToChat, enabled: true,
|
||||
run: async () => {
|
||||
const widget = this._chatWidgetService.lastFocusedWidget ?? this._chatWidgetService.getWidgetsByLocations(ChatAgentLocation.Chat)?.find(w => w.attachmentCapabilities.supportsTerminalAttachments);
|
||||
let widget = this._chatWidgetService.lastFocusedWidget ?? this._chatWidgetService.getWidgetsByLocations(ChatAgentLocation.Chat)?.find(w => w.attachmentCapabilities.supportsTerminalAttachments);
|
||||
|
||||
// If no widget found (e.g., after window reload when chat hasn't been focused), open chat view
|
||||
if (!widget) {
|
||||
widget = await showChatView(this._viewsService, this._layoutService);
|
||||
}
|
||||
|
||||
if (!widget) {
|
||||
return;
|
||||
}
|
||||
|
||||
let terminalContext: TerminalContext | undefined;
|
||||
if (this._resource) {
|
||||
const parsedUri = parseTerminalUri(this._resource);
|
||||
terminalContext = this._instantiationService.createInstance(TerminalContext, getTerminalUri(parsedUri.workspaceId, parsedUri.instanceId!, undefined, command.id));
|
||||
}
|
||||
|
||||
if (terminalContext && widget && widget.attachmentCapabilities.supportsTerminalAttachments) {
|
||||
if (terminalContext && widget.attachmentCapabilities.supportsTerminalAttachments) {
|
||||
try {
|
||||
const attachment = await terminalContext.asAttachment(widget);
|
||||
if (attachment) {
|
||||
|
||||
Reference in New Issue
Block a user