soma-core 2.0.1

World's first production-ready self-aware development system with meta-cognitive capabilities and cognitive reasoning engine for intelligent development platforms
Documentation
#!/usr/bin/env python3

"""
SOMA-CORE Systematic GitHub Issue Creation
===========================================

Creates GitHub issues systematically based on the project plan and current status.
This script organizes work into logical groups and priorities.

Usage:
    python3 create_issues_systematic.py [--dry-run] [--group=GROUPNAME]
"""

import os
import sys
import requests
import argparse
from typing import List
from dataclasses import dataclass


@dataclass
class Issue:
    title: str
    description: str
    labels: List[str]
    priority: str  # high, medium, low
    group: str


class GitHubIssueManager:
    def __init__(self, token: str, username: str, repo: str, project_id: str = None):
        self.token = token
        self.username = username
        self.repo = repo
        self.project_id = project_id
        self.base_url = "https://api.github.com"
        self.headers = {
            "Authorization": f"token {token}",
            "Accept": "application/vnd.github+json",
            "Content-Type": "application/json"
        }

    def create_issue(self, issue: Issue, dry_run: bool = False) -> bool:
        """Create a GitHub issue"""
        
        body = f"""## 🎯 SOMA-CORE {issue.group}

**Description:**
{issue.description}

## 📋 Implementation Checklist
- [ ] Research and design phase
- [ ] Core implementation  
- [ ] Integration with existing system
- [ ] Testing and validation
- [ ] Documentation update
- [ ] Performance benchmarks

## 🔗 Related
- Part of SOMA-CORE multi-agent editing system
- Priority: {issue.priority.upper()}
- Group: {issue.group}

## 🏷️ Labels
{', '.join(issue.labels)}

---
*Auto-generated by SOMA-CORE systematic issue creation*"""

        if dry_run:
            print(f"[DRY RUN] Would create issue: {issue.title}")
            print(f"  Labels: {', '.join(issue.labels)}")
            print(f"  Priority: {issue.priority}")
            print(f"  Group: {issue.group}")
            return True

        data = {
            "title": issue.title,
            "body": body,
            "labels": issue.labels
        }

        try:
            response = requests.post(
                f"{self.base_url}/repos/{self.username}/{self.repo}/issues",
                headers=self.headers,
                json=data
            )
            
            if response.status_code == 201:
                issue_data = response.json()
                print(f"✅ Created issue #{issue_data['number']}: {issue.title}")
                
                # Add to project if project_id is provided
                if self.project_id:
                    self.add_to_project(issue_data['node_id'], issue.title)
                
                return True
            else:
                print(f"❌ Failed to create issue: {issue.title}")
                print(f"   Error: {response.text}")
                return False
                
        except Exception as e:
            print(f"❌ Error creating issue {issue.title}: {str(e)}")
            return False

    def add_to_project(self, node_id: str, title: str):
        """Add issue to GitHub project"""
        query = """
        mutation($projectId: ID!, $contentId: ID!) {
            addProjectV2ItemById(input: {
                projectId: $projectId,
                contentId: $contentId
            }) {
                item { id }
            }
        }
        """
        
        variables = {
            "projectId": self.project_id,
            "contentId": node_id
        }
        
        try:
            response = requests.post(
                "https://api.github.com/graphql",
                headers={
                    "Authorization": f"bearer {self.token}",
                    "Content-Type": "application/json"
                },
                json={"query": query, "variables": variables}
            )
            
            if response.status_code == 200:
                result = response.json()
                if "errors" not in result:
                    print(f"📊 Added to project: {title}")
                else:
                    print(f"⚠️  Project add warning for {title}: {result['errors']}")
            else:
                print(f"⚠️  Failed to add {title} to project: {response.text}")
                
        except Exception as e:
            print(f"⚠️  Error adding {title} to project: {str(e)}")

