Skip to content

Commit 09cd724

Browse files
authored
Merge pull request microsoft#257142 from microsoft/tyriar/257063
Always remove terminals from associations when they dispose
2 parents cf39480 + 692f5bd commit 09cd724

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ export class RunInTerminalTool extends Disposable implements IToolImpl {
153153

154154
// Restore terminal associations from storage
155155
this._restoreTerminalAssociations();
156+
this._register(this._terminalService.onDidDisposeInstance(e => {
157+
for (const [sessionId, toolTerminal] of this._sessionTerminalAssociations.entries()) {
158+
if (e === toolTerminal.instance) {
159+
this._sessionTerminalAssociations.delete(sessionId);
160+
}
161+
}
162+
}));
156163
}
157164

158165
async prepareToolInvocation(context: IToolInvocationPreparationContext, token: CancellationToken): Promise<IPreparedToolInvocation | undefined> {

src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import { TerminalChatAgentToolsSettingId } from '../../common/terminalChatAgentT
1717
import { IWorkspaceContextService } from '../../../../../../platform/workspace/common/workspace.js';
1818
import { TestContextService } from '../../../../../test/common/workbenchTestServices.js';
1919
import type { TestInstantiationService } from '../../../../../../platform/instantiation/test/common/instantiationServiceMock.js';
20-
import type { ITerminalInstance } from '../../../../terminal/browser/terminal.js';
20+
import { ITerminalService, type ITerminalInstance } from '../../../../terminal/browser/terminal.js';
2121
import { OperatingSystem } from '../../../../../../base/common/platform.js';
22+
import { Emitter } from '../../../../../../base/common/event.js';
2223

2324
class TestRunInTerminalTool extends RunInTerminalTool {
2425
protected override _osBackend: Promise<OperatingSystem> = Promise.resolve(OperatingSystem.Windows);
@@ -53,6 +54,9 @@ suite('RunInTerminalTool', () => {
5354
return [];
5455
},
5556
});
57+
instantiationService.stub(ITerminalService, {
58+
onDidDisposeInstance: new Emitter<ITerminalInstance>().event
59+
});
5660
workspaceService = instantiationService.invokeFunction(accessor => accessor.get(IWorkspaceContextService)) as TestContextService;
5761

5862
runInTerminalTool = store.add(instantiationService.createInstance(TestRunInTerminalTool));

0 commit comments

Comments
 (0)