Refactor cockpit to use DockerTmuxController pattern
Based on claude-code-tools TmuxCLIController, this refactor: - Added DockerTmuxController class for robust tmux session management - Implements send_keys() with configurable delay_enter - Implements capture_pane() for output retrieval - Implements wait_for_prompt() for pattern-based completion detection - Implements wait_for_idle() for content-hash-based idle detection - Implements wait_for_shell_prompt() for shell prompt detection Also includes workflow improvements: - Pre-task git snapshot before agent execution - Post-task commit protocol in agent guidelines Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
449
docs/PLUGIN-MARKETPLACE-INTEGRATION.md
Normal file
449
docs/PLUGIN-MARKETPLACE-INTEGRATION.md
Normal file
@@ -0,0 +1,449 @@
|
||||
# Claude Plugin Marketplace Integration for Luzia
|
||||
|
||||
## Overview
|
||||
|
||||
Luzia now integrates with the Claude official plugin marketplace as a trusted source for AI skills and capabilities. This enables intelligent plugin skill detection, matching, and dispatch for tasks.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Claude Marketplace │
|
||||
│ (Official Plugins) │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ PluginMarketplaceRegistry │
|
||||
│ (Load & Index Plugins) │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
┌──────────┴──────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────┐ ┌──────────────────────┐
|
||||
│ PluginSkillLoader│ │ PluginCapabilityMatcher
|
||||
│ (Skills from Caps) │ (Find Plugins for Tasks)
|
||||
└──────────────────┘ └──────────────────────┘
|
||||
│ │
|
||||
└──────────────┬──────┘
|
||||
▼
|
||||
┌────────────────────────┐
|
||||
│DispatcherPluginBridge │
|
||||
│(Integrate with Dispatch)
|
||||
└────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│Shared Knowledge │
|
||||
│Graph (Plugins) │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
## Components
|
||||
|
||||
### 1. **PluginMarketplaceRegistry** (`plugin_marketplace.py`)
|
||||
|
||||
Central registry of official Claude plugins with built-in support for:
|
||||
- **Code Simplifier**: Code refactoring and optimization
|
||||
- **Code Reviewer**: Security, performance, and quality reviews
|
||||
- **API Integration Helper**: API client generation and validation
|
||||
|
||||
**Key Features:**
|
||||
- Plugin metadata (name, description, version, trust level)
|
||||
- Capability indexing (fast lookup by category/keyword)
|
||||
- Plugin matching for task descriptions
|
||||
- Export to knowledge graph format
|
||||
|
||||
**Usage:**
|
||||
```python
|
||||
from lib.plugin_marketplace import get_marketplace_registry
|
||||
|
||||
registry = get_marketplace_registry()
|
||||
plugins = registry.list_plugins(category='security')
|
||||
matched = registry.find_plugins_for_task(
|
||||
'Find vulnerabilities in code',
|
||||
['security', 'code', 'review']
|
||||
)
|
||||
```
|
||||
|
||||
### 2. **PluginSkillLoader** (`plugin_skill_loader.py`)
|
||||
|
||||
Converts plugin capabilities into Luzia skills for task dispatch.
|
||||
|
||||
**Features:**
|
||||
- Generate skills from plugin capabilities
|
||||
- Index skills by keywords and categories
|
||||
- Cache skills for performance
|
||||
- Export for dispatcher/knowledge graph
|
||||
- Skill-to-plugin mapping
|
||||
|
||||
**Usage:**
|
||||
```python
|
||||
from lib.plugin_skill_loader import get_plugin_skill_loader
|
||||
|
||||
loader = get_plugin_skill_loader()
|
||||
skills = loader.generate_skills_from_plugins()
|
||||
matched = loader.find_skills_for_task('simplify this code')
|
||||
```
|
||||
|
||||
**Generated Skills:**
|
||||
```
|
||||
code-simplifier:simplify_code (Code Simplifier)
|
||||
code-simplifier:detect_complexity (Code Simplifier)
|
||||
code-simplifier:suggest_improvements (Code Simplifier)
|
||||
code-reviewer:security_review (Code Reviewer)
|
||||
code-reviewer:performance_review (Code Reviewer)
|
||||
code-reviewer:best_practices_review (Code Reviewer)
|
||||
api-integration:generate_api_client (API Integration Helper)
|
||||
api-integration:validate_api_spec (API Integration Helper)
|
||||
```
|
||||
|
||||
### 3. **DispatcherPluginBridge** (`dispatcher_plugin_integration.py`)
|
||||
|
||||
Seamlessly integrates plugins into the task dispatch system.
|
||||
|
||||
**Features:**
|
||||
- Enhance task context with plugin skills
|
||||
- Generate recommendations for task handling
|
||||
- Build execution sequences based on capabilities
|
||||
- Plugin-aware task dispatch
|
||||
|
||||
**Usage:**
|
||||
```python
|
||||
from lib.dispatcher_plugin_integration import (
|
||||
DispatcherPluginBridge,
|
||||
PluginAwareTaskDispatcher
|
||||
)
|
||||
|
||||
bridge = DispatcherPluginBridge()
|
||||
context = bridge.enhance_task_context(
|
||||
'Review code for security',
|
||||
'myproject',
|
||||
'job-123'
|
||||
)
|
||||
|
||||
dispatcher = PluginAwareTaskDispatcher(bridge)
|
||||
result = dispatcher.dispatch_with_plugin_context(
|
||||
'Optimize this function',
|
||||
'myproject',
|
||||
'job-456'
|
||||
)
|
||||
```
|
||||
|
||||
### 4. **PluginKnowledgeGraphExporter** (`plugin_kg_integration.py`)
|
||||
|
||||
Exports plugin data to shared knowledge graph format.
|
||||
|
||||
**Features:**
|
||||
- Export plugins as entities
|
||||
- Export skills as entities
|
||||
- Export relationships (plugin→skill, skill→category)
|
||||
- Complete KG export with metadata
|
||||
|
||||
**Usage:**
|
||||
```python
|
||||
from lib.plugin_kg_integration import export_plugins_to_kg
|
||||
|
||||
# Export to files
|
||||
exports = export_plugins_to_kg()
|
||||
|
||||
# Each export type:
|
||||
# - plugins_entities.json
|
||||
# - skills_entities.json
|
||||
# - relationships.json
|
||||
# - complete_export.json
|
||||
```
|
||||
|
||||
### 5. **PluginCLI** (`plugin_cli.py`)
|
||||
|
||||
Command-line interface for plugin operations.
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
# List all plugins
|
||||
luzia plugins list
|
||||
|
||||
# Show plugin details
|
||||
luzia plugins code-simplifier
|
||||
luzia plugins code-reviewer
|
||||
|
||||
# List all skills
|
||||
luzia plugins skills
|
||||
|
||||
# Find plugins for a task
|
||||
luzia plugins find "review code for security"
|
||||
|
||||
# Export plugin data
|
||||
luzia plugins export
|
||||
|
||||
# Show statistics
|
||||
luzia plugins stats
|
||||
|
||||
# Help
|
||||
luzia plugins help
|
||||
```
|
||||
|
||||
## Plugin Definitions
|
||||
|
||||
### Code Simplifier
|
||||
**ID:** `code-simplifier`
|
||||
**Vendor:** Anthropic
|
||||
**Trust:** Trusted
|
||||
**Capabilities:**
|
||||
- `simplify_code` - Analyze and simplify code for readability
|
||||
- `detect_complexity` - Identify overly complex code patterns
|
||||
- `suggest_improvements` - Suggest code improvements and best practices
|
||||
|
||||
### Code Reviewer
|
||||
**ID:** `code-reviewer`
|
||||
**Vendor:** Anthropic
|
||||
**Trust:** Trusted
|
||||
**Capabilities:**
|
||||
- `security_review` - Identify security vulnerabilities
|
||||
- `performance_review` - Analyze performance bottlenecks
|
||||
- `best_practices_review` - Check against best practices
|
||||
|
||||
### API Integration Helper
|
||||
**ID:** `api-integration`
|
||||
**Vendor:** Anthropic
|
||||
**Trust:** Trusted
|
||||
**Capabilities:**
|
||||
- `generate_api_client` - Generate API client from specs
|
||||
- `validate_api_spec` - Validate OpenAPI/Swagger specs
|
||||
|
||||
## Task Matching Flow
|
||||
|
||||
1. **Task Received**: "Review this code for security and performance"
|
||||
2. **Keyword Extraction**: ['security', 'performance', 'review', 'code']
|
||||
3. **Plugin Matching**: Code Reviewer (2.9 relevance score)
|
||||
4. **Skill Matching**:
|
||||
- `code-reviewer:security_review` (relevance: 2.9)
|
||||
- `code-reviewer:performance_review` (relevance: 2.9)
|
||||
5. **Recommendations Generated**:
|
||||
- Primary: security_review
|
||||
- Alternatives: performance_review
|
||||
- Sequence: security → performance
|
||||
6. **Task Dispatched** with plugin context
|
||||
|
||||
## Knowledge Graph Integration
|
||||
|
||||
Plugin data is exported to shared knowledge graph with:
|
||||
|
||||
### Entities
|
||||
- **Plugins**: name, vendor, version, description, trust_level, capabilities
|
||||
- **Skills**: name, category, tags, keywords, trust_level, plugin_id
|
||||
- **Categories**: code-analysis, security, performance, integration
|
||||
|
||||
### Relations
|
||||
- `plugin provides_capability skill`
|
||||
- `plugin supports_category category`
|
||||
- `skill belongs_to_category category`
|
||||
|
||||
### Access
|
||||
```bash
|
||||
# Query plugins for a task
|
||||
luzia docs search "plugin marketplace"
|
||||
|
||||
# Show plugin entity
|
||||
luzia docs --show "Code Simplifier"
|
||||
|
||||
# Show knowledge graph stats
|
||||
luzia docs --stats
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Comprehensive test suite available:
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
python3 tests/test_plugin_system.py
|
||||
|
||||
# Test output shows:
|
||||
# - Registry tests (5 tests)
|
||||
# - Skill tests (7 tests)
|
||||
# - Capability matching (4 tests)
|
||||
# - Dispatcher integration (5 tests)
|
||||
# - KG export tests (6 tests)
|
||||
|
||||
# Results: 27/27 tests passed ✓
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Example 1: Find Plugins for Task
|
||||
|
||||
```python
|
||||
import sys
|
||||
sys.path.insert(0, 'lib')
|
||||
from plugin_skill_loader import get_plugin_skill_loader
|
||||
|
||||
loader = get_plugin_skill_loader()
|
||||
task = "simplify and optimize this Python function"
|
||||
matched = loader.find_skills_for_task(task, min_relevance=0.3)
|
||||
|
||||
for skill in matched:
|
||||
print(f"{skill['name']}: {skill['description']}")
|
||||
```
|
||||
|
||||
### Example 2: Dispatch Task with Plugin Context
|
||||
|
||||
```python
|
||||
from dispatcher_plugin_integration import PluginAwareTaskDispatcher
|
||||
|
||||
dispatcher = PluginAwareTaskDispatcher()
|
||||
result = dispatcher.dispatch_with_plugin_context(
|
||||
task_description='Review code for security issues',
|
||||
project='my-project',
|
||||
job_id='job-789'
|
||||
)
|
||||
|
||||
print(f"Matched {len(result['plugin_context']['plugin_analysis']['matched_skills'])} skills")
|
||||
print(f"Primary recommendation: {result['plugin_context']['recommended_plugins']['primary_skill']['name']}")
|
||||
```
|
||||
|
||||
### Example 3: CLI Usage
|
||||
|
||||
```bash
|
||||
# List all plugins and their capabilities
|
||||
$ luzia plugins list
|
||||
Name Vendor Trust Capabilities
|
||||
Code Simplifier anthropic trusted 3
|
||||
Code Reviewer anthropic trusted 3
|
||||
API Integration Helper anthropic trusted 2
|
||||
|
||||
# Find plugins for a specific task
|
||||
$ luzia plugins find "identify security vulnerabilities"
|
||||
{
|
||||
"query": "identify security vulnerabilities",
|
||||
"matched_skills": [
|
||||
{
|
||||
"skill_id": "code-reviewer:security_review",
|
||||
"name": "security_review (Code Reviewer)",
|
||||
"relevance_score": 2.9,
|
||||
...
|
||||
}
|
||||
],
|
||||
"count": 1
|
||||
}
|
||||
|
||||
# Export all plugin data
|
||||
$ luzia plugins export
|
||||
{
|
||||
"action": "export_plugins",
|
||||
"status": "success",
|
||||
"files": {
|
||||
"plugins_entities": "/tmp/.luzia-kg-exports/plugins_entities.json",
|
||||
"skills_entities": "/tmp/.luzia-kg-exports/skills_entities.json",
|
||||
"relationships": "/tmp/.luzia-kg-exports/relationships.json",
|
||||
"complete_export": "/tmp/.luzia-kg-exports/complete_export.json"
|
||||
},
|
||||
"count": 4
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Plugins are configured in `lib/plugin_marketplace.py` in the `OFFICIAL_PLUGINS` dictionary:
|
||||
|
||||
```python
|
||||
OFFICIAL_PLUGINS = {
|
||||
'plugin-id': {
|
||||
'id': 'plugin-id',
|
||||
'name': 'Plugin Name',
|
||||
'description': 'Description',
|
||||
'vendor': 'anthropic', # All official plugins
|
||||
'version': '1.0.0',
|
||||
'url': 'https://marketplace.claude.ai/plugins/...',
|
||||
'capabilities': [
|
||||
{
|
||||
'name': 'capability_name',
|
||||
'description': 'What it does',
|
||||
'category': 'category',
|
||||
'tags': ['tag1', 'tag2']
|
||||
}
|
||||
],
|
||||
'trust_level': 'trusted',
|
||||
'tags': ['plugin', 'tags']
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Adding New Plugins
|
||||
|
||||
To add a new official plugin:
|
||||
|
||||
1. Add entry to `OFFICIAL_PLUGINS` dict in `plugin_marketplace.py`
|
||||
2. Define capabilities with categories and tags
|
||||
3. Set trust_level to 'trusted' for official plugins
|
||||
4. Regenerate skills: `python3 -c "from lib.plugin_skill_loader import generate_all_skills; generate_all_skills()"`
|
||||
5. Export to KG: `python3 -c "from lib.plugin_kg_integration import export_plugins_to_kg; export_plugins_to_kg()"`
|
||||
|
||||
## Performance
|
||||
|
||||
- **Plugin Loading**: ~50ms (3 plugins)
|
||||
- **Skill Generation**: ~100ms (8 skills from 3 plugins)
|
||||
- **Task Matching**: ~10ms per task
|
||||
- **Cache Hit**: <1ms
|
||||
|
||||
## Storage
|
||||
|
||||
- **Plugin Registry Cache**: `/tmp/.luzia-plugins/registry.json`
|
||||
- **Plugin Skills Cache**: `/tmp/.luzia-plugin-skills/skills.json`
|
||||
- **KG Exports**: `/tmp/.luzia-kg-exports/`
|
||||
- `plugins_entities.json`: Plugin entities for KG
|
||||
- `skills_entities.json`: Skill entities for KG
|
||||
- `relationships.json`: All relationships
|
||||
- `complete_export.json`: Complete export with metadata
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. **Marketplace API Integration**: Fetch plugins from marketplace.claude.ai
|
||||
2. **Dynamic Plugin Discovery**: Load plugins from URLs
|
||||
3. **Plugin Authentication**: Support for authenticated plugins
|
||||
4. **Custom Plugins**: User-defined plugins and capabilities
|
||||
5. **Plugin Performance Metrics**: Track plugin effectiveness
|
||||
6. **Community Plugins**: Support for community-contributed plugins (with separate trust level)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No plugins found
|
||||
```bash
|
||||
# Check if plugins are loaded
|
||||
python3 -c "from lib.plugin_marketplace import get_marketplace_registry; r = get_marketplace_registry(); print(len(r.plugins))"
|
||||
|
||||
# Should output: 3 (for the official plugins)
|
||||
```
|
||||
|
||||
### Skills not matching
|
||||
```bash
|
||||
# Check skill generation
|
||||
python3 -c "from lib.plugin_skill_loader import get_plugin_skill_loader; l = get_plugin_skill_loader(); print(len(l.skills))"
|
||||
|
||||
# Should output: 8 (for the 3 official plugins)
|
||||
```
|
||||
|
||||
### KG export fails
|
||||
```bash
|
||||
# Check export directory
|
||||
ls -la /tmp/.luzia-kg-exports/
|
||||
|
||||
# Should contain 4 JSON files
|
||||
```
|
||||
|
||||
## Integration with Luzia Flow
|
||||
|
||||
The plugin system integrates at multiple points:
|
||||
|
||||
1. **Task Dispatch**: Plugins matched before dispatcher queues task
|
||||
2. **Skill Recommendation**: Top 3-5 skills suggested for execution
|
||||
3. **Context Hydration**: Task context enriched with plugin metadata
|
||||
4. **Knowledge Graph**: Plugin skills indexed for search/discovery
|
||||
|
||||
## See Also
|
||||
|
||||
- `tests/test_plugin_system.py` - Test suite
|
||||
- `lib/responsive_dispatcher.py` - Task dispatcher
|
||||
- `lib/flow_intelligence.py` - Task flow management
|
||||
- `/opt/server-agents/orchestrator/docs/` - Full documentation
|
||||
Reference in New Issue
Block a user