Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>SmartCommit AINew to Visual Studio Code? Get it now.
SmartCommit AI

SmartCommit AI

Murat Demirci

| (0) | Free
AI-powered commit message generation and commit organization
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info
Smart Commit Logo

Smart Commit

AI-powered commit message generation and commit organization extension for VSCode and Cursor.

Features

  • 🤖 AI-Powered Commit Messages: Generate intelligent commit messages using OpenAI or Perplexity
  • 📝 Conventional Commits: Support for conventional commit format with custom templates
  • 🔄 Split & Commit: Automatically split changes into logical commits based on file structure
  • 🎯 Custom Rules: Define custom rules for commit organization with priority-based processing
  • ⚡ Fast & Efficient: Optimized for performance with large codebases
  • 🔧 Highly Configurable: Extensive configuration options with validation
  • 🎨 Enhanced UI: Interactive previews, notifications, and comprehensive logging
  • 📊 Batch Processing: Execute multiple commits with automatic rollback on failure
  • 🔄 Undo Support: Comprehensive undo functionality with different reset types

Installation

  1. Open VSCode or Cursor
  2. Go to Extensions (Ctrl+Shift+X)
  3. Search for "Smart Commit"
  4. Click Install

Configuration

Create a .smart-commit-rules file in your project root:

{
  "apiProvider": "openai",
  "apiKey": "your-api-key-here",
  "commitStrategy": "smart",
  "useConventionalCommits": true,
  "maxDiffSize": 800,
  "maxFilesPerCommit": 5,
  "autoStage": true,
  "skipHooks": false,
  "customPrompt": "Generate a clear, concise commit message based on the following changes:",
  "rules": [
    {
      "name": "Frontend Components",
      "patterns": ["src/components/**/*.tsx", "src/components/**/*.ts"],
      "template": "feat(ui): ${summary}",
      "priority": 20,
      "groupFiles": true
    },
    {
      "name": "API Changes",
      "patterns": ["src/api/**/*.ts", "src/services/**/*.ts"],
      "template": "feat(api): ${summary}",
      "priority": 15,
      "groupFiles": false
    },
    {
      "name": "Configuration",
      "patterns": ["*.json", "*.yaml", "*.yml", ".env*"],
      "template": "chore(config): ${summary}",
      "priority": 5,
      "groupFiles": true
    },
    {
      "name": "Documentation",
      "patterns": ["**/*.md", "docs/**/*"],
      "template": "docs: ${summary}",
      "priority": 1,
      "groupFiles": true
    }
  ]
}

Configuration Options

API Configuration

  • apiProvider: Choose between "openai" or "perplexity"
  • apiKey: Your API key for the selected provider
  • customPrompt: Custom prompt template for AI generation
  • openaiApiKey: OpenAI API key (deprecated, use apiKey)
  • perplexityApiKey: Perplexity API key (deprecated, use apiKey)

Commit Strategy

  • commitStrategy: "single", "split", or "smart"
  • useConventionalCommits: Enable conventional commit format
  • maxDiffSize: Maximum diff size for single commit
  • maxFilesPerCommit: Maximum files per commit

Behavior Options

  • autoStage: Automatically stage changes before commit
  • skipHooks: Skip pre-commit hooks

Custom Rules

Define custom rules for specific file patterns:

{
  "name": "Rule Name",
  "patterns": ["glob/pattern/**/*.ext"],
  "template": "type(scope): ${summary}",
  "priority": 10,
  "groupFiles": true
}

Advanced Configuration Examples

Frontend Project Configuration

