Added PyPI v3 setup and readme updates (#142)

Fixed #135
This commit is contained in:
Mithun Gowda B 2025-07-15 17:36:49 +05:30 committed by GitHub
commit ece628309d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 102 additions and 41 deletions

7
MANIFEST.in Normal file
View File

@ -0,0 +1,7 @@
include VERSION
include README.md
include LICENSE
recursive-include setup *
recursive-include SuperClaude *
recursive-include config *
recursive-include profiles *

View File

@ -1,5 +1,7 @@
# SuperClaude v3 🚀 # SuperClaude v3 🚀
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![PyPI version](https://badge.fury.io/py/SuperClaude.svg)](https://pypi.org/project/SuperClaude/)
[![Version](https://img.shields.io/badge/version-3.0.0-blue.svg)](https://github.com/NomenAK/SuperClaude) [![Version](https://img.shields.io/badge/version-3.0.0-blue.svg)](https://github.com/NomenAK/SuperClaude)
[![GitHub issues](https://img.shields.io/github/issues/NomenAK/SuperClaude)](https://github.com/NomenAK/SuperClaude/issues) [![GitHub issues](https://img.shields.io/github/issues/NomenAK/SuperClaude)](https://github.com/NomenAK/SuperClaude/issues)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/NomenAK/SuperClaude/blob/master/CONTRIBUTING.md) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/NomenAK/SuperClaude/blob/master/CONTRIBUTING.md)
@ -91,16 +93,22 @@ This is because v3 has a different structure and the old files can cause conflic
### Quick Start ### Quick Start
```bash ```bash
pip install SuperClaude
#Install with python-pip
```
### Install via Git
```bash
# Clone the repo # Clone the repo
git clone https://github.com/NomenAK/SuperClaude.git git clone https://github.com/NomenAK/SuperClaude.git
cd SuperClaude cd SuperClaude
# Install with our unified CLI # Install with our unified CLI
python3 SuperClaude.py install --quick pip install .
# That's it! 🎉 # That's it! 🎉
``` ```
**Missing Python?** **Missing Python?**
```bash ```bash
# Linux (Ubuntu/Debian) # Linux (Ubuntu/Debian)
@ -116,16 +124,16 @@ brew install python3
### Other Installation Options ### Other Installation Options
```bash ```bash
# Minimal install (just core framework) # Minimal install (just core framework)
python3 SuperClaude.py install --minimal python3 SuperClaude install --minimal
# Developer setup (everything) # Developer setup (everything)
python3 SuperClaude.py install --profile developer python3 SuperClaude install --profile developer
# Interactive selection # Interactive selection
python3 SuperClaude.py install python3 SuperClaude install
# See what's available # See what's available
python3 SuperClaude.py install --list-components python3 SuperClaude install --list-components
``` ```
The installer handles everything: framework files, MCP servers, and Claude Code configuration. The installer handles everything: framework files, MCP servers, and Claude Code configuration.
@ -186,7 +194,7 @@ The codebase is pretty straightforward Python + documentation files.
``` ```
SuperClaude/ SuperClaude/
├── SuperClaude.py # Main installer CLI ├── setup.py # pypi setup file
├── SuperClaude/ # Framework files ├── SuperClaude/ # Framework files
│ ├── Core/ # Behavior documentation (COMMANDS.md, FLAGS.md, etc.) │ ├── Core/ # Behavior documentation (COMMANDS.md, FLAGS.md, etc.)
│ ├── Commands/ # 16 slash command definitions │ ├── Commands/ # 16 slash command definitions

View File

View File

View File

0
SuperClaude/__init__.py Normal file
View File

22
SuperClaude.py → SuperClaude/__main__.py Executable file → Normal file
View File

@ -4,11 +4,11 @@ SuperClaude Framework Management Hub
Unified entry point for all SuperClaude operations Unified entry point for all SuperClaude operations
Usage: Usage:
SuperClaude.py install [options] SuperClaude install [options]
SuperClaude.py update [options] SuperClaude update [options]
SuperClaude.py uninstall [options] SuperClaude uninstall [options]
SuperClaude.py backup [options] SuperClaude backup [options]
SuperClaude.py --help SuperClaude --help
""" """
import sys import sys
@ -19,7 +19,8 @@ from pathlib import Path
from typing import Dict, Callable from typing import Dict, Callable
# Add the 'setup' directory to the Python import path # Add the 'setup' directory to the Python import path
setup_dir = Path(__file__).parent / "setup" from pkg_resources import resource_filename
setup_dir = resource_filename('setup', '')
sys.path.insert(0, str(setup_dir)) sys.path.insert(0, str(setup_dir))
# Try to import utilities from the setup package # Try to import utilities from the setup package
@ -77,9 +78,9 @@ def create_parser():
description="SuperClaude Framework Management Hub - Unified CLI", description="SuperClaude Framework Management Hub - Unified CLI",
epilog=""" epilog="""
Examples: Examples:
SuperClaude.py install --dry-run SuperClaude install --dry-run
SuperClaude.py update --verbose SuperClaude update --verbose
SuperClaude.py backup --create SuperClaude backup --create
""", """,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[global_parser] parents=[global_parser]
@ -113,7 +114,7 @@ def setup_global_environment(args: argparse.Namespace):
# Log startup context # Log startup context
logger = get_logger() logger = get_logger()
if logger: if logger:
logger.debug(f"SuperClaude.py called with operation: {getattr(args, 'operation', 'None')}") logger.debug(f"SuperClaude called with operation: {getattr(args, 'operation', 'None')}")
logger.debug(f"Arguments: {vars(args)}") logger.debug(f"Arguments: {vars(args)}")
@ -239,3 +240,4 @@ def main() -> int:
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(main()) sys.exit(main())

0
config/__init__.py Normal file
View File

0
profiles/__init__.py Normal file
View File

4
pyproject.toml Normal file
View File

@ -0,0 +1,4 @@
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

40
setup.py Normal file
View File

@ -0,0 +1,40 @@
import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
with open("VERSION", "r") as f:
version = f.read().strip()
setuptools.setup(
name="SuperClaude",
version=version,
author="Mithun Gowda B, NomenAK",
author_email="contact@superclaude.dev",
description="SuperClaude Framework Management Hub",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/NomenAK/SuperClaude",
packages=setuptools.find_packages(),
include_package_data=True,
install_requires=["setuptools"],
entry_points={
"console_scripts": [
"SuperClaude=SuperClaude.__main__:main",
],
},
python_requires=">=3.6",
project_urls={
"GitHub": "https://github.com/NomenAK/SuperClaude",
"Mithun Gowda B": "https://github.com/mithun50",
"NomenAK": "https://github.com/NomenAK",
"Bug Tracker": "https://github.com/NomenAK/SuperClaude/issues",
},
classifiers=[
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
"License :: OSI Approved :: MIT License",
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
],
)

View File

@ -2,7 +2,7 @@
SuperClaude Operations Module SuperClaude Operations Module
This module contains all SuperClaude management operations that can be This module contains all SuperClaude management operations that can be
executed through the unified CLI hub (SuperClaude.py). executed through the unified CLI hub (SuperClaude).
Each operation module should implement: Each operation module should implement:
- register_parser(subparsers): Register CLI arguments for the operation - register_parser(subparsers): Register CLI arguments for the operation

View File

@ -40,12 +40,12 @@ def register_parser(subparsers, global_parser=None) -> argparse.ArgumentParser:
description="Create, list, restore, and manage SuperClaude installation backups", description="Create, list, restore, and manage SuperClaude installation backups",
epilog=""" epilog="""
Examples: Examples:
SuperClaude.py backup --create # Create new backup SuperClaude backup --create # Create new backup
SuperClaude.py backup --list --verbose # List available backups (verbose) SuperClaude backup --list --verbose # List available backups (verbose)
SuperClaude.py backup --restore # Interactive restore SuperClaude backup --restore # Interactive restore
SuperClaude.py backup --restore backup.tar.gz # Restore specific backup SuperClaude backup --restore backup.tar.gz # Restore specific backup
SuperClaude.py backup --info backup.tar.gz # Show backup information SuperClaude backup --info backup.tar.gz # Show backup information
SuperClaude.py backup --cleanup --force # Clean up old backups (forced) SuperClaude backup --cleanup --force # Clean up old backups (forced)
""", """,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
parents=parents parents=parents

View File

@ -39,11 +39,11 @@ def register_parser(subparsers, global_parser=None) -> argparse.ArgumentParser:
description="Install SuperClaude Framework with various options and profiles", description="Install SuperClaude Framework with various options and profiles",
epilog=""" epilog="""
Examples: Examples:
SuperClaude.py install # Interactive installation SuperClaude install # Interactive installation
SuperClaude.py install --quick --dry-run # Quick installation (dry-run) SuperClaude install --quick --dry-run # Quick installation (dry-run)
SuperClaude.py install --profile developer # Developer profile SuperClaude install --profile developer # Developer profile
SuperClaude.py install --components core mcp # Specific components SuperClaude install --components core mcp # Specific components
SuperClaude.py install --verbose --force # Verbose with force mode SuperClaude install --verbose --force # Verbose with force mode
""", """,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
parents=parents parents=parents
@ -121,7 +121,7 @@ def validate_system_requirements(validator: Validator, component_names: List[str
# Provide additional guidance # Provide additional guidance
print(f"\n{Colors.CYAN}💡 Installation Help:{Colors.RESET}") print(f"\n{Colors.CYAN}💡 Installation Help:{Colors.RESET}")
print(" Run 'SuperClaude.py install --diagnose' for detailed system diagnostics") print(" Run 'SuperClaude install --diagnose' for detailed system diagnostics")
print(" and step-by-step installation instructions.") print(" and step-by-step installation instructions.")
return False return False
@ -321,12 +321,12 @@ def run_system_diagnostics(validator: Validator) -> None:
print(f"\n{Colors.BLUE}Next steps:{Colors.RESET}") print(f"\n{Colors.BLUE}Next steps:{Colors.RESET}")
if all_passed: if all_passed:
print(" 1. Run 'SuperClaude.py install' to proceed with installation") print(" 1. Run 'SuperClaude install' to proceed with installation")
print(" 2. Choose your preferred installation mode (quick, minimal, or custom)") print(" 2. Choose your preferred installation mode (quick, minimal, or custom)")
else: else:
print(" 1. Install missing dependencies using the commands above") print(" 1. Install missing dependencies using the commands above")
print(" 2. Restart your terminal after installing tools") print(" 2. Restart your terminal after installing tools")
print(" 3. Run 'SuperClaude.py install --diagnose' again to verify") print(" 3. Run 'SuperClaude install --diagnose' again to verify")
def perform_installation(components: List[str], args: argparse.Namespace) -> bool: def perform_installation(components: List[str], args: argparse.Namespace) -> bool:

View File

@ -38,10 +38,10 @@ def register_parser(subparsers, global_parser=None) -> argparse.ArgumentParser:
description="Uninstall SuperClaude Framework components", description="Uninstall SuperClaude Framework components",
epilog=""" epilog="""
Examples: Examples:
SuperClaude.py uninstall # Interactive uninstall SuperClaude uninstall # Interactive uninstall
SuperClaude.py uninstall --components core # Remove specific components SuperClaude uninstall --components core # Remove specific components
SuperClaude.py uninstall --complete --force # Complete removal (forced) SuperClaude uninstall --complete --force # Complete removal (forced)
SuperClaude.py uninstall --keep-backups # Keep backup files SuperClaude uninstall --keep-backups # Keep backup files
""", """,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
parents=parents parents=parents
@ -484,7 +484,7 @@ def run(args: argparse.Namespace) -> int:
print(f"\n{Colors.CYAN}Uninstall complete:{Colors.RESET}") print(f"\n{Colors.CYAN}Uninstall complete:{Colors.RESET}")
print(f"SuperClaude has been removed from {args.install_dir}") print(f"SuperClaude has been removed from {args.install_dir}")
if not args.complete: if not args.complete:
print(f"You can reinstall anytime using 'SuperClaude.py install'") print(f"You can reinstall anytime using 'SuperClaude install'")
return 0 return 0
else: else:

View File

@ -40,10 +40,10 @@ def register_parser(subparsers, global_parser=None) -> argparse.ArgumentParser:
description="Update SuperClaude Framework components to latest versions", description="Update SuperClaude Framework components to latest versions",
epilog=""" epilog="""
Examples: Examples:
SuperClaude.py update # Interactive update SuperClaude update # Interactive update
SuperClaude.py update --check --verbose # Check for updates (verbose) SuperClaude update --check --verbose # Check for updates (verbose)
SuperClaude.py update --components core mcp # Update specific components SuperClaude update --components core mcp # Update specific components
SuperClaude.py update --backup --force # Create backup before update (forced) SuperClaude update --backup --force # Create backup before update (forced)
""", """,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
parents=parents parents=parents
@ -354,7 +354,7 @@ def run(args: argparse.Namespace) -> int:
# Check if SuperClaude is installed # Check if SuperClaude is installed
if not check_installation_exists(args.install_dir): if not check_installation_exists(args.install_dir):
logger.error(f"SuperClaude installation not found in {args.install_dir}") logger.error(f"SuperClaude installation not found in {args.install_dir}")
logger.info("Use 'SuperClaude.py install' to install SuperClaude first") logger.info("Use 'SuperClaude install' to install SuperClaude first")
return 1 return 1
# Create component registry # Create component registry