feat: Multi-Source Synthesis Architecture - Rich Standalone Skills + Smart Combination

BREAKING CHANGE: Major architectural improvements to multi-source skill generation

This commit implements the complete "Multi-Source Synthesis Architecture" where
each source (documentation, GitHub, PDF) generates a rich standalone SKILL.md
file before being intelligently synthesized with source-specific formulas.

## 🎯 Core Architecture Changes

### 1. Rich Standalone SKILL.md Generation (Source Parity)

Each source now generates comprehensive, production-quality SKILL.md files that
can stand alone OR be synthesized with other sources.

**GitHub Scraper Enhancements** (+263 lines):
- Now generates 300+ line SKILL.md (was ~50 lines)
- Integrates C3.x codebase analysis data:
  - C2.5: API Reference extraction
  - C3.1: Design pattern detection (27 high-confidence patterns)
  - C3.2: Test example extraction (215 examples)
  - C3.7: Architectural pattern analysis
- Enhanced sections:
  -  Quick Reference with pattern summaries
  - 📝 Code Examples from real repository tests
  - 🔧 API Reference from codebase analysis
  - 🏗️ Architecture Overview with design patterns
  - ⚠️ Known Issues from GitHub issues
- Location: src/skill_seekers/cli/github_scraper.py

**PDF Scraper Enhancements** (+205 lines):
- Now generates 200+ line SKILL.md (was ~50 lines)
- Enhanced content extraction:
  - 📖 Chapter Overview (PDF structure breakdown)
  - 🔑 Key Concepts (extracted from headings)
  -  Quick Reference (pattern extraction)
  - 📝 Code Examples: Top 15 (was top 5), grouped by language
  - Quality scoring and intelligent truncation
- Better formatting and organization
- Location: src/skill_seekers/cli/pdf_scraper.py

**Result**: All 3 sources (docs, GitHub, PDF) now have equal capability to
generate rich, comprehensive standalone skills.

### 2. File Organization & Caching System

**Problem**: output/ directory cluttered with intermediate files, data, and logs.

**Solution**: New `.skillseeker-cache/` hidden directory for all intermediate files.

**New Structure**:
```
.skillseeker-cache/{skill_name}/
├── sources/          # Standalone SKILL.md from each source
│   ├── httpx_docs/
│   ├── httpx_github/
│   └── httpx_pdf/
├── data/             # Raw scraped data (JSON)
├── repos/            # Cloned GitHub repositories (cached for reuse)
└── logs/             # Session logs with timestamps

output/{skill_name}/  # CLEAN: Only final synthesized skill
├── SKILL.md
└── references/
```

**Benefits**:
-  Clean output/ directory (only final product)
-  Intermediate files preserved for debugging
-  Repository clones cached and reused (faster re-runs)
-  Timestamped logs for each scraping session
-  All cache dirs added to .gitignore

**Changes**:
- .gitignore: Added `.skillseeker-cache/` entry
- unified_scraper.py: Complete reorganization (+238 lines)
  - Added cache directory structure
  - File logging with timestamps
  - Repository cloning with caching/reuse
  - Cleaner intermediate file management
  - Better subprocess logging and error handling

### 3. Config Repository Migration

**Moved to separate config repository**: https://github.com/yusufkaraaslan/skill-seekers-configs

**Deleted from this repo** (35 config files):
- ansible-core.json, astro.json, claude-code.json
- django.json, django_unified.json, fastapi.json, fastapi_unified.json
- godot.json, godot_unified.json, godot_github.json, godot-large-example.json
- react.json, react_unified.json, react_github.json, react_github_example.json
- vue.json, kubernetes.json, laravel.json, tailwind.json, hono.json
- svelte_cli_unified.json, steam-economy-complete.json
- deck_deck_go_local.json, python-tutorial-test.json, example_pdf.json
- test-manual.json, fastapi_unified_test.json, fastmcp_github_example.json
- example-team/ directory (4 files)

**Kept as reference example**:
- configs/httpx_comprehensive.json (complete multi-source example)

**Rationale**:
- Cleaner repository (979+ lines added, 1680 deleted)
- Configs managed separately with versioning
- Official presets available via `fetch-config` command
- Users can maintain private config repos

### 4. AI Enhancement Improvements

**enhance_skill.py** (+125 lines):
- Better integration with multi-source synthesis
- Enhanced prompt generation for synthesized skills
- Improved error handling and logging
- Support for source metadata in enhancement

### 5. Documentation Updates

**CLAUDE.md** (+252 lines):
- Comprehensive project documentation
- Architecture explanations
- Development workflow guidelines
- Testing requirements
- Multi-source synthesis patterns

**SKILL_QUALITY_ANALYSIS.md** (new):
- Quality assessment framework
- Before/after analysis of httpx skill
- Grading rubric for skill quality
- Metrics and benchmarks

### 6. Testing & Validation Scripts

**test_httpx_skill.sh** (new):
- Complete httpx skill generation test
- Multi-source synthesis validation
- Quality metrics verification

**test_httpx_quick.sh** (new):
- Quick validation script
- Subset of features for rapid testing

## 📊 Quality Improvements

| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| GitHub SKILL.md lines | ~50 | 300+ | +500% |
| PDF SKILL.md lines | ~50 | 200+ | +300% |
| GitHub C3.x integration |  No |  Yes | New feature |
| PDF pattern extraction |  No |  Yes | New feature |
| File organization | Messy | Clean cache | Major improvement |
| Repository cloning | Always fresh | Cached reuse | Faster re-runs |
| Logging | Console only | Timestamped files | Better debugging |
| Config management | In-repo | Separate repo | Cleaner separation |

## 🧪 Testing

All existing tests pass:
- test_c3_integration.py: Updated for new architecture
- 700+ tests passing
- Multi-source synthesis validated with httpx example

## 🔧 Technical Details

**Modified Core Files**:
1. src/skill_seekers/cli/github_scraper.py (+263 lines)
   - _generate_skill_md(): Rich content with C3.x integration
   - _format_pattern_summary(): Design pattern summaries
   - _format_code_examples(): Test example formatting
   - _format_api_reference(): API reference from codebase
   - _format_architecture(): Architectural pattern analysis

2. src/skill_seekers/cli/pdf_scraper.py (+205 lines)
   - _generate_skill_md(): Enhanced with rich content
   - _format_key_concepts(): Extract concepts from headings
   - _format_patterns_from_content(): Pattern extraction
   - Code examples: Top 15, grouped by language, better quality scoring

3. src/skill_seekers/cli/unified_scraper.py (+238 lines)
   - __init__(): Cache directory structure
   - _setup_logging(): File logging with timestamps
   - _clone_github_repo(): Repository caching system
   - _scrape_documentation(): Move to cache, better logging
   - Better subprocess handling and error reporting

4. src/skill_seekers/cli/enhance_skill.py (+125 lines)
   - Multi-source synthesis awareness
   - Enhanced prompt generation
   - Better error handling

**Minor Updates**:
- src/skill_seekers/cli/codebase_scraper.py (+3 lines): Minor improvements
- src/skill_seekers/cli/test_example_extractor.py: Quality scoring adjustments
- tests/test_c3_integration.py: Test updates for new architecture