{
  "apiProvider": "openai",
  "apiKey": "sk-your-openai-key",
  "commitStrategy": "smart",
  "useConventionalCommits": true,
  "maxDiffSize": 600,
  "maxFilesPerCommit": 8,
  "autoStage": true,
  "skipHooks": false,
  "rules": [
    {
      "name": "React Components",
      "patterns": ["src/components/**/*.tsx", "src/components/**/*.ts"],
      "template": "feat(ui): ${summary}",
      "priority": 30,
      "groupFiles": true
    },
    {
      "name": "Styling",
      "patterns": ["src/styles/**/*.css", "src/styles/**/*.scss"],
      "template": "style(ui): ${summary}",
      "priority": 25,
      "groupFiles": true
    },
    {
      "name": "Hooks",
      "patterns": ["src/hooks/**/*.ts"],
      "template": "feat(hooks): ${summary}",
      "priority": 20,
      "groupFiles": false
    },
    {
      "name": "Tests",
      "patterns": ["**/*.test.ts", "**/*.spec.ts"],
      "template": "test: ${summary}",
      "priority": 15,
      "groupFiles": true
    }
  ]
}

Backend API Configuration

{
  "apiProvider": "perplexity",
  "apiKey": "pplx-your-perplexity-key",
  "commitStrategy": "smart",
  "useConventionalCommits": true,
  "maxDiffSize": 1000,
  "maxFilesPerCommit": 12,
  "autoStage": true,
  "skipHooks": false,
  "rules": [
    {
      "name": "API Endpoints",
      "patterns": ["src/api/**/*.ts", "src/routes/**/*.ts"],
      "template": "feat(api): ${summary}",
      "priority": 40,
      "groupFiles": false
    },
    {
      "name": "Database",
      "patterns": ["src/models/**/*.ts", "src/migrations/**/*.ts"],
      "template": "feat(db): ${summary}",
      "priority": 35,
      "groupFiles": true
    },
    {
      "name": "Services",
      "patterns": ["src/services/**/*.ts"],
      "template": "feat(services): ${summary}",
      "priority": 30,
      "groupFiles": true
    },
    {
      "name": "Configuration",
      "patterns": ["config/**/*.ts", "src/config/**/*.ts"],
      "template": "chore(config): ${summary}",
      "priority": 10,
      "groupFiles": true
    }
  ]
}

Library Development Configuration

{
  "apiProvider": "openai",
  "apiKey": "sk-your-openai-key",
  "commitStrategy": "smart",
  "useConventionalCommits": true,
  "maxDiffSize": 400,
  "maxFilesPerCommit": 5,
  "autoStage": true,
  "skipHooks": false,
  "rules": [
    {
      "name": "Core Library",
      "patterns": ["src/core/**/*.ts", "src/lib/**/*.ts"],
      "template": "feat(core): ${summary}",
      "priority": 50,
      "groupFiles": false
    },
    {
      "name": "Public API",
      "patterns": ["src/index.ts", "src/types/**/*.ts"],
      "template": "feat(api): ${summary}",
      "priority": 45,
      "groupFiles": false
    },
    {
      "name": "Documentation",
      "patterns": ["README.md", "docs/**/*.md", "CHANGELOG.md"],
      "template": "docs: ${summary}",
      "priority": 5,
      "groupFiles": true
    }
  ]
}

Usage

Generate Smart Commit

  1. Stage your changes (git add .)
  2. Open Command Palette (Ctrl+Shift+P)
  3. Run "Generate Smart Commit"
  4. Review the enhanced preview with:
    • Generated commit message
    • File list with change summary
    • AI provider and configuration info
    • Interactive options (✅ Commit, ✏️ Edit, 📋 Copy, ❌ Cancel)

Split & Commit

  1. Stage your changes (git add .)
  2. Open Command Palette (Ctrl+Shift+P)
  3. Run "Split & Commit"
  4. Choose your splitting strategy:
    • Smart Split: Automatically group by folder structure, file types, and size
    • By Folder: Group files by directory structure
    • By File Type: Group files by extensions
    • Preview Mode: See grouping without committing
  5. Review the enhanced plan preview and confirm

Core Features

AI Commit Message Generator

A comprehensive system that generates intelligent commit messages using OpenAI or Perplexity API.

