diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 5c5142d..46162a1 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -24,21 +24,39 @@ let isActive = false; // Track pending approvals we've already sent const sentPendingIds = new Set(); +import * as cp from 'child_process'; + /** * Detect project name from workspace. - * Priority: settings > workspace folder name > fallback + * Priority: settings > git remote repo name > workspace folder name */ function detectProjectName(): string { const config = vscode.workspace.getConfiguration('gravityBridge'); const configName = config.get('projectName'); if (configName) { return configName; } - // Use workspace folder name + // Try git remote URL → extract repo name const folders = vscode.workspace.workspaceFolders; if (folders && folders.length > 0) { - const folderName = folders[0].name; - // Convert to snake_case: "antig_web" → "antig_web", "My Project" → "my_project" - return folderName.toLowerCase().replace(/[\s\-]+/g, '_'); + const cwd = folders[0].uri.fsPath; + try { + const remoteUrl = cp.execSync('git remote get-url origin', { + cwd, encoding: 'utf-8', timeout: 3000 + }).trim(); + // "https://gitea.example.com/Variet/gravity_control.git" → "gravity_control" + // "git@github.com:user/repo.git" → "repo" + const match = remoteUrl.match(/\/([^\/]+?)(?:\.git)?$/); + if (match && match[1]) { + const repoName = match[1].toLowerCase().replace(/[\s\-]+/g, '_'); + console.log(`Gravity Bridge: project from git remote → "${repoName}"`); + return repoName; + } + } catch { + // No git or no remote — fall through + } + + // Fallback: workspace folder name + return folders[0].name.toLowerCase().replace(/[\s\-]+/g, '_'); } return 'unknown_project';