Skip to content

memory leak related to chat terminal tool #289711

@SimonSiefke

Description

@SimonSiefke

Does this issue occur when all extensions are disabled?: Yes/No

  • VS Code Version: 1.108.0
  • OS Version: Ubuntu 25.10

Steps to Reproduce

  1. Setup Copilot Chat
  2. Open a new Chat Editor
  3. Send a message "Run echo hello world in terminal."
  4. Wait for the result to finish
  5. Delete all Workspace Chat sessions
  6. Repeat the steps several times

Video

video.mp4

Results

In the chat, asking it to run echo hello world in terminal and then clearing the chat 37 times, the number of various functions seems to grow each time:

Image

JSON
{
  "namedFunctionCount3": [
    {
      "count": 2547,
      "delta": 82,
      "name": "o_i",
      "originalLocation": "src/vs/base/browser/dom.ts:139:13",
      "originalName": "DomListener",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:34:2175"
    },
    {
      "count": 1063,
      "delta": 57,
      "name": "run",
      "originalLocation": "src/vs/base/common/actions.ts:274:7",
      "originalName": "toAction",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:34:29091"
    },
    {
      "count": 366,
      "delta": 74,
      "name": "NRt",
      "originalLocation": "src/vs/platform/instantiation/common/instantiationService.ts:40:19",
      "originalName": "InstantiationService",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:1405:44"
    },
    {
      "count": 308,
      "delta": 37,
      "name": "rn",
      "originalLocation": "src/vs/platform/instantiation/common/serviceCollection.ts:13:1",
      "originalName": "ServiceCollection",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:290:6257"
    },
    {
      "count": 156,
      "delta": 79,
      "name": "D3i",
      "originalLocation": "src/vs/base/common/map.ts:41:22",
      "originalName": "ResourceMapEntry",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:7:8775"
    },
    {
      "count": 136,
      "delta": 38,
      "name": "dt",
      "originalLocation": "src/vs/base/common/cancellation.ts:102:13",
      "originalName": "CancellationTokenSource",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:28:40384"
    },
    {
      "count": 81,
      "delta": 74,
      "name": "KI",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:11:0",
      "originalName": "TerminalCapabilityStore",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:2441"
    },
    {
      "count": 77,
      "delta": 38,
      "name": "jce",
      "originalLocation": "src/vs/base/common/cancellation.ts:60:0",
      "originalName": "MutableToken",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:28:40084"
    },
    {
      "count": 58,
      "delta": 37,
      "name": "dispose",
      "originalLocation": "src/vs/platform/instantiation/common/instantiationService.ts:78:12",
      "originalName": "result.dispose",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:1405:493"
    },
    {
      "count": 58,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/instantiation/common/instantiationService.ts:77:21",
      "originalName": "result.dispose",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:1405:468"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "mbt",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon.ts:54:19",
      "originalName": "MarkNavigationAddon",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2733:3647"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "Yrn",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.ts:33:19",
      "originalName": "PartialCommandDetectionCapability",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2741:16213"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "tan",
      "originalLocation": "src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts:344:10",
      "originalName": "ShellIntegrationAddon",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2741:20588"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "Sbt",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.ts:56:19",
      "originalName": "DecorationAddon",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2742:2658"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "eTi",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/xtermAddonImporter.ts:39:6",
      "originalName": "XtermAddonImporter.importAddon",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2743:2730"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "fz",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts:184:2",
      "originalName": "XtermTerminal",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2743:4451"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "GCt",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalStatusList.ts:67:25",
      "originalName": "TerminalStatusList",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2870:484"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "Jun",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.ts:11:30",
      "originalName": "NaiveCwdDetectionCapability.type",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2870:79451"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "eae",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/environmentVariableInfo.ts:63:19",
      "originalName": "EnvironmentVariableInfoChangesActive",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2870:81282"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "c0t",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts:140:19",
      "originalName": "TerminalProcessManager",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2874:8208"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "cfn",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts:717:19",
      "originalName": "AckDataBufferer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:4431"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "h0t",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts:761:23",
      "originalName": "SeamlessRelaunchDataFilter",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:4737"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "hfn",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/lineDataEventAddon.ts:22:30",
      "originalName": "LineDataEventAddon",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:6062"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "sT",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalInstance.ts:366:19",
      "originalName": "TerminalInstance",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:16682"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "p0t",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalInstance.ts:2644:16",
      "originalName": "TerminalLabelComputer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2881:8690"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "rRe",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalInstance.ts:2818:19",
      "originalName": "TerminalInstanceColorProvider",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2881:12068"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "L4i",
      "originalLocation": "src/vs/workbench/contrib/terminal/electron-browser/localPty.ts:15:2",
      "originalName": "LocalPty",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:4156:13130"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "e.Unicode11Addon",
      "originalLocation": "webpack://Unicode11Addon/src/Unicode11Addon.ts:12:0",
      "originalName": "Unicode11Addon",
      "sourceLocation": "node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js:0:52153"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "t.UnicodeV11",
      "originalLocation": "webpack://Unicode11Addon/src/UnicodeV11.ts:197:2",
      "originalName": "UnicodeV11",
      "sourceLocation": "node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js:0:22613"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "t.ClipboardAddon",
      "originalLocation": "webpack://ClipboardAddon/src/ClipboardAddon.ts:15:12",
      "originalName": "ClipboardAddon",
      "sourceLocation": "node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js:0:5262"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "i",
      "originalLocation": "webpack://ClipboardAddon/src/ClipboardAddon.ts:88:0",
      "originalName": "Base64",
      "sourceLocation": "node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js:0:6129"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "v1i",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts:9:0",
      "originalName": "TerminalWidgetManager",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:6432"
    },
    {
      "count": 41,
      "delta": 37,
      "name": "b_",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:78:0",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4046"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:103:57",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4653"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:103:118",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4673"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:91:5",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4296"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "onDidAddFirstListener",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalInstance.ts:359:25",
      "originalName": "TerminalInstance",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:18800"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/terminalDataBuffering.ts:30:28",
      "originalName": "TerminalDataBufferer.startBuffering",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:579:29159"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts:534:60",
      "originalName": "TerminalProcessManager._setupPtyHostListeners",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2876:1945"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "readText",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts:300:19",
      "originalName": "XtermTerminal",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2743:8094"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "writeText",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts:303:20",
      "originalName": "XtermTerminal",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2743:8165"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "webpack://ClipboardAddon/src/ClipboardAddon.ts:21:62",
      "originalName": "ClipboardAddon",
      "sourceLocation": "node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js:0:5389"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:95:57",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4398"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/platform/terminal/common/capabilities/terminalCapabilityStore.ts:95:122",
      "originalName": "TerminalCapabilityStoreMultiplexer",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2037:4418"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "run",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/environmentVariableInfo.ts:81:8",
      "originalName": "EnvironmentVariableInfoChangesActive._getActions",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2870:81494"
    },
    {
      "count": 40,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts:166:46",
      "originalName": "TerminalProcessManager",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2874:9344"
    },
    {
      "count": 39,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.ts:104:55",
      "originalName": "TerminalChatService.registerTerminalInstanceWithToolSession",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:3033:1370"
    },
    {
      "count": 39,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.ts:122:60",
      "originalName": "TerminalChatService.registerTerminalInstanceWithToolSession",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:3033:1613"
    },
    {
      "count": 39,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts:853:50",
      "originalName": "RunInTerminalTool._registerInputListener",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2990:1366"
    },
    {
      "count": 39,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts:858:50",
      "originalName": "RunInTerminalTool",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2990:1451"
    },
    {
      "count": 39,
      "delta": 37,
      "name": "anonymous",
      "originalLocation": "src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts:898:50",
      "originalName": "RunInTerminalTool._setupProcessIdAssociation",
      "sourceLocation": "out/vs/workbench/workbench.desktop.main.js:2990:2142"
    }
  ],
  "isLeak": true
}

Metadata

Metadata

Labels

freeze-slow-crash-leakVS Code crashing, performance, freeze and memory leak issues

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions