claw-code/.guardrails/ide/README.md

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