273 lines
6.9 KiB
Markdown
273 lines
6.9 KiB
Markdown
# Guardrail IDE Extensions
|
|
|
|
> Native IDE integrations for the Guardrail MCP Server
|
|
|
|
## Overview
|
|
|
|
This directory contains IDE extensions that provide real-time guardrail validation directly within your development environment.
|
|
|
|
## Status
|
|
|
|
**Branch:** `main` (merged)
|
|
**Phase:** Released
|
|
**Release:** v2.0.0
|
|
|
|
## Supported IDEs
|
|
|
|
| IDE | Status | Priority | Language |
|
|
|-----|--------|----------|----------|
|
|
| VS Code | ✅ Released | P0 | TypeScript |
|
|
| JetBrains | ✅ Released | P1 | Kotlin |
|
|
| Neovim | ✅ Released | P2 | Lua |
|
|
| Vim | ✅ Released | P3 | VimScript |
|
|
|
|
Legend:
|
|
- ✅ Released
|
|
- 🚧 Complete (Ready for Testing)
|
|
- 📋 Planned
|
|
- ⏸️ On Hold
|
|
|
|
## Quick Start
|
|
|
|
### VS Code
|
|
|
|
```bash
|
|
# Clone and setup
|
|
git checkout ide
|
|
cd ide/vscode-extension
|
|
npm install
|
|
npm run compile
|
|
|
|
# Press F5 in VS Code to test
|
|
```
|
|
|
|
### JetBrains
|
|
|
|
```bash
|
|
# Clone and setup
|
|
git checkout ide
|
|
cd ide/jetbrains-plugin
|
|
./gradlew buildPlugin
|
|
|
|
# Install from build/distributions/
|
|
```
|
|
|
|
### Neovim
|
|
|
|
```lua
|
|
-- Using lazy.nvim
|
|
{
|
|
'TheArchitectit/guardrail.nvim',
|
|
dependencies = { 'nvim-lua/plenary.nvim' },
|
|
config = function()
|
|
require('guardrail').setup({
|
|
server_url = 'http://localhost:8095',
|
|
api_key = 'your-api-key',
|
|
})
|
|
end
|
|
}
|
|
```
|
|
|
|
### Vim
|
|
|
|
```bash
|
|
# Clone
|
|
git clone https://github.com/TheArchitectit/guardrail.vim.git ~/.vim/pack/plugins/start/guardrail.vim
|
|
|
|
# Or using vim-plug
|
|
" Add to .vimrc:
|
|
Plug 'TheArchitectit/guardrail.vim'
|
|
```
|
|
|
|
## Security Notice
|
|
|
|
> **⚠️ Important:** Never commit API keys to version control. Use environment variables:
|
|
> - VS Code: Uses SecretStorage API (secure by default)
|
|
> - JetBrains: Uses JPasswordField with encryption at rest
|
|
> - Neovim/Vim: Use `let g:guardrail_api_key = $GUARDRAIL_API_KEY`
|
|
>
|
|
> For production deployments, always use HTTPS to connect to the MCP server.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
ide/
|
|
├── IDE_EXTENSIONS_PLAN.md # Master plan document
|
|
├── TEAM_STRUCTURE.md # Team organization
|
|
├── TESTING_GUIDE.md # Testing documentation
|
|
├── README.md # This file
|
|
├── vscode-extension/ # VS Code extension (P0)
|
|
│ ├── package.json
|
|
│ ├── tsconfig.json
|
|
│ └── src/
|
|
│ ├── extension.ts
|
|
│ ├── types.ts
|
|
│ ├── commands.ts
|
|
│ ├── providers/
|
|
│ │ ├── diagnostics.ts
|
|
│ │ └── statusBar.ts
|
|
│ └── utils/
|
|
│ └── client.ts
|
|
├── jetbrains-plugin/ # IntelliJ/PyCharm plugin (P1)
|
|
│ ├── build.gradle.kts
|
|
│ ├── settings.gradle.kts
|
|
│ └── src/main/
|
|
│ ├── kotlin/com/guardrail/plugin/
|
|
│ │ ├── GuardrailService.kt
|
|
│ │ ├── GuardrailInspection.kt
|
|
│ │ ├── GuardrailConfigurable.kt
|
|
│ │ ├── GuardrailStatusBarWidget.kt
|
|
│ │ └── actions/
|
|
│ │ ├── ValidateFileAction.kt
|
|
│ │ ├── ValidateSelectionAction.kt
|
|
│ │ └── TestConnectionAction.kt
|
|
│ └── resources/META-INF/
|
|
│ └── plugin.xml
|
|
└── neovim-plugin/ # Neovim Lua plugin (P2)
|
|
└── lua/guardrail/
|
|
├── init.lua
|
|
├── validation.lua
|
|
├── diagnostics.lua
|
|
├── commands.lua
|
|
└── statusline.lua
|
|
└── vim-plugin/ # Vim plugin (P3)
|
|
├── plugin/
|
|
│ └── guardrail.vim
|
|
├── autoload/
|
|
│ └── guardrail.vim
|
|
└── doc/
|
|
└── guardrail.txt
|
|
```
|
|
|
|
## Features
|
|
|
|
All IDE extensions provide:
|
|
|
|
- ✅ Real-time validation (on save and on type)
|
|
- ✅ Inline diagnostics with severity levels
|
|
- ✅ Status bar connection indicator
|
|
- ✅ Command palette integration
|
|
- ✅ Quick fixes for common violations
|
|
- ✅ Configuration UI
|
|
- ✅ Output channel for logs
|
|
|
|
## Architecture
|
|
|
|
```
|
|
IDE Extensions
|
|
├── VS Code (TypeScript)
|
|
│ ├── HTTP Client → MCP Server
|
|
│ ├── Diagnostics Provider (inline)
|
|
│ ├── Status Bar Widget
|
|
│ └── Commands (5 commands)
|
|
├── JetBrains (Kotlin)
|
|
│ ├── HTTP Client → MCP Server
|
|
│ ├── Inspection Tool (annotator)
|
|
│ ├── Status Bar Widget
|
|
│ └── Actions (3 actions)
|
|
├── Neovim (Lua)
|
|
│ ├── HTTP Client → MCP Server
|
|
│ ├── Diagnostic API
|
|
│ ├── Status Line Component
|
|
│ └── Commands (5 commands)
|
|
├── Vim (VimScript)
|
|
│ ├── curl → MCP Server
|
|
│ ├── Signs (inline indicators)
|
|
│ ├── Location List
|
|
│ └── Commands (5 commands)
|
|
└── MCP Server (Port 8095)
|
|
├── /ide/validate/file
|
|
├── /ide/validate/selection
|
|
└── /ide/health
|
|
```
|
|
|
|
## Development
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 16+ (VS Code)
|
|
- JDK 17+ (JetBrains)
|
|
- Neovim 0.9+ + plenary.nvim (Neovim)
|
|
|
|
### Testing
|
|
|
|
See [TESTING_GUIDE.md](./TESTING_GUIDE.md) for comprehensive testing documentation.
|
|
|
|
### Commands
|
|
|
|
| IDE | Validate File | Validate Selection | Test Connection |
|
|
|-----|---------------|-------------------|-----------------|
|
|
| VS Code | ✅ `Ctrl+Shift+G` | ✅ Command Palette | ✅ Command Palette |
|
|
| JetBrains | ✅ `Ctrl+Shift+G` | ✅ Code Menu | ✅ Tools Menu |
|
|
| Neovim | ✅ `:GuardrailValidate` | ✅ `:GuardrailValidateSelection` | ✅ `:GuardrailTestConnection` |
|
|
| Vim | ✅ `:GuardrailValidate` | ✅ `:GuardrailValidateSelection` | ✅ `:GuardrailTestConnection` |
|
|
## Configuration
|
|
|
|
### Standard Config Format
|
|
|
|
```jsonc
|
|
// ~/.guardrail/config.jsonc
|
|
{
|
|
"server_url": "http://localhost:8095",
|
|
"api_key": "your-api-key",
|
|
"project_slug": "my-project",
|
|
"enabled": true,
|
|
"validate_on_save": true,
|
|
"severity_threshold": "warning"
|
|
}
|
|
```
|
|
|
|
### VS Code Settings
|
|
|
|
```json
|
|
{
|
|
"guardrail.enabled": true,
|
|
"guardrail.serverUrl": "http://localhost:8095",
|
|
"guardrail.apiKey": "your-api-key",
|
|
"guardrail.projectSlug": "my-project",
|
|
"guardrail.validateOnSave": true,
|
|
"guardrail.severityThreshold": "warning"
|
|
}
|
|
```
|
|
|
|
### Neovim Lua
|
|
|
|
```lua
|
|
require('guardrail').setup({
|
|
server_url = 'http://localhost:8095',
|
|
api_key = 'your-api-key',
|
|
project_slug = 'my-project',
|
|
enabled = true,
|
|
validate_on_save = true,
|
|
severity_threshold = 'warning',
|
|
})
|
|
```
|
|
|
|
### Vim Configuration
|
|
|
|
```vim
|
|
let g:guardrail_server_url = 'http://localhost:8095'
|
|
let g:guardrail_api_key = 'your-api-key'
|
|
let g:guardrail_project_slug = 'my-project'
|
|
let g:guardrail_enabled = 1
|
|
let g:guardrail_validate_on_save = 1
|
|
let g:guardrail_severity_threshold = 'warning'
|
|
|
|
set statusline+=%{guardrail#Statusline()}
|
|
```
|
|
|
|
## Contributing
|
|
|
|
See [TEAM_STRUCTURE.md](./TEAM_STRUCTURE.md) for team organization and [IDE_EXTENSIONS_PLAN.md](./IDE_EXTENSIONS_PLAN.md) for roadmap.
|
|
|
|
## Resources
|
|
|
|
- **Plan:** [IDE_EXTENSIONS_PLAN.md](./IDE_EXTENSIONS_PLAN.md)
|
|
- **Team:** [TEAM_STRUCTURE.md](./TEAM_STRUCTURE.md)
|
|
- **Testing:** [TESTING_GUIDE.md](./TESTING_GUIDE.md)
|
|
- **MCP Server:** `/mcp-server/`
|
|
|
|
## License
|
|
|
|
BSD-3-Clause
|