- Use sed to remove trailing whitespace from all lines
- Fixes all remaining ruff W293 errors
- This is a comprehensive fix to prevent further whitespace issues
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Change _walk_directory to check relative paths instead of absolute paths
- Fixes issue where SKIP_DIRS containing 'tmp' was skipping all files under /tmp/
- This was causing test failures on Ubuntu (tests use tempfile.mkdtemp() which creates under /tmp)
- Now only skips directories that are within the search directory, not in the absolute path
Fixes test_config_extractor.py failures on Ubuntu
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Update version checks in test_package_structure.py from 2.8.0 to 2.9.0
- Update version check in test_cli_paths.py from 2.8.0 to 2.9.0
- Remove trailing whitespace from blank lines in code_analyzer.py (lines 1436-1504)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Update version from v2.8.0 to v2.9.0
- Add signal_flow_analyzer.py to file structure and key locations
- Add comprehensive C3.10 Signal Flow Analysis documentation
- Remove duplicate C3.9 entry
- Update Recent Achievements with v2.9.0 release and C3.10 features
- Add Godot 4.x support details (GDScript, .tscn, .tres, .gdshader)
- Update C3.x series list to include C3.9 and C3.10
PROBLEM:
- Config extractor crashed on JSON files with arrays at root
- Error: "'list' object has no attribute 'items'"
- Example: save.json with [{"name": "item1"}, {"name": "item2"}]
- Only handled dict roots, not list roots
SOLUTION:
- Added type checking in _parse_json() and _parse_yaml()
- Handle three cases:
1. Dict at root: extract normally (existing behavior)
2. List at root: iterate and extract from each dict item
3. Primitive at root: skip with debug log
- List items are prefixed with [index] in nested path
CHANGES:
- config_extractor.py _parse_json(): Added isinstance checks
- config_extractor.py _parse_yaml(): Added list handling
EXAMPLE:
Before: WARNING: Error parsing save.json: 'list' object has no attribute 'items'
After: Extracts settings with paths like "[0].name", "[1].value"
IMPACT:
- No more crashes on valid JSON/YAML arrays
- Better coverage of config file variations
- Handles game save files, API responses, data arrays
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
PROBLEM:
- Progress indicator only showed every 5 batches or at completion
- When enhancing 1-4 patterns, no progress was visible
- User saw "Enhancing 1 patterns..." → "Enhanced 1 patterns" with no progress
SOLUTION:
- Modified progress condition to always show for small jobs (total < 10)
- Original: `if completed % 5 == 0 or completed == total`
- Updated: `if total < 10 or completed % 5 == 0 or completed == total`
IMPACT:
- Now shows "Progress: 1/3 batches completed" for small jobs
- Large jobs (10+) still show every 5th batch to avoid spam
- Applied to both _enhance_patterns_parallel and _enhance_examples_parallel
FILES:
- ai_enhancer.py line 301-302 (patterns)
- ai_enhancer.py line 439-440 (test examples)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
**Problem:**
Framework detection only checked analyzed source files, missing game
engine marker files like project.godot, .unity, .uproject (config files).
**Root Cause:**
_detect_frameworks() only scanned files_analysis list which contains
source code (.cs, .py, .js) but not config files.
**Solution:**
- Now scans actual directory structure using directory.iterdir()
- Checks BOTH analyzed files AND directory contents
- Game engines checked FIRST with priority (prevents false positives)
- Returns early if game engine found (avoids Unity→ASP.NET confusion)
**Test Results:**
Before: frameworks_detected: []
After: frameworks_detected: ["Godot"] ✅
Tested with: Cosmic Ideler (Godot 4.6 RC2 project)
- Correctly detects project.godot file
- No longer requires source code to have "godot" in paths
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Completes the implementation for Unity/Unreal/Godot game engine support
and adds missing "local" source type validation.
Changes:
- Add "local" to VALID_SOURCE_TYPES in config_validator.py
- Add _validate_local_source() method with full validation
- Add Unity/Unreal/Godot to FRAMEWORK_MARKERS for priority detection
- Add game engine directory exclusions to all 3 scrapers:
* Unity: Library/, Temp/, Logs/, UserSettings/, etc.
* Unreal: Intermediate/, Saved/, DerivedDataCache/
* Godot: .godot/, .import/
- Prevents scanning massive build cache directories (saves GBs + hours)
This completes all features mentioned in PR #278:
✅ Unity/Unreal/Godot framework detection with priority
✅ Pattern enhancement performance fix (grouped approach)
✅ Game engine directory exclusions
✅ Phase 5 SKILL.md AI enhancement
✅ Local source references copying
✅ "local" source type validation
✅ Config field name compatibility
✅ C# test example extraction
Tested:
- All unified config tests pass (18/18)
- All config validation tests pass (28/28)
- Ready for Unity project testing
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Remove hardcoded version string
- Import from skill_seekers._version instead
- Ensures single source of truth for version management
- Future version bumps only need pyproject.toml update
Major feature release with enhanced code analysis and documentation.
Features:
- C3.9: Project documentation extraction
- Granular AI enhancement control (--enhance-level 0-3)
- C# language support for test extraction
- 6-12x faster parallel LOCAL mode AI enhancement
- Auto-enhancement and LOCAL mode fallbacks
- GLM-4.7 and custom Claude-compatible API support
Bug Fixes:
- Fixed C# test extraction language errors
- Fixed config type field mismatch
- Fixed LocalSkillEnhancer import issues
- Fixed critical linter errors
Contributors:
- @xuintl - Chinese README improvements
- @Zhichang Yu - GLM-4.7 support and PDF fixes
- @YusufKaraaslanSpyke - Core features and maintenance
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Comprehensive guide for AI assistants working with the codebase
- Covers project structure, development commands, architecture patterns
- Includes testing guidelines, CI/CD info, and troubleshooting
- Documents all entry points, dependencies, and best practices
* Fix how-to guide builder edge case
* Resolve merge conflict
* fix: Handle None ai_analysis in how-to guide builder
Fixes NoneType AttributeError when ai_analysis is explicitly None.
The issue occurred when workflow.get('ai_analysis') returned None and
code attempted to call .get() without checking if it was None first.
Using 'workflow.get("ai_analysis", {})' only provides default {} when
the key is missing, not when the value is None. Changed to use
'workflow.get("ai_analysis") or {}' pattern which handles both cases.
Also added isinstance() type safety check in _extract_workflow_examples
to gracefully handle malformed data.
Changes:
- _group_by_ai_tutorial_group: ai_analysis = workflow.get() or {}
- _extract_workflow_examples: isinstance(ex, dict) check added
- _create_guide: ai_analysis = primary_workflow.get() or {} (2 locations)
- _generate_overview: ai_analysis = primary_workflow.get() or {}
All 34 how-to guide builder tests passing.
Closes#242
Co-authored-by: yashrastogi019-cell <yashrastogi019@gmail.com>
---------
Co-authored-by: yashrastogi019-cell <yashrastogi019@gmail.com>
Thanks @franklegolasyoung for the excellent work on the core fixes for issues #267, #242, and #260! 🙏
Your comprehensive approach to fixing PDF processing, expanding workflow detection, and improving the Chinese README documentation is much appreciated. I've added code quality fixes and comprehensive tests to ensure everything passes CI.
All 1266+ tests are now passing, and the issues are resolved! 🎉
- Create src/skill_seekers/_version.py as single source of truth
- Read version dynamically from pyproject.toml at runtime
- Update all __init__.py files to import from _version module
- Add tomli dependency for Python <3.11 (built-in tomllib for 3.11+)
- Remove hardcoded version duplicates (2.7.2 in 3 files)
- Fixes version mismatch: pyproject.toml (2.7.4) vs __init__.py (2.7.2)
Benefits:
- Single place to update version (pyproject.toml)
- No more version mismatches across files
- Automatic version consistency
- Works across Python 3.10-3.13
Before:
- pyproject.toml: 2.7.4
- src/skill_seekers/__init__.py: 2.7.2
- src/skill_seekers/cli/__init__.py: 2.7.2
- src/skill_seekers/mcp/__init__.py: 2.7.2
After:
- pyproject.toml: 2.7.4 (single source of truth)
- All other files: import from _version.py
- Remove SPYKE-related client documentation files
- Fix critical ruff linter errors:
- Remove unused 'os' import in test_analyze_e2e.py
- Remove unused 'setups' variable in test_test_example_extractor.py
- Prefix unused output_dir parameter in codebase_scraper.py
- Fix import sorting in test_integration.py
- Update CHANGELOG.md with comprehensive PR #272 feature documentation
These changes were part of PR #272 cleanup but didn't make it into the squash merge.
Complete implementation of C3.9, granular AI enhancement control, performance optimizations, and bug fixes.
Features:
- C3.9 Project Documentation Extraction (markdown files)
- Granular AI enhancement control (--enhance-level 0-3)
- C# test extraction support
- 6-12x faster LOCAL mode with parallel execution
- Auto-enhancement UX improvements
- LOCAL mode fallback for all AI enhancements
Bug Fixes:
- C# language support
- Config type field compatibility
- LocalSkillEnhancer import
Documentation:
- Updated CHANGELOG.md
- Updated CLAUDE.md
- Removed client-specific files
Tests: All 1,257 tests passing
Critical linter errors: Fixed
- Scan ALL .md files in project (README, docs/, etc.)
- Smart categorization by folder/filename (overview, architecture, guides, etc.)
- Processing depth: surface=raw copy, deep=parse+summarize, full=AI-enhanced
- AI enhancement at level 2+ adds topic extraction and cross-references
- New "Project Documentation" section in SKILL.md with summaries
- Output to references/documentation/ organized by category
- Default ON, use --skip-docs to disable
- Add skip_docs parameter to MCP scrape_codebase_tool
- Add 15 new tests for markdown documentation features
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add enhance_level parameter (0-3) for granular AI control
- Add skip_* parameters for feature control (skip_patterns, skip_test_examples, etc.)
- Remove deprecated --build-* flags (features are now ON by default)
- Adjust timeout based on enhance_level (10min base, up to 60min for level 3)
- Update documentation with examples
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Levels:
- 0 (off): No AI enhancement (default)
- 1 (minimal): SKILL.md enhancement only (fast, high value)
- 2 (standard): SKILL.md + Architecture + Config enhancement
- 3 (full): Everything including patterns and test examples
--comprehensive and --enhance-level are INDEPENDENT:
- --comprehensive: Controls depth and features (full depth + all features)
- --enhance-level: Controls AI enhancement level
Usage examples:
skill-seekers analyze --directory . --enhance-level 1 # SKILL.md AI only
skill-seekers analyze --directory . --enhance # Same as level 1
skill-seekers analyze --directory . --comprehensive # All features, no AI
skill-seekers analyze --directory . --comprehensive --enhance-level 2 # All features + standard AI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increase default batch size from 5 to 20 patterns per CLI call
- Add parallel execution with 3 concurrent workers (configurable)
- Add ai_enhancement settings to config_manager:
- local_batch_size: patterns per Claude CLI call (default: 20)
- local_parallel_workers: concurrent CLI calls (default: 3)
- Expected speedup: 6-12x faster for large codebases
Config settings can be changed via:
skill-seekers config (coming soon) or editing ~/.config/skill-seekers/config.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When no ANTHROPIC_API_KEY is set, ai_enhancer.py now falls back to LOCAL
mode (Claude Code CLI) instead of disabling AI enhancement entirely.
Changes to AIEnhancer base class:
- AUTO mode now falls back to LOCAL instead of disabling
- Added _check_claude_cli() to verify Claude CLI is available
- Added _call_claude_local() method using Claude Code CLI
- Refactored _call_claude() to dispatch to API or LOCAL mode
- 2 minute timeout per LOCAL call (reasonable for batch processing)
This affects all AI enhancements:
- Design pattern enhancement (C3.1) → LOCAL fallback ✅
- Test example enhancement (C3.2) → LOCAL fallback ✅
- Architectural analysis (C3.7) → LOCAL fallback ✅
Before (bad UX):
ℹ️ AI enhancement disabled (no API key found)
After (good UX):
ℹ️ No API key found, using LOCAL mode (Claude Code CLI)
✅ AI enhancement enabled (using LOCAL mode - Claude Code CLI)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
UX improvement: When running `skill-seekers analyze --enhance` or
`skill-seekers analyze --comprehensive`, the SKILL.md is now automatically
enhanced as the final step. No need for a separate `skill-seekers enhance`
command.
Changes:
- After analyze_main() completes successfully, check if --enhance or
--comprehensive was used
- If SKILL.md exists, automatically run SkillEnhancer in headless mode
- Use force=True to skip all prompts (consistent with --comprehensive UX)
- 10 minute timeout for large codebases
- Graceful fallback with retry instructions if enhancement fails
Before (bad UX):
skill-seekers analyze --directory /path --enhance
# Then separately:
skill-seekers enhance output/codebase/
After (good UX):
skill-seekers analyze --directory /path --enhance
# Everything done in one command!
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The previous implementation had a design flaw - it ran `claude prompt_file`
and expected Claude to magically create a JSON file in a temp directory.
This never worked because Claude CLI is interactive and doesn't auto-save.
Changes:
- Use `--dangerously-skip-permissions` flag to bypass permission prompts
- Create a dedicated temp directory for each enhancement session
- Embed absolute output file path in the prompt so Claude knows where to write
- Run Claude from the temp directory as working_dir
- Improved prompt with explicit Write tool instruction
- Better error handling and logging (file not found, JSON parse errors)
- Show settings preview in prompt for better AI context
The LOCAL mode now follows the same pattern as enhance_skill_local.py
which works correctly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bug fixes:
- Fix KeyError in config_enhancer.py where "config_type" was expected but
config_extractor saves as "type". Now supports both field names for
backward compatibility.
- Fix settings "value_type" vs "type" mismatch in the same file.
New features:
- Add C# support for regex-based test example extraction
- Add language alias mapping (C# -> csharp, C++ -> cpp)
- Enhanced C# patterns for NUnit, xUnit, MSTest test frameworks
- Support for mock patterns (NSubstitute, Moq)
- Support for Zenject dependency injection patterns
- Support for setup/teardown method extraction
Tests:
- Add 2 new C# test extraction tests (NUnit tests, mock patterns)
- All 1257 tests pass (165 skipped)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update Chinese README (README.zh-CN.md) with new preset flags
- Update docs/features/*.md (PATTERN_DETECTION, HOW_TO_GUIDES, BOOTSTRAP_SKILL_TECHNICAL)
- Update scripts/bootstrap_skill.sh to use 'skill-seekers analyze'
- Update scripts/skill_header.md command examples
- Update tests/test_bootstrap_skill.py assertions
- Fix CHANGELOG.md historical entry with correct command name
All references to 'skill-seekers-codebase' updated to 'skill-seekers analyze'
except where needed for backward compatibility (pyproject.toml, E2E tests).
Related to Phase 1 implementation from previous commits.
Fixes 2 failing integration tests to match current validation behavior:
1. test_load_config_with_validation_errors:
- Legacy validator is intentionally lenient for backward compatibility
- Only validates presence of fields, not format
- Updated test to use config that's truly invalid (missing all type fields)
2. test_godot_config:
- godot.json uses unified format (sources array), not legacy format
- Old validate_config() expects legacy format with top-level base_url
- Updated to use ConfigValidator which supports both formats
Changes:
- Import ConfigValidator for unified format validation
- Fix test_load_config_with_validation_errors to trigger actual validation error
- Fix test_godot_config to use ConfigValidator instead of old validate_config
Test Results:
- Both previously failing tests now PASS ✅
- All 71 related tests PASS ✅
- No regressions introduced
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>