Features

  • 🤖 Dual AI Support: OpenAI and Perplexity API integration
  • 📝 Multiple Prompt Templates: Conventional commits, natural language, and short form
  • 🔄 Dynamic Provider Selection: Automatically selects API provider based on configuration
  • 🛡️ Fallback Strategy: Generates commit messages even when AI fails
  • ⚡ Smart Diff Analysis: Analyzes file types and changes for better context
  • 🎯 Validation: Ensures generated messages follow the specified format

Usage Example

import { generateCommitMessage } from "./src/core/commitMessageGenerator";
import { loadSmartCommitConfig } from "./src/core/config";
import { getCurrentGitDiff } from "./src/core/gitUtils";

// Load configuration
const config = await loadSmartCommitConfig();

// Get git diff
const diff = await getCurrentGitDiff("/path/to/repo");

// Generate commit message
const result = await generateCommitMessage(diff, config);

if (result.success) {
  console.log("Generated message:", result.message);
} else {
  console.error("Error:", result.error);
}

API Providers

OpenAI Configuration:

{
  "apiProvider": "openai",
  "apiKey": "sk-your-openai-key"
}

Perplexity Configuration:

{
  "apiProvider": "perplexity",
  "apiKey": "pplx-your-perplexity-key"
}

Prompt Templates

Conventional Commits:

feat(auth): add user authentication
fix(api): resolve null pointer exception
docs(readme): update installation guide

Natural Language:

Add user authentication system
Fix crash when loading empty data
Update documentation for new API

Short Form:

Add auth
Fix crash
Update docs

Advanced AI Features

File Type Analysis:

// JavaScript/TypeScript files
feat(frontend): add new component

// Test files
test: add unit tests for auth

// Documentation
docs: update API documentation

// Configuration
chore(config): update build settings

Split Commit Strategy:

// Example split:
1. feat(ui): add new components (3 files)
2. fix(api): resolve authentication issues (2 files)
3. docs: update README (1 file)

File Grouper

A sophisticated system that groups staged file diffs based on folder structure, file types, and line count limits.

Features

  • 📁 Folder Structure Grouping: Groups files by directory structure with configurable depth
  • 📄 File Type Grouping: Groups files by their extensions and content types
  • 📏 Max Lines Per Group: Limits group size by total diff lines
  • 🎯 Priority System: Custom rules with priority-based ordering
  • 🔧 Flexible Criteria: Highly configurable grouping strategies
  • 🤖 AI Integration: Generates commit messages for each group

File Type Detection

The system automatically detects and categorizes files:

  • javascript: .js, .ts, .jsx, .tsx, .vue, .svelte
  • styles: .css, .scss, .sass, .less, .styl
  • test: Files containing .test., .spec., or in test directories
  • config: .json, .yaml, .yml, .env, configuration files
  • docs: .md, .txt, .rst, .adoc, README files
  • html: .html, .htm, .ejs, .hbs, .pug
  • image: .png, .jpg, .jpeg, .gif, .svg, etc.
  • database: .sql, .db, .sqlite
  • other: Files that don't match specific categories

Usage Example

import {
  groupStagedFiles,
  createGroupingCriteria,
} from "./src/core/fileGrouper";
import { loadSmartCommitConfig } from "./src/core/config";

// Load configuration and create criteria
const config = await loadSmartCommitConfig();
const criteria = createGroupingCriteria(config);

// Group staged files
const groups = await groupStagedFiles("/path/to/git/repo", config, criteria);

// Each group has:
groups.forEach((group) => {
  console.log({
    files: group.files, // Array of file paths
    message: group.message, // Generated commit message
    folderPath: group.folderPath, // Common folder path
    fileType: group.fileType, // Dominant file type
    lineCount: group.lineCount, // Total diff lines
    priority: group.priority, // Group priority
  });
});

Grouping Strategies

Smart Grouping (Default):

const smartCriteria = getDefaultGroupingCriteria();
// Results in logical, reviewable commits

Folder-Based Grouping:

const folderCriteria = {
  ...getDefaultGroupingCriteria(),
  groupByFileType: false,
  folderDepth: 2,
};

