Add comprehensive integration guides for 4 AI coding assistants: ## New Integration Guides (98KB total) - docs/integrations/WINDSURF.md (20KB) - Windsurf IDE with .windsurfrules - docs/integrations/CLINE.md (25KB) - Cline VS Code extension with MCP - docs/integrations/CONTINUE_DEV.md (28KB) - Continue.dev for any IDE - docs/integrations/INTEGRATIONS.md (25KB) - Comprehensive hub with decision tree ## Working Examples (3 directories, 11 files) - examples/windsurf-fastapi-context/ - FastAPI + Windsurf automation - examples/cline-django-assistant/ - Django + Cline with MCP server - examples/continue-dev-universal/ - HTTP context server for all IDEs ## README.md Updates - Updated tagline: Universal preprocessor for 10+ AI systems - Expanded Supported Integrations table (7 → 10 platforms) - Added 'AI Coding Assistant Integrations' section (60+ lines) - Cross-links to all new guides and examples ## Impact - Week 2 of ACTION_PLAN.md: 4/4 tasks complete (100%) ✅ - Total new documentation: ~3,000 lines - Total new code: ~1,000 lines (automation scripts, servers) - Integration coverage: LangChain, LlamaIndex, Pinecone, Cursor, Windsurf, Cline, Continue.dev, Claude, Gemini, ChatGPT ## Key Features - All guides follow proven 11-section pattern from CURSOR.md - Real-world examples with automation scripts - Multi-IDE consistency (Continue.dev works in VS Code, JetBrains, Vim) - MCP integration for dynamic documentation access - Complete troubleshooting sections with solutions Positions Skill Seekers as universal preprocessor for ANY AI system. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
227 lines
6.6 KiB
Python
227 lines
6.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Automation script to generate Cline rules from Django documentation.
|
|
|
|
Usage:
|
|
python generate_clinerules.py --project /path/to/project
|
|
python generate_clinerules.py --project . --with-mcp
|
|
"""
|
|
|
|
import argparse
|
|
import json
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def run_command(cmd: list[str], description: str) -> bool:
|
|
"""Run a shell command and return success status."""
|
|
print(f"\n{'='*60}")
|
|
print(f"STEP: {description}")
|
|
print(f"{'='*60}")
|
|
print(f"Running: {' '.join(cmd)}\n")
|
|
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
|
|
if result.stdout:
|
|
print(result.stdout)
|
|
if result.stderr:
|
|
print(result.stderr, file=sys.stderr)
|
|
|
|
if result.returncode != 0:
|
|
print(f"❌ ERROR: {description} failed with code {result.returncode}")
|
|
return False
|
|
|
|
print(f"✅ SUCCESS: {description}")
|
|
return True
|
|
|
|
|
|
def setup_mcp_server(project_path: Path) -> bool:
|
|
"""Set up MCP server configuration for Cline."""
|
|
print(f"\n{'='*60}")
|
|
print(f"STEP: Configuring MCP Server")
|
|
print(f"{'='*60}")
|
|
|
|
# Create MCP config
|
|
mcp_config = {
|
|
"mcpServers": {
|
|
"skill-seekers": {
|
|
"command": "python",
|
|
"args": [
|
|
"-m",
|
|
"skill_seekers.mcp.server_fastmcp",
|
|
"--transport",
|
|
"stdio"
|
|
],
|
|
"env": {}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Save to project
|
|
vscode_dir = project_path / ".vscode"
|
|
vscode_dir.mkdir(exist_ok=True)
|
|
|
|
mcp_config_file = vscode_dir / "mcp_config.json"
|
|
with open(mcp_config_file, 'w') as f:
|
|
json.dump(mcp_config, f, indent=2)
|
|
|
|
print(f"✅ Created: {mcp_config_file}")
|
|
print(f"\nTo activate in Cline:")
|
|
print(f"1. Open Cline panel in VS Code")
|
|
print(f"2. Settings → MCP Servers → Load Configuration")
|
|
print(f"3. Select: {mcp_config_file}")
|
|
print(f"4. Reload VS Code window")
|
|
|
|
return True
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate Cline rules from Django documentation"
|
|
)
|
|
parser.add_argument(
|
|
"--project",
|
|
type=str,
|
|
default=".",
|
|
help="Path to your project directory (default: current directory)",
|
|
)
|
|
parser.add_argument(
|
|
"--skip-scrape",
|
|
action="store_true",
|
|
help="Skip scraping step (use existing output/django)",
|
|
)
|
|
parser.add_argument(
|
|
"--with-mcp",
|
|
action="store_true",
|
|
help="Set up MCP server configuration",
|
|
)
|
|
parser.add_argument(
|
|
"--modular",
|
|
action="store_true",
|
|
help="Create modular rules files (.clinerules.models, .clinerules.views, etc.)",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
project_path = Path(args.project).resolve()
|
|
output_dir = Path("output/django")
|
|
|
|
print("=" * 60)
|
|
print("Cline Rules Generator for Django")
|
|
print("=" * 60)
|
|
print(f"Project: {project_path}")
|
|
print(f"Modular rules: {args.modular}")
|
|
print(f"MCP integration: {args.with_mcp}")
|
|
print("=" * 60)
|
|
|
|
# Step 1: Scrape Django documentation (unless skipped)
|
|
if not args.skip_scrape:
|
|
if not run_command(
|
|
[
|
|
"skill-seekers",
|
|
"scrape",
|
|
"--config",
|
|
"configs/django.json",
|
|
],
|
|
"Scraping Django documentation",
|
|
):
|
|
return 1
|
|
else:
|
|
print(f"\n⏭️ SKIPPED: Using existing {output_dir}")
|
|
|
|
if not output_dir.exists():
|
|
print(f"❌ ERROR: {output_dir} does not exist!")
|
|
print(f"Run without --skip-scrape to generate documentation first.")
|
|
return 1
|
|
|
|
# Step 2: Package for Cline
|
|
if not run_command(
|
|
[
|
|
"skill-seekers",
|
|
"package",
|
|
str(output_dir),
|
|
"--target",
|
|
"markdown",
|
|
],
|
|
"Packaging for Cline",
|
|
):
|
|
return 1
|
|
|
|
# Step 3: Copy rules to project
|
|
print(f"\n{'='*60}")
|
|
print(f"STEP: Copying rules to project")
|
|
print(f"{'='*60}")
|
|
|
|
markdown_output = output_dir.parent / "django-markdown"
|
|
source_skill = markdown_output / "SKILL.md"
|
|
|
|
if not source_skill.exists():
|
|
print(f"❌ ERROR: {source_skill} does not exist!")
|
|
return 1
|
|
|
|
if args.modular:
|
|
# Split into modular files
|
|
print("Creating modular rules files...")
|
|
|
|
with open(source_skill, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Split by major sections
|
|
sections = content.split('\n## ')
|
|
|
|
# Core rules (first part)
|
|
core_rules = project_path / ".clinerules"
|
|
with open(core_rules, 'w') as f:
|
|
f.write(sections[0])
|
|
print(f"✅ Created: {core_rules}")
|
|
|
|
# Try to extract specific sections (simplified)
|
|
# In a real implementation, this would be more sophisticated
|
|
models_content = next((s for s in sections if 'Model' in s), None)
|
|
if models_content:
|
|
models_rules = project_path / ".clinerules.models"
|
|
with open(models_rules, 'w') as f:
|
|
f.write('## ' + models_content)
|
|
print(f"✅ Created: {models_rules}")
|
|
|
|
views_content = next((s for s in sections if 'View' in s), None)
|
|
if views_content:
|
|
views_rules = project_path / ".clinerules.views"
|
|
with open(views_rules, 'w') as f:
|
|
f.write('## ' + views_content)
|
|
print(f"✅ Created: {views_rules}")
|
|
|
|
else:
|
|
# Single file
|
|
dest_file = project_path / ".clinerules"
|
|
shutil.copy(source_skill, dest_file)
|
|
print(f"✅ Copied: {dest_file}")
|
|
|
|
# Step 4: Set up MCP server (optional)
|
|
if args.with_mcp:
|
|
if not setup_mcp_server(project_path):
|
|
print("⚠️ WARNING: MCP setup failed, but rules were created successfully")
|
|
|
|
print(f"\n{'='*60}")
|
|
print(f"✅ SUCCESS: Cline rules generated!")
|
|
print(f"{'='*60}")
|
|
print(f"\nNext steps:")
|
|
print(f"1. Open project in VS Code: code {project_path}")
|
|
print(f"2. Install Cline extension (if not already)")
|
|
print(f"3. Reload VS Code window: Cmd+Shift+P → 'Reload Window'")
|
|
print(f"4. Open Cline panel (sidebar icon)")
|
|
print(f"5. Start autonomous task:")
|
|
print(f" 'Create a Django blog app with posts and comments'")
|
|
|
|
if args.with_mcp:
|
|
print(f"\n📡 MCP Server configured at:")
|
|
print(f" {project_path / '.vscode' / 'mcp_config.json'}")
|
|
print(f" Load in Cline: Settings → MCP Servers → Load Configuration")
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|