github yusufkaraaslan/Skill_Seekers v2.2.0

8 hours ago

[2.2.0] - 2025-12-21

🚀 Private Config Repositories - Team Collaboration Unlocked

This major release adds git-based config sources, enabling teams to fetch configs from private/team repositories in addition to the public API. This unlocks team collaboration, enterprise deployment, and custom config collections.

🎯 Major Features

Git-Based Config Sources (Issue #211)

  • Multi-source config management - Fetch from API, git URL, or named sources
  • Private repository support - GitHub, GitLab, Bitbucket, Gitea, and custom git servers
  • Team collaboration - Share configs across 3-5 person teams with version control
  • Enterprise scale - Support 500+ developers with priority-based resolution
  • Secure authentication - Environment variable tokens only (GITHUB_TOKEN, GITLAB_TOKEN, etc.)
  • Intelligent caching - Shallow clone (10-50x faster), auto-pull updates
  • Offline mode - Works with cached repos when offline
  • Backward compatible - Existing API-based configs work unchanged

New MCP Tools

  • add_config_source - Register git repositories as config sources

    • Auto-detects source type (GitHub, GitLab, etc.)
    • Auto-selects token environment variable
    • Priority-based resolution for multiple sources
    • SSH URL support (auto-converts to HTTPS + token)
  • list_config_sources - View all registered sources

    • Shows git URL, branch, priority, token env
    • Filter by enabled/disabled status
    • Sorted by priority (lower = higher priority)
  • remove_config_source - Unregister sources

    • Removes from registry (cache preserved for offline use)
    • Helpful error messages with available sources
  • Enhanced fetch_config - Three modes

    1. Named source mode - fetch_config(source="team", config_name="react-custom")
    2. Git URL mode - fetch_config(git_url="https://...", config_name="react-custom")
    3. API mode - fetch_config(config_name="react") (unchanged)

Added

Core Infrastructure

  • GitConfigRepo class (src/skill_seekers/mcp/git_repo.py, 283 lines)

    • clone_or_pull() - Shallow clone with auto-pull and force refresh
    • find_configs() - Recursive *.json discovery (excludes .git)
    • get_config() - Load config with case-insensitive matching
    • inject_token() - Convert SSH to HTTPS with token authentication
    • validate_git_url() - Support HTTPS, SSH, and file:// URLs
    • Comprehensive error handling (auth failures, missing repos, corrupted caches)
  • SourceManager class (src/skill_seekers/mcp/source_manager.py, 260 lines)

    • add_source() - Register/update sources with validation
    • get_source() - Retrieve by name with helpful errors
    • list_sources() - List all/enabled sources sorted by priority
    • remove_source() - Unregister sources
    • update_source() - Modify specific fields
    • Atomic file I/O (write to temp, then rename)
    • Auto-detect token env vars from source type

Storage & Caching

  • Registry file: ~/.skill-seekers/sources.json

    • Stores source metadata (URL, branch, priority, timestamps)
    • Version-controlled schema (v1.0)
    • Atomic writes prevent corruption
  • Cache directory: $SKILL_SEEKERS_CACHE_DIR (default: ~/.skill-seekers/cache/)

    • One subdirectory per source
    • Shallow git clones (depth=1, single-branch)
    • Configurable via environment variable

Documentation

  • docs/GIT_CONFIG_SOURCES.md (800+ lines) - Comprehensive guide

    • Quick start, architecture, authentication
    • MCP tools reference with examples
    • Use cases (small teams, enterprise, open source)
    • Best practices, troubleshooting, advanced topics
    • Complete API reference
  • configs/example-team/ - Example repository for testing

    • react-custom.json - Custom React config with metadata
    • vue-internal.json - Internal Vue config
    • company-api.json - Company API config example
    • README.md - Usage guide and best practices
    • test_e2e.py - End-to-end test script (7 steps, 100% passing)
  • README.md - Updated with git source examples

    • New "Private Config Repositories" section in Key Features
    • Comprehensive usage examples (quick start, team collaboration, enterprise)
    • Supported platforms and authentication
    • Example workflows for different team sizes

Dependencies

  • GitPython>=3.1.40 - Git operations (clone, pull, branch switching)
    • Replaces subprocess calls with high-level API
    • Better error handling and cross-platform support

Testing

  • 83 new tests (100% passing)
    • tests/test_git_repo.py (35 tests) - GitConfigRepo functionality
      • Initialization, URL validation, token injection
      • Clone/pull operations, config discovery, error handling
    • tests/test_source_manager.py (48 tests) - SourceManager functionality
      • Add/get/list/remove/update sources
      • Registry persistence, atomic writes, default token env
    • tests/test_mcp_git_sources.py (18 tests) - MCP integration
      • All 3 fetch modes (API, Git URL, Named Source)
      • Source management tools (add/list/remove)
      • Complete workflow (add → fetch → remove)
      • Error scenarios (auth failures, missing configs)

Improved

  • MCP server - Now supports 12 tools (up from 9)
    • Maintains backward compatibility
    • Enhanced error messages with available sources
    • Priority-based config resolution

Use Cases

Small Teams (3-5 people):

# One-time setup
add_config_source(name="team", git_url="https://github.com/myteam/configs.git")

# Daily usage
fetch_config(source="team", config_name="react-internal")

Enterprise (500+ developers):

# IT pre-configures sources
add_config_source(name="platform", ..., priority=1)
add_config_source(name="mobile", ..., priority=2)

# Developers use transparently
fetch_config(config_name="platform-api")  # Finds in platform source

Example Repository:

cd /path/to/Skill_Seekers
python3 configs/example-team/test_e2e.py  # Test E2E workflow

Backward Compatibility

  • ✅ All existing configs work unchanged
  • ✅ API mode still default (no registration needed)
  • ✅ No breaking changes to MCP tools or CLI
  • ✅ New parameters are optional (git_url, source, refresh)

Security

  • ✅ Tokens via environment variables only (not in files)
  • ✅ Shallow clones minimize attack surface
  • ✅ No token storage in registry file
  • ✅ Secure token injection (auto-converts SSH to HTTPS)

Performance

  • ✅ Shallow clone: 10-50x faster than full clone
  • ✅ Minimal disk space (no git history)
  • ✅ Auto-pull: Only fetches changes (not full re-clone)
  • ✅ Offline mode: Works with cached repos

Files Changed

  • Modified (2): pyproject.toml, src/skill_seekers/mcp/server.py
  • Added (6): 3 source files + 3 test files + 1 doc + 1 example repo
  • Total lines added: ~2,600

Migration Guide

No migration needed! This is purely additive:

# Before v2.2.0 (still works)
fetch_config(config_name="react")

# New in v2.2.0 (optional)
add_config_source(name="team", git_url="...")
fetch_config(source="team", config_name="react-custom")

Known Limitations

  • MCP async tests require pytest-asyncio (added to dev dependencies)
  • Example repository uses 'master' branch (git init default)

See Also

  • GIT_CONFIG_SOURCES.md - Complete guide
  • configs/example-team/ - Example repository
  • Issue #211 - Original feature request

Don't miss a new Skill_Seekers release

NewReleases is sending notifications on new releases.