## 🚀 Migration Guide

**For users with existing configs**:
No action required - all existing configs continue to work.

**For users wanting official presets**:
```bash
# Fetch from official config repo
skill-seekers fetch-config --name react --target unified

# Or use existing local configs
skill-seekers unified --config configs/httpx_comprehensive.json
```

**Cache directory**:
New `.skillseeker-cache/` directory will be created automatically.
Safe to delete - will be regenerated on next run.

## 📈 Next Steps

This architecture enables:
-  Source parity: All sources generate rich standalone skills
-  Smart synthesis: Each combination has optimal formula
-  Better debugging: Cached files and logs preserved
-  Faster iteration: Repository caching, clean output
- 🔄 Future: Multi-platform enhancement (Gemini, GPT-4) - planned
- 🔄 Future: Conflict detection between sources - planned
- 🔄 Future: Source prioritization rules - planned

## 🎓 Example: httpx Skill Quality

**Before**: 186 lines, basic synthesis, missing data
**After**: 640 lines with AI enhancement, A- (9/10) quality

**What changed**:
- All C3.x analysis data integrated (patterns, tests, API, architecture)
- GitHub metadata included (stars, topics, languages)
- PDF chapter structure visible
- Professional formatting with emojis and clear sections
- Real-world code examples from test suite
- Design patterns explained with confidence scores
- Known issues with impact assessment

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
yusyus
2026-01-11 23:01:07 +03:00
parent cf9539878e
commit a99e22c639
46 changed files with 1869 additions and 1678 deletions

View File

@@ -1,31 +0,0 @@
{
"name": "ansible-core",
"description": "Ansible Core 2.19 skill for automation and configuration management",
"base_url": "https://docs.ansible.com/ansible-core/2.19/",
"selectors": {
"main_content": "div[role=main]",
"title": "title",
"code_blocks": "pre"
},
"url_patterns": {
"include": [],
"exclude": ["/_static/", "/_images/", "/_downloads/", "/search.html", "/genindex.html", "/py-modindex.html", "/index.html", "/roadmap/"]
},
"categories": {
"getting_started": ["getting_started", "getting-started", "introduction", "overview"],
"installation": ["installation_guide", "installation", "setup"],
"inventory": ["inventory_guide", "inventory"],
"playbooks": ["playbook_guide", "playbooks", "playbook"],
"modules": ["module_plugin_guide", "modules", "plugins"],
"collections": ["collections_guide", "collections"],
"vault": ["vault_guide", "vault", "encryption"],
"commands": ["command_guide", "commands", "cli"],
"porting": ["porting_guides", "porting", "migration"],
"os_specific": ["os_guide", "platform"],
"tips": ["tips_tricks", "tips", "tricks", "best-practices"],
"community": ["community", "contributing", "contributions"],
"development": ["dev_guide", "development", "developing"]
},
"rate_limit": 0.5,
"max_pages": 800
}

View File

@@ -1,30 +0,0 @@
{
"name": "astro",
"description": "Astro web framework for content-focused websites. Use for Astro components, islands architecture, content collections, SSR/SSG, and modern web development.",
"base_url": "https://docs.astro.build/en/getting-started/",
"start_urls": [
"https://docs.astro.build/en/getting-started/",
"https://docs.astro.build/en/install/auto/",
"https://docs.astro.build/en/core-concepts/project-structure/",
"https://docs.astro.build/en/core-concepts/astro-components/",
"https://docs.astro.build/en/core-concepts/astro-pages/"
],
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": ["/en/"],
"exclude": ["/blog", "/integrations"]
},
"categories": {
"getting_started": ["getting-started", "install", "tutorial"],
"core_concepts": ["core-concepts", "project-structure", "components", "pages"],
"guides": ["guides", "deploy", "migrate"],
"configuration": ["configuration", "config", "typescript"],
"integrations": ["integrations", "framework", "adapter"]
},
"rate_limit": 0.5,
"max_pages": 100
}

View File

@@ -1,37 +0,0 @@
{
"name": "claude-code",
"description": "Claude Code CLI and development environment. Use for Claude Code features, tools, workflows, MCP integration, configuration, and AI-assisted development.",
"base_url": "https://docs.claude.com/en/docs/claude-code/",
"start_urls": [
"https://docs.claude.com/en/docs/claude-code/overview",
"https://docs.claude.com/en/docs/claude-code/quickstart",
"https://docs.claude.com/en/docs/claude-code/common-workflows",
"https://docs.claude.com/en/docs/claude-code/mcp",
"https://docs.claude.com/en/docs/claude-code/settings",
"https://docs.claude.com/en/docs/claude-code/troubleshooting",
"https://docs.claude.com/en/docs/claude-code/iam"
],
"selectors": {
"main_content": "#content-container",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": ["/claude-code/"],
"exclude": ["/api-reference/", "/claude-ai/", "/claude.ai/", "/prompt-engineering/", "/changelog/"]
},
"categories": {
"getting_started": ["overview", "quickstart", "installation", "setup", "terminal-config"],
"workflows": ["workflow", "common-workflows", "git", "testing", "debugging", "interactive"],
"mcp": ["mcp", "model-context-protocol"],
"configuration": ["config", "settings", "preferences", "customize", "hooks", "statusline", "model-config", "memory", "output-styles"],
"agents": ["agent", "task", "subagent", "sub-agent", "specialized"],
"skills": ["skill", "agent-skill"],
"integrations": ["ide-integrations", "vs-code", "jetbrains", "plugin", "marketplace"],
"deployment": ["bedrock", "vertex", "deployment", "network", "gateway", "devcontainer", "sandboxing", "third-party"],
"reference": ["reference", "api", "command", "cli-reference", "slash", "checkpointing", "headless", "sdk"],
"enterprise": ["iam", "security", "monitoring", "analytics", "costs", "legal", "data-usage"]
},
"rate_limit": 0.5,
"max_pages": 200
}

View File

@@ -1,33 +0,0 @@
{
"name": "deck_deck_go_local_test",
"description": "Local repository skill extraction test for deck_deck_go Unity project. Demonstrates unlimited file analysis, deep code structure extraction, and AI enhancement workflow for Unity C# codebase.",
"sources": [
{
"type": "github",
"repo": "yusufkaraaslan/deck_deck_go",
"local_repo_path": "/mnt/1ece809a-2821-4f10-aecb-fcdf34760c0b/Git/Skill_Seekers/github/deck_deck_go",
"include_code": true,
"code_analysis_depth": "deep",
"include_issues": false,
"include_changelog": false,
"include_releases": false,
"exclude_dirs_additional": [
"Library",
"Temp",
"Obj",
"Build",
"Builds",
"Logs",
"UserSettings",
"TextMesh Pro/Examples & Extras"
],
"file_patterns": [
"Assets/**/*.cs"
]
}
],
"merge_mode": "rule-based",
"auto_upload": false
}

View File

