mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-10-10 03:28:03 +00:00
517 lines
14 KiB
Markdown
517 lines
14 KiB
Markdown
# JetBrains Plugin Support - Technical Design Document
|
|
|
|
## Context
|
|
|
|
This document addresses [Issue #9982](https://github.com/RooCodeInc/Roo-Code/issues/9982), which requests JetBrains IDE support for Roo Code.
|
|
|
|
### User Requirements
|
|
|
|
Based on community feedback, users are requesting:
|
|
|
|
- Full Roo Code functionality in JetBrains IDEs
|
|
- Primary focus on IntelliJ IDEA and WebStorm
|
|
- Custom model integration capabilities (highest priority)
|
|
- Leverage JetBrains' superior Java and Git tooling
|
|
- Native JetBrains UI experience
|
|
|
|
## Current Architecture Analysis
|
|
|
|
### VS Code Extension Structure
|
|
|
|
Roo Code is currently built as a VS Code extension with the following key components:
|
|
|
|
1. **Core Extension** (`src/extension.ts`)
|
|
|
|
- VS Code API integration
|
|
- Extension lifecycle management
|
|
- Command registration and handling
|
|
|
|
2. **Webview UI** (`webview-ui/`)
|
|
|
|
- React-based interface
|
|
- VSCode webview toolkit integration
|
|
- Communication via message passing
|
|
|
|
3. **Core Services**
|
|
|
|
- Provider management (Anthropic, OpenAI, OpenRouter, etc.)
|
|
- Model configuration and selection
|
|
- Terminal integration
|
|
- File system operations
|
|
- Code indexing
|
|
- MCP (Model Context Protocol) server support
|
|
|
|
4. **Cloud Integration** (`@roo-code/cloud`)
|
|
|
|
- Authentication and user management
|
|
- Remote control capabilities
|
|
- Profile synchronization
|
|
|
|
5. **Type Definitions** (`@roo-code/types`)
|
|
- Shared TypeScript interfaces
|
|
- Provider settings schemas
|
|
- API contracts
|
|
|
|
### VS Code-Specific Dependencies
|
|
|
|
The following components are tightly coupled to VS Code APIs:
|
|
|
|
- **Editor Integration**: TextEditor, TextDocument, Range, Selection APIs
|
|
- **Webview System**: VS Code's webview API for UI rendering
|
|
- **Terminal Integration**: Terminal creation and command execution
|
|
- **File System**: VS Code's workspace and file system APIs
|
|
- **Configuration**: VS Code's settings and state management
|
|
- **Commands**: VS Code's command palette integration
|
|
- **Diff Views**: Custom diff view provider
|
|
- **Code Actions**: Quick fix and refactoring suggestions
|
|
|
|
## Approaches to JetBrains Support
|
|
|
|
### Option 1: Native JetBrains Plugin (Recommended)
|
|
|
|
Build a separate native plugin using JetBrains Platform SDK.
|
|
|
|
#### Architecture
|
|
|
|
```
|
|
roo-code-jetbrains/
|
|
├── src/main/kotlin/ # Plugin code in Kotlin/Java
|
|
│ ├── actions/ # IntelliJ Actions (commands)
|
|
│ ├── services/ # Background services
|
|
│ ├── ui/ # Tool windows and dialogs
|
|
│ ├── settings/ # Settings UI
|
|
│ └── integration/ # IDE integration points
|
|
├── src/main/resources/ # Resources and plugin.xml
|
|
└── build.gradle.kts # Gradle build configuration
|
|
```
|
|
|
|
#### Key Components to Implement
|
|
|
|
1. **Tool Window**: Replace VS Code sidebar
|
|
|
|
- Use IntelliJ's ToolWindow API
|
|
- Implement UI with Swing or Kotlin UI DSL
|
|
- Or embed browser component for web-based UI
|
|
|
|
2. **Editor Integration**
|
|
|
|
- Document modification API
|
|
- PSI (Program Structure Interface) for code analysis
|
|
- Editor actions and intentions
|
|
|
|
3. **Terminal Integration**
|
|
|
|
- TerminalRunner API
|
|
- Command execution
|
|
|
|
4. **File System Operations**
|
|
|
|
- VirtualFileSystem API
|
|
- Document manager
|
|
|
|
5. **Settings Management**
|
|
|
|
- PersistentStateComponent
|
|
- Configurable interface for settings UI
|
|
|
|
6. **Provider Management**
|
|
- Port provider configuration system
|
|
- API key management
|
|
- Model selection interface
|
|
|
|
#### Shared Components
|
|
|
|
Leverage existing code where possible:
|
|
|
|
- **API Integration**: HTTP clients for LLM providers (can be shared)
|
|
- **Type Definitions**: TypeScript types → Kotlin data classes
|
|
- **Business Logic**: Core algorithms and workflows
|
|
- **Model Configurations**: JSON schemas and definitions
|
|
|
|
#### UI Strategy
|
|
|
|
**Option A: Native Kotlin UI**
|
|
|
|
- Pros: True native experience, better IDE integration
|
|
- Cons: Requires complete UI rewrite, more maintenance
|
|
|
|
**Option B: Hybrid (Embedded Browser)**
|
|
|
|
- Pros: Can reuse React UI, faster development
|
|
- Cons: Less native feel, performance overhead
|
|
- Use JCEF (Java Chromium Embedded Framework)
|
|
|
|
### Option 2: Language Server Protocol (LSP) Bridge
|
|
|
|
Create a language server that both VS Code and JetBrains can connect to.
|
|
|
|
#### Architecture
|
|
|
|
```
|
|
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
|
|
│ VS Code │◄───────►│ Roo Code LSP │◄───────►│ JetBrains │
|
|
│ Extension │ LSP │ Server │ LSP │ Plugin │
|
|
└─────────────┘ └──────────────────┘ └─────────────┘
|
|
│
|
|
▼
|
|
┌──────────────┐
|
|
│ LLM Providers│
|
|
└──────────────┘
|
|
```
|
|
|
|
#### Pros
|
|
|
|
- Shared business logic
|
|
- Single codebase for core functionality
|
|
- Standard protocol
|
|
|
|
#### Cons
|
|
|
|
- LSP not designed for AI coding assistants
|
|
- Limited UI capabilities
|
|
- Custom protocol extensions needed
|
|
- Still requires significant client-side code
|
|
|
|
### Option 3: Minimal Adapter Plugin
|
|
|
|
Create a lightweight JetBrains plugin that communicates with the VS Code extension.
|
|
|
|
#### Architecture
|
|
|
|
```
|
|
┌─────────────┐ ┌──────────────────┐
|
|
│ JetBrains │ │ VS Code │
|
|
│ Plugin │◄───────►│ Extension │
|
|
│ (Thin UI) │ HTTP/ │ (Core Logic) │
|
|
└─────────────┘ WS └──────────────────┘
|
|
```
|
|
|
|
#### Pros
|
|
|
|
- Minimal JetBrains-specific code
|
|
- Leverage existing VS Code extension
|
|
|
|
#### Cons
|
|
|
|
- Requires VS Code running in background
|
|
- Poor user experience
|
|
- Dependency complexity
|
|
- Not truly native
|
|
|
|
## Recommended Approach
|
|
|
|
**Build a native JetBrains plugin** (Option 1) with a hybrid UI strategy.
|
|
|
|
### Phase 1: Core Functionality (MVP)
|
|
|
|
1. Tool window with chat interface
|
|
2. Provider configuration (custom models priority)
|
|
3. Basic file editing capabilities
|
|
4. Terminal command execution
|
|
5. Settings UI
|
|
|
|
### Phase 2: Advanced Features
|
|
|
|
1. Code indexing and search
|
|
2. Multi-file operations
|
|
3. Diff views
|
|
4. Cloud integration
|
|
5. MCP server support
|
|
|
|
### Phase 3: Polish and Optimization
|
|
|
|
1. Performance optimization
|
|
2. JetBrains-specific features (PSI integration)
|
|
3. Multiple IDE support (IntelliJ, WebStorm, PyCharm)
|
|
4. Comprehensive testing
|
|
|
|
## Technical Challenges
|
|
|
|
### 1. UI Framework
|
|
|
|
- **Challenge**: React webview UI won't work in JetBrains
|
|
- **Solution**:
|
|
- Option A: Rewrite in Kotlin with Compose/Swing
|
|
- Option B: Use JCEF to embed web UI
|
|
- **Recommendation**: Start with JCEF for faster MVP, migrate to native later
|
|
|
|
### 2. Editor Integration
|
|
|
|
- **Challenge**: Different APIs for document manipulation
|
|
- **Solution**: Create abstraction layer over editor operations
|
|
- Map VS Code concepts to IntelliJ equivalents:
|
|
- TextDocument → Document
|
|
- TextEditor → Editor
|
|
- Range → TextRange
|
|
- Selection → Caret
|
|
|
|
### 3. State Management
|
|
|
|
- **Challenge**: VS Code's ExtensionContext vs IntelliJ's services
|
|
- **Solution**: Use IntelliJ's service architecture and state components
|
|
|
|
### 4. File System Operations
|
|
|
|
- **Challenge**: Different file system APIs
|
|
- **Solution**: Abstract file operations behind common interface
|
|
|
|
### 5. Terminal Integration
|
|
|
|
- **Challenge**: Different terminal APIs
|
|
- **Solution**: Adapter pattern for terminal operations
|
|
|
|
### 6. Configuration Sync
|
|
|
|
- **Challenge**: Users may want settings across both IDEs
|
|
- **Solution**: Leverage Roo Code Cloud for cross-IDE profile sync
|
|
|
|
## Development Roadmap
|
|
|
|
### Prerequisites
|
|
|
|
- JetBrains Platform SDK knowledge
|
|
- Kotlin/Java development
|
|
- Gradle build system
|
|
- IntelliJ plugin development experience
|
|
|
|
### Estimated Timeline
|
|
|
|
**Phase 1 (MVP): 3-4 months**
|
|
|
|
- Plugin structure and basic UI: 4 weeks
|
|
- Provider integration and model config: 3 weeks
|
|
- File editing capabilities: 3 weeks
|
|
- Terminal integration: 2 weeks
|
|
- Testing and bug fixes: 2 weeks
|
|
|
|
**Phase 2 (Feature Parity): 3-4 months**
|
|
|
|
- Advanced file operations: 4 weeks
|
|
- Code indexing: 4 weeks
|
|
- Cloud integration: 3 weeks
|
|
- MCP support: 3 weeks
|
|
- Testing and refinement: 2 weeks
|
|
|
|
**Phase 3 (Polish): 2-3 months**
|
|
|
|
- Performance optimization: 4 weeks
|
|
- Multi-IDE support: 4 weeks
|
|
- Documentation: 2 weeks
|
|
- Beta testing: 2 weeks
|
|
|
|
**Total: 8-11 months for full feature parity**
|
|
|
|
## Resource Requirements
|
|
|
|
### Team Composition
|
|
|
|
- 1-2 JetBrains plugin developers (Kotlin/Java)
|
|
- 1 UI developer (if building native UI)
|
|
- 1 backend developer (shared logic)
|
|
- 1 QA engineer (testing across IDEs)
|
|
- Product manager (feature prioritization)
|
|
|
|
### Infrastructure
|
|
|
|
- JetBrains marketplace account
|
|
- CI/CD for plugin builds
|
|
- Testing infrastructure (multiple IDE versions)
|
|
- Documentation site updates
|
|
|
|
## Risks and Mitigation
|
|
|
|
### Risk 1: Maintenance Burden
|
|
|
|
- **Risk**: Maintaining two separate codebases
|
|
- **Mitigation**:
|
|
- Maximize code sharing through packages
|
|
- Shared API client libraries
|
|
- Common business logic in TypeScript (can be ported)
|
|
- Automated testing
|
|
|
|
### Risk 2: Feature Divergence
|
|
|
|
- **Risk**: Features available in one IDE but not the other
|
|
- **Mitigation**:
|
|
- Clear feature roadmap
|
|
- Parity tracking
|
|
- Staged rollout across platforms
|
|
|
|
### Risk 3: User Confusion
|
|
|
|
- **Risk**: Different experiences across IDEs
|
|
- **Mitigation**:
|
|
- Consistent UI/UX where possible
|
|
- Clear documentation
|
|
- IDE-specific guides
|
|
|
|
### Risk 4: Development Complexity
|
|
|
|
- **Risk**: Learning curve for JetBrains platform
|
|
- **Mitigation**:
|
|
- Hire experienced JetBrains plugin developers
|
|
- Start with simpler features
|
|
- Leverage JetBrains documentation and community
|
|
|
|
## Code Sharing Strategy
|
|
|
|
### Shared Components
|
|
|
|
1. **API Clients**
|
|
|
|
- HTTP clients for LLM providers
|
|
- Authentication logic
|
|
- Model definitions
|
|
|
|
2. **Type Definitions**
|
|
|
|
- Convert TypeScript types to Kotlin data classes
|
|
- Shared JSON schemas
|
|
|
|
3. **Business Logic**
|
|
|
|
- Prompt engineering
|
|
- Response parsing
|
|
- Error handling
|
|
|
|
4. **Configuration**
|
|
- Provider settings schemas
|
|
- Model configurations
|
|
|
|
### Implementation Approach
|
|
|
|
```
|
|
roo-code/
|
|
├── packages/
|
|
│ ├── core/ # Shared business logic (TypeScript)
|
|
│ ├── types/ # Shared type definitions
|
|
│ └── api-clients/ # Provider API clients
|
|
├── vscode-extension/ # Current VS Code extension
|
|
└── jetbrains-plugin/ # New JetBrains plugin
|
|
├── src/main/kotlin/ # Kotlin implementation
|
|
└── src/main/resources/
|
|
```
|
|
|
|
## Alternative: Web-Based Solution
|
|
|
|
### Roo Code Desktop App
|
|
|
|
Instead of IDE plugins, create a standalone desktop application.
|
|
|
|
#### Pros
|
|
|
|
- Single codebase
|
|
- Works with any IDE
|
|
- Easier maintenance
|
|
|
|
#### Cons
|
|
|
|
- Not integrated into IDE
|
|
- Separate window context
|
|
- Less seamless workflow
|
|
|
|
This could be a future option but doesn't address the core request for native IDE integration.
|
|
|
|
## Recommendations
|
|
|
|
1. **Validate Demand**: Survey users to gauge interest and prioritize features
|
|
|
|
- Create GitHub discussion
|
|
- Discord/Reddit polls
|
|
- Understand willingness to adopt
|
|
|
|
2. **Start with Design Prototype**: Before full implementation
|
|
|
|
- UI mockups for JetBrains plugin
|
|
- User flow diagrams
|
|
- Technical proof of concept
|
|
|
|
3. **Phased Approach**: Don't aim for feature parity immediately
|
|
|
|
- Start with core features users care about most (custom models)
|
|
- Iterate based on feedback
|
|
- Add advanced features incrementally
|
|
|
|
4. **Consider Strategic Partnership**
|
|
|
|
- Engage with JetBrains
|
|
- Potentially official partnership
|
|
- Marketplace promotion
|
|
|
|
5. **Open Source Collaboration**
|
|
- Community contributions
|
|
- Plugin architecture allows experimentation
|
|
- Early adopter testing
|
|
|
|
## Success Criteria
|
|
|
|
### MVP Success (Phase 1)
|
|
|
|
- [ ] Plugin installable from JetBrains Marketplace
|
|
- [ ] Custom model configuration working
|
|
- [ ] Basic chat interface functional
|
|
- [ ] File editing capabilities
|
|
- [ ] 100+ active users within first month
|
|
|
|
### Feature Parity Success (Phase 2)
|
|
|
|
- [ ] 80%+ feature parity with VS Code extension
|
|
- [ ] Cloud sync working across IDEs
|
|
- [ ] 1000+ active users
|
|
- [ ] <5% crash rate
|
|
|
|
### Long-term Success (Phase 3)
|
|
|
|
- [ ] All major features available
|
|
- [ ] Support for IntelliJ, WebStorm, PyCharm
|
|
- [ ] 10,000+ active users
|
|
- [ ] 4+ star rating on JetBrains Marketplace
|
|
- [ ] Sustainable maintenance model
|
|
|
|
## Next Steps
|
|
|
|
1. **Community Feedback** (Week 1-2)
|
|
|
|
- Share this document with issue reporter
|
|
- Gather additional requirements
|
|
- Validate assumptions
|
|
|
|
2. **Technical Spike** (Week 3-4)
|
|
|
|
- Create minimal JetBrains plugin prototype
|
|
- Test JCEF embedding
|
|
- Validate architecture decisions
|
|
|
|
3. **Go/No-Go Decision** (Week 5)
|
|
|
|
- Review prototype results
|
|
- Assess resource availability
|
|
- Decide on timeline
|
|
|
|
4. **Kickoff** (Week 6+)
|
|
- Assemble team
|
|
- Set up project structure
|
|
- Begin Phase 1 development
|
|
|
|
## Conclusion
|
|
|
|
Building JetBrains plugin support for Roo Code is technically feasible but requires significant investment. The recommended approach is a native plugin with a hybrid UI strategy, developed in phases over 8-11 months.
|
|
|
|
Key considerations:
|
|
|
|
- **User Demand**: Validate that sufficient users want this
|
|
- **Resource Commitment**: Requires dedicated team
|
|
- **Maintenance**: Ongoing cost of supporting multiple platforms
|
|
- **Strategic Value**: Expands market, especially for Java developers
|
|
|
|
The custom model integration feature, which is the highest priority for the requesting user, can be delivered in Phase 1 (MVP), providing value quickly.
|
|
|
|
**Recommendation**: Proceed with community validation and technical spike before committing to full development.
|
|
|
|
---
|
|
|
|
**Document Status**: Draft for Community Review
|
|
**Related Issue**: [#9982](https://github.com/RooCodeInc/Roo-Code/issues/9982)
|
|
**Author**: Roomote
|
|
**Date**: 2025-12-12
|
|
**Version**: 1.0
|