File Type Grouping:

const typeCriteria = {
  ...getDefaultGroupingCriteria(),
  groupByFolder: false,
  groupByFileType: true,
};

Size-Limited Grouping:

const sizeCriteria = {
  ...getDefaultGroupingCriteria(),
  maxLinesPerGroup: 100,
  maxFilesPerGroup: 5,
};

Project-Specific Configurations

Frontend Projects:

const frontendCriteria = {
  maxLinesPerGroup: 150,
  groupByFolder: true,
  groupByFileType: true,
  maxFilesPerGroup: 8,
  folderDepth: 3,
  prioritizeRules: true,
};

Backend APIs:

const backendCriteria = {
  maxLinesPerGroup: 300,
  groupByFolder: true,
  groupByFileType: true,
  maxFilesPerGroup: 12,
  folderDepth: 2,
  prioritizeRules: true,
};

Library Development:

const libraryCriteria = {
  maxLinesPerGroup: 100,
  groupByFolder: false,
  groupByFileType: true,
  maxFilesPerGroup: 5,
  folderDepth: 1,
  prioritizeRules: true,
};

Commit Executor

An advanced system that automates commit execution with specific file staging and predefined messages, providing automatic rollback on failure and optional undo support.

Features

  • Batch Commit Execution: Automatically execute multiple commits in sequence
  • Automatic Rollback: Automatic rollback if any commit fails
  • Selective File Staging: Stage only specific files for each commit
  • Undo Support: Undo commits using git reset --soft/mixed/hard HEAD~n
  • Error Recovery: Comprehensive error handling and recovery strategies
  • VSCode Integration: Full VSCode/Cursor extension integration

Commit Instruction Interface

interface CommitInstruction {
  files: string[]; // Files to commit
  message: string; // Commit message
  id?: string; // Unique identifier (optional)
  skipHooks?: boolean; // Skip pre-commit hooks
}

Usage Examples

Basic Batch Commit:

import { executeBatchCommits } from "./src/core/commitExecutor";

const instructions = [
  {
    files: ["src/components/Button.tsx", "src/components/Button.test.tsx"],
    message: "feat(ui): add new button component with tests",
    id: "button-feature",
  },
  {
    files: ["src/styles/button.css"],
    message: "style(ui): add button styling",
    id: "button-styles",
  },
];

const result = await executeBatchCommits(instructions, config);
console.log(
  `${result.successfulCommits}/${result.totalCommits} commits successful`
);

Undo Operations:

import { undoCommits } from "./src/core/commitExecutor";

// Undo last 2 commits with soft reset
const undoResult = await undoCommits(2, "soft", config);

if (undoResult.success) {
  console.log(`Undone ${undoResult.undoneCommits} commits`);
  console.log(`New HEAD: ${undoResult.newHead}`);
}

Different Reset Types:

// Soft reset - keeps changes staged
await executor.undoCommits(1, "soft");

// Mixed reset - keeps changes unstaged (default)
await executor.undoCommits(1, "mixed");

// Hard reset - discards all changes (WARNING!)
await executor.undoCommits(1, "hard");

Advanced Features

Custom Hook Management:

const instructions = [
  {
    files: ["src/critical-file.ts"],
    message: "feat: critical feature",
    skipHooks: false, // Run all hooks
  },
  {
    files: ["src/temp-file.ts"],
    message: "temp: temporary commit",
    skipHooks: true, // Skip hooks
  },
];

Complex Workflow Integration:

async function complexWorkflow() {
  const status = await getCommitExecutorStatus();

  const featureInstructions = [
    {
      files: status.stagedFiles.filter((f) => f.includes("components")),
      message: "feat(ui): update UI components",
      id: "ui-updates",
    },
    {
      files: status.stagedFiles.filter((f) => f.includes("api")),
      message: "feat(api): update API endpoints",
      id: "api-updates",
    },
  ].filter((instruction) => instruction.files.length > 0);

  const result = await executeBatchCommits(featureInstructions, config);
}