@@ -1,34 +0,0 @@
{
"name": "django",
"description": "Django web framework for Python. Use for Django models, views, templates, ORM, authentication, and web development.",
"base_url": "https://docs.djangoproject.com/en/stable/",
"start_urls": [
"https://docs.djangoproject.com/en/stable/intro/",
"https://docs.djangoproject.com/en/stable/topics/db/models/",
"https://docs.djangoproject.com/en/stable/topics/http/views/",
"https://docs.djangoproject.com/en/stable/topics/templates/",
"https://docs.djangoproject.com/en/stable/topics/forms/",
"https://docs.djangoproject.com/en/stable/topics/auth/",
"https://docs.djangoproject.com/en/stable/ref/models/"
],
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre"
},
"url_patterns": {
"include": ["/intro/", "/topics/", "/ref/", "/howto/"],
"exclude": ["/faq/", "/misc/", "/releases/"]
},
"categories": {
"getting_started": ["intro", "tutorial", "install"],
"models": ["models", "database", "orm", "queries"],
"views": ["views", "urlconf", "routing"],
"templates": ["templates", "template"],
"forms": ["forms", "form"],
"authentication": ["auth", "authentication", "user"],
"api": ["ref", "reference"]
},
"rate_limit": 0.3,
"max_pages": 500
}

View File

@@ -1,52 +0,0 @@
{
"name": "django",
"description": "Complete Django framework knowledge combining official documentation and Django codebase. Use when building Django applications, understanding ORM internals, or debugging Django issues.",
"merge_mode": "rule-based",
"sources": [
{
"type": "documentation",
"base_url": "https://docs.djangoproject.com/en/stable/",
"extract_api": true,
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre"
},
"url_patterns": {
"include": [],
"exclude": ["/search/", "/genindex/"]
},
"categories": {
"getting_started": ["intro", "tutorial", "install"],
"models": ["models", "orm", "queries", "database"],
"views": ["views", "urls", "templates"],
"forms": ["forms", "modelforms"],
"admin": ["admin"],
"api": ["ref/"],
"topics": ["topics/"],
"security": ["security", "csrf", "authentication"]
},
"rate_limit": 0.5,
"max_pages": 300
},
{
"type": "github",
"repo": "django/django",
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"include_code": true,
"code_analysis_depth": "surface",
"file_patterns": [
"django/db/**/*.py",
"django/views/**/*.py",
"django/forms/**/*.py",
"django/contrib/admin/**/*.py"
],
"local_repo_path": null,
"enable_codebase_analysis": true,
"ai_mode": "auto"
}
]
}

View File

@@ -1,136 +0,0 @@
# Example Team Config Repository
This is an **example config repository** demonstrating how teams can share custom configs via git.
## Purpose
This repository shows how to:
- Structure a custom config repository
- Share team-specific documentation configs
- Use git-based config sources with Skill Seekers
## Structure
```
example-team/
├── README.md # This file
├── react-custom.json # Custom React config (modified selectors)
├── vue-internal.json # Internal Vue docs config
└── company-api.json # Company API documentation config
```
## Usage with Skill Seekers
### Option 1: Use this repo directly (for testing)
```python
# Using MCP tools (recommended)
add_config_source(
name="example-team",
git_url="file:///path/to/Skill_Seekers/configs/example-team"
)
fetch_config(source="example-team", config_name="react-custom")
```
### Option 2: Create your own team repo
```bash
# 1. Create new repo
mkdir my-team-configs
cd my-team-configs
git init
# 2. Add configs
cp /path/to/configs/react.json ./react-custom.json
# Edit configs as needed...
# 3. Commit and push
git add .
git commit -m "Initial team configs"
git remote add origin https://github.com/myorg/team-configs.git
git push -u origin main
# 4. Register with Skill Seekers
add_config_source(
name="team",
git_url="https://github.com/myorg/team-configs.git",
token_env="GITHUB_TOKEN"
)
# 5. Use it
fetch_config(source="team", config_name="react-custom")
```
## Config Naming Best Practices
- Use descriptive names: `react-custom.json`, `vue-internal.json`
- Avoid name conflicts with official configs
- Include version if needed: `api-v2.json`
- Group by category: `frontend/`, `backend/`, `mobile/`
## Private Repositories
For private repos, set the appropriate token environment variable:
```bash
# GitHub
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxx
# GitLab
export GITLAB_TOKEN=glpat-xxxxxxxxxxxxx
# Bitbucket
export BITBUCKET_TOKEN=xxxxxxxxxxxxx
```
Then register the source:
```python
add_config_source(
name="private-team",
git_url="https://github.com/myorg/private-configs.git",
source_type="github",
token_env="GITHUB_TOKEN"
)
```
## Testing This Example
```bash
# From Skill_Seekers root directory
cd /mnt/1ece809a-2821-4f10-aecb-fcdf34760c0b/Git/Skill_Seekers
# Test with file:// URL (no auth needed)
python3 -c "
from skill_seekers.mcp.source_manager import SourceManager
from skill_seekers.mcp.git_repo import GitConfigRepo
# Add source
sm = SourceManager()
sm.add_source(
name='example-team',
git_url='file://$(pwd)/configs/example-team',
branch='main'
)
# Clone and fetch config
gr = GitConfigRepo()
repo_path = gr.clone_or_pull('example-team', 'file://$(pwd)/configs/example-team')
config = gr.get_config(repo_path, 'react-custom')
print(f'✅ Loaded config: {config[\"name\"]}')
"
```
## Contributing
This is just an example! Create your own team repo with:
- Your team's custom selectors
- Internal documentation configs
- Company-specific configurations
## See Also
- [GIT_CONFIG_SOURCES.md](../../docs/GIT_CONFIG_SOURCES.md) - Complete guide
- [MCP_SETUP.md](../../docs/MCP_SETUP.md) - MCP server setup
- [README.md](../../README.md) - Main documentation

View File

@@ -1,42 +0,0 @@
{
"name": "company-api",
"description": "Internal company API documentation (example)",
"base_url": "https://docs.example.com/api/",
"selectors": {
"main_content": "div.documentation",
"title": "h1.page-title",
"code_blocks": "pre.highlight"
},
"url_patterns": {
"include": [
"/api/v2"
],
"exclude": [
"/api/v1",
"/changelog",
"/deprecated"
]
},
"categories": {
"authentication": ["api/v2/auth", "api/v2/oauth"],
"users": ["api/v2/users"],
"payments": ["api/v2/payments", "api/v2/billing"],
"webhooks": ["api/v2/webhooks"],
"rate_limits": ["api/v2/rate-limits"]
},
"rate_limit": 1.0,
"max_pages": 100,
"metadata": {
"team": "platform",
"api_version": "v2",
"last_updated": "2025-12-21",
"maintainer": "platform-team@example.com",
"internal": true,
"notes": "Only includes v2 API - v1 is deprecated. Requires VPN access to docs.example.com",
"example_urls": [
"https://docs.example.com/api/v2/auth/oauth",
"https://docs.example.com/api/v2/users/create",
"https://docs.example.com/api/v2/payments/charge"
]
}
}

View File

@@ -1,35 +0,0 @@
{
"name": "react-custom",
"description": "Custom React config for team with modified selectors",
"base_url": "https://react.dev/",
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [
"/learn",
"/reference"
],
"exclude": [
"/blog",
"/community",
"/_next/"
]
},
"categories": {
"getting_started": ["learn/start", "learn/installation"],
"hooks": ["reference/react/hooks", "learn/state"],
"components": ["reference/react/components"],
"api": ["reference/react-dom"]
},
"rate_limit": 0.5,
"max_pages": 300,
"metadata": {
"team": "frontend",
"last_updated": "2025-12-21",
"maintainer": "team-lead@example.com",
"notes": "Excludes blog and community pages to focus on technical docs"
}
}