def get_systematic_issues() -> List[Issue]:
    """Define all issues based on the project plan"""
    
    issues = []
    
    # High Priority - Phase 1: Enhanced Edit Control
    issues.extend([
        Issue(
            title="EditModificationInterface - Inline Edit Modification",
            description="Allow users to modify proposed edits before applying with inline editor capabilities. Users should be able to tweak code suggestions, merge proposals from multiple agents, and split large edits into smaller chunks.",
            labels=["soma++", "edit-control", "enhancement", "high-priority"],
            priority="high",
            group="Edit Control Enhancement"
        ),
        Issue(
            title="AdvancedPreviewSystem - Side-by-side Live Editor",
            description="Implement side-by-side editor view with live editing, syntax highlighting and error checking. Include real-time validation of modified edits and preview of downstream effects on other files.",
            labels=["soma++", "preview", "enhancement", "high-priority"],
            priority="high",
            group="Edit Control Enhancement"
        ),
        Issue(
            title="GranularApprovalLevels - Multi-level Approval System",
            description="Implement granular approval system with: approve with modifications, approve conditionally (with warnings), approve for review later, and queue for batch processing.",
            labels=["soma++", "approval", "enhancement", "high-priority"],
            priority="high",
            group="Edit Control Enhancement"
        ),
        Issue(
            title="StagedApplicationSystem - Phased Edit Application",
            description="Apply edits in groups/phases with testing between stages, rollback capabilities to any previous stage, and stable state bookmarking.",
            labels=["soma++", "staging", "enhancement", "high-priority"],
            priority="high",
            group="Edit Control Enhancement"
        )
    ])
    
    # Medium Priority - Phase 2: Classification & Workflow
    issues.extend([
        Issue(
            title="EditClassificationSystem - Automated Edit Categorization",
            description="Auto-categorize edits (critical, safe, cosmetic, experimental) with risk assessment scoring, impact analysis, and dependency tracking between edits.",
            labels=["soma++", "classification", "enhancement", "medium-priority"],
            priority="medium",
            group="Classification System"
        ),
        Issue(
            title="GitIntegration - Branch-per-session Automation",
            description="Create branches per edit session with automated backup strategies, CI/CD hooks, and code review integration.",
            labels=["soma++", "git", "workflow", "medium-priority"],
            priority="medium",
            group="Workflow Integration"
        ),
        Issue(
            title="FileProtectionConstraints - File-level Protection Rules",
            description="Mark files as read-only or critical with edit boundaries (only certain functions), require higher consensus for sensitive files, and custom validation rules per file type.",
            labels=["soma++", "protection", "security", "medium-priority"],
            priority="medium",
            group="Edit Control Enhancement"
        ),
        Issue(
            title="EditHistoryTimeTravel - Complete Edit History Management",
            description="Complete edit history with metadata, rollback to any point in history, branch and merge edit timelines, and compare different edit paths.",
            labels=["soma++", "history", "enhancement", "medium-priority"],
            priority="medium",
            group="Workflow Integration"
        )
    ])
    
    # High Priority - Core SOMA Operators
    issues.extend([
        Issue(
            title="IntrospectOperator - Recursive Self-diagnosis",
            description="Implement operator for recursive self-diagnosis and phase awareness in multi-agent editing workflows. Should analyze reasoning paths and detect cognitive bottlenecks.",
            labels=["soma++", "operator", "cognitive", "high-priority"],
            priority="high",
            group="Core SOMA Operators"
        ),
        Issue(
            title="ConsensusOperator - Multi-agent Agreement Resolver",
            description="Multi-agent edit agreement resolver across operations with conflict resolution. Should find symbolic agreement across diverse agent proposals with configurable thresholds.",
            labels=["soma++", "operator", "consensus", "high-priority"],
            priority="high",
            group="Core SOMA Operators"
        ),
        Issue(
            title="CognitiveLoadOperator - Complexity Estimation",
            description="Estimates computational complexity of reasoning paths and edit proposal generation. Should provide dynamic estimation of symbolic processing requirements.",
            labels=["soma++", "operator", "cognitive", "high-priority"],
            priority="high",
            group="Core SOMA Operators"
        ),
        Issue(
            title="AttentionFocusOperator - Context Prioritization",
            description="Prioritizes high-salience context elements during ops execution and code analysis. Should weight context elements by semantic and temporal relevance.",
            labels=["soma++", "operator", "attention", "high-priority"],
            priority="high",
            group="Core SOMA Operators"
        )
    ])
    
    # Medium Priority - Advanced Features
    issues.extend([
        Issue(
            title="ConditionalLogicSystem - Test-based Edit Application",
            description="Apply edits only if tests pass with conditional chains (if X succeeds, then apply Y), performance benchmarking gates, and user-defined success criteria.",
            labels=["soma++", "conditional", "testing", "medium-priority"],
            priority="medium",
            group="Workflow Integration"
        ),
        Issue(
            title="CustomAgentConfiguration - User-defined Agent Personalities",
            description="User-defined agent personalities/focus with custom prompting and constraints, agent behavior modification based on project context, and personal agent training on user preferences.",
            labels=["soma++", "agents", "customization", "medium-priority"],
            priority="medium",
            group="Agent Configuration"
        ),
        Issue(
            title="VisualReasoningOperator - Image-to-symbolic Conversion",
            description="Converts image inputs into symbolic graph concepts for visual code understanding. Enable processing of diagrams, screenshots, and visual documentation for code editing.",
            labels=["soma++", "operator", "visual", "medium-priority"],
            priority="medium",
            group="Core SOMA Operators"
        ),
        Issue(
            title="MetaReflectiveOperator - System Introspection",
            description="Claude's signature operator for recursive system introspection and self-improvement. Should analyze the editing system's own performance and suggest improvements.",
            labels=["soma++", "operator", "meta", "medium-priority"],
            priority="medium",
            group="Core SOMA Operators"
        )
    ])
    
    # Low Priority - Future Enhancements
    issues.extend([
        Issue(
            title="Performance Monitoring Dashboard",
            description="Create comprehensive dashboard for edit metrics, success rates, agent performance, and system health monitoring.",
            labels=["soma++", "monitoring", "dashboard", "low-priority"],
            priority="low",
            group="System Monitoring"
        ),
        Issue(
            title="Advanced CLI Interface - Multi-pane View",
            description="Enhanced CLI with multi-pane view (file tree, edit list, preview, diff), keyboard shortcuts for rapid decision making, and undo/redo functionality.",
            labels=["soma++", "cli", "ui", "low-priority"],
            priority="low",
            group="User Interface"
        ),
        Issue(
            title="GUI Prototype - Visual Edit Management",
            description="Future GUI considerations: Visual diff editor with drag-and-drop, graph view of edit dependencies, real-time collaboration view, and dashboard for edit metrics.",
            labels=["soma++", "gui", "prototype", "low-priority"],
            priority="low",
            group="User Interface"
        )
    ])
    
    return issues

