mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-22 17:48:56 +01:00
move chat overlay into workbench grid (#240808)
* make chat editing overlay a workbench editor overlay (not just a code editor overlay), same for editor specific context key, they should not be limited to code editors
* * centralize context key handling into `chatEditoringEditorContextKeys`
* workbench chat overlay also reacts to inline chat sessions
* fix leak in code lens controller
* 💄
* make sure `EditingSessionAction` find the right widget
* add `IModifiedFileEntryNavigator` to allow change navigation from "the inside"
* remove code editor based chat overlay logic
This commit is contained in:
@@ -12,7 +12,7 @@ import { Emitter, Event } from '../../../../base/common/event.js';
|
||||
import { Lazy } from '../../../../base/common/lazy.js';
|
||||
import { DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
|
||||
import { MovingAverage } from '../../../../base/common/numbers.js';
|
||||
import { autorun, autorunWithStore, constObservable, derived, IObservable, observableFromEvent, observableSignalFromEvent, observableValue, transaction } from '../../../../base/common/observable.js';
|
||||
import { autorun, autorunWithStore, derived, IObservable, observableFromEvent, observableSignalFromEvent, observableValue, transaction } from '../../../../base/common/observable.js';
|
||||
import { isEqual } from '../../../../base/common/resources.js';
|
||||
import { StopWatch } from '../../../../base/common/stopwatch.js';
|
||||
import { assertType } from '../../../../base/common/types.js';
|
||||
@@ -39,7 +39,6 @@ import { ILogService } from '../../../../platform/log/common/log.js';
|
||||
import { IEditorService, SIDE_GROUP } from '../../../services/editor/common/editorService.js';
|
||||
import { IViewsService } from '../../../services/views/common/viewsService.js';
|
||||
import { showChatView } from '../../chat/browser/chat.js';
|
||||
import { ChatEditorOverlayController } from '../../chat/browser/chatEditing/chatEditingEditorOverlay.js';
|
||||
import { IChatWidgetLocationOptions } from '../../chat/browser/chatWidget.js';
|
||||
import { ChatAgentLocation } from '../../chat/common/chatAgents.js';
|
||||
import { ChatContextKeys } from '../../chat/common/chatContextKeys.js';
|
||||
@@ -47,7 +46,7 @@ import { IChatEditingService, WorkingSetEntryState } from '../../chat/common/cha
|
||||
import { ChatModel, ChatRequestRemovalReason, IChatRequestModel, IChatTextEditGroup, IChatTextEditGroupState, IResponse } from '../../chat/common/chatModel.js';
|
||||
import { IChatService } from '../../chat/common/chatService.js';
|
||||
import { INotebookEditorService } from '../../notebook/browser/services/notebookEditorService.js';
|
||||
import { CTX_HAS_SESSION, CTX_INLINE_CHAT_EDITING, CTX_INLINE_CHAT_HAS_AGENT2, CTX_INLINE_CHAT_REQUEST_IN_PROGRESS, CTX_INLINE_CHAT_RESPONSE_TYPE, CTX_INLINE_CHAT_VISIBLE, INLINE_CHAT_ID, InlineChatConfigKeys, InlineChatResponseType } from '../common/inlineChat.js';
|
||||
import { CTX_INLINE_CHAT_EDITING, CTX_INLINE_CHAT_HAS_AGENT2, CTX_INLINE_CHAT_REQUEST_IN_PROGRESS, CTX_INLINE_CHAT_RESPONSE_TYPE, CTX_INLINE_CHAT_VISIBLE, INLINE_CHAT_ID, InlineChatConfigKeys, InlineChatResponseType } from '../common/inlineChat.js';
|
||||
import { HunkInformation, Session, StashedSession } from './inlineChatSession.js';
|
||||
import { IInlineChatSession2, IInlineChatSessionService } from './inlineChatSessionService.js';
|
||||
import { InlineChatError } from './inlineChatSessionServiceImpl.js';
|
||||
@@ -1199,7 +1198,6 @@ export class InlineChatController2 implements IEditorContribution {
|
||||
@IContextKeyService contextKeyService: IContextKeyService,
|
||||
) {
|
||||
|
||||
const ctxHasSession = CTX_HAS_SESSION.bindTo(contextKeyService);
|
||||
const ctxInlineChatVisible = CTX_INLINE_CHAT_VISIBLE.bindTo(contextKeyService);
|
||||
|
||||
this._zone = new Lazy<InlineChatZoneWidget>(() => {
|
||||
@@ -1266,12 +1264,7 @@ export class InlineChatController2 implements IEditorContribution {
|
||||
const session = this._currentSession.read(r);
|
||||
|
||||
if (!session) {
|
||||
ctxHasSession.set(undefined);
|
||||
this._isActiveController.set(false, undefined);
|
||||
} else {
|
||||
const checkRequests = () => ctxHasSession.set(session.chatModel.getRequests().length === 0 ? 'empty' : 'active');
|
||||
store.add(session.chatModel.onDidChange(checkRequests));
|
||||
checkRequests();
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -1350,30 +1343,6 @@ export class InlineChatController2 implements IEditorContribution {
|
||||
session.editingSession.getEntry(session.uri)?.autoAcceptController.get()?.cancel();
|
||||
}
|
||||
}));
|
||||
|
||||
this._store.add(autorun(r => {
|
||||
|
||||
const overlay = ChatEditorOverlayController.get(_editor)!;
|
||||
const session = this._currentSession.read(r);
|
||||
const model = editorObs.model.read(r);
|
||||
if (!session || !model) {
|
||||
overlay.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
const lastResponse = observableFromEvent(this, session.chatModel.onDidChange, () => session.chatModel.getRequests().at(-1)?.response);
|
||||
const response = lastResponse.read(r);
|
||||
|
||||
const isInProgress = response
|
||||
? observableFromEvent(this, response.onDidChange, () => !response.isComplete)
|
||||
: constObservable(false);
|
||||
|
||||
if (isInProgress.read(r)) {
|
||||
overlay.showRequest(session.editingSession);
|
||||
} else if (session.editingSession.getEntry(session.uri)?.state.get() !== WorkingSetEntryState.Modified) {
|
||||
overlay.hide();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
||||
Reference in New Issue
Block a user