The anthropic import is only used to check availability, not actually used in
code. Added # noqa: F401 comment to suppress 'imported but unused' warning.
Fixes GitHub Actions ruff linting failure.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add ANTHROPIC_AVAILABLE check at module level
- Skip TestIssue219Problem3CustomAPIEndpoints when anthropic not installed
- Skip TestIssue219IntegrationAll when anthropic not installed
This fixes 4 test failures when the optional anthropic package is not installed.
The tests now properly skip instead of failing with SystemExit.
Fixes pre-existing test failures unrelated to documentation work.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed case-sensitivity bug where regex patterns failed to match output messages
due to case mismatch between 'saved to:' (lowercase in regex) and 'Saved to:'
(uppercase in actual output).
Changes:
- Line 529: Added (?i) flag to config path extraction regex
- Line 668: Added (?i) flag to package path extraction regex
This fixes the issue where 'skill-seekers install --config react' would:
1. Successfully download and save config to disk
2. Output: '📂 Saved to: output/react.json'
3. But fail with '❌ Failed to fetch config' due to regex mismatch
The workflow now correctly continues to Phase 2 (scraping) after fetching config.
Also updated comment on line 528 to reflect actual output format with emoji.
Fixes#236
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed version mismatch bug where hardcoded versions were out of sync
with pyproject.toml.
Updated version from 2.5.2 to 2.7.0 in:
- src/skill_seekers/__init__.py
- src/skill_seekers/cli/__init__.py
- src/skill_seekers/mcp/__init__.py
- src/skill_seekers/mcp/tools/__init__.py
Now skill-seekers --version correctly reports: 2.7.0
Fixes#248
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed unused tmp_path fixture parameter to fix ruff ARG002 error:
- Line 54: test_bootstrap_script_runs now only takes project_root
The test doesn't use tmp_path - it runs bootstrap in project_root
and checks output/skill-seekers/ directory.
Fixes ruff error:
ARG002 Unused method argument: `tmp_path`
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed _tmp_path to tmp_path to fix pytest fixture error:
- Line 54: test_bootstrap_script_runs fixture parameter
Error was:
fixture '_tmp_path' not found
available fixtures: ..., tmp_path, ...
This was causing 1 ERROR in CI test runs across all Python versions.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed incorrect variable names in list comprehensions that were causing
NameError in CI (Python 3.11/3.12):
Critical fixes:
- tests/test_markdown_parsing.py: 'l' → 'link' in list comprehension
- src/skill_seekers/cli/pdf_extractor_poc.py: 'l' → 'line' (2 occurrences)
Additional auto-lint fixes:
- Removed unused imports in llms_txt_downloader.py, llms_txt_parser.py
- Fixed comparison operators in config files
- Fixed list comprehension in other files
All tests now pass in CI.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The uv installer puts the binary in ~/.local/bin but the workflow was
adding ~/.cargo/bin to PATH, causing 'uv: command not found' errors.
Fixed bootstrap E2E tests failing on Python 3.10 and 3.11.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The lint job was failing with 'ruff: command not found' because
dependency-groups in pyproject.toml require newer pip/setuptools to work.
Install ruff and mypy directly before installing the package to ensure
they're available for the linting steps.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixes 5 additional failing tests in test_real_world_fastmcp.py with the
same stdin reading issue.
All tests now use interactive=False when creating GitHubThreeStreamFetcher
or calling UnifiedCodebaseAnalyzer.analyze() to prevent stdin prompts
during test execution.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixes 2 failing tests in test_architecture_scenarios.py that were trying to
read from stdin during pytest execution, causing:
OSError: pytest: reading from stdin while output is captured!
Changes:
- Added 'interactive' parameter to UnifiedCodebaseAnalyzer.analyze() (defaults to True)
- Pass interactive flag through to _analyze_github() and GitHubThreeStreamFetcher
- Updated failing tests to pass interactive=False
Tests fixed:
- test_scenario_1_github_three_stream_fetcher
- test_scenario_1_unified_analyzer_github
The interactive parameter controls whether the code prompts the user for
input (e.g., 'Continue without token?'). Setting it to False prevents
input() calls, making the code safe for CI/CD and test environments.
All 1386 tests now pass.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix bootstrap test failures in CI by installing uv package manager.
The bootstrap script (scripts/bootstrap_skill.sh) requires uv to run,
which was causing 7 bootstrap E2E tests to fail in CI with:
'uv: command not found'
Changes:
- Install uv via official installer (works on Ubuntu & macOS)
- Add uv to PATH for subsequent steps
This resolves the failing tests from PR #251 merge.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Adds modern code quality tools and reformats codebase to Python 3.10+ standards.
- Ruff linting (replaces black, flake8, isort)
- Mypy type checking
- Modern type hints (str | None instead of Optional[str])
- Consistent formatting across 14,000+ lines
Security review: All changes verified safe (pure formatting, no logic changes)
Test failures: Pre-existing CI issues (missing uv), not caused by this PR
Co-Authored-By: Polandia94 <Polandia94@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The code was still referencing `args.build_api_reference` which was
changed to `args.skip_api_reference` in v2.5.2 (opt-in to opt-out flags).
This caused the codebase analysis to fail at the end with:
AttributeError: 'Namespace' object has no attribute 'build_api_reference'
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated api/configs_repo to commit d4c0710 which removes 9 duplicate
configs, keeping only the best unified version of each skill.
Cleanup summary:
- Deleted 9 duplicate/redundant configs
- Kept 14 production-ready unified configs
- All configs now have unique names
- No more multiple versions of same framework
Gallery now shows:
• devops: 2 (ansible, kubernetes)
• game-engines: 1 (godot)
• web-frameworks: 7 (astro, django, fastapi, hono, httpx, laravel, react, vue)
• css-frameworks: 1 (tailwind)
• development-tools: 1 (claude-code)
• gaming: 1 (steam-economy-complete)
All remaining configs use unified approach (docs + codebase) with C3.x
analysis for maximum value.
Result: Clean config gallery with no duplicates!
- Before: 23 configs (9 duplicates)
- After: 14 unique configs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Updated api/configs_repo to commit 38ceb06 which removes test warnings
and enables production-ready codebase analysis.
Fixed configs:
- godot_github.json → godot-codebase.json (production-ready)
- react_github.json → react-codebase.json (production-ready)
Both now have:
✅ No test warnings in descriptions
✅ Codebase analysis enabled (C3.x features)
✅ Professional descriptions
✅ Comprehensive file patterns
Config gallery will now show clean, production-ready configs without
any ⚠️ TEST CONFIG warnings.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Exclude configs in official/test-examples/ directory from API responses.
The test-examples directory contains 13 demo/test configs that are useful
for developers but should not appear in the production config gallery:
- ansible_unified.json
- django_unified.json
- example_pdf.json
- fastapi_unified.json
- fastapi_unified_test.json
- godot_github.json
- godot_unified.json
- httpx_comprehensive.json
- python-tutorial-test.json
- react_github.json
- react_unified.json
- template-example.json
- vue_unified.json
Changes:
- Added check in config_analyzer.py to skip files in test-examples/
- Production API will now return only 14 official configs
- Test configs remain in repo for developer reference
Result: Clean config gallery with only production-ready configs
Testing:
$ python3 -c "from config_analyzer import ConfigAnalyzer; from pathlib import Path; print(len(ConfigAnalyzer(Path('configs_repo/official')).analyze_all_configs()))"
14 # ✅ Previously 27 (included test-examples)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix test failure for test_cli_all_flag_lists_configs by ensuring
api/configs_repo submodule is initialized during checkout.
The test expects configs in api/configs_repo/official/ but the
submodule was not being initialized, causing the directory to be
empty and the test to fail.
Related:
- Commit 1cbb8fe: Added api/configs_repo as git submodule
- Commit f5f37f6: Updated render.yaml for Render deployment
This completes the submodule integration for both:
- Production (Render API deployment)
- CI/CD (GitHub Actions tests)
Fixes: FAILED tests/test_estimate_pages.py::TestEstimatePagesCLI::test_cli_all_flag_lists_configs
- Converted api/configs_repo from ignored directory to git submodule
- Links to skill-seekers-configs repository
- Ensures all 24 preset configs are available in deployed API
- Fixes config gallery showing only 4 configs instead of 24
This resolves the issue where api.skillseekersweb.com/api/configs
was falling back to the configs/ directory (4 files) instead of
reading from api/configs_repo/official/ (24 files in subdirectories).
Submodule: https://github.com/yusufkaraaslan/skill-seekers-configs.git
- Added find_configs_directory() to use same logic as API (api/configs_repo/official first, then configs/)
- Added list_all_configs() to display all 24 configs grouped by category with descriptions
- Updated CLI to support --all flag, making config argument optional when --all is used
- Added 2 new tests for --all flag functionality
- All 51 tests passing (51 passed, 1 skipped)
This enables users to discover all available preset configs without checking the API or filesystem directly.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
## Major Changes
### C3.8 Standalone Codebase Scraper SKILL.md Generation
- Complete skill structure for standalone codebase analysis
- Generates comprehensive SKILL.md (300+ lines) with all C3.x analysis
- Creates references/ directory with organized outputs
- Perfect for local/private codebase documentation
### Global Setup Script with FastMCP
- New setup.sh for end-user global installation
- Installs skill-seekers globally from PyPI
- Sets up MCP server configuration automatically
- Separate from development setup (setup_mcp.sh)
### Comprehensive Documentation Reorganization
- Removed 7 temporary/analysis files
- Archived 14 historical documents
- Organized 29 files into clear subdirectories
- Created docs/README.md navigation index
- 3x faster documentation discovery
### Bug Fixes
- Fixed dict format handling in codebase scraper language stats
- SKILL.md generation now works correctly for all codebases
## Full C3.x Suite (from previous unreleased)
- C3.1: Design Pattern Detection
- C3.2: Test Example Extraction
- C3.3: How-To Guide Generation with AI
- C3.4: Configuration Pattern Extraction with AI
- C3.5: Architectural Overview & Skill Integrator
- C3.6: AI Enhancement for patterns and examples
- C3.7: Architectural Pattern Detection
- C3.8: Standalone Codebase Scraper SKILL.md Generation (NEW!)
## Release Info
Version: 2.6.0
Date: 2026-01-13
Branch: development
Status: Ready for PyPI publication
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed bug where _get_language_stats expected Path objects but received
dictionaries from results['files'].
Root cause: results['files'] contains dicts with 'language' key, not Path objects
Solution: Changed function to extract language from dict instead of calling detect_language()
Before:
for file_path in files:
lang = detect_language(file_path) # ❌ file_path is dict, not Path
After:
for file_data in files:
lang = file_data.get('language', 'Unknown') # ✅ Extract from dict
Tested: Successfully generated SKILL.md for AstroValley (90 lines, 19 C# files)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created new setup.sh that installs skill-seekers GLOBALLY from PyPI
(not editable local install like setup_mcp.sh).
Key Improvements:
✅ Global install: pip3 install skill-seekers (from PyPI)
✅ FastMCP server: Uses new server_fastmcp module
✅ Proper server command: python3 -m skill_seekers.mcp.server_fastmcp
✅ HTTP transport: --transport http --port <PORT> (updated flags)
✅ Auto-detection: Detects Claude Code, Cursor, Windsurf, Cline, etc.
✅ Fallback handling: --break-system-packages for system Python
Differences from setup_mcp.sh:
- setup_mcp.sh: Editable install (pip install -e .) - for development
- setup.sh: Global install (pip install skill-seekers) - for users
Usage:
bash setup.sh
After installation, skill-seekers will be available globally:
skill-seekers --help
skill-seekers scrape --config react.json
skill-seekers install --config godot.json
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed 4 failing tests in TestPackagingTools that were patching the wrong
module path. The tests were patching:
'skill_seekers.mcp.tools.packaging_tools.fetch_config_tool'
But fetch_config_tool is actually in source_tools, not packaging_tools.
Changed all 4 tests to patch:
'skill_seekers.mcp.tools.source_tools.fetch_config_tool'
Tests now passing:
- test_install_skill_with_config_name ✅
- test_install_skill_with_config_path ✅
- test_install_skill_unlimited ✅
- test_install_skill_no_upload ✅
Result: 81/81 MCP tests passing (was 77/81)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>