View File

@@ -1,131 +0,0 @@
#!/usr/bin/env python3
"""
E2E Test Script for Example Team Config Repository
Tests the complete workflow:
1. Register the example-team source
2. Fetch a config from it
3. Verify the config was loaded correctly
4. Clean up
"""
import os
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
from skill_seekers.mcp.source_manager import SourceManager
from skill_seekers.mcp.git_repo import GitConfigRepo
def test_example_team_repo():
"""Test the example-team repository end-to-end."""
print("🧪 E2E Test: Example Team Config Repository\n")
# Get absolute path to example-team directory
example_team_path = Path(__file__).parent.absolute()
git_url = f"file://{example_team_path}"
print(f"📁 Repository: {git_url}\n")
# Step 1: Add source
print("1⃣ Registering source...")
sm = SourceManager()
try:
source = sm.add_source(
name="example-team-test",
git_url=git_url,
source_type="custom",
branch="master" # Git init creates 'master' by default
)
print(f" ✅ Source registered: {source['name']}")
except Exception as e:
print(f" ❌ Failed to register source: {e}")
return False
# Step 2: Clone/pull repository
print("\n2⃣ Cloning repository...")
gr = GitConfigRepo()
try:
repo_path = gr.clone_or_pull(
source_name="example-team-test",
git_url=git_url,
branch="master"
)
print(f" ✅ Repository cloned to: {repo_path}")
except Exception as e:
print(f" ❌ Failed to clone repository: {e}")
return False
# Step 3: List available configs
print("\n3⃣ Discovering configs...")
try:
configs = gr.find_configs(repo_path)
print(f" ✅ Found {len(configs)} configs:")
for config_file in configs:
print(f" - {config_file.name}")
except Exception as e:
print(f" ❌ Failed to discover configs: {e}")
return False
# Step 4: Fetch a specific config
print("\n4⃣ Fetching 'react-custom' config...")
try:
config = gr.get_config(repo_path, "react-custom")
print(f" ✅ Config loaded successfully!")
print(f" Name: {config['name']}")
print(f" Description: {config['description']}")
print(f" Base URL: {config['base_url']}")
print(f" Max Pages: {config['max_pages']}")
if 'metadata' in config:
print(f" Team: {config['metadata'].get('team', 'N/A')}")
except Exception as e:
print(f" ❌ Failed to fetch config: {e}")
return False
# Step 5: Verify config content
print("\n5⃣ Verifying config content...")
try:
assert config['name'] == 'react-custom', "Config name mismatch"
assert 'selectors' in config, "Missing selectors"
assert 'url_patterns' in config, "Missing url_patterns"
assert 'categories' in config, "Missing categories"
print(" ✅ Config structure validated")
except AssertionError as e:
print(f" ❌ Validation failed: {e}")
return False
# Step 6: List all sources
print("\n6⃣ Listing all sources...")
try:
sources = sm.list_sources()
print(f" ✅ Total sources: {len(sources)}")
for src in sources:
print(f" - {src['name']} ({src['type']})")
except Exception as e:
print(f" ❌ Failed to list sources: {e}")
return False
# Step 7: Clean up
print("\n7⃣ Cleaning up...")
try:
removed = sm.remove_source("example-team-test")
if removed:
print(" ✅ Source removed successfully")
else:
print(" ⚠️ Source was not found (already removed?)")
except Exception as e:
print(f" ❌ Failed to remove source: {e}")
return False
print("\n" + "="*60)
print("✅ E2E TEST PASSED - All steps completed successfully!")
print("="*60)
return True
if __name__ == "__main__":
success = test_example_team_repo()
sys.exit(0 if success else 1)

View File

@@ -1,36 +0,0 @@
{
"name": "vue-internal",
"description": "Vue.js config for internal team documentation",
"base_url": "https://vuejs.org/",
"selectors": {
"main_content": "main",
"title": "h1",
"code_blocks": "pre"
},
"url_patterns": {
"include": [
"/guide",
"/api"
],
"exclude": [
"/examples",
"/sponsor"
]
},
"categories": {
"essentials": ["guide/essentials", "guide/introduction"],
"components": ["guide/components"],
"reactivity": ["guide/extras/reactivity"],
"composition_api": ["api/composition-api"],
"options_api": ["api/options-api"]
},
"rate_limit": 0.3,
"max_pages": 200,
"metadata": {
"team": "frontend",
"version": "Vue 3",
"last_updated": "2025-12-21",
"maintainer": "vue-team@example.com",
"notes": "Focuses on Vue 3 Composition API for our projects"
}
}

View File

@@ -1,17 +0,0 @@
{
"name": "example_manual",
"description": "Example PDF documentation skill",
"pdf_path": "docs/manual.pdf",
"extract_options": {
"chunk_size": 10,
"min_quality": 5.0,
"extract_images": true,
"min_image_size": 100
},
"categories": {
"getting_started": ["introduction", "getting started", "quick start", "setup"],
"tutorial": ["tutorial", "guide", "walkthrough", "example"],
"api": ["api", "reference", "function", "class", "method"],
"advanced": ["advanced", "optimization", "performance", "best practices"]
}
}

View File

@@ -1,41 +0,0 @@
{
"name": "fastapi",
"description": "FastAPI basics, path operations, query parameters, request body handling",
"base_url": "https://fastapi.tiangolo.com/tutorial/",
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [
"/tutorial/"
],
"exclude": [
"/img/",
"/js/",
"/css/"
]
},
"rate_limit": 0.5,
"max_pages": 500,
"_router": true,
"_sub_skills": [
"fastapi-basics",
"fastapi-advanced"
],
"_routing_keywords": {
"fastapi-basics": [
"getting_started",
"request_body",
"validation",
"basics"
],
"fastapi-advanced": [
"async",
"dependencies",
"security",
"advanced"
]
}
}

View File

@@ -1,48 +0,0 @@
{
"name": "fastapi",
"description": "Complete FastAPI knowledge combining official documentation and FastAPI codebase. Use when building FastAPI applications, understanding async patterns, or working with Pydantic models.",
"merge_mode": "rule-based",
"sources": [
{
"type": "documentation",
"base_url": "https://fastapi.tiangolo.com/",
"extract_api": true,
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": ["/img/", "/js/"]
},
"categories": {
"getting_started": ["tutorial", "first-steps"],
"path_operations": ["path-params", "query-params", "body"],
"dependencies": ["dependencies"],
"security": ["security", "oauth2"],
"database": ["sql-databases"],
"advanced": ["advanced", "async", "middleware"],
"deployment": ["deployment"]
},
"rate_limit": 0.5,
"max_pages": 150
},
{
"type": "github",
"repo": "tiangolo/fastapi",
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"include_code": true,
"code_analysis_depth": "full",
"file_patterns": [
"fastapi/**/*.py"
],
"local_repo_path": null,
"enable_codebase_analysis": true,
"ai_mode": "auto"
}
]
}

