Skip to content

Commit 885e2e7

Browse files
author
Chulong Li (M365)
committed
Address local agents fork review feedback
1 parent e547a75 commit 885e2e7

3 files changed

Lines changed: 26 additions & 15 deletions

File tree

src/vs/sessions/contrib/providers/localChatSessions/browser/localChatSessions.contribution.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,14 @@ registerAction2(class extends ForkConversationAction {
6969
return super._openForkedSession(instantiationService, parentSessionResource, forkedSessionResource);
7070
}
7171

72-
const adoptedSession = await sessionsManagementService.adoptForkedChat(parentSessionResource, forkedSessionResource);
73-
if (adoptedSession) {
74-
await sessionsViewService.openSession(adoptedSession.resource);
75-
return;
72+
try {
73+
const adoptedSession = await sessionsManagementService.adoptForkedChat(parentSessionResource, forkedSessionResource);
74+
if (adoptedSession) {
75+
await sessionsViewService.openSession(adoptedSession.resource);
76+
return;
77+
}
78+
} catch (error) {
79+
logService.error(`Failed to adopt forked chat ${forkedSessionResource.toString()}`, error);
7680
}
7781

7882
// Wait for the forked session to appear, but bound the wait so a

src/vs/sessions/contrib/providers/localChatSessions/browser/localChatSessionsProvider.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ class LocalSession extends Disposable {
375375

376376
setModeSnapshot(mode: { readonly id: string; readonly kind: ChatModeKind | undefined } | undefined): void {
377377
this._mode = undefined;
378+
// The sessions surface stores a concrete mode kind; local chats default to agent mode when input state has no kind.
378379
this._modeObservable.set(mode ? { id: mode.id, kind: mode.kind ?? ChatModeKind.Agent } : undefined, undefined);
379380
}
380381

@@ -574,7 +575,7 @@ export class LocalChatSessionsProvider extends Disposable implements ISessionsPr
574575
lastMessageDate: stored.lastMessageDate,
575576
timing: { created: stored.createdAt, lastRequestStarted: undefined, lastRequestEnded: stored.lastMessageDate },
576577
isActive: false,
577-
lastResponseState: 0 /* ResponseModelState.Complete */,
578+
lastResponseState: ResponseModelState.Complete,
578579
workingDirectory,
579580
};
580581

@@ -902,29 +903,34 @@ export class LocalChatSessionsProvider extends Disposable implements ISessionsPr
902903
try {
903904
const model = modelRef.object;
904905
const sourceWorkspace = primary.workspace.get();
905-
const workspace = sourceWorkspace ?? (model.workingDirectory ? this.resolveWorkspace(model.workingDirectory) : undefined);
906+
const modelWorkingDirectory = model.workingDirectory;
907+
const workingDirectory = modelWorkingDirectory ?? sourceWorkspace?.folders[0]?.root;
908+
const workspace = (modelWorkingDirectory ? this.resolveWorkspace(modelWorkingDirectory) : undefined)
909+
?? sourceWorkspace
910+
?? (workingDirectory ? this.resolveWorkspace(workingDirectory) : undefined);
906911
if (!workspace) {
907912
throw new Error(`Cannot resolve workspace for forked chat ${forkedChatUri.toString()}`);
908913
}
909914

910-
if (!model.workingDirectory && workspace.folders.length > 0) {
911-
model.setWorkingDirectory(workspace.folders[0]?.root);
915+
if (!model.workingDirectory && workingDirectory) {
916+
model.setWorkingDirectory(workingDirectory);
912917
}
913918

914919
const timing = model.timing;
915920
const lastUpdate = model.lastMessageDate || timing.lastRequestEnded || timing.lastRequestStarted || timing.created;
921+
const requestInProgress = model.requestInProgress.get();
916922
const detail: IChatDetail = {
917923
sessionResource: forkedChatUri,
918924
title: model.title,
919925
lastMessageDate: lastUpdate,
920926
timing,
921-
isActive: model.requestInProgress.get(),
922-
lastResponseState: ResponseModelState.Complete,
923-
workingDirectory: workspace.folders[0]?.root,
927+
isActive: requestInProgress,
928+
lastResponseState: requestInProgress ? ResponseModelState.Pending : ResponseModelState.Complete,
929+
workingDirectory,
924930
};
925931

926932
const session = LocalSession.fromHistory(detail, this.id, workspace, this.instantiationService);
927-
session.setStatus(model.requestInProgress.get() ? SessionStatus.InProgress : SessionStatus.Completed);
933+
session.setStatus(requestInProgress ? SessionStatus.InProgress : SessionStatus.Completed);
928934
const inputState = model.inputModel.state.get();
929935
session.setModelId(inputState?.selectedModel?.identifier);
930936
session.setModeSnapshot(inputState?.mode);

src/vs/sessions/contrib/providers/localChatSessions/test/browser/localChatSessionsProvider.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ const STORAGE_KEY_SESSIONS = 'sessions.localChat.sessions';
156156

157157
interface IReadStoredSession {
158158
readonly uri: UriComponents;
159-
readonly workingDirectory: UriComponents;
159+
readonly workingDirectory?: UriComponents;
160160
readonly parentUri?: UriComponents;
161161
}
162162

@@ -520,11 +520,12 @@ suite('LocalChatSessionsProvider', () => {
520520
const provider = store.add(instantiationService.createInstance(LocalChatSessionsProvider));
521521

522522
const source = await commitNewSession(provider);
523+
const forkedWorkingDirectory = URI.file('/forked/folder');
523524
const forkedResource = URI.parse('vscode-local-chat://chat/forked-primary');
524525
chatService.registerModel(createMockModel(forkedResource, {
525526
title: 'Forked: hello',
526527
timing: { created: 2_000, lastRequestStarted: 2_100, lastRequestEnded: 2_200 },
527-
workingDirectory: TEST_FOLDER,
528+
workingDirectory: forkedWorkingDirectory,
528529
}));
529530

530531
const adopted = await provider.adoptForkedChat(source.sessionId, source.resource, forkedResource);
@@ -542,7 +543,7 @@ suite('LocalChatSessionsProvider', () => {
542543
sessions: [source.resource.toString(), forkedResource.toString()],
543544
chats: [forkedResource.toString()],
544545
storedParent: undefined,
545-
storedWorkingDirectory: TEST_FOLDER.toString(),
546+
storedWorkingDirectory: forkedWorkingDirectory.toString(),
546547
});
547548
});
548549

0 commit comments

Comments
 (0)