UI Enhancements

Comprehensive UI improvements that enhance user experience through interactive previews, notifications, and comprehensive logging.

Features

  • Enhanced Commit Message Preview: Detailed commit message preview with approval options
  • Interactive Notifications: Success and error notifications with action buttons
  • Output Channel Logging: Comprehensive logging for all operations
  • User Input Validation: Validated commit message editing with error handling
  • Progress Indicators: Step-by-step progress tracking
  • Clipboard Integration: Easy sharing and copying functionality

Enhanced Preview System

Generate Smart Commit Preview:

// Shows detailed preview with:
// - Generated commit message
// - File list with change summary (+/- lines)
// - AI provider and configuration info
// - Interactive options: ✅ Commit, ✏️ Edit, 📋 Copy, ❌ Cancel

const commitDetails = `
Generated commit message:

"${commitMessage}"

Files to commit (${diff.files.length}):
${diff.files.map((file) => `• ${file}`).join("\n")}

Changes: +${diff.additions} -${diff.deletions} lines

AI Provider: ${config.apiProvider}
Conventional Commits: ${config.useConventionalCommits ? "Enabled" : "Disabled"}
`;

Split & Commit Preview:

// Shows comprehensive plan with:
// - Grouping summary
// - Total groups and files
// - Strategy information
// - Interactive options: ✅ Proceed, ✏️ Edit Groups, 📋 Copy Plan, ❌ Cancel

const commitPlanDetails = `
Split commit plan:

${groupSummary}

Total groups: ${fileGroups.length}
Total files: ${fileGroups.reduce((sum, group) => sum + group.files.length, 0)}
Grouping strategy: ${userChoice.label}
Auto-stage: ${config.autoStage ? "Enabled" : "Disabled"}
Skip hooks: ${config.skipHooks ? "Enabled" : "Disabled"}
`;

Comprehensive Logging

All operations are logged to the SmartCommit output channel with:

  • Timestamps for all operations
  • Success/error details
  • File lists and change summaries
  • Configuration information
  • Git diff summaries

Visual Design Principles

  • ✅ Success actions
  • ✏️ Edit actions
  • 📋 Copy actions
  • ❌ Cancel actions
  • ⚡ Progress indicators
  • 🔧 Configuration
  • 📊 Logging/Output

UI Demo Command

Comprehensive demo showcasing all UI features:

await uiDemoCommand();

Available Demos:

  1. 🎯 Commit Preview Demo: Enhanced commit message preview
  2. 📋 Split Commit Preview Demo: Split commit plan visualization
  3. ✅ Success Notification Demo: Success notifications with actions
  4. ❌ Error Notification Demo: Error notifications with retry
  5. ⚡ Progress Demo: Multi-step progress indication
  6. 🔧 Input/Edit Demo: Input validation and editing
  7. 📊 Output Channel Demo: Comprehensive logging
  8. 🌐 Full Workflow Demo: Complete workflow simulation

Commands

  • smart-commit.generateCommit: Generate Smart Commit
  • smart-commit.splitCommit: Split & Commit
  • smart-commit.executeCommits: Execute Batch Commits
  • smart-commit.undoCommits: Undo Commits
  • smart-commit.uiDemo: UI Demo (showcases all features)

Development

Setup

git clone https://github.com/your-username/smart-commit.git
cd smart-commit
npm install

Build

npm run build

Test

npm test
npm run test:coverage

Package

npm run vscode:package

Publish

npm run vscode:publish

Testing

The extension includes comprehensive unit tests using Jest:

  • Config Parser Tests: Tests for .smart-commit-rules parsing and validation
  • Commit Message Generator Tests: Tests for AI-powered commit message generation
  • File Grouper Tests: Tests for diff grouping and splitting logic

Running Tests

# Run all tests
npm test

# Watch mode
npm run test:watch

# Coverage report
npm run test:coverage

# Full test pipeline
./scripts/test.sh