View File

@@ -1,41 +0,0 @@
{
"name": "fastapi_test",
"description": "FastAPI test - unified scraping with limited pages",
"merge_mode": "rule-based",
"sources": [
{
"type": "documentation",
"base_url": "https://fastapi.tiangolo.com/",
"extract_api": true,
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": ["/img/", "/js/"]
},
"categories": {
"getting_started": ["tutorial", "first-steps"],
"path_operations": ["path-params", "query-params"],
"api": ["reference"]
},
"rate_limit": 0.5,
"max_pages": 20
},
{
"type": "github",
"repo": "tiangolo/fastapi",
"include_issues": false,
"include_changelog": false,
"include_releases": true,
"include_code": true,
"code_analysis_depth": "surface",
"file_patterns": [
"fastapi/routing.py",
"fastapi/applications.py"
]
}
]
}

View File

@@ -1,59 +0,0 @@
{
"name": "fastmcp",
"description": "Use when working with FastMCP - Python framework for building MCP servers with GitHub insights",
"github_url": "https://github.com/jlowin/fastmcp",
"github_token_env": "GITHUB_TOKEN",
"analysis_depth": "c3x",
"fetch_github_metadata": true,
"categories": {
"getting_started": ["quickstart", "installation", "setup", "getting started"],
"oauth": ["oauth", "authentication", "auth", "token"],
"async": ["async", "asyncio", "await", "concurrent"],
"testing": ["test", "testing", "pytest", "unittest"],
"api": ["api", "endpoint", "route", "decorator"]
},
"_comment": "This config demonstrates three-stream GitHub architecture:",
"_streams": {
"code": "Deep C3.x analysis (20-60 min) - patterns, examples, guides, configs, architecture",
"docs": "Repository documentation (1-2 min) - README, CONTRIBUTING, docs/*.md",
"insights": "GitHub metadata (1-2 min) - issues, labels, stars, forks"
},
"_router_generation": {
"enabled": true,
"sub_skills": [
"fastmcp-oauth",
"fastmcp-async",
"fastmcp-testing",
"fastmcp-api"
],
"github_integration": {
"metadata": "Shows stars, language, description in router SKILL.md",
"readme_quickstart": "Extracts first 500 chars of README as quick start",
"common_issues": "Lists top 5 GitHub issues in router",
"issue_categorization": "Matches issues to sub-skills by keywords",
"label_weighting": "GitHub labels weighted 2x in routing keywords"
}
},
"_usage_examples": {
"basic_analysis": "python -m skill_seekers.cli.unified_codebase_analyzer https://github.com/jlowin/fastmcp --depth basic",
"c3x_analysis": "python -m skill_seekers.cli.unified_codebase_analyzer https://github.com/jlowin/fastmcp --depth c3x",
"router_generation": "python -m skill_seekers.cli.generate_router configs/fastmcp-*.json --github-streams"
},
"_expected_output": {
"router_skillmd_sections": [
"When to Use This Skill",
"Repository Info (stars, language, description)",
"Quick Start (from README)",
"How It Works",
"Routing Logic",
"Quick Reference",
"Common Issues (from GitHub)"
],
"sub_skill_enhancements": [
"Common OAuth Issues (from GitHub)",
"Issue #42: OAuth setup fails",
"Status: Open/Closed",
"Direct links to GitHub issues"
]
}
}

View File

@@ -1,63 +0,0 @@
{
"name": "godot",
"description": "Godot Engine game development. Use for Godot projects, GDScript/C# coding, scene setup, node systems, 2D/3D development, physics, animation, UI, shaders, or any Godot-specific questions.",
"base_url": "https://docs.godotengine.org/en/stable/",
"start_urls": [
"https://docs.godotengine.org/en/stable/getting_started/introduction/index.html",
"https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html",
"https://docs.godotengine.org/en/stable/tutorials/2d/index.html",
"https://docs.godotengine.org/en/stable/tutorials/3d/index.html",
"https://docs.godotengine.org/en/stable/tutorials/physics/index.html",
"https://docs.godotengine.org/en/stable/tutorials/animation/index.html",
"https://docs.godotengine.org/en/stable/classes/index.html"
],
"selectors": {
"main_content": "div[role='main']",
"title": "title",
"code_blocks": "pre"
},
"url_patterns": {
"include": [
"/getting_started/",
"/tutorials/",
"/classes/"
],
"exclude": [
"/genindex.html",
"/search.html",
"/_static/",
"/_sources/"
]
},
"categories": {
"getting_started": ["introduction", "getting_started", "first", "your_first"],
"scripting": ["scripting", "gdscript", "c#", "csharp"],
"2d": ["/2d/", "sprite", "canvas", "tilemap"],
"3d": ["/3d/", "spatial", "mesh", "3d_"],
"physics": ["physics", "collision", "rigidbody", "characterbody"],
"animation": ["animation", "tween", "animationplayer"],
"ui": ["ui", "control", "gui", "theme"],
"shaders": ["shader", "material", "visual_shader"],
"audio": ["audio", "sound"],
"networking": ["networking", "multiplayer", "rpc"],
"export": ["export", "platform", "deploy"]
},
"rate_limit": 0.5,
"max_pages": 40000,
"_comment": "=== NEW: Split Strategy Configuration ===",
"split_strategy": "router",
"split_config": {
"target_pages_per_skill": 5000,
"create_router": true,
"split_by_categories": ["scripting", "2d", "3d", "physics", "shaders"],
"router_name": "godot",
"parallel_scraping": true
},
"_comment2": "=== NEW: Checkpoint Configuration ===",
"checkpoint": {
"enabled": true,
"interval": 1000
}
}

View File

@@ -1,47 +0,0 @@
{
"name": "godot",
"description": "Godot Engine game development. Use for Godot projects, GDScript/C# coding, scene setup, node systems, 2D/3D development, physics, animation, UI, shaders, or any Godot-specific questions.",
"base_url": "https://docs.godotengine.org/en/stable/",
"start_urls": [
"https://docs.godotengine.org/en/stable/getting_started/introduction/index.html",
"https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html",
"https://docs.godotengine.org/en/stable/tutorials/2d/index.html",
"https://docs.godotengine.org/en/stable/tutorials/3d/index.html",
"https://docs.godotengine.org/en/stable/tutorials/physics/index.html",
"https://docs.godotengine.org/en/stable/tutorials/animation/index.html",
"https://docs.godotengine.org/en/stable/classes/index.html"
],
"selectors": {
"main_content": "div[role='main']",
"title": "title",
"code_blocks": "pre"
},
"url_patterns": {
"include": [
"/getting_started/",
"/tutorials/",
"/classes/"
],
"exclude": [
"/genindex.html",
"/search.html",
"/_static/",
"/_sources/"
]
},
"categories": {
"getting_started": ["introduction", "getting_started", "first", "your_first"],
"scripting": ["scripting", "gdscript", "c#", "csharp"],
"2d": ["/2d/", "sprite", "canvas", "tilemap"],
"3d": ["/3d/", "spatial", "mesh", "3d_"],
"physics": ["physics", "collision", "rigidbody", "characterbody"],
"animation": ["animation", "tween", "animationplayer"],
"ui": ["ui", "control", "gui", "theme"],
"shaders": ["shader", "material", "visual_shader"],
"audio": ["audio", "sound"],
"networking": ["networking", "multiplayer", "rpc"],
"export": ["export", "platform", "deploy"]
},
"rate_limit": 0.5,
"max_pages": 500
}

