Path: blob/main/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIPythonTerminalService.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import * as vscode from 'vscode';5import { ILogService } from '../../../platform/log/common/logService';6import { PythonEnvironmentApi } from './copilotCLIPythonEnvironmentApi';78export class PythonTerminalService {9constructor(@ILogService private readonly logService: ILogService,10) { }1112private async getEnvExtApi(): Promise<PythonEnvironmentApi | undefined> {13const extension = vscode.extensions.getExtension<PythonEnvironmentApi>('ms-python.vscode-python-envs');14if (!extension) {15return undefined;16}17if (!extension.isActive) {18await extension.activate();19}2021return extension.exports;22}2324public async createTerminal(options: vscode.TerminalOptions) {25try {26const workspaceUri = vscode.workspace.workspaceFolders?.length ? vscode.workspace.workspaceFolders[0].uri : undefined;27if (!workspaceUri) {28return;29}3031const api = await this.getEnvExtApi();32if (!api) {33return;34}35const env = await api.getEnvironment(workspaceUri);36if (!env || !env.sysPrefix.toLowerCase().startsWith(workspaceUri.fsPath.toLowerCase())) {37return;38}39return await api.createTerminal(env, options);40} catch (ex) {41this.logService.error('Failed to create terminal with Python environment', ex.toString());42}43}44}454647