Development
This guide is for developers who want to contribute to Huckleberry or modify it for their own purposes.
Repository Structure
Huckleberry is built as an Nx monorepo with the following main components:
vscode-huckleberry/
├─ apps/
│ ├─ huckleberry-extension/ # VS Code extension (TypeScript)
│ └─ huckleberry-docs/ # Documentation site (Docusaurus)
├─ assets/
│ └─ images/ # Project logos and assets
└─ docs/
├─ implementation-guide.md # Technical implementation details
├─ task-master.md # Task Manager documentation
├─ tasks.md # Project task tracking
├─ workspace-setup.md # Setup instructions
└─ debug-setup.md # Debugging configuration
Prerequisites
To develop Huckleberry, you'll need:
- Node.js: Version 18 or later
- pnpm: For package management
- Visual Studio Code: For testing and debugging
- Git: For version control
Getting Started
Clone the Repository
# Clone the repository
git clone https://github.com/CambridgeMonorail/vscode-huckleberry.git
cd vscode-huckleberry
Install Dependencies
# Install all dependencies
pnpm install
Build the Extension
# Build the extension
pnpm exec nx build huckleberry-extension
Run the Extension
During development, you can run the extension in a new VS Code window:
- Open the repository in VS Code
- Press F5 to start debugging
- A new VS Code window will open with the extension loaded
Alternatively, you can watch for changes and automatically rebuild:
pnpm exec nx build huckleberry-extension --watch
Package the Extension
To create a .vsix
file that can be installed:
pnpm exec nx package huckleberry-extension
Project Structure
Extension Architecture
The VS Code extension follows a modular architecture:
- src/extension.ts: Main entry point
- src/services/: Core services that handle the business logic
- src/handlers/: Command and event handlers
- src/tools/: Agent mode features implementation (VS Code Language Model Tools API)
- src/utils/: Utility functions and helpers
- src/config/: Configuration and settings
Key Extension Files
- extension.ts: Extension activation and command registration
- languageModelToolsProvider.ts: Registration of LM tools
- taskHandlers.ts: Implementation of task-related commands
- toolManager.ts: Service for managing tool operations
Coding Standards
Huckleberry follows strict TypeScript coding standards:
- Use TypeScript strict mode for all code
- Follow the principle of explicit typing whenever possible
- Use interfaces for object shapes and types for unions and primitives
- Prefer functional programming patterns where appropriate
- Use async/await over Promise chains
- Document all public functions, classes, interfaces with JSDoc comments
Example:
/**
* Processes task data and returns a formatted result
* @param taskData The raw task data to process
* @returns The processed task format
*/
function processTask<T extends Task>(taskData: T): ProcessedTask {
// Implementation
}
Testing
Running Tests
# Run all tests
pnpm exec nx test huckleberry-extension
# Run tests with coverage
pnpm exec nx test huckleberry-extension --coverage
Test Structure
Tests are organized to mirror the source code structure:
- src/tests/: Main test directory
- Unit tests are placed next to the files they test
Git Workflow
Branches
- main: Production-ready code
- develop: Integration branch for new features
- feature/xxx: Feature branches
Commit Messages
All commit messages follow the Conventional Commits specification:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Commit Types
feat
: A new feature (minor version bump)fix
: A bug fix (patch version bump)docs
: Documentation only changesstyle
: Changes that do not affect the meaning of the coderefactor
: A code change that neither fixes a bug nor adds a featureperf
: A code change that improves performancetest
: Adding missing tests or correcting existing testsbuild
: Changes that affect the build system or external dependenciesci
: Changes to CI configuration files and scriptschore
: Other changes that don't modify src or test files
Documentation
Building the Documentation Site
# Build the docs site
pnpm exec nx build huckleberry-docs
# Serve the docs site locally
pnpm exec nx serve huckleberry-docs
Documentation Structure
- Use Markdown for all documentation
- Keep code examples up-to-date
- Document complex logic and algorithms
- Add comments for non-obvious code
Contributing
We welcome contributions to Huckleberry! To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Run tests to ensure they pass
- Commit your changes following the commit message guidelines
- Push to your branch
- Open a Pull Request