View File

@@ -1,19 +0,0 @@
{
"name": "godot",
"repo": "godotengine/godot",
"description": "Godot Engine - Multi-platform 2D and 3D game engine",
"github_token": null,
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"include_code": false,
"file_patterns": [
"core/**/*.h",
"core/**/*.cpp",
"scene/**/*.h",
"scene/**/*.cpp",
"servers/**/*.h",
"servers/**/*.cpp"
]
}

View File

@@ -1,53 +0,0 @@
{
"name": "godot",
"description": "Complete Godot Engine knowledge base combining official documentation and source code analysis",
"merge_mode": "claude-enhanced",
"sources": [
{
"type": "documentation",
"base_url": "https://docs.godotengine.org/en/stable/",
"extract_api": true,
"selectors": {
"main_content": "div[role='main']",
"title": "title",
"code_blocks": "pre"
},
"url_patterns": {
"include": [],
"exclude": ["/search.html", "/_static/", "/_images/"]
},
"categories": {
"getting_started": ["introduction", "getting_started", "step_by_step"],
"scripting": ["scripting", "gdscript", "c_sharp"],
"2d": ["2d", "canvas", "sprite", "animation"],
"3d": ["3d", "spatial", "mesh", "shader"],
"physics": ["physics", "collision", "rigidbody"],
"api": ["api", "class", "reference", "method"]
},
"rate_limit": 0.5,
"max_pages": 500
},
{
"type": "github",
"repo": "godotengine/godot",
"github_token": null,
"code_analysis_depth": "deep",
"include_code": true,
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"file_patterns": [
"core/**/*.h",
"core/**/*.cpp",
"scene/**/*.h",
"scene/**/*.cpp",
"servers/**/*.h",
"servers/**/*.cpp"
],
"local_repo_path": null,
"enable_codebase_analysis": true,
"ai_mode": "auto"
}
]
}

View File

@@ -1,18 +0,0 @@
{
"name": "hono",
"description": "Hono web application framework for building fast, lightweight APIs. Use for Hono routing, middleware, context handling, and modern JavaScript/TypeScript web development.",
"llms_txt_url": "https://hono.dev/llms-full.txt",
"base_url": "https://hono.dev/docs",
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": []
},
"categories": {},
"rate_limit": 0.5,
"max_pages": 50
}

View File

@@ -0,0 +1,114 @@
{
"name": "httpx",
"description": "Use this skill when working with HTTPX, a fully featured HTTP client for Python 3 with sync and async APIs. HTTPX provides a familiar requests-like interface with support for HTTP/2, connection pooling, and comprehensive middleware capabilities.",
"version": "1.0.0",
"base_url": "https://www.python-httpx.org/",
"sources": [
{
"type": "documentation",
"base_url": "https://www.python-httpx.org/",
"selectors": {
"main_content": "article.md-content__inner",
"title": "h1",
"code_blocks": "pre code"
}
},
{
"type": "github",
"repo": "encode/httpx",
"code_analysis_depth": "deep",
"enable_codebase_analysis": true,
"fetch_issues": true,
"fetch_changelog": true,
"fetch_releases": true,
"max_issues": 50
}
],
"selectors": {
"main_content": "article.md-content__inner",
"title": "h1",
"code_blocks": "pre code",
"navigation": "nav.md-tabs",
"sidebar": "nav.md-nav--primary"
},
"url_patterns": {
"include": [
"/quickstart/",
"/advanced/",
"/api/",
"/async/",
"/http2/",
"/compatibility/"
],
"exclude": [
"/changelog/",
"/contributing/",
"/exceptions/"
]
},
"categories": {
"getting_started": [
"quickstart",
"install",
"introduction",
"overview"
],
"core_concepts": [
"client",
"request",
"response",
"timeout",
"pool"
],
"async": [
"async",
"asyncio",
"trio",
"concurrent"
],
"http2": [
"http2",
"http/2",
"multiplexing"
],
"advanced": [
"authentication",
"middleware",
"transport",
"proxy",
"ssl",
"streaming"
],
"api_reference": [
"api",
"reference",
"client",
"request",
"response"
],
"compatibility": [
"requests",
"migration",
"compatibility"
]
},
"rate_limit": 0.5,
"max_pages": 100,
"metadata": {
"author": "Encode",
"language": "Python",
"framework_type": "HTTP Client",
"use_cases": [
"Making HTTP requests",
"REST API clients",
"Async HTTP operations",
"HTTP/2 support",
"Connection pooling"
],
"related_skills": [
"requests",
"aiohttp",
"urllib3"
]
}
}

View File

@@ -1,48 +0,0 @@
{
"name": "kubernetes",
"description": "Kubernetes container orchestration platform. Use for K8s clusters, deployments, pods, services, networking, storage, configuration, and DevOps tasks.",
"base_url": "https://kubernetes.io/docs/",
"start_urls": [
"https://kubernetes.io/docs/home/",
"https://kubernetes.io/docs/concepts/",
"https://kubernetes.io/docs/tasks/",
"https://kubernetes.io/docs/tutorials/",
"https://kubernetes.io/docs/reference/"
],
"selectors": {
"main_content": "main",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [
"/docs/concepts/",
"/docs/tasks/",
"/docs/tutorials/",
"/docs/reference/",
"/docs/setup/"
],
"exclude": [
"/search/",
"/blog/",
"/training/",
"/partners/",
"/community/",
"/_print/",
"/case-studies/"
]
},
"categories": {
"getting_started": ["getting-started", "setup", "learning-environment"],
"concepts": ["concepts", "overview", "architecture"],
"workloads": ["workloads", "pods", "deployments", "replicaset", "statefulset", "daemonset"],
"services": ["services", "networking", "ingress", "service"],
"storage": ["storage", "volumes", "persistent"],
"configuration": ["configuration", "configmap", "secret"],
"security": ["security", "rbac", "policies", "authentication"],
"tasks": ["tasks", "administer", "configure"],
"tutorials": ["tutorials", "stateless", "stateful"]
},
"rate_limit": 0.5,
"max_pages": 1000
}

View File

@@ -1,34 +0,0 @@
{
"name": "laravel",
"description": "Laravel PHP web framework. Use for Laravel models, routes, controllers, Blade templates, Eloquent ORM, authentication, and PHP web development.",
"base_url": "https://laravel.com/docs/9.x/",
"start_urls": [
"https://laravel.com/docs/9.x/installation",
"https://laravel.com/docs/9.x/routing",
"https://laravel.com/docs/9.x/controllers",
"https://laravel.com/docs/9.x/views",
"https://laravel.com/docs/9.x/blade",
"https://laravel.com/docs/9.x/eloquent",
"https://laravel.com/docs/9.x/migrations",
"https://laravel.com/docs/9.x/authentication"
],
"selectors": {
"main_content": "#main-content",
"title": "h1",
"code_blocks": "pre"
},
"url_patterns": {
"include": ["/docs/9.x/", "/docs/10.x/", "/docs/11.x/"],
"exclude": ["/api/", "/packages/"]
},
"categories": {
"getting_started": ["installation", "configuration", "structure", "deployment"],
"routing": ["routing", "middleware", "controllers"],
"views": ["views", "blade", "templates"],
"models": ["eloquent", "database", "migrations", "seeding", "queries"],
"authentication": ["authentication", "authorization", "passwords"],
"api": ["api", "resources", "requests", "responses"]
},
"rate_limit": 0.3,
"max_pages": 500
}

