SuperClaude/setup/components/agent_personas.py
kazuki nakai 00706f0ea9
feat: comprehensive framework improvements (#447)
* refactor(docs): move core docs into framework/business/research (move-only)

- framework/: principles, rules, flags (思想・行動規範)
- business/: symbols, examples (ビジネス領域)
- research/: config (調査設定)
- All files renamed to lowercase for consistency

* docs: update references to new directory structure

- Update ~/.claude/CLAUDE.md with new paths
- Add migration notice in core/MOVED.md
- Remove pm.md.backup
- All @superclaude/ references now point to framework/business/research/

* fix(setup): update framework_docs to use new directory structure

- Add validate_prerequisites() override for multi-directory validation
- Add _get_source_dirs() for framework/business/research directories
- Override _discover_component_files() for multi-directory discovery
- Override get_files_to_install() for relative path handling
- Fix get_size_estimate() to use get_files_to_install()
- Fix uninstall/update/validate to use install_component_subdir

Fixes installation validation errors for new directory structure.

Tested: make dev installs successfully with new structure
  - framework/: flags.md, principles.md, rules.md
  - business/: examples.md, symbols.md
  - research/: config.md

* refactor(modes): update component references for docs restructure

* chore: remove redundant docs after PLANNING.md migration

Cleanup after Self-Improvement Loop implementation:

**Deleted (21 files, ~210KB)**:
- docs/Development/ - All content migrated to PLANNING.md & TASK.md
  * ARCHITECTURE.md (15KB) → PLANNING.md
  * TASKS.md (3.7KB) → TASK.md
  * ROADMAP.md (11KB) → TASK.md
  * PROJECT_STATUS.md (4.2KB) → outdated
  * 13 PM Agent research files → archived in KNOWLEDGE.md
- docs/PM_AGENT.md - Old implementation status
- docs/pm-agent-implementation-status.md - Duplicate
- docs/templates/ - Empty directory

**Retained (valuable documentation)**:
- docs/memory/ - Active session metrics & context
- docs/patterns/ - Reusable patterns
- docs/research/ - Research reports
- docs/user-guide*/ - User documentation (4 languages)
- docs/reference/ - Reference materials
- docs/getting-started/ - Quick start guides
- docs/agents/ - Agent-specific guides
- docs/testing/ - Test procedures

**Result**:
- Eliminated redundancy after Root Documents consolidation
- Preserved all valuable content in PLANNING.md, TASK.md, KNOWLEDGE.md
- Maintained user-facing documentation structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: relocate PM modules to commands/modules

- Move modules to superclaude/commands/modules/
- Organize command-specific modules under commands/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: add self-improvement loop with 4 root documents

Implements Self-Improvement Loop based on Cursor's proven patterns:

**New Root Documents**:
- PLANNING.md: Architecture, design principles, 10 absolute rules
- TASK.md: Current tasks with priority (🔴🟡🟢)
- KNOWLEDGE.md: Accumulated insights, best practices, failures
- README.md: Updated with developer documentation links

**Key Features**:
- Session Start Protocol: Read docs → Git status → Token budget → Ready
- Evidence-Based Development: No guessing, always verify
- Parallel Execution Default: Wave → Checkpoint → Wave pattern
- Mac Environment Protection: Docker-first, no host pollution
- Failure Pattern Learning: Past mistakes become prevention rules

**Cleanup**:
- Removed: docs/memory/checkpoint.json, current_plan.json (migrated to TASK.md)
- Enhanced: setup/components/commands.py (module discovery)

**Benefits**:
- LLM reads rules at session start → consistent quality
- Past failures documented → no repeats
- Progressive knowledge accumulation → continuous improvement
- 3.5x faster execution with parallel patterns

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* test: validate Self-Improvement Loop workflow

Tested complete cycle: Read docs → Extract rules → Execute task → Update docs

Test Results:
- Session Start Protocol:  All 6 steps successful
- Rule Extraction:  10/10 absolute rules identified from PLANNING.md
- Task Identification:  Next tasks identified from TASK.md
- Knowledge Application:  Failure patterns accessed from KNOWLEDGE.md
- Documentation Update:  TASK.md and KNOWLEDGE.md updated with completed work
- Confidence Score: 95% (exceeds 70% threshold)

Proved Self-Improvement Loop closes: Execute → Learn → Update → Improve

* refactor: responsibility-driven component architecture

Rename components to reflect their responsibilities:
- framework_docs.py → knowledge_base.py (KnowledgeBaseComponent)
- modes.py → behavior_modes.py (BehaviorModesComponent)
- agents.py → agent_personas.py (AgentPersonasComponent)
- commands.py → slash_commands.py (SlashCommandsComponent)
- mcp.py → mcp_integration.py (MCPIntegrationComponent)

Each component now clearly documents its responsibility:
- knowledge_base: Framework knowledge initialization
- behavior_modes: Execution mode definitions
- agent_personas: AI agent personality definitions
- slash_commands: CLI command registration
- mcp_integration: External tool integration

Benefits:
- Self-documenting architecture
- Clear responsibility boundaries
- Easy to navigate and extend
- Scalable for future hierarchical organization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: add project-specific CLAUDE.md with UV rules

- Document UV as required Python package manager
- Add common operations and integration examples
- Document project structure and component architecture
- Provide development workflow guidelines

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: resolve installation failures after framework_docs rename

## Problems Fixed
1. **Syntax errors**: Duplicate docstrings in all component files (line 1)
2. **Dependency mismatch**: Stale framework_docs references after rename to knowledge_base

## Changes
- Fix docstring format in all component files (behavior_modes, agent_personas, slash_commands, mcp_integration)
- Update all dependency references: framework_docs → knowledge_base
- Update component registration calls in knowledge_base.py (5 locations)
- Update install.py files in both setup/ and superclaude/ (5 locations total)
- Fix documentation links in README-ja.md and README-zh.md

## Verification
 All components load successfully without syntax errors
 Dependency resolution works correctly
 Installation completes in 0.5s with all validations passing
 make dev succeeds

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: add automated README translation workflow

## New Features
- **Auto-translation workflow** using GPT-Translate
- Automatically translates README.md to Chinese (ZH) and Japanese (JA)
- Triggers on README.md changes to master/main branches
- Cost-effective: ~¥90/month for typical usage

## Implementation Details
- Uses OpenAI GPT-4 for high-quality translations
- GitHub Actions integration with gpt-translate@v1.1.11
- Secure API key management via GitHub Secrets
- Automatic commit and PR creation on translation updates

## Files Added
- `.github/workflows/translation-sync.yml` - Auto-translation workflow
- `docs/Development/translation-workflow.md` - Setup guide and documentation

## Setup Required
Add `OPENAI_API_KEY` to GitHub repository secrets to enable auto-translation.

## Benefits
- 🤖 Automated translation on every README update
- 💰 Low cost (~$0.06 per translation)
- 🛡️ Secure API key storage
- 🔄 Consistent translation quality across languages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(mcp): update airis-mcp-gateway URL to correct organization

Fixes #440

## Problem
Code referenced non-existent `oraios/airis-mcp-gateway` repository,
causing MCP installation to fail completely.

## Root Cause
- Repository was moved to organization: `agiletec-inc/airis-mcp-gateway`
- Old reference `oraios/airis-mcp-gateway` no longer exists
- Users reported "not a python/uv module" error

## Changes
- Update install_command URL: oraios → agiletec-inc
- Update run_command URL: oraios → agiletec-inc
- Location: setup/components/mcp_integration.py lines 37-38

## Verification
 Correct URL now references active repository
 MCP installation will succeed with proper organization
 No other code references oraios/airis-mcp-gateway

## Related Issues
- Fixes #440 (Airis-mcp-gateway url has changed)
- Related to #442 (MCP update issues)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: replace cloud translation with local Neural CLI

## Changes

### Removed (OpenAI-dependent)
-  `.github/workflows/translation-sync.yml` - GPT-Translate workflow
-  `docs/Development/translation-workflow.md` - OpenAI setup docs

### Added (Local Ollama-based)
-  `Makefile`: New `make translate` target using Neural CLI
-  `docs/Development/translation-guide.md` - Neural CLI guide

## Benefits

**Before (GPT-Translate)**:
- 💰 Monthly cost: ~¥90 (OpenAI API)
- 🔑 Requires API key setup
- 🌐 Data sent to external API
- ⏱️ Network latency

**After (Neural CLI)**:
-  **$0 cost** - Fully local execution
-  **No API keys** - Zero setup friction
-  **Privacy** - No external data transfer
-  **Fast** - ~1-2 min per README
-  **Offline capable** - Works without internet

## Technical Details

**Neural CLI**:
- Built in Rust with Tauri
- Uses Ollama + qwen2.5:3b model
- Binary size: 4.0MB
- Auto-installs to ~/.local/bin/

**Usage**:
```bash
make translate  # Translates README.md → README-zh.md, README-ja.md
```

## Requirements

- Ollama installed: `curl -fsSL https://ollama.com/install.sh | sh`
- Model downloaded: `ollama pull qwen2.5:3b`
- Neural CLI built: `cd ~/github/neural/src-tauri && cargo build --bin neural-cli --release`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: kazuki <kazuki@kazukinoMacBook-Air.local>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-18 20:28:10 +05:30

265 lines
9.4 KiB
Python

"""
Agent Personas Component
Responsibility: Defines AI agent personalities and role-based behaviors.
Provides specialized personas for different task types.
"""
from typing import Dict, List, Tuple, Optional, Any
from pathlib import Path
from ..core.base import Component
from setup import __version__
class AgentPersonasComponent(Component):
"""SuperClaude specialized AI agents component"""
def __init__(self, install_dir: Optional[Path] = None):
"""Initialize agents component"""
super().__init__(install_dir, Path("agents"))
def get_metadata(self) -> Dict[str, str]:
"""Get component metadata"""
return {
"name": "agents",
"version": __version__,
"description": "15 specialized AI agents with domain expertise and intelligent routing",
"category": "agents",
}
def is_reinstallable(self) -> bool:
"""
Agents should always be synced to latest version.
SuperClaude agent files always overwrite existing files.
"""
return True
def get_metadata_modifications(self) -> Dict[str, Any]:
"""Get metadata modifications for agents"""
return {
"components": {
"agents": {
"version": __version__,
"installed": True,
"agents_count": len(self.component_files),
"install_directory": str(self.install_component_subdir),
}
}
}
def _install(self, config: Dict[str, Any]) -> bool:
"""Install agents component"""
self.logger.info("Installing SuperClaude specialized agents...")
# Call parent install method
success = super()._install(config)
if success:
# Run post-install setup
success = self._post_install()
if success:
self.logger.success(
f"Successfully installed {len(self.component_files)} specialized agents"
)
return success
def _post_install(self) -> bool:
"""Post-install setup for agents"""
try:
# Update metadata with agents registration
metadata_mods = self.get_metadata_modifications()
self.settings_manager.update_metadata(metadata_mods)
self.logger.info("Updated metadata with agents configuration")
# Add component registration (with file list for sync)
self.settings_manager.add_component_registration(
"agents",
{
"version": __version__,
"category": "agents",
"agents_count": len(self.component_files),
"files": list(self.component_files), # Track for sync/deletion
},
)
self.logger.info("Registered agents component in metadata")
return True
except Exception as e:
self.logger.error(f"Failed to complete agents post-install: {e}")
return False
def uninstall(self) -> bool:
"""Uninstall agents component"""
try:
self.logger.info("Uninstalling SuperClaude agents component...")
# Remove agent files
removed_count = 0
for filename in self.component_files:
file_path = self.install_component_subdir / filename
if self.file_manager.remove_file(file_path):
removed_count += 1
self.logger.debug(f"Removed agent: {filename}")
else:
self.logger.warning(f"Could not remove agent: {filename}")
# Remove agents directory if empty
try:
if self.install_component_subdir.exists() and not any(
self.install_component_subdir.iterdir()
):
self.install_component_subdir.rmdir()
self.logger.debug("Removed empty agents directory")
except Exception as e:
self.logger.warning(f"Could not remove agents directory: {e}")
# Update metadata to remove agents component
try:
if self.settings_manager.is_component_installed("agents"):
self.settings_manager.remove_component_registration("agents")
self.logger.info("Removed agents component from metadata")
except Exception as e:
self.logger.warning(f"Could not update metadata: {e}")
self.logger.success(
f"Agents component uninstalled ({removed_count} agents removed)"
)
return True
except Exception as e:
self.logger.exception(f"Unexpected error during agents uninstallation: {e}")
return False
def get_dependencies(self) -> List[str]:
"""Get component dependencies"""
return ["knowledge_base"]
def update(self, config: Dict[str, Any]) -> bool:
"""
Sync agents component (overwrite + delete obsolete files).
No backup needed - SuperClaude source files are always authoritative.
"""
try:
self.logger.info("Syncing SuperClaude agents component...")
# Get previously installed files from metadata
metadata = self.settings_manager.load_metadata()
previous_files = set(
metadata.get("components", {}).get("agents", {}).get("files", [])
)
# Get current files from source
current_files = set(self.component_files)
# Files to delete (were installed before, but no longer in source)
files_to_delete = previous_files - current_files
# Delete obsolete files
deleted_count = 0
for filename in files_to_delete:
file_path = self.install_component_subdir / filename
if file_path.exists():
try:
file_path.unlink()
deleted_count += 1
self.logger.info(f"Deleted obsolete agent: {filename}")
except Exception as e:
self.logger.warning(f"Could not delete {filename}: {e}")
# Install/overwrite current files (no backup)
success = self._install(config)
if success:
self.logger.success(
f"Agents synced: {len(current_files)} files, {deleted_count} obsolete files removed"
)
else:
self.logger.error("Agents sync failed")
return success
except Exception as e:
self.logger.exception(f"Unexpected error during agents sync: {e}")
return False
def _get_source_dir(self) -> Path:
"""Get source directory for agent files"""
# Assume we're in superclaude/setup/components/agents.py
# and agent files are in superclaude/superclaude/Agents/
project_root = Path(__file__).parent.parent.parent
return project_root / "superclaude" / "agents"
def get_size_estimate(self) -> int:
"""Get estimated installation size"""
total_size = 0
source_dir = self._get_source_dir()
for filename in self.component_files:
file_path = source_dir / filename
if file_path.exists():
total_size += file_path.stat().st_size
# Add overhead for directories and metadata
total_size += 5120 # ~5KB overhead
return total_size
def get_installation_summary(self) -> Dict[str, Any]:
"""Get installation summary"""
return {
"component": self.get_metadata()["name"],
"version": self.get_metadata()["version"],
"agents_installed": len(self.component_files),
"agent_files": self.component_files,
"estimated_size": self.get_size_estimate(),
"install_directory": str(self.install_component_subdir),
"dependencies": self.get_dependencies(),
}
def validate_installation(self) -> Tuple[bool, List[str]]:
"""Validate that agents component is correctly installed"""
errors = []
# Check if agents directory exists
if not self.install_component_subdir.exists():
errors.append(
f"Agents directory not found: {self.install_component_subdir}"
)
return False, errors
# Check if all agent files exist
missing_agents = []
for filename in self.component_files:
agent_path = self.install_component_subdir / filename
if not agent_path.exists():
missing_agents.append(filename)
if missing_agents:
errors.append(f"Missing agent files: {missing_agents}")
# Check version in metadata
if not self.get_installed_version():
errors.append("Agents component not registered in metadata")
# Check if at least some standard agents are present
expected_agents = [
"system-architect.md",
"frontend-architect.md",
"backend-architect.md",
"security-engineer.md",
]
missing_core_agents = []
for agent in expected_agents:
if agent not in self.component_files:
missing_core_agents.append(agent)
if missing_core_agents:
errors.append(f"Missing core agent files: {missing_core_agents}")
return len(errors) == 0, errors