def main():
    parser = argparse.ArgumentParser(description="Systematically create GitHub issues for SOMA-CORE")
    parser.add_argument("--dry-run", action="store_true", help="Preview issues without creating them")
    parser.add_argument("--group", help="Only create issues for specific group")
    parser.add_argument("--priority", help="Only create issues with specific priority (high/medium/low)")
    
    args = parser.parse_args()
    
    # Load configuration
    script_dir = os.path.dirname(os.path.abspath(__file__))
    config_file = os.path.join(script_dir, "config.env")
    
    if not os.path.exists(config_file):
        print("❌ Config file not found. Run setup.sh first.")
        sys.exit(1)
    
    # Parse config file
    config = {}
    with open(config_file, 'r') as f:
        for line in f:
            if line.strip() and not line.startswith('#'):
                key, value = line.strip().split('=', 1)
                config[key] = value.strip('"')
    
    # Initialize GitHub manager
    manager = GitHubIssueManager(
        token=config['GITHUB_TOKEN'],
        username=config['GITHUB_USERNAME'],
        repo=config['GITHUB_REPO'],
        project_id=config.get('GITHUB_PROJECT_ID')
    )
    
    # Get issues
    all_issues = get_systematic_issues()
    
    # Filter issues if requested
    filtered_issues = all_issues
    if args.group:
        filtered_issues = [i for i in filtered_issues if i.group == args.group]
    if args.priority:
        filtered_issues = [i for i in filtered_issues if i.priority == args.priority]
    
    print(f"🚀 SOMA-CORE Systematic Issue Creation")
    print(f"=====================================")
    print(f"Total issues: {len(filtered_issues)}")
    if args.dry_run:
        print("🔍 DRY RUN MODE - No issues will be created")
    print()
    
    # Group issues by group and priority for organized creation
    groups = {}
    for issue in filtered_issues:
        key = f"{issue.group} ({issue.priority})"
        if key not in groups:
            groups[key] = []
        groups[key].append(issue)
    
    # Create issues
    created = 0
    failed = 0
    
    for group_name, issues in groups.items():
        print(f"\n📂 {group_name}")
        print("=" * (len(group_name) + 4))
        
        for issue in issues:
            if manager.create_issue(issue, args.dry_run):
                created += 1
            else:
                failed += 1
    
    print(f"\n🎉 Summary")
    print(f"=========")
    print(f"✅ Created: {created}")
    if failed > 0:
        print(f"❌ Failed: {failed}")
    
    if not args.dry_run:
        print(f"\n🔗 View at: https://github.com/{config['GITHUB_USERNAME']}/{config['GITHUB_REPO']}/issues")
        if config.get('GITHUB_PROJECT_ID'):
            print(f"📊 Project: Check your GitHub projects page")

if __name__ == "__main__":
    main()