View File

@@ -1,17 +0,0 @@
{
"name": "python-tutorial-test",
"description": "Python tutorial for testing MCP tools",
"base_url": "https://docs.python.org/3/tutorial/",
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": []
},
"categories": {},
"rate_limit": 0.3,
"max_pages": 10
}

View File

@@ -1,31 +0,0 @@
{
"name": "react",
"description": "React framework for building user interfaces. Use for React components, hooks, state management, JSX, and modern frontend development.",
"base_url": "https://react.dev/",
"start_urls": [
"https://react.dev/learn",
"https://react.dev/learn/quick-start",
"https://react.dev/learn/thinking-in-react",
"https://react.dev/reference/react",
"https://react.dev/reference/react-dom",
"https://react.dev/reference/react/hooks"
],
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": ["/learn", "/reference"],
"exclude": ["/community", "/blog"]
},
"categories": {
"getting_started": ["quick-start", "installation", "tutorial"],
"hooks": ["usestate", "useeffect", "usememo", "usecallback", "usecontext", "useref", "hook"],
"components": ["component", "props", "jsx"],
"state": ["state", "context", "reducer"],
"api": ["api", "reference"]
},
"rate_limit": 0.5,
"max_pages": 300
}

View File

@@ -1,15 +0,0 @@
{
"name": "react",
"repo": "facebook/react",
"description": "React JavaScript library for building user interfaces",
"github_token": null,
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"include_code": false,
"file_patterns": [
"packages/**/*.js",
"packages/**/*.ts"
]
}

View File

@@ -1,113 +0,0 @@
{
"name": "react",
"description": "Use when working with React - JavaScript library for building user interfaces with GitHub insights",
"github_url": "https://github.com/facebook/react",
"github_token_env": "GITHUB_TOKEN",
"analysis_depth": "c3x",
"fetch_github_metadata": true,
"categories": {
"getting_started": ["quickstart", "installation", "create-react-app", "vite"],
"hooks": ["hooks", "useState", "useEffect", "useContext", "custom hooks"],
"components": ["components", "jsx", "props", "state"],
"routing": ["routing", "react-router", "navigation"],
"state_management": ["state", "redux", "context", "zustand"],
"performance": ["performance", "optimization", "memo", "lazy"],
"testing": ["testing", "jest", "react-testing-library"]
},
"_comment": "This config demonstrates three-stream GitHub architecture for multi-source analysis",
"_streams": {
"code": "Deep C3.x analysis - React source code patterns and architecture",
"docs": "Official React documentation from GitHub repo",
"insights": "Community issues, feature requests, and known bugs"
},
"_multi_source_combination": {
"source1": {
"type": "github",
"url": "https://github.com/facebook/react",
"purpose": "Code analysis + community insights"
},
"source2": {
"type": "documentation",
"url": "https://react.dev",
"purpose": "Official documentation website"
},
"merge_strategy": "hybrid",
"conflict_detection": "Compare documented APIs vs actual implementation"
},
"_router_generation": {
"enabled": true,
"sub_skills": [
"react-hooks",
"react-components",
"react-routing",
"react-state-management",
"react-performance",
"react-testing"
],
"github_integration": {
"metadata": "20M+ stars, JavaScript, maintained by Meta",
"top_issues": [
"Concurrent Rendering edge cases",
"Suspense data fetching patterns",
"Server Components best practices"
],
"label_examples": [
"Type: Bug (2x weight)",
"Component: Hooks (2x weight)",
"Status: Needs Reproduction"
]
}
},
"_quality_metrics": {
"github_overhead": "30-50 lines per skill",
"router_size": "150-200 lines with GitHub metadata",
"sub_skill_size": "300-500 lines with issue sections",
"token_efficiency": "35-40% reduction vs monolithic"
},
"_usage_examples": {
"unified_analysis": "skill-seekers unified --config configs/react_github_example.json",
"basic_github": "python -m skill_seekers.cli.unified_codebase_analyzer https://github.com/facebook/react --depth basic",
"c3x_github": "python -m skill_seekers.cli.unified_codebase_analyzer https://github.com/facebook/react --depth c3x"
},
"_expected_results": {
"code_stream": {
"c3_1_patterns": "Design patterns from React source (HOC, Render Props, Hooks pattern)",
"c3_2_examples": "Test examples from __tests__ directories",
"c3_3_guides": "How-to guides from workflows and scripts",
"c3_4_configs": "Configuration patterns (webpack, babel, rollup)",
"c3_7_architecture": "React architecture (Fiber, reconciler, scheduler)"
},
"docs_stream": {
"readme": "React README with quick start",
"contributing": "Contribution guidelines",
"docs_files": "Additional documentation files"
},
"insights_stream": {
"metadata": {
"stars": "20M+",
"language": "JavaScript",
"description": "A JavaScript library for building user interfaces"
},
"common_problems": [
"Issue #25000: useEffect infinite loop",
"Issue #24999: Concurrent rendering state consistency"
],
"known_solutions": [
"Issue #24800: Fixed memo not working with forwardRef",
"Issue #24750: Resolved Suspense boundary error"
],
"top_labels": [
{"label": "Type: Bug", "count": 500},
{"label": "Component: Hooks", "count": 300},
{"label": "Status: Needs Triage", "count": 200}
]
}
},
"_implementation_notes": {
"phase_1": "GitHub three-stream fetcher splits repo into code, docs, insights",
"phase_2": "Unified analyzer calls C3.x analysis on code stream",
"phase_3": "Source merger combines all streams with conflict detection",
"phase_4": "Router generator creates hub skill with GitHub metadata",
"phase_5": "E2E tests validate all 3 streams present and quality metrics"
}
}

View File

@@ -1,47 +0,0 @@
{
"name": "react",
"description": "Complete React knowledge base combining official documentation and React codebase insights. Use when working with React, understanding API changes, or debugging React internals.",
"merge_mode": "rule-based",
"sources": [
{
"type": "documentation",
"base_url": "https://react.dev/",
"extract_api": true,
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": ["/blog/", "/community/"]
},
"categories": {
"getting_started": ["learn", "installation", "quick-start"],
"components": ["components", "props", "state"],
"hooks": ["hooks", "usestate", "useeffect", "usecontext"],
"api": ["api", "reference"],
"advanced": ["context", "refs", "portals", "suspense"]
},
"rate_limit": 0.5,
"max_pages": 200
},
{
"type": "github",
"repo": "facebook/react",
"include_issues": true,
"max_issues": 100,
"include_changelog": true,
"include_releases": true,
"include_code": true,
"code_analysis_depth": "surface",
"file_patterns": [
"packages/react/src/**/*.js",
"packages/react-dom/src/**/*.js"
],
"local_repo_path": null,
"enable_codebase_analysis": true,
"ai_mode": "auto"
}
]
}

