mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
feat: Add JetBrains IDE integration via RunVSAgent
- Add RunVSAgent as a Git submodule for bridging JetBrains IDEs with VSCode extensions - Create build scripts that use the main Roo Code source directly (no duplicate copy) - Add comprehensive documentation for building and installing the plugin - Add .gitignore to exclude build artifacts and temporary files - Successfully tested plugin running in IntelliJ IDEA with Roo Code extension The integration allows Roo Code to run in any JetBrains IDE (IntelliJ, WebStorm, PyCharm, etc.) Build scripts now reference the main project source to avoid duplication.
This commit is contained in:
parent
9d33c109c9
commit
63fd3ef628
6 changed files with 439 additions and 0 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "jetbrains/RunVSAgent"]
|
||||
path = jetbrains/RunVSAgent
|
||||
url = https://github.com/wecode-ai/RunVSAgent.git
|
||||
23
jetbrains/.gitignore
vendored
Normal file
23
jetbrains/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Build output
|
||||
dist/
|
||||
RunVSAgent-RooCode.zip
|
||||
|
||||
# RunVSAgent build artifacts (in submodule)
|
||||
RunVSAgent/jetbrains_plugin/build/
|
||||
RunVSAgent/jetbrains_plugin/.gradle/
|
||||
RunVSAgent/extension_host/dist/
|
||||
RunVSAgent/extension_host/node_modules/
|
||||
RunVSAgent/deps/roo-code/bin/
|
||||
RunVSAgent/deps/roo-code/node_modules/
|
||||
RunVSAgent/jetbrains_plugin/prodDep.txt
|
||||
RunVSAgent/jetbrains_plugin/src/main/resources/com/sina/weibo/agent/plugin/config/plugin.properties
|
||||
|
||||
# IDE files
|
||||
.idea/
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
# Temp files
|
||||
RunVSAgent/tmp/
|
||||
RunVSAgent/build/
|
||||
129
jetbrains/README.md
Normal file
129
jetbrains/README.md
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
# Roo Code for JetBrains IDEs
|
||||
|
||||
This directory contains the integration of Roo Code with [RunVSAgent](https://github.com/wecode-ai/RunVSAgent), enabling Roo Code to run seamlessly in JetBrains IDEs (IntelliJ IDEA, WebStorm, PyCharm, etc.).
|
||||
|
||||
## 🎯 Overview
|
||||
|
||||
RunVSAgent acts as a bridge between VSCode extensions and JetBrains IDEs, allowing you to use Roo Code's AI-powered development features in your favorite JetBrains IDE.
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 18.0+
|
||||
- JDK 17+
|
||||
- JetBrains IDE 2023.1+
|
||||
- Git
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
# From the project root
|
||||
cd jetbrains
|
||||
./build.sh
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
1. Update the RunVSAgent submodule
|
||||
2. Build the Roo Code extension
|
||||
3. Package everything for JetBrains
|
||||
4. Create `dist/RunVSAgent-RooCode.zip`
|
||||
|
||||
### Installation
|
||||
|
||||
1. Open your JetBrains IDE
|
||||
2. Go to **Settings/Preferences** → **Plugins**
|
||||
3. Click the gear icon ⚙️ → **Install Plugin from Disk...**
|
||||
4. Select `jetbrains/dist/RunVSAgent-RooCode.zip`
|
||||
5. Restart your IDE
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
jetbrains/
|
||||
├── RunVSAgent/ # RunVSAgent submodule
|
||||
│ ├── extension_host/ # Node.js runtime for VSCode APIs
|
||||
│ ├── jetbrains_plugin/ # Kotlin-based JetBrains plugin
|
||||
│ └── deps/
|
||||
│ └── roo-code/ # Roo Code extension files
|
||||
├── build.sh # Main build script
|
||||
├── build-dev.sh # Development build (faster)
|
||||
├── README.md # This file
|
||||
└── dist/ # Build output directory
|
||||
```
|
||||
|
||||
## 🔧 Development
|
||||
|
||||
For development, use the faster dev build:
|
||||
|
||||
```bash
|
||||
./build-dev.sh
|
||||
```
|
||||
|
||||
This skips some optimization steps for quicker iteration.
|
||||
|
||||
### Debugging
|
||||
|
||||
1. **Extension Host Logs**: Check the IDE logs for Node.js runtime issues
|
||||
2. **Plugin Logs**: Look in `Help → Show Log in Finder/Explorer`
|
||||
3. **Enable Debug Mode**: Set `VSCODE_DEBUG=true` in environment
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[JetBrains IDE] --> B[RunVSAgent Plugin]
|
||||
B --> C[RPC Socket]
|
||||
C --> D[Node.js Extension Host]
|
||||
D --> E[VSCode API Layer]
|
||||
E --> F[Roo Code Extension]
|
||||
```
|
||||
|
||||
## 🤝 How It Works
|
||||
|
||||
1. **RunVSAgent Plugin** runs in the JetBrains IDE (Kotlin)
|
||||
2. **Extension Host** provides VSCode-compatible APIs (Node.js)
|
||||
3. **RPC Communication** bridges the two environments
|
||||
4. **Roo Code** runs unmodified using VSCode APIs
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
After installation, configure Roo Code:
|
||||
|
||||
1. Open RunVSAgent panel in your IDE
|
||||
2. Select "Roo Code" from available agents
|
||||
3. Configure API keys and settings
|
||||
4. Start using AI-powered development features
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Plugin doesn't load
|
||||
|
||||
- Ensure JetBrains IDE version ≥ 2023.1
|
||||
- Check if JCEF is enabled (required for WebView)
|
||||
- For Android Studio, [enable JCEF manually](https://github.com/wecode-ai/RunVSAgent/blob/main/docs/KNOWN_ISSUES.md#11-runtime-environment-does-not-support-jcef)
|
||||
|
||||
### Node.js not found
|
||||
|
||||
- Verify Node.js is in PATH: `node --version`
|
||||
- Restart IDE after installing Node.js
|
||||
|
||||
### Extension not activating
|
||||
|
||||
- Check extension host logs
|
||||
- Verify `deps/roo-code/` contains extension files
|
||||
- Rebuild with `./build.sh`
|
||||
|
||||
## 📚 Resources
|
||||
|
||||
- [RunVSAgent Documentation](https://github.com/wecode-ai/RunVSAgent)
|
||||
- [Roo Code Documentation](https://github.com/RooCodeInc/Roo-Code)
|
||||
- [JetBrains Plugin Development](https://plugins.jetbrains.com/docs/intellij/welcome.html)
|
||||
|
||||
## 📄 License
|
||||
|
||||
This integration follows the licenses of both projects:
|
||||
|
||||
- Roo Code: [Check main repository](https://github.com/RooCodeInc/Roo-Code)
|
||||
- RunVSAgent: Apache License 2.0
|
||||
1
jetbrains/RunVSAgent
Submodule
1
jetbrains/RunVSAgent
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 2d9e374b01224c34062c376639c80ad8402dd5c5
|
||||
128
jetbrains/build-dev.sh
Executable file
128
jetbrains/build-dev.sh
Executable file
|
|
@ -0,0 +1,128 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Building Roo Code for JetBrains IDEs (Development Mode)"
|
||||
echo "========================================================="
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Get the script directory
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )" # Main Roo Code project root
|
||||
RUNVSAGENT_DIR="$SCRIPT_DIR/RunVSAgent"
|
||||
|
||||
echo -e "${BLUE}⚡ Development mode: Skipping full rebuild for faster iteration${NC}"
|
||||
echo ""
|
||||
|
||||
# Step 1: Quick build of Roo Code extension
|
||||
echo -e "${YELLOW}📦 Step 1: Quick building Roo Code extension...${NC}"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
# Build the extension (dev mode - no minification)
|
||||
echo "Building Roo Code bundle (dev mode)..."
|
||||
NODE_ENV=development pnpm run bundle
|
||||
|
||||
# Step 2: Update Roo Code in RunVSAgent
|
||||
echo -e "${YELLOW}📦 Step 2: Updating Roo Code in RunVSAgent...${NC}"
|
||||
|
||||
# Create the roo-code directory in deps
|
||||
ROO_CODE_DIR="$RUNVSAGENT_DIR/deps/roo-code"
|
||||
mkdir -p "$ROO_CODE_DIR"
|
||||
|
||||
# Copy the built extension
|
||||
echo "Copying extension files..."
|
||||
cp "$PROJECT_ROOT/src/dist/extension.js" "$ROO_CODE_DIR/extension.cjs"
|
||||
|
||||
# Copy assets if they exist
|
||||
if [ -d "$PROJECT_ROOT/src/assets" ]; then
|
||||
cp -r "$PROJECT_ROOT/src/assets" "$ROO_CODE_DIR/"
|
||||
fi
|
||||
|
||||
# Update extension.package.json
|
||||
echo "Updating extension.package.json..."
|
||||
cat > "$ROO_CODE_DIR/extension.package.json" << 'EOF'
|
||||
{
|
||||
"name": "roo-code",
|
||||
"displayName": "Roo Code (Dev)",
|
||||
"description": "A whole dev team of AI agents in your editor - Development Build",
|
||||
"publisher": "RooVeterinaryInc",
|
||||
"version": "3.28.0-dev",
|
||||
"engines": {
|
||||
"vscode": "^1.84.0"
|
||||
},
|
||||
"activationEvents": [
|
||||
"onStartupFinished",
|
||||
"*"
|
||||
],
|
||||
"main": "./extension.cjs",
|
||||
"contributes": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "roo-code.newTask",
|
||||
"title": "Roo Code: New Task"
|
||||
},
|
||||
{
|
||||
"command": "roo-code.openSettings",
|
||||
"title": "Roo Code: Open Settings"
|
||||
}
|
||||
]
|
||||
},
|
||||
"extensionDependencies": []
|
||||
}
|
||||
EOF
|
||||
|
||||
# Step 3: Quick build of extension host (if needed)
|
||||
echo -e "${YELLOW}📦 Step 3: Checking extension host...${NC}"
|
||||
cd "$RUNVSAGENT_DIR/extension_host"
|
||||
|
||||
if [ ! -d "dist" ]; then
|
||||
echo "Building extension host for first time..."
|
||||
npm install
|
||||
npm run build
|
||||
else
|
||||
echo "Extension host already built, skipping..."
|
||||
fi
|
||||
|
||||
# Step 4: Quick build of JetBrains plugin
|
||||
echo -e "${YELLOW}📦 Step 4: Building JetBrains plugin (dev mode)...${NC}"
|
||||
cd "$RUNVSAGENT_DIR/jetbrains_plugin"
|
||||
|
||||
# Build with Gradle (skip tests for speed)
|
||||
echo "Building JetBrains plugin..."
|
||||
./gradlew buildPlugin -x test
|
||||
|
||||
# Step 5: Package
|
||||
echo -e "${YELLOW}📦 Step 5: Creating development package...${NC}"
|
||||
|
||||
# Create output directory
|
||||
OUTPUT_DIR="$SCRIPT_DIR/dist"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# Copy the built plugin
|
||||
PLUGIN_FILE=$(find "$RUNVSAGENT_DIR/jetbrains_plugin/build/distributions" -name "*.zip" | head -1)
|
||||
if [ -f "$PLUGIN_FILE" ]; then
|
||||
# Add timestamp to dev builds
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
cp "$PLUGIN_FILE" "$OUTPUT_DIR/RunVSAgent-RooCode-dev-${TIMESTAMP}.zip"
|
||||
# Also keep a latest dev version
|
||||
cp "$PLUGIN_FILE" "$OUTPUT_DIR/RunVSAgent-RooCode-dev-latest.zip"
|
||||
|
||||
echo -e "${GREEN}✅ Development build successful!${NC}"
|
||||
echo -e "${GREEN}📦 Plugin package created at:${NC}"
|
||||
echo -e " - $OUTPUT_DIR/RunVSAgent-RooCode-dev-latest.zip"
|
||||
echo -e " - $OUTPUT_DIR/RunVSAgent-RooCode-dev-${TIMESTAMP}.zip"
|
||||
echo ""
|
||||
echo -e "${BLUE}💡 Tip: Use 'dev-latest.zip' for quick testing${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Error: Could not find built plugin file${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}🎉 Development build complete!${NC}"
|
||||
155
jetbrains/build.sh
Executable file
155
jetbrains/build.sh
Executable file
|
|
@ -0,0 +1,155 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Building Roo Code for JetBrains IDEs with RunVSAgent"
|
||||
echo "========================================================="
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Get the script directory
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )" # Main Roo Code project root
|
||||
RUNVSAGENT_DIR="$SCRIPT_DIR/RunVSAgent"
|
||||
|
||||
# Step 1: Update and setup RunVSAgent submodule
|
||||
echo -e "${YELLOW}📦 Step 1: Setting up RunVSAgent...${NC}"
|
||||
cd "$SCRIPT_DIR"
|
||||
git submodule update --init --recursive
|
||||
|
||||
# Run RunVSAgent setup to prepare VSCode dependencies
|
||||
echo "Running RunVSAgent setup..."
|
||||
cd "$RUNVSAGENT_DIR"
|
||||
if [ -f "scripts/setup.sh" ]; then
|
||||
./scripts/setup.sh --skip-deps
|
||||
else
|
||||
echo -e "${RED}Warning: RunVSAgent setup script not found${NC}"
|
||||
fi
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Step 2: Build Roo Code extension
|
||||
echo -e "${YELLOW}📦 Step 2: Building Roo Code extension...${NC}"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
# Install dependencies if needed
|
||||
if [ ! -d "node_modules" ]; then
|
||||
echo "Installing Roo Code dependencies..."
|
||||
pnpm install
|
||||
fi
|
||||
|
||||
# Build the extension
|
||||
echo "Building Roo Code bundle..."
|
||||
pnpm run bundle
|
||||
|
||||
# Step 3: Prepare Roo Code for RunVSAgent
|
||||
echo -e "${YELLOW}📦 Step 3: Preparing Roo Code for RunVSAgent...${NC}"
|
||||
|
||||
# Create the roo-code directory in deps
|
||||
ROO_CODE_DIR="$RUNVSAGENT_DIR/deps/roo-code"
|
||||
mkdir -p "$ROO_CODE_DIR"
|
||||
|
||||
# Link to the main project's built extension
|
||||
echo "Copying extension files from main project..."
|
||||
if [ -f "$PROJECT_ROOT/src/dist/extension.js" ]; then
|
||||
cp "$PROJECT_ROOT/src/dist/extension.js" "$ROO_CODE_DIR/extension.cjs"
|
||||
else
|
||||
echo -e "${RED}Error: extension.js not found. Make sure to build the main project first.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy assets from main project
|
||||
if [ -d "$PROJECT_ROOT/src/assets" ]; then
|
||||
cp -r "$PROJECT_ROOT/src/assets" "$ROO_CODE_DIR/"
|
||||
fi
|
||||
|
||||
# Copy package.json from main project for reference
|
||||
if [ -f "$PROJECT_ROOT/src/package.json" ]; then
|
||||
cp "$PROJECT_ROOT/src/package.json" "$ROO_CODE_DIR/package.json"
|
||||
fi
|
||||
|
||||
# Create extension.package.json for RunVSAgent
|
||||
echo "Creating extension.package.json..."
|
||||
cat > "$ROO_CODE_DIR/extension.package.json" << 'EOF'
|
||||
{
|
||||
"name": "roo-code",
|
||||
"displayName": "Roo Code",
|
||||
"description": "A whole dev team of AI agents in your editor",
|
||||
"publisher": "RooVeterinaryInc",
|
||||
"version": "3.28.0",
|
||||
"engines": {
|
||||
"vscode": "^1.84.0"
|
||||
},
|
||||
"activationEvents": [
|
||||
"onStartupFinished",
|
||||
"*"
|
||||
],
|
||||
"main": "./extension.cjs",
|
||||
"contributes": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "roo-code.newTask",
|
||||
"title": "Roo Code: New Task"
|
||||
},
|
||||
{
|
||||
"command": "roo-code.openSettings",
|
||||
"title": "Roo Code: Open Settings"
|
||||
}
|
||||
]
|
||||
},
|
||||
"extensionDependencies": []
|
||||
}
|
||||
EOF
|
||||
|
||||
# Step 4: Build RunVSAgent extension host
|
||||
echo -e "${YELLOW}📦 Step 4: Building RunVSAgent extension host...${NC}"
|
||||
cd "$RUNVSAGENT_DIR/extension_host"
|
||||
|
||||
# Install dependencies if needed
|
||||
if [ ! -d "node_modules" ]; then
|
||||
echo "Installing extension host dependencies..."
|
||||
npm install
|
||||
fi
|
||||
|
||||
# Build the extension host
|
||||
echo "Building extension host..."
|
||||
npm run build
|
||||
|
||||
# Step 5: Build JetBrains plugin
|
||||
echo -e "${YELLOW}📦 Step 5: Building JetBrains plugin...${NC}"
|
||||
cd "$RUNVSAGENT_DIR/jetbrains_plugin"
|
||||
|
||||
# Build with Gradle
|
||||
echo "Building JetBrains plugin with Gradle..."
|
||||
./gradlew clean buildPlugin
|
||||
|
||||
# Step 6: Package everything
|
||||
echo -e "${YELLOW}📦 Step 6: Creating final package...${NC}"
|
||||
|
||||
# Create output directory
|
||||
OUTPUT_DIR="$SCRIPT_DIR/dist"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# Copy the built plugin
|
||||
PLUGIN_FILE=$(find "$RUNVSAGENT_DIR/jetbrains_plugin/build/distributions" -name "*.zip" | head -1)
|
||||
if [ -f "$PLUGIN_FILE" ]; then
|
||||
cp "$PLUGIN_FILE" "$OUTPUT_DIR/RunVSAgent-RooCode.zip"
|
||||
echo -e "${GREEN}✅ Build successful!${NC}"
|
||||
echo -e "${GREEN}📦 Plugin package created at: $OUTPUT_DIR/RunVSAgent-RooCode.zip${NC}"
|
||||
echo ""
|
||||
echo "To install in JetBrains IDE:"
|
||||
echo "1. Open your JetBrains IDE (IntelliJ, WebStorm, PyCharm, etc.)"
|
||||
echo "2. Go to Settings/Preferences → Plugins"
|
||||
echo "3. Click the gear icon ⚙️ → Install Plugin from Disk..."
|
||||
echo "4. Select: $OUTPUT_DIR/RunVSAgent-RooCode.zip"
|
||||
echo "5. Restart your IDE"
|
||||
else
|
||||
echo -e "${RED}❌ Error: Could not find built plugin file${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}🎉 Build complete! Roo Code is ready for JetBrains IDEs!${NC}"
|
||||
Loading…
Add table
Reference in a new issue