/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ export enum DetectedIde { Devin = 'devin', Replit = 'replit', VSCode = 'vscode', Cursor = 'cursor', CloudShell = 'cloudshell', Codespaces = 'codespaces', FirebaseStudio = 'firebasestudio', Trae = 'trae', } export interface IdeInfo { displayName: string; } export function getIdeInfo(ide: DetectedIde): IdeInfo { switch (ide) { case DetectedIde.Devin: return { displayName: 'Devin', }; case DetectedIde.Replit: return { displayName: 'Replit', }; case DetectedIde.VSCode: return { displayName: 'VS Code', }; case DetectedIde.Cursor: return { displayName: 'Cursor', }; case DetectedIde.CloudShell: return { displayName: 'Cloud Shell', }; case DetectedIde.Codespaces: return { displayName: 'GitHub Codespaces', }; case DetectedIde.FirebaseStudio: return { displayName: 'Firebase Studio', }; case DetectedIde.Trae: return { displayName: 'Trae', }; default: { // This ensures that if a new IDE is added to the enum, we get a compile-time error. const exhaustiveCheck: never = ide; return exhaustiveCheck; } } } export function detectIde(): DetectedIde | undefined { // Only VSCode-based integrations are currently supported. if (process.env['TERM_PROGRAM'] !== 'vscode') { return undefined; } if (process.env['__COG_BASHRC_SOURCED']) { return DetectedIde.Devin; } if (process.env['REPLIT_USER']) { return DetectedIde.Replit; } if (process.env['CURSOR_TRACE_ID']) { return DetectedIde.Cursor; } if (process.env['CODESPACES']) { return DetectedIde.Codespaces; } if (process.env['EDITOR_IN_CLOUD_SHELL'] || process.env['CLOUD_SHELL']) { return DetectedIde.CloudShell; } if (process.env['TERM_PRODUCT'] === 'Trae') { return DetectedIde.Trae; } if (process.env['FIREBASE_DEPLOY_AGENT'] || process.env['MONOSPACE_ENV']) { return DetectedIde.FirebaseStudio; } return DetectedIde.VSCode; }