View File

@@ -1,108 +0,0 @@
{
"name": "steam-economy-complete",
"description": "Complete Steam Economy system including inventory, microtransactions, trading, and monetization. Use for ISteamInventory API, ISteamEconomy API, IInventoryService Web API, Steam Wallet integration, in-app purchases, item definitions, trading, crafting, market integration, and all economy features for game developers.",
"base_url": "https://partner.steamgames.com/doc/",
"start_urls": [
"https://partner.steamgames.com/doc/features/inventory",
"https://partner.steamgames.com/doc/features/microtransactions",
"https://partner.steamgames.com/doc/features/microtransactions/implementation",
"https://partner.steamgames.com/doc/api/ISteamInventory",
"https://partner.steamgames.com/doc/webapi/ISteamEconomy",
"https://partner.steamgames.com/doc/webapi/IInventoryService",
"https://partner.steamgames.com/doc/features/inventory/economy"
],
"selectors": {
"main_content": "div.documentation_bbcode",
"title": "div.docPageTitle",
"code_blocks": "div.bb_code"
},
"url_patterns": {
"include": [
"/features/inventory",
"/features/microtransactions",
"/api/ISteamInventory",
"/webapi/ISteamEconomy",
"/webapi/IInventoryService"
],
"exclude": [
"/home",
"/sales",
"/marketing",
"/legal",
"/finance",
"/login",
"/search",
"/steamworks/apps",
"/steamworks/partner"
]
},
"categories": {
"getting_started": [
"overview",
"getting started",
"introduction",
"quickstart",
"setup"
],
"inventory_system": [
"inventory",
"item definition",
"item schema",
"item properties",
"itemdefs",
"ISteamInventory"
],
"microtransactions": [
"microtransaction",
"purchase",
"payment",
"checkout",
"wallet",
"transaction"
],
"economy_api": [
"ISteamEconomy",
"economy",
"asset",
"context"
],
"inventory_webapi": [
"IInventoryService",
"webapi",
"web api",
"http"
],
"trading": [
"trading",
"trade",
"exchange",
"market"
],
"crafting": [
"crafting",
"recipe",
"combine",
"exchange"
],
"pricing": [
"pricing",
"price",
"cost",
"currency"
],
"implementation": [
"integration",
"implementation",
"configure",
"best practices"
],
"examples": [
"example",
"sample",
"tutorial",
"walkthrough"
]
},
"rate_limit": 0.7,
"max_pages": 1000
}

View File

@@ -1,70 +0,0 @@
{
"name": "svelte-cli",
"description": "Svelte CLI: docs (llms.txt) + GitHub repository (commands, project scaffolding, dev/build workflows).",
"merge_mode": "rule-based",
"sources": [
{
"type": "documentation",
"base_url": "https://svelte.dev/docs/cli",
"llms_txt_url": "https://svelte.dev/docs/cli/llms.txt",
"extract_api": true,
"selectors": {
"main_content": "#main, main",
"title": "h1",
"code_blocks": "pre code, pre"
},
"url_patterns": {
"include": ["/docs/cli"],
"exclude": [
"/docs/kit",
"/docs/svelte",
"/docs/mcp",
"/tutorial",
"/packages",
"/playground",
"/blog"
]
},
"categories": {
"overview": ["overview"],
"faq": ["frequently asked questions"],
"sv_create": ["sv create"],
"sv_add": ["sv add"],
"sv_check": ["sv check"],
"sv_migrate": ["sv migrate"],
"devtools_json": ["devtools-json"],
"drizzle": ["drizzle"],
"eslint": ["eslint"],
"lucia": ["lucia"],
"mcp": ["mcp"],
"mdsvex": ["mdsvex"],
"paraglide": ["paraglide"],
"playwright": ["playwright"],
"prettier": ["prettier"],
"storybook": ["storybook"],
"sveltekit_adapter": ["sveltekit-adapter"],
"tailwindcss": ["tailwindcss"],
"vitest": ["vitest"]
},
"rate_limit": 0.5,
"max_pages": 200
},
{
"type": "github",
"repo": "sveltejs/cli",
"include_issues": true,
"max_issues": 150,
"include_changelog": true,
"include_releases": true,
"include_code": true,
"code_analysis_depth": "deep",
"file_patterns": [
"src/**/*.ts",
"src/**/*.js"
],
"local_repo_path": "local_paths/sveltekit/cli",
"enable_codebase_analysis": true,
"ai_mode": "auto"
}
]
}

View File

@@ -1,30 +0,0 @@
{
"name": "tailwind",
"description": "Tailwind CSS utility-first framework for rapid UI development. Use for Tailwind utilities, responsive design, custom configurations, and modern CSS workflows.",
"base_url": "https://tailwindcss.com/docs",
"start_urls": [
"https://tailwindcss.com/docs/installation",
"https://tailwindcss.com/docs/utility-first",
"https://tailwindcss.com/docs/responsive-design",
"https://tailwindcss.com/docs/hover-focus-and-other-states"
],
"selectors": {
"main_content": "div.prose",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": ["/docs"],
"exclude": ["/blog", "/resources"]
},
"categories": {
"getting_started": ["installation", "editor-setup", "intellisense"],
"core_concepts": ["utility-first", "responsive", "hover-focus", "dark-mode"],
"layout": ["container", "columns", "flex", "grid"],
"typography": ["font-family", "font-size", "text-align", "text-color"],
"backgrounds": ["background-color", "background-image", "gradient"],
"customization": ["configuration", "theme", "plugins"]
},
"rate_limit": 0.5,
"max_pages": 100
}

View File

@@ -1,17 +0,0 @@
{
"name": "test-manual",
"description": "Manual test config",
"base_url": "https://test.example.com/",
"selectors": {
"main_content": "article",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": [],
"exclude": []
},
"categories": {},
"rate_limit": 0.5,
"max_pages": 50
}

View File

@@ -1,31 +0,0 @@
{
"name": "vue",
"description": "Vue.js progressive JavaScript framework. Use for Vue components, reactivity, composition API, and frontend development.",
"base_url": "https://vuejs.org/",
"start_urls": [
"https://vuejs.org/guide/introduction.html",
"https://vuejs.org/guide/quick-start.html",
"https://vuejs.org/guide/essentials/application.html",
"https://vuejs.org/guide/components/registration.html",
"https://vuejs.org/guide/reusability/composables.html",
"https://vuejs.org/api/"
],
"selectors": {
"main_content": "main",
"title": "h1",
"code_blocks": "pre code"
},
"url_patterns": {
"include": ["/guide/", "/api/", "/examples/"],
"exclude": ["/about/", "/sponsor/", "/partners/"]
},
"categories": {
"getting_started": ["quick-start", "introduction", "essentials"],
"components": ["component", "props", "events"],
"reactivity": ["reactivity", "reactive", "ref", "computed"],
"composition_api": ["composition", "setup"],
"api": ["api", "reference"]
},
"rate_limit": 0.5,
"max_pages": 200
}