Change:
Testing Ran into this verifying a different issue, the API says that ThemeIcons are assignable in the TerminalOptions but they are not !

Discussion:
/** * The icon path or {@link ThemeIcon} for the terminal. */ <del> readonly iconPath?: Uri | { light: Uri; dark: Uri } | { id: string, color?: { id: string } }; </del> <ins> readonly iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon; </ins> } export interface ExtensionTerminalOptions { /** * A themeIcon, Uri, or light and dark Uris to use as the terminal tab icon */ <del> readonly iconPath?: Uri | { light: Uri; dark: Uri } | { id: string, color?: { id: string } }; </del> <ins> readonly iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon; </ins> } //#endregion

import { URI } from 'vs/base/common/uri'; import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; import { IDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; <del> import { Disposable as VSCodeDisposable, EnvironmentVariableMutatorType } from './extHostTypes'; </del> <ins> import { Disposable as VSCodeDisposable, EnvironmentVariableMutatorType, ThemeColor } from './extHostTypes'; </ins> import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { localize } from 'vs/nls'; import { NotSupportedError } from 'vs/base/common/errors';

import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { generateUuid } from 'vs/base/common/uuid'; import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable'; <del> import { IProcessReadyEvent, IShellLaunchConfigDto, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError, ITerminalProfile, TerminalShellType } from 'vs/platform/terminal/common/terminal'; </del> <ins> import { IProcessReadyEvent, IShellLaunchConfigDto, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError, ITerminalProfile, TerminalIcon, TerminalShellType } from 'vs/platform/terminal/common/terminal'; </ins> import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; import { ThemeIcon } from 'vs/platform/theme/common/themeService'; import { withNullAsUndefined } from 'vs/base/common/types';

shellArgs: withNullAsUndefined(options.shellArgs), cwd: withNullAsUndefined(options.cwd), env: withNullAsUndefined(options.env), <del> icon: withNullAsUndefined(options.iconPath), </del> <ins> icon: withNullAsUndefined(asTerminalIcon(options.iconPath)), </ins> initialText: withNullAsUndefined(options.message), strictEnv: withNullAsUndefined(options.strictEnv), hideFromUser: withNullAsUndefined(options.hideFromUser),

public createExtensionTerminal(options: vscode.ExtensionTerminalOptions, internalOptions?: ITerminalInternalOptions): vscode.Terminal { const terminal = new ExtHostTerminal(this._proxy, generateUuid(), options, options.name); const p = new ExtHostPseudoterminal(options.pty); <del> terminal.createExtensionTerminal(internalOptions?.isSplitTerminal, options.iconPath).then(id => { </del> <ins> terminal.createExtensionTerminal(internalOptions?.isSplitTerminal, asTerminalIcon(options.iconPath)).then(id => { </ins> const disposable = this._setupExtHostProcessListeners(id, p); this._terminalProcessDisposables[id] = disposable; });

throw new NotSupportedError(); } } <ins> function asTerminalIcon(iconPath?: vscode.Uri | { light: vscode.Uri; dark: vscode.Uri } | vscode.ThemeIcon): TerminalIcon | undefined { if (!iconPath) { return undefined; } if (!('id' in iconPath)) { return iconPath; } return { id: iconPath.id, color: iconPath.color as ThemeColor }; } </ins>