Implements issue #168 - Modern Python packaging with uv support This is Phase 1 of the modernization effort, establishing the core package structure and build system. ## Major Changes ### 1. Migrated to src/ Layout - Moved cli/ → src/skill_seekers/cli/ - Moved skill_seeker_mcp/ → src/skill_seekers/mcp/ - Created root package: src/skill_seekers/__init__.py - Updated all imports: cli. → skill_seekers.cli. - Updated all imports: skill_seeker_mcp. → skill_seekers.mcp. ### 2. Created pyproject.toml - Modern Python packaging configuration - All dependencies properly declared - 8 CLI entry points configured: * skill-seekers (unified CLI) * skill-seekers-scrape * skill-seekers-github * skill-seekers-pdf * skill-seekers-unified * skill-seekers-enhance * skill-seekers-package * skill-seekers-upload * skill-seekers-estimate - uv tool support enabled - Build system: setuptools with wheel ### 3. Created Unified CLI (main.py) - Git-style subcommands (skill-seekers scrape, etc.) - Delegates to existing tool main() functions - Full help system at top-level and subcommand level - Backwards compatible with individual commands ### 4. Updated Package Versions - cli/__init__.py: 1.3.0 → 2.0.0 - mcp/__init__.py: 1.2.0 → 2.0.0 - Root package: 2.0.0 ### 5. Updated Test Suite - Fixed test_package_structure.py for new layout - All 28 package structure tests passing - Updated all test imports for new structure ## Installation Methods (Working) ```bash # Development install pip install -e . # Run unified CLI skill-seekers --version # → 2.0.0 skill-seekers --help # Run individual tools skill-seekers-scrape --help skill-seekers-github --help ``` ## Test Results - Package structure tests: 28/28 passing ✅ - Package installs successfully ✅ - All entry points working ✅ ## Still TODO (Phase 2) - [ ] Run full test suite (299 tests) - [ ] Update documentation (README, CLAUDE.md, etc.) - [ ] Test with uv tool run/install - [ ] Build and publish to PyPI - [ ] Create PR and merge ## Breaking Changes None - fully backwards compatible. Old import paths still work. ## Migration for Users No action needed. Package works with both pip and uv. Closes #168 (when complete) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""Configuration constants for Skill Seekers CLI.
|
|
|
|
This module centralizes all magic numbers and configuration values used
|
|
across the CLI tools to improve maintainability and clarity.
|
|
"""
|
|
|
|
# ===== SCRAPING CONFIGURATION =====
|
|
|
|
# Default scraping limits
|
|
DEFAULT_RATE_LIMIT = 0.5 # seconds between requests
|
|
DEFAULT_MAX_PAGES = 500 # maximum pages to scrape
|
|
DEFAULT_CHECKPOINT_INTERVAL = 1000 # pages between checkpoints
|
|
DEFAULT_ASYNC_MODE = False # use async mode for parallel scraping (opt-in)
|
|
|
|
# Content analysis limits
|
|
CONTENT_PREVIEW_LENGTH = 500 # characters to check for categorization
|
|
MAX_PAGES_WARNING_THRESHOLD = 10000 # warn if config exceeds this
|
|
|
|
# Quality thresholds
|
|
MIN_CATEGORIZATION_SCORE = 2 # minimum score for category assignment
|
|
URL_MATCH_POINTS = 3 # points for URL keyword match
|
|
TITLE_MATCH_POINTS = 2 # points for title keyword match
|
|
CONTENT_MATCH_POINTS = 1 # points for content keyword match
|
|
|
|
# ===== ENHANCEMENT CONFIGURATION =====
|
|
|
|
# API-based enhancement limits (uses Anthropic API)
|
|
API_CONTENT_LIMIT = 100000 # max characters for API enhancement
|
|
API_PREVIEW_LIMIT = 40000 # max characters for preview
|
|
|
|
# Local enhancement limits (uses Claude Code Max)
|
|
LOCAL_CONTENT_LIMIT = 50000 # max characters for local enhancement
|
|
LOCAL_PREVIEW_LIMIT = 20000 # max characters for preview
|
|
|
|
# ===== PAGE ESTIMATION =====
|
|
|
|
# Estimation and discovery settings
|
|
DEFAULT_MAX_DISCOVERY = 1000 # default max pages to discover
|
|
DISCOVERY_THRESHOLD = 10000 # threshold for warnings
|
|
|
|
# ===== FILE LIMITS =====
|
|
|
|
# Output and processing limits
|
|
MAX_REFERENCE_FILES = 100 # maximum reference files per skill
|
|
MAX_CODE_BLOCKS_PER_PAGE = 5 # maximum code blocks to extract per page
|
|
|
|
# ===== EXPORT CONSTANTS =====
|
|
|
|
__all__ = [
|
|
# Scraping
|
|
'DEFAULT_RATE_LIMIT',
|
|
'DEFAULT_MAX_PAGES',
|
|
'DEFAULT_CHECKPOINT_INTERVAL',
|
|
'DEFAULT_ASYNC_MODE',
|
|
'CONTENT_PREVIEW_LENGTH',
|
|
'MAX_PAGES_WARNING_THRESHOLD',
|
|
'MIN_CATEGORIZATION_SCORE',
|
|
'URL_MATCH_POINTS',
|
|
'TITLE_MATCH_POINTS',
|
|
'CONTENT_MATCH_POINTS',
|
|
# Enhancement
|
|
'API_CONTENT_LIMIT',
|
|
'API_PREVIEW_LIMIT',
|
|
'LOCAL_CONTENT_LIMIT',
|
|
'LOCAL_PREVIEW_LIMIT',
|
|
# Estimation
|
|
'DEFAULT_MAX_DISCOVERY',
|
|
'DISCOVERY_THRESHOLD',
|
|
# Limits
|
|
'MAX_REFERENCE_FILES',
|
|
'MAX_CODE_BLOCKS_PER_PAGE',
|
|
]
|