Commit Graph

249 Commits

Author SHA1 Message Date
Edinho
98d73611ad feat: Add comprehensive Swift language detection support (#223)
* feat: Add comprehensive Swift language detection support

Add Swift language detection with 40+ patterns covering syntax, stdlib, frameworks, and idioms. Implement fork-friendly architecture with separate swift_patterns.py module and graceful import fallback.

Key changes:
- New swift_patterns.py: 40+ Swift detection patterns (SwiftUI, Combine, async/await, property wrappers, etc.)
- Enhanced language_detector.py: Graceful import handling, robust pattern compilation with error recovery
- Comprehensive test suite: 19 tests covering syntax, frameworks, edge cases, and error handling
- Updated .gitignore: Exclude Claude-specific config files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: Fix Swift pattern false positives and add comprehensive error handling

Critical Fixes (Priority 0):
- Fix 'some' and 'any' keyword false positives by requiring capitalized type names
- Use (?-i:[A-Z]) to enforce case-sensitivity despite global IGNORECASE flag
- Prevents "some random" from being detected as Swift code

Error Handling (Priority 1):
- Wrap pattern validation in try/except to prevent module import crashes
- Add SWIFT_PATTERNS verification with logging after import
- Gracefully degrade to empty dict on validation errors
- Add 7 comprehensive error handling tests

Improvements (Priority 2):
- Remove fragile line number references in comments
- Add 5 new tests for previously untested patterns:
  * Property observers (willSet/didSet)
  * Memory management (weak var, unowned, [weak self])
  * String interpolation

Test Results:
- All 92 tests passing (72 Swift + 20 language detection)
- Fixed regression: test_detect_unknown now passes
- 12 new tests added (7 error handling + 5 feature coverage)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 19:25:53 +03:00
yusyus
e26ba876ae Merge main into development - sync v2.5.1 release
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 19:25:17 +03:00
chencheng (云谦)
03195f6b7e feat: add neovate code agent support (#224) 2026-01-01 19:14:33 +03:00
Anas Ur Rehman
4e47967c30 fix: Update setuptools configuration to include adaptors module (#227)
Fixes #226

Changed from manual package listing to automatic discovery:
- Replaced explicit packages list with [tool.setuptools.packages.find]
- Set package-dir = {"" = "src"} for src layout
- Added include = ["skill_seekers*"] to catch all submodules
- Set namespaces = false for proper package structure

This ensures the adaptors/ directory and all other submodules
are properly included when building the PyPI package.

The manual packages list was missing newly added modules and
didn't auto-discover the src/skill_seekers/cli/adaptors directory.
2026-01-01 19:03:50 +03:00
yusyus
48370a1963 docs: Update CLAUDE.md with streamlined developer guidance
- Reduced from 1116 to 526 lines (53% reduction)
- Focused on architecture and testing requirements
- Removed redundant user-facing documentation
- Added critical development notes and workflows

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 18:57:29 +03:00
yusyus
2ebf6c8cee chore: Bump version to v2.5.2 - Package Configuration Improvement
- Switch from manual package listing to automatic discovery
- Improves maintainability and prevents missing module bugs
- All tests passing (700+ tests)
- Package contents verified identical to v2.5.1

Fixes #226
Merges #227

Thanks to @iamKhan79690 for the contribution!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Anas Ur Rehman (@iamKhan79690) <noreply@github.com>
2026-01-01 18:57:21 +03:00
yusyus
e07b44a9ef feat: Add py.typed for PEP 561 type checking support
Added empty py.typed marker file to enable type checkers (mypy, pyright,
pylance) to use inline type hints from the package.

This file was declared in pyproject.toml package_data but was missing,
causing build warnings.

Benefits:
- Enables type checkers to use inline type hints
- Follows Python typing best practices (PEP 561)
- Improves IDE autocomplete/intellisense

Fixes #222

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2025-12-30 23:52:27 +03:00
yusyus
623d59d4b5 feat: Add py.typed for PEP 561 type checking support
Added empty py.typed marker file to enable type checkers (mypy, pyright,
pylance) to use inline type hints from the package.

This file was declared in pyproject.toml package_data but was missing,
causing build warnings.

Benefits:
- Enables type checkers to use inline type hints
- Follows Python typing best practices (PEP 561)
- Improves IDE autocomplete/intellisense

Fixes #222

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2025-12-30 23:52:18 +03:00
yusyus
3b3af046a8 Merge development into main for v2.5.1 release
This merge brings critical PyPI bug fix and all v2.5.1 updates to main:

Critical Fixes:
- PR #221: Fixed missing skill_seekers.cli.adaptors package (breaks v2.5.0 on PyPI)
- All version strings updated to 2.5.1
- All test assertions fixed for v2.5.1

Changes Merged:
- Version bump to 2.5.1 across all modules
- CHANGELOG updated with v2.5.1 release notes
- CLAUDE.md updated with v2.5.0 multi-platform architecture
- All 857 tests passing

Commits included:
- 3e36571: test: Update all version assertions to 2.5.1
- 58d37c9: test: Update version assertions to 2.5.1
- 5e166c4: chore: Bump version to v2.5.1 - Critical PyPI Bug Fix
- b912331: chore: Bump version to v2.5.0 - Multi-Platform Feature Parity
- c8ca1e1: fix: Add missing adaptors module to pyproject.toml packages

Ready for v2.5.1 release to PyPI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2025-12-30 23:35:19 +03:00
yusyus
3e36571b47 test: Update all version assertions to 2.5.1
Fixed version assertions in test_package_structure.py:
- test_cli_has_version: 2.0.0 → 2.5.1
- test_mcp_has_version: 2.4.0 → 2.5.1
- test_mcp_tools_has_version: 2.4.0 → 2.5.1
- test_root_has_version: 2.0.0 → 2.5.1

Related: v2.5.1 version bump
2025-12-30 23:30:36 +03:00
yusyus
58d37c957d test: Update version assertions to 2.5.1
Fixed test_main_cli_version_output to expect 2.5.1 instead of 2.4.0.

Related: v2.5.1 version bump
2025-12-30 23:27:18 +03:00
yusyus
5e166c40b9 chore: Bump version to v2.5.1 - Critical PyPI Bug Fix
Version Updates:
- pyproject.toml: 2.5.0 → 2.5.1
- src/skill_seekers/__init__.py: 2.0.0 → 2.5.1
- src/skill_seekers/cli/__init__.py: 2.0.0 → 2.5.1
- src/skill_seekers/cli/main.py: 2.4.0 → 2.5.1
- src/skill_seekers/mcp/__init__.py: 2.4.0 → 2.5.1
- src/skill_seekers/mcp/tools/__init__.py: 2.4.0 → 2.5.1

CHANGELOG:
- Added v2.5.1 release notes documenting PR #221 fix
- Critical: Fixed missing skill_seekers.cli.adaptors package
- Impact: Restores all multi-platform features for PyPI users

Documentation:
- Updated CLAUDE.md to v2.5.0 with multi-platform details
- Added platform adaptor architecture documentation
- Updated test architecture and environment variables

Related: PR #221 (merged), Issue #222 (py.typed follow-up)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 23:22:30 +03:00
yusyus
b912331550 chore: Bump version to v2.5.0 - Multi-Platform Feature Parity
Prepare v2.5.0 release with multi-LLM platform support.

Major changes:
- Add support for 4 platforms (Claude, Gemini, OpenAI, Markdown)
- Complete feature parity across all platforms
- 18 MCP tools with multi-platform support
- Comprehensive platform documentation

Updated files:
- pyproject.toml: version 2.4.0 → 2.5.0
- README.md: version badge updated, tests 427 → 700
- CHANGELOG.md: Added v2.5.0 release notes
- docs/CLAUDE.md: Updated version and features

Release date: 2025-12-28
2025-12-30 23:07:35 +03:00
MiaoDX
c8ca1e1585 fix: Add missing adaptors module to pyproject.toml packages
The skill_seekers.cli.adaptors module was missing from the packages list in pyproject.toml, causing ModuleNotFoundError when using the package_skill command with PyPI-installed package (v2.5.0).

This module provides multi-LLM platform support:
- base.py - Base adaptor class
- claude.py - Claude AI adaptor
- gemini.py - Google Gemini adaptor
- openai.py - OpenAI ChatGPT adaptor
- markdown.py - Generic markdown export

Co-authored-by: MiaoDX <miaodongxu@xiaomi.com>
2025-12-30 23:07:07 +03:00
yusyus
3fc1897340 test: Update version assertions to 2.5.0
Updated test expectations from old versions to 2.5.0:
- tests/test_package_structure.py: 4 assertions (cli, mcp, mcp.tools, root)
- tests/test_cli_paths.py: CLI version output
- tests/test_adaptors/test_base.py: Metadata test data

All tests now expect 2.5.0 instead of 2.0.0/2.4.0.
2025-12-28 22:29:44 +03:00
yusyus
274ec968e6 fix: Update CLI --version to 2.5.0
Fixed hardcoded version string in main.py argparse configuration.
2025-12-28 22:26:22 +03:00
yusyus
51f8c51f41 fix: Update hardcoded __version__ strings to 2.5.0
Updated version strings in:
- src/skill_seekers/__init__.py: 2.0.0 → 2.5.0
- src/skill_seekers/cli/__init__.py: 2.0.0 → 2.5.0
- src/skill_seekers/mcp/__init__.py: 2.4.0 → 2.5.0
- src/skill_seekers/mcp/tools/__init__.py: 2.4.0 → 2.5.0

This ensures --version flag shows correct version.
2025-12-28 22:25:04 +03:00
yusyus
5abb21c207 Release v2.5.0 - Multi-Platform Feature Parity
Merge development branch for v2.5.0 release.

This release adds complete multi-platform support for Claude AI,
Google Gemini, OpenAI ChatGPT, and Generic Markdown with full
feature parity across all platforms and skill modes.

Major Features:
- 4 LLM platforms supported
- Platform-specific adaptors architecture
- 18 MCP tools with multi-platform support
- Complete feature parity implementation
- Comprehensive platform documentation
- 700 tests passing

See CHANGELOG.md for detailed release notes.
2025-12-28 22:21:32 +03:00
yusyus
7e1fd3fbac chore: Bump version to v2.5.0 - Multi-Platform Feature Parity
Prepare v2.5.0 release with multi-LLM platform support.

Major changes:
- Add support for 4 platforms (Claude, Gemini, OpenAI, Markdown)
- Complete feature parity across all platforms
- 18 MCP tools with multi-platform support
- Comprehensive platform documentation

Updated files:
- pyproject.toml: version 2.4.0 → 2.5.0
- README.md: version badge updated, tests 427 → 700
- CHANGELOG.md: Added v2.5.0 release notes
- docs/CLAUDE.md: Updated version and features

Release date: 2025-12-28
2025-12-28 22:17:59 +03:00
yusyus
9806b62a9b docs: Update all documentation for multi-platform feature parity
Complete documentation update to reflect multi-platform support across
all 4 platforms (Claude, Gemini, OpenAI, Markdown).

Changes:
- src/skill_seekers/mcp/README.md:
  * Fixed tool count (10 → 18 tools)
  * Added enhance_skill tool documentation
  * Updated package_skill docs with target parameter
  * Updated upload_skill docs with target parameter
  * Updated tool numbering after adding enhance_skill

- docs/MCP_SETUP.md:
  * Updated packaging tools section (3 → 4 tools)
  * Added enhance_skill to tool lists
  * Added Example 4: Multi-Platform Support
  * Shows target parameter usage for all platforms

- docs/ENHANCEMENT.md:
  * Added comprehensive Multi-Platform Enhancement section
  * Documented Claude (local + API modes)
  * Documented Gemini (API mode, model, format)
  * Documented OpenAI (API mode, model, format)
  * Added platform comparison table
  * Updated See Also links

- docs/UPLOAD_GUIDE.md:
  * Complete rewrite for multi-platform support
  * Detailed guides for all 4 platforms
  * Claude AI: API + manual upload methods
  * Google Gemini: tar.gz format, Files API
  * OpenAI ChatGPT: Vector Store, Assistants API
  * Generic Markdown: Universal export, manual distribution
  * Added platform comparison tables
  * Added troubleshooting for all platforms

All docs now accurately reflect the feature parity implementation.
Users can now find complete information about packaging, uploading,
and enhancing skills for any platform.

Related: Feature parity implementation (commits 891ce2d, 2ec2840)
2025-12-28 21:55:07 +03:00
yusyus
2ec2840396 fix: Add TextContent fallback class for test compatibility
- Replace TextContent = None with proper fallback class in all MCP tool modules
- Fixes TypeError when MCP library is not fully initialized in test environment
- Ensures all 700 tests pass (was 699 passing, 1 failing)
- Affected files:
  * packaging_tools.py
  * config_tools.py
  * scraping_tools.py
  * source_tools.py
  * splitting_tools.py

The fallback class maintains the same interface as mcp.types.TextContent,
allowing tests to run successfully even when the MCP library import fails.

Test results:  700 passed, 157 skipped, 2 warnings
2025-12-28 21:40:31 +03:00
yusyus
891ce2dbc6 feat: Complete multi-platform feature parity implementation
This commit implements full feature parity across all platforms (Claude, Gemini, OpenAI, Markdown) and all skill modes (Docs, GitHub, PDF, Unified, Local Repo).

## Core Changes

### Phase 1: MCP Package Tool Multi-Platform Support
- Added `target` parameter to `package_skill_tool()` in packaging_tools.py
- Updated MCP server definition to expose `target` parameter
- Platform-specific packaging: ZIP for Claude/OpenAI/Markdown, tar.gz for Gemini
- Platform-specific output messages and instructions

### Phase 2: MCP Upload Tool Multi-Platform Support
- Added `target` parameter to `upload_skill_tool()` in packaging_tools.py
- Added optional `api_key` parameter for API key override
- Updated MCP server definition with platform selection
- Platform-specific API key validation (ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENAI_API_KEY)
- Graceful handling of Markdown (upload not supported)

### Phase 3: Standalone MCP Enhancement Tool
- Created new `enhance_skill_tool()` function (140+ lines)
- Supports both 'local' mode (Claude Code Max) and 'api' mode (platform APIs)
- Added MCP server definition for `enhance_skill`
- Works with Claude, Gemini, and OpenAI
- Integrated into MCP tools exports

### Phase 4: Unified Config Splitting Support
- Added `is_unified_config()` method to detect multi-source configs
- Implemented `split_by_source()` method to split by source type (docs, github, pdf)
- Updated auto-detection to recommend 'source' strategy for unified configs
- Added 'source' to valid CLI strategy choices
- Updated MCP tool documentation for unified support

### Phase 5: Comprehensive Feature Matrix Documentation
- Created `docs/FEATURE_MATRIX.md` (~400 lines)
- Complete platform comparison tables
- Skill mode support matrix
- CLI and MCP tool coverage matrices
- Platform-specific notes and FAQs
- Workflow examples for each combination
- Updated README.md with feature matrix section

## Files Modified

**Core Implementation:**
- src/skill_seekers/mcp/tools/packaging_tools.py
- src/skill_seekers/mcp/server_fastmcp.py
- src/skill_seekers/mcp/tools/__init__.py
- src/skill_seekers/cli/split_config.py
- src/skill_seekers/mcp/tools/splitting_tools.py

**Documentation:**
- docs/FEATURE_MATRIX.md (NEW)
- README.md

**Tests:**
- tests/test_install_multiplatform.py (already existed)

## Test Results
-  699 tests passing
-  All multiplatform install tests passing (6/6)
-  No regressions introduced
-  All syntax checks passed
-  Import tests successful

## Breaking Changes
None - all changes are backward compatible with default `target='claude'`

## Migration Guide
Existing MCP calls without `target` parameter will continue to work (defaults to 'claude').

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 21:35:21 +03:00
yusyus
d587240e7b test: Add comprehensive E2E and unit tests for multi-LLM adaptors
Add 37 new tests (all passing):

**E2E Tests (18 tests):**
- test_adaptors_e2e.py - Complete workflow testing
- Test all platforms package from same skill
- Verify package structure for each platform
- Test filename conventions and formats
- Validate metadata consistency
- Test API key validation
- Test error handling (invalid files, missing deps)

**Claude Adaptor Tests (19 tests):**
- test_claude_adaptor.py - Comprehensive Claude adaptor coverage
- Platform info and API key validation
- SKILL.md formatting with YAML frontmatter
- Package creation and structure
- Upload success/failure scenarios
- Custom output paths
- Edge cases (special characters, minimal metadata)
- Network error handling

**Test Results:**
- 694 total tests passing (was 657, +37 new)
- 82 adaptor tests (77 passing, 5 skipped integration)
- 18 E2E workflow tests (all passing)
- 157 tests skipped (unchanged)
- No failures

**Coverage Improvements:**
- Complete workflow validation for all platforms
- Package format verification (ZIP vs tar.gz)
- Metadata consistency checks
- Error path coverage
- API key validation edge cases

All tests run without real API keys (mocked).

Related to #179
2025-12-28 20:47:00 +03:00
yusyus
e03789635d docs: Phase 6 - Add comprehensive multi-LLM platform documentation
Add three detailed platform guides:

1. **MULTI_LLM_SUPPORT.md** - Complete multi-platform overview
   - Supported platforms comparison table
   - Quick start for all platforms
   - Installation options
   - Complete workflow examples
   - Advanced usage and troubleshooting
   - Programmatic API usage examples

2. **GEMINI_INTEGRATION.md** - Google Gemini integration guide
   - Setup and API key configuration
   - Complete workflow with tar.gz packaging
   - Gemini-specific format differences
   - Files API + grounding usage
   - Cost estimation and best practices
   - Troubleshooting common issues

3. **OPENAI_INTEGRATION.md** - OpenAI ChatGPT integration guide
   - Setup and API key configuration
   - Complete workflow with Assistants API
   - Vector Store + file_search integration
   - Assistant instructions format
   - Cost estimation and best practices
   - Troubleshooting common issues

All guides include:
- Code examples for CLI and Python API
- Platform-specific features and differences
- Real-world usage patterns
- Troubleshooting sections
- Best practices

Related to #179
2025-12-28 20:40:04 +03:00
yusyus
e5de50cf5e docs: Update README with multi-LLM platform support
Add comprehensive multi-LLM support section featuring:
- 4 supported platforms (Claude, Gemini, OpenAI, Markdown)
- Comparison table showing format, upload, enhancement, API keys
- Example commands for each platform
- Installation instructions for optional dependencies
- 100% backward compatibility guarantee

Highlights:
- Claude remains default (no changes needed)
- Optional dependencies: [gemini], [openai], [all-llms]
- Universal scraping works for all platforms
- Platform-specific packaging and upload

Related to #179
2025-12-28 20:36:28 +03:00
yusyus
b5dbedbe73 feat: Phase 5 - Add optional dependencies for multi-LLM support
Add optional dependency groups for LLM platforms:
- [gemini]: google-generativeai>=0.8.0
- [openai]: openai>=1.0.0
- [all-llms]: All LLM platform dependencies combined
- Updated [all] group to include all LLM dependencies

Users can now install with:
- pip install skill-seekers[gemini]
- pip install skill-seekers[openai]
- pip install skill-seekers[all-llms]

Core functionality remains unchanged (no breaking changes)

Related to #179
2025-12-28 20:34:49 +03:00
yusyus
1a2f268316 feat: Phase 4 - Implement MarkdownAdaptor for generic export
- Add MarkdownAdaptor for universal markdown export
- Pure markdown format (no platform-specific features)
- ZIP packaging with README.md, references/, DOCUMENTATION.md
- No upload capability (manual use only)
- No AI enhancement support
- Combines all references into single DOCUMENTATION.md
- Add 12 unit tests (all passing)

Test Results:
- 12 MarkdownAdaptor tests passing
- 45 total adaptor tests passing (4 skipped)

Phase 4 Complete 

Related to #179
2025-12-28 20:34:21 +03:00
yusyus
9032232ac7 feat(multi-llm): Phase 3 - OpenAI adaptor implementation
Implement OpenAI ChatGPT platform support (Issue #179, Phase 3/6)

**Features:**
- Assistant instructions format (plain text, no frontmatter)
- ZIP packaging for Assistants API
- Upload creates Assistant + Vector Store with file_search
- Enhancement using GPT-4o
- API key validation (sk- prefix)

**Implementation:**
- New: src/skill_seekers/cli/adaptors/openai.py (520 lines)
  - format_skill_md(): Assistant instructions format
  - package(): Creates .zip with assistant_instructions.txt + vector_store_files/
  - upload(): Creates Assistant with Vector Store via Assistants API
  - enhance(): Uses GPT-4o for enhancement
  - validate_api_key(): Checks OpenAI key format (sk-)

**Tests:**
- New: tests/test_adaptors/test_openai_adaptor.py (14 tests)
  - 12 passing unit tests
  - 2 skipped (integration tests requiring real API keys)
  - Tests: validation, formatting, packaging, vector store structure

**Test Summary:**
- Total adaptor tests: 37 (33 passing, 4 skipped)
- Base: 10 tests
- Claude: (integrated in base)
- Gemini: 11 tests (2 skipped)
- OpenAI: 12 tests (2 skipped)

**Next:** Phase 4 - Implement Markdown adaptor (generic export)
2025-12-28 20:29:54 +03:00
yusyus
7320da6a07 feat(multi-llm): Phase 2 - Gemini adaptor implementation
Implement Google Gemini platform support (Issue #179, Phase 2/6)

**Features:**
- Plain markdown format (no YAML frontmatter)
- tar.gz packaging for Gemini Files API
- Upload to Google AI Studio
- Enhancement using Gemini 2.0 Flash
- API key validation (AIza prefix)

**Implementation:**
- New: src/skill_seekers/cli/adaptors/gemini.py (430 lines)
  - format_skill_md(): Plain markdown (no frontmatter)
  - package(): Creates .tar.gz with system_instructions.md
  - upload(): Uploads to Gemini Files API
  - enhance(): Uses Gemini 2.0 Flash for enhancement
  - validate_api_key(): Checks Google key format (AIza)

**Tests:**
- New: tests/test_adaptors/test_gemini_adaptor.py (13 tests)
  - 11 passing unit tests
  - 2 skipped (integration tests requiring real API keys)
  - Tests: validation, formatting, packaging, error handling

**Test Summary:**
- Total adaptor tests: 23 (21 passing, 2 skipped)
- Base adaptor: 10 tests
- Gemini adaptor: 11 tests (2 skipped)

**Next:** Phase 3 - Implement OpenAI adaptor
2025-12-28 20:24:48 +03:00
yusyus
d0bc042a43 feat(multi-llm): Phase 1 - Foundation adaptor architecture
Implement base adaptor pattern for multi-LLM support (Issue #179)

**Architecture:**
- Created adaptors/ package with base SkillAdaptor class
- Implemented factory pattern with get_adaptor() registry
- Refactored Claude-specific code into ClaudeAdaptor

**Changes:**
- New: src/skill_seekers/cli/adaptors/base.py (SkillAdaptor + SkillMetadata)
- New: src/skill_seekers/cli/adaptors/__init__.py (registry + factory)
- New: src/skill_seekers/cli/adaptors/claude.py (refactored upload + enhance logic)
- Modified: package_skill.py (added --target flag, uses adaptor.package())
- Modified: upload_skill.py (added --target flag, uses adaptor.upload())
- Modified: enhance_skill.py (added --target flag, uses adaptor.enhance())

**Tests:**
- New: tests/test_adaptors/test_base.py (10 tests passing)
- All existing tests still pass (backward compatible)

**Backward Compatibility:**
- Default --target=claude maintains existing behavior
- All CLI tools work exactly as before without --target flag
- No breaking changes

**Next:** Phase 2 - Implement Gemini, OpenAI, Markdown adaptors
2025-12-28 20:17:31 +03:00
yusyus
74bae4b49f feat(#191): Smart description generation for skill descriptions
Implements hybrid smart extraction + improved fallback templates for
skill descriptions across all scrapers.

Changes:
- github_scraper.py:
  * Added extract_description_from_readme() helper
  * Extracts from README first paragraph (60 lines)
  * Updates description after README extraction
  * Fallback: "Use when working with {name}"
  * Updated 3 locations (GitHubScraper, GitHubToSkillConverter, main)

- doc_scraper.py:
  * Added infer_description_from_docs() helper
  * Extracts from meta tags or first paragraph (65 lines)
  * Tries: meta description, og:description, first content paragraph
  * Fallback: "Use when working with {name}"
  * Updated 2 locations (create_enhanced_skill_md, get_configuration)

- pdf_scraper.py:
  * Added infer_description_from_pdf() helper
  * Extracts from PDF metadata (subject, title)
  * Fallback: "Use when referencing {name} documentation"
  * Updated 3 locations (PDFToSkillConverter, main x2)

- generate_router.py:
  * Updated 2 locations with improved router descriptions
  * "Use when working with {name} development and programming"

All changes:
- Only apply to NEW skill generations (don't modify existing)
- No API calls (free/offline)
- Smart extraction when metadata/README available
- Improved "Use when..." fallbacks instead of generic templates
- 612 tests passing (100%)

Fixes #191

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 19:00:26 +03:00
yusyus
e32f2fd977 docs: Add comprehensive skill architecture guide for layering and splitting
Addresses #199 - Developer guidance for multi-skill systems

**What's New:**

Added SKILL_ARCHITECTURE.md covering:
- Router/dispatcher pattern for complex applications
- When and how to split skills (500-line guideline)
- Manual skill architecture (not just auto-generated)
- Best practices (single responsibility, routing keywords)
- Complete examples (travel planner, e-commerce, code assistant)
- Implementation guide (step-by-step)
- Troubleshooting common issues

**Key Patterns:**

1. **Router Pattern:**
   - Master skill analyzes query
   - Routes to appropriate sub-skill(s)
   - Only loads relevant context

2. **Example Architectures:**
   - Travel planner → flight_booking + hotel + itinerary
   - E-commerce → catalog + cart + checkout + orders
   - Code assistant → debugging + refactoring + docs + testing

3. **Guidelines:**
   - Keep each skill under 500 lines
   - Use single responsibility principle
   - Define clear routing keywords
   - Document multi-skill coordination

**Based on Existing Implementation:**

Adapts our proven router pattern from LARGE_DOCUMENTATION.md
and generate_router.py, now documented for manual use cases.

**Impact:**

Enables developers to build enterprise-level multi-skill systems
while maintaining optimal Claude performance and context efficiency.

Closes #199
2025-12-28 18:37:43 +03:00
yusyus
c411eb24ec fix: Add UTF-8 encoding to all file operations for Windows compatibility
Fixes #209 - UnicodeDecodeError on Windows with non-ASCII characters

**Problem:**
Windows users with non-English locales (Chinese, Japanese, Korean, etc.)
experienced GBK/SHIFT-JIS codec errors when the system default encoding
is not UTF-8.

Error: 'gbk' codec can't decode byte 0xac in position 206: illegal
multibyte sequence

**Root Cause:**
File operations using open() without explicit encoding parameter use
the system default encoding, which on Windows Chinese edition is GBK.
JSON files contain UTF-8 encoded characters that fail to decode with GBK.

**Solution:**
Added encoding='utf-8' to ALL file operations across:
- doc_scraper.py (4 instances):
  * load_config() - line 1310
  * check_existing_data() - line 1416
  * save_checkpoint() - line 173
  * load_checkpoint() - line 186

- github_scraper.py (1 instance):
  * main() config loading - line 922

- unified_scraper.py (10 instances):
  * All JSON read/write operations - lines 134, 153, 205, 239, 275,
    278, 325, 328, 342, 364

**Test Results:**
-  All 612 tests passing (100% pass rate)
-  Backward compatible (UTF-8 is standard on Linux/macOS)
-  Fixes Windows locale issues

**Impact:**
-  Works on ALL Windows locales (Chinese, Japanese, Korean, etc.)
-  Maintains compatibility with Linux/macOS
-  Prevents future encoding issues

**Thanks to:** @my5icol for the detailed bug report and fix suggestion!
2025-12-28 18:27:50 +03:00
yusyus
eb3b9d9175 fix: Add robust CHANGELOG encoding handling and enhancement flags
Fixes #219 - Two issues resolved:

1. **Encoding Error Fix:**
   - Added graceful error handling for CHANGELOG extraction
   - Handles 'unsupported encoding: none' error from GitHub API
   - Falls back to latin-1 encoding if UTF-8 fails
   - Logs warnings instead of crashing
   - Continues processing even if CHANGELOG has encoding issues

2. **Enhancement Flags Added:**
   - Added --enhance-local flag to github command
   - Added --enhance flag for API-based enhancement
   - Added --api-key flag for API authentication
   - Auto-enhancement after skill building when flags used
   - Matches doc_scraper.py functionality

**Test Results:**
-  All 612 tests passing (100% pass rate)
-  All 22 github_scraper tests passing
-  Backward compatible

**Usage:**
```bash
# Local enhancement (no API key needed)
skill-seekers github --repo ccxt/ccxt --name ccxtSkills --enhance-local

# API-based enhancement
skill-seekers github --repo owner/repo --enhance --api-key sk-ant-...
```
2025-12-28 18:21:03 +03:00
yusyus
fd61cdca77 feat: Add smart summarization for large skills in local enhancement
Fixes #214 - Local enhancement now handles large skills automatically

**Problem:**
- Claude CLI has undocumented ~30-40K character limit
- Large skills (>30K chars) fail silently during local enhancement
- Users experience "Claude finished but SKILL.md was not updated" error

**Solution:**
- Auto-detect large skills (>30K chars)
- Apply intelligent summarization to reduce content size
- Preserve critical content:
  * First 20% (introduction/overview)
  * Up to 5 best code blocks
  * Up to 10 section headings with context
- Target ~30% of original size
- Show clear warnings when summarization is applied

**Implementation:**
- Added `summarize_reference()` method to LocalSkillEnhancer
- Modified `create_enhancement_prompt()` to accept summarization parameters
- Updated `run()` method to auto-enable summarization for large skills
- Added comprehensive test suite (6 tests)

**Test Results:**
-  All 612 tests passing (100% pass rate)
-  6 new smart summarization tests
-  E2E test: 60K skill → 17K prompt (within limits)
-  Code block preservation verified

**User Experience:**
When enhancement is triggered on a large skill:
```
⚠️  LARGE SKILL DETECTED
  📊 Reference content: 60,072 characters
  💡 Claude CLI limit: ~30,000-40,000 characters

  🔧 Applying smart summarization to ensure success...
     • Keeping introductions and overviews
     • Extracting best code examples
     • Preserving key concepts and headings
     • Target: ~30% of original size

  ✓ Reduced from 60,072 to 15,685 chars (26%)
  ✓ Prompt created and optimized (17,804 characters)
  ✓ Ready for Claude CLI (within safe limits)
```

**Backward Compatibility:**
- No breaking changes
- Works with existing skills
- Falls back gracefully for normal-sized skills
2025-12-28 18:06:50 +03:00
yusyus
476813cb9a Merge pull request #218 from yusufkaraaslan/development
Release v2.4.0 - MCP 2025 upgrade
2025-12-26 00:48:39 +03:00
yusyus
9e41094436 feat: v2.4.0 - MCP 2025 upgrade with multi-agent support (#217)
* feat: v2.4.0 - MCP 2025 upgrade with multi-agent support

Major MCP infrastructure upgrade to 2025 specification with HTTP + stdio
transport and automatic configuration for 5+ AI coding agents.

### 🚀 What's New

**MCP 2025 Specification (SDK v1.25.0)**
- FastMCP framework integration (68% code reduction)
- HTTP + stdio dual transport support
- Multi-agent auto-configuration
- 17 MCP tools (up from 9)
- Improved performance and reliability

**Multi-Agent Support**
- Auto-detects 5 AI coding agents (Claude Code, Cursor, Windsurf, VS Code, IntelliJ)
- Generates correct config for each agent (stdio vs HTTP)
- One-command setup via ./setup_mcp.sh
- HTTP server for concurrent multi-client support

**Architecture Improvements**
- Modular tool organization (tools/ package)
- Graceful degradation for testing
- Backward compatibility maintained
- Comprehensive test coverage (606 tests passing)

### 📦 Changed Files

**Core MCP Server:**
- src/skill_seekers/mcp/server_fastmcp.py (NEW - 300 lines, FastMCP-based)
- src/skill_seekers/mcp/server.py (UPDATED - compatibility shim)
- src/skill_seekers/mcp/agent_detector.py (NEW - multi-agent detection)

**Tool Modules:**
- src/skill_seekers/mcp/tools/config_tools.py (NEW)
- src/skill_seekers/mcp/tools/scraping_tools.py (NEW)
- src/skill_seekers/mcp/tools/packaging_tools.py (NEW)
- src/skill_seekers/mcp/tools/splitting_tools.py (NEW)
- src/skill_seekers/mcp/tools/source_tools.py (NEW)

**Version Updates:**
- pyproject.toml: 2.3.0 → 2.4.0
- src/skill_seekers/cli/main.py: version string updated
- src/skill_seekers/mcp/__init__.py: 2.0.0 → 2.4.0

**Documentation:**
- README.md: Added multi-agent support section
- docs/MCP_SETUP.md: Complete rewrite for MCP 2025
- docs/HTTP_TRANSPORT.md (NEW)
- docs/MULTI_AGENT_SETUP.md (NEW)
- CHANGELOG.md: v2.4.0 entry with migration guide

**Tests:**
- tests/test_mcp_fastmcp.py (NEW - 57 tests)
- tests/test_server_fastmcp_http.py (NEW - HTTP transport tests)
- All existing tests updated and passing (606/606)

###  Test Results

**E2E Testing:**
- Fresh venv installation: 
- stdio transport: 
- HTTP transport:  (health check, SSE endpoint)
- Agent detection:  (found Claude Code)
- Full test suite:  606 passed, 152 skipped

**Test Coverage:**
- Core functionality: 100% passing
- Backward compatibility: Verified
- No breaking changes: Confirmed

### 🔄 Migration Path

**Existing Users:**
- Old `python -m skill_seekers.mcp.server` still works
- Existing configs unchanged
- All tools function identically
- Deprecation warnings added (removal in v3.0.0)

**New Users:**
- Use `./setup_mcp.sh` for auto-configuration
- Or manually use `python -m skill_seekers.mcp.server_fastmcp`
- HTTP mode: `--http --port 8000`

### 📊 Metrics

- Lines of code: 2200 → 300 (87% reduction in server.py)
- Tools: 9 → 17 (88% increase)
- Agents supported: 1 → 5 (400% increase)
- Tests: 427 → 606 (42% increase)
- All tests passing: 

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: Add backward compatibility exports to server.py for tests

Re-export tool functions from server.py to maintain backward compatibility
with test_mcp_server.py which imports from the legacy server module.

This fixes CI test failures where tests expected functions like list_tools()
and generate_config_tool() to be importable from skill_seekers.mcp.server.

All tool functions are now re-exported for compatibility while maintaining
the deprecation warning for direct server execution.

* fix: Export run_subprocess_with_streaming and fix tool schemas for backward compatibility

- Add run_subprocess_with_streaming export from scraping_tools
- Fix tool schemas to include properties field (required by tests)
- Resolves 9 failing tests in test_mcp_server.py

* fix: Add call_tool router and fix test patches for modular architecture

- Add call_tool function to server.py for backward compatibility
- Fix test patches to use correct module paths (scraping_tools instead of server)
- Update 7 test decorators to patch the correct function locations
- Resolves remaining CI test failures

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 00:45:48 +03:00
yusyus
72611af87d feat(v2.3.0): Add multi-agent installation support
Add automatic skill installation to 10+ AI coding agents with a single command.

New Features:
- New install-agent command for installing skills to any AI agent
- Support for 10+ agents: Claude Code, Cursor, VS Code, Amp, Goose, OpenCode, Letta, Aide, Windsurf
- Smart path resolution (global ~/.agent vs project-relative .agent/)
- Fuzzy agent name matching with suggestions
- --agent all flag to install to all agents at once
- --force flag to overwrite existing installations
- --dry-run flag to preview installations
- Comprehensive error handling and user feedback

Implementation:
- Created install_agent.py (379 lines) with core installation logic
- Updated main.py with install-agent subcommand
- Updated pyproject.toml with entry point
- Added 32 comprehensive tests (all passing, 603 total)
- No regressions in existing functionality

Documentation:
- Updated README.md with multi-agent installation guide
- Updated CLAUDE.md with install-agent examples
- Updated CHANGELOG.md with v2.3.0 release notes
- Added agent compatibility table

Technical Details:
- 100% own implementation (no external dependencies)
- Pure Python using stdlib (shutil, pathlib, argparse)
- Compatible with Agent Skills open standard (agentskills.io)
- Works offline

Closes #210

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 02:04:32 +03:00
yusyus
e3fc660457 Merge main into development after v2.2.0 release
Brings release commits back to development:
- Version bump to 2.2.0
- CLI version string update
- Test fix for version check
- CHANGELOG [Unreleased] section
- All CI tests passing
2025-12-22 00:37:19 +03:00
yusyus
9d91bf0b82 test: Update version test to expect 2.2.0 2025-12-22 00:31:02 +03:00
yusyus
0297a2e02a docs: Prepare CHANGELOG for next development cycle 2025-12-21 23:19:40 +03:00
yusyus
9cca9488e4 fix: Update version string in CLI to 2.2.0 2025-12-21 23:18:43 +03:00
yusyus
bf7e7def12 Merge branch 'development' for v2.2.0 release
Major changes:
- Git-based config sources for team collaboration
- Unified language detector (20+ languages)
- Retry utilities with exponential backoff
- Local repository extraction fixes
- 29 commits, 574 tests passing
2025-12-21 23:08:53 +03:00
yusyus
35c6400f53 chore: Bump version to 2.2.0 2025-12-21 23:08:37 +03:00
yusyus
824d817a41 fix: Make retry timing test more robust for CI
The exponential_backoff_timing test was flaky on CI due to strict timing assertions. On busy CI systems (especially macOS runners), CPU scheduling and execution time variance can cause measured delays to deviate from expected values.

Changes:
- Simplified test to check total elapsed time instead of individual delay comparisons
- Changed threshold from 1.5x comparison to lenient 0.25s total time minimum
- Expected delays: 0.1s + 0.2s = 0.3s minimum, using 0.25s threshold for variance
- Test now verifies behavior (delays applied) without strict timing requirements

This makes the test reliable across different CI environments while still validating retry logic.

Fixes CI failure on macOS runner (Python 3.12):
  AssertionError: 0.249 not greater than 0.250 * 1.5
2025-12-21 22:57:27 +03:00
yusyus
785fff087e feat: Add unified language detector for code analysis
- Created LanguageDetector class supporting 20+ programming languages
- Confidence-based detection with customizable thresholds (min_confidence parameter)
- Replaces duplicate language detection code in doc_scraper and pdf_extractor
- Comprehensive test suite with 100+ test cases

Changes:
- NEW: src/skill_seekers/cli/language_detector.py (17 KB)
  - Unified detector with pattern matching for 20+ languages
  - Confidence scoring (0.0-1.0 scale)
  - Supports: Python, JavaScript, TypeScript, Java, C++, C#, Go, Rust, PHP, Ruby, Swift, Kotlin, Shell, SQL, HTML, CSS, JSON, YAML, XML, and more

- NEW: tests/test_language_detector.py (20 KB)
  - 100+ test cases covering all supported languages
  - Edge case testing (mixed code, low confidence, etc.)

- MODIFIED: src/skill_seekers/cli/doc_scraper.py
  - Removed 80+ lines of duplicate detection code
  - Now uses shared LanguageDetector instance

- MODIFIED: src/skill_seekers/cli/pdf_extractor_poc.py
  - Removed 130+ lines of duplicate detection code
  - Now uses shared LanguageDetector instance

- MODIFIED: tests/test_pdf_extractor.py
  - Fixed imports to use proper package paths
  - Added manual detector initialization in test setup

Benefits:
- DRY: Single source of truth for language detection
- Maintainability: Add new languages in one place
- Consistency: Same detection logic across all scrapers
- Testability: Comprehensive test coverage
- Extensibility: Easy to add new languages or improve patterns

Addresses technical debt from having duplicate detection logic in multiple files.
2025-12-21 22:53:05 +03:00
yusyus
8eb8cd2940 docs: Mark E2.6 and F1.5 as completed (retry utilities added via PR #208)
Updated roadmap to reflect that retry utilities have been implemented:
- E2.6: Add retry logic for network failures 
- F1.5: Add network retry with exponential backoff 

Utilities are now available in utils.py (PR #208):
- retry_with_backoff() - Sync version
- retry_with_backoff_async() - Async version

Integration into scrapers and MCP tools can be done in follow-up PRs.

Related: #92, #97, PR #208
2025-12-21 22:34:48 +03:00
Joseph Magly
0d0eda7149 feat(utils): add retry utilities with exponential backoff (#208)
Add retry_with_backoff() and retry_with_backoff_async() for network operations.

Features:
- Configurable max attempts (default: 3)
- Exponential backoff with configurable base delay
- Operation name for meaningful log messages
- Both sync and async versions

Addresses E2.6: Add retry logic for network failures

Co-authored-by: Joseph Magly <1159087+jmagly@users.noreply.github.com>
2025-12-21 22:31:38 +03:00
yusyus
65ded6c07c fix: Fix local repo extraction limitations (code analyzer, exclusions, enhancement)
This commit fixes three critical limitations discovered during local repository skill extraction testing:

**Fix 1: Code Analyzer Import Issue**
- Changed unified_scraper.py to use absolute imports instead of relative imports
- Fixed: `from github_scraper import` → `from skill_seekers.cli.github_scraper import`
- Fixed: `from pdf_scraper import` → `from skill_seekers.cli.pdf_scraper import`
- Result: CodeAnalyzer now available during extraction, deep analysis works

**Fix 2: Unity Library Exclusions**
- Updated should_exclude_dir() to accept and check full directory paths
- Updated _extract_file_tree_local() to pass both dir name and full path
- Added exclusion config passing from unified_scraper to github_scraper
- Result: exclude_dirs_additional now works (297 files excluded in test)

**Fix 3: AI Enhancement for Single Sources**
- Changed read_reference_files() to use rglob() for recursive search
- Now finds reference files in subdirectories (e.g., references/github/README.md)
- Result: AI enhancement works with unified skills that have nested references

**Test Results:**
- Code Analyzer:  Working (deep analysis running)
- Unity Exclusions:  Working (297 files excluded from 679)
- AI Enhancement:  Working (finds and reads nested references)

**Files Changed:**
- src/skill_seekers/cli/unified_scraper.py (Fix 1 & 2)
- src/skill_seekers/cli/github_scraper.py (Fix 2)
- src/skill_seekers/cli/utils.py (Fix 3)

**Test Artifacts:**
- configs/deck_deck_go_local.json (test configuration)
- docs/LOCAL_REPO_TEST_RESULTS.md (comprehensive test report)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 22:24:38 +03:00
yusyus
ae69c507a0 fix: Add defensive imports for MCP package in install_skill tests
- Added try/except around 'from mcp.types import TextContent' in test files
- Added @pytest.mark.skipif decorator to all test classes
- Tests now gracefully skip if MCP package is not installed
- Fixes ModuleNotFoundError during test collection in CI

This follows the same pattern used in test_mcp_server.py (lines 21-31).

All tests pass locally: 23 passed, 1 skipped
2025-12-21 20:52:13 +03:00