Mock Strategy

  • VSCode API: Comprehensive mocking for UI interactions
  • File System: fs module mocking for file operations
  • Network: node-fetch mocking for API calls
  • Child Process: git command mocking
  • AI Clients: Predictable response mocking

Test Examples

Config Parser Test:

it("should load valid configuration from .smart-commit-rules file", async () => {
  const validConfig = {
    apiProvider: "openai",
    apiKey: "sk-test-key",
    commitStrategy: "smart",
  };

  global.mockFs.readFileSync.mockReturnValue(JSON.stringify(validConfig));

  const result = await loadSmartCommitConfig();

  expect(result).toMatchObject(validConfig);
});

Commit Generator Test:

it("should generate commit message successfully", async () => {
  mockAiClient.generateCommitMessage.mockResolvedValue({
    message: "feat(ui): add variant and disabled props to Button",
    success: true,
  });

  const result = await generateCommitMessage(mockDiff, mockConfig);

  expect(result.success).toBe(true);
  expect(result.message).toBe(
    "feat(ui): add variant and disabled props to Button"
  );
});

API Reference

Core Functions

Configuration

  • loadSmartCommitConfig(): Load and validate configuration
  • validateConfig(config): Validate configuration object
  • getConfigPath(): Get configuration file path

AI Commit Generation

  • generateCommitMessage(diff, config): Generate commit message using AI
  • generateCommitMessageWithFallback(diff, config): Generate with fallback
  • generateMultipleCommitMessages(diff, config, formats): Generate multiple formats

File Grouping

  • groupStagedFiles(gitRoot, config, criteria): Group staged files
  • createGroupingCriteria(config): Create grouping criteria from config
  • getDefaultGroupingCriteria(): Get default grouping criteria

Commit Execution

  • executeBatchCommits(instructions, config, rollback?): Execute batch commits
  • undoCommits(numberOfCommits, resetType?, config): Undo commits
  • CommitExecutor: Main commit executor class

Interfaces

SmartCommitConfig

interface SmartCommitConfig {
  apiProvider: "openai" | "perplexity";
  apiKey?: string;
  commitStrategy: "single" | "split" | "smart";
  useConventionalCommits?: boolean;
  maxDiffSize?: number;
  maxFilesPerCommit?: number;
  autoStage?: boolean;
  skipHooks?: boolean;
  customPrompt?: string;
  rules?: SmartCommitRule[];
}

CommitInstruction

interface CommitInstruction {
  files: string[];
  message: string;
  id?: string;
  skipHooks?: boolean;
}

FileGroup

interface FileGroup {
  files: string[];
  message: string;
  folderPath: string;
  fileType: string;
  lineCount: number;
  priority: number;
}

Error Handling

The extension provides comprehensive error handling:

  1. Configuration Validation: Detailed error messages for invalid configurations
  2. API Errors: Graceful handling of AI API failures with fallback messages
  3. Git Operations: Proper error handling for git command failures
  4. Network Issues: Retry mechanisms and offline support
  5. File System: Robust handling of file access errors

Common Error Scenarios

  • No API Key: Returns error message
  • Invalid API Response: Falls back to rule-based generation
  • Network Issues: Retries with fallback
  • Diff Too Large: Splits into smaller chunks
  • Validation Failure: Returns message with warning

Error Recovery

// Comprehensive error handling
try {
  const result = await executeBatchCommits(instructions, config);

  if (!result.success) {
    // Log errors for debugging
    result.errors.forEach((error) => console.error(error));

    // Attempt recovery if rollback was performed
    if (result.rollbackPerformed) {
      await attemptRecovery(instructions, config);
    }
  }
} catch (error) {
  console.error("Batch commit failed:", error);
  // Implement fallback strategy
}

Performance Optimization

  • Lazy Loading: Components loaded only when needed
  • Efficient Algorithms: Optimized grouping and processing algorithms
  • Caching: Configuration and git status caching
  • Parallel Processing: Concurrent file analysis and AI requests
  • Memory Management: Efficient memory usage for large codebases

Performance Benchmarks

Typical performance on various project sizes:

  • Small projects (1-10 files): <100ms
  • Medium projects (10-50 files): <500ms
  • Large projects (50+ files): <2000ms

Optimization Strategies

  • Parallel file analysis for large staging areas
  • Efficient pattern matching for custom rules
  • Cached file type detection
  • Minimal git command execution

Troubleshooting

Common Issues

1. File Not Found Errors

// Check file existence
const fs = require("fs");
const path = require("path");

for (const file of files) {
  const fullPath = path.resolve(workspacePath, file);
  if (!fs.existsSync(fullPath)) {
    throw new Error(`File not found: ${file}`);
  }
}

2. Git Repository Issues

// Git repository validation
try {
  await execAsync("git rev-parse --git-dir", { cwd: workspacePath });
} catch (error) {
  throw new Error("Not a git repository");
}

3. Permission Issues

// Workspace permission check
try {
  await execAsync("git status", { cwd: workspacePath });
} catch (error) {
  throw new Error("No git permissions in workspace");
}

4. API Key Issues

  • Ensure API key is valid and has sufficient credits
  • Check API provider configuration
  • Verify network connectivity
  • Use fallback mode if AI services are unavailable

5. Configuration Issues

  • Validate JSON syntax in .smart-commit-rules
  • Check file permissions
  • Ensure workspace folder is accessible
  • Verify configuration schema compliance

Best Practices

1. Commit Message Conventions

// Use conventional commits
const instructions = [
  { files: ["src/feature.ts"], message: "feat: add new feature" },
  { files: ["src/bug.ts"], message: "fix: resolve critical bug" },
  { files: ["docs/README.md"], message: "docs: update documentation" },
  { files: ["src/test.ts"], message: "test: add unit tests" },
];

2. File Grouping Strategy

// Group related files
const logicalGroups = [
  {
    files: ["src/components/Button.tsx", "src/components/Button.test.tsx"],
    message: "feat(ui): add button component with tests",
  },
  {
    files: ["src/styles/button.scss", "src/styles/theme.scss"],
    message: "style: add button styling and theme updates",
  },
];

3. Error Handling Strategy

// Comprehensive error handling
try {
  const result = await executeBatchCommits(instructions, config);

  if (!result.success) {
    // Log errors for debugging
    result.errors.forEach((error) => console.error(error));

    // Attempt recovery if rollback was performed
    if (result.rollbackPerformed) {
      await attemptRecovery(instructions, config);
    }
  }
} catch (error) {
  console.error("Batch commit failed:", error);
  // Implement fallback strategy
}

4. Configuration Management

  • Keep diffs manageable: Large diffs reduce AI accuracy
  • Use meaningful file names: Helps AI understand context
  • Configure custom rules: For project-specific patterns
  • Test with fallback: Always have a fallback strategy
  • Validate results: Check generated messages before committing

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Run tests and ensure they pass
  6. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

  • GitHub Issues
  • Documentation

Changelog

0.1.0

  • Initial release
  • AI-powered commit message generation
  • Split & commit functionality
  • Custom rules support
  • Comprehensive test coverage
  • Enhanced UI with interactive previews
  • Batch commit execution with rollback
  • Undo functionality
  • Output channel logging

Future Enhancements

Planned Features

  • [ ] Interactive Mode: Users can approve each commit individually
  • [ ] Commit Templates: Predefined commit message templates
  • [ ] Branch Management: Automatic branch creation and switching
  • [ ] Conflict Resolution: Automatic merge conflict resolution
  • [ ] Commit Squashing: Automatic squashing of related commits
  • [ ] CI/CD Integration: Pipeline trigger optimization

Performance Improvements

  • [ ] Parallel Processing: Parallel processing of independent commits
  • [ ] Caching: Caching mechanism for git operations
  • [ ] Batch Operations: Batching of git commands
  • [ ] Memory Optimization: Memory optimization for large files
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft