* fix: resolve 8 pipeline bugs found during skill quality review
- Fix 0 APIs extracted from documentation by enriching summary.json
with individual page file content before conflict detection
- Fix all "Unknown" entries in merged_api.md by injecting dict keys
as API names and falling back to AI merger field names
- Fix frontmatter using raw slugs instead of config name by
normalizing frontmatter after SKILL.md generation
- Fix leaked absolute filesystem paths in patterns/index.md by
stripping .skillseeker-cache repo clone prefixes
- Fix ARCHITECTURE.md file count always showing "1 files" by
counting files per language from code_analysis data
- Fix YAML parse errors on GitHub Actions workflows by converting
boolean keys (on: true) to strings
- Fix false React/Vue.js framework detection in C# projects by
filtering web frameworks based on primary language
- Improve how-to guide generation by broadening workflow example
filter to include setup/config examples with sufficient complexity
- Fix test_git_sources_e2e failures caused by git init default
branch being 'main' instead of 'master'
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address 6 review issues in ExecutionContext implementation
Fixes from code review:
1. Mode resolution (#3 critical): _args_to_data no longer unconditionally
overwrites mode. Only writes mode="api" when --api-key explicitly passed.
Env-var-based mode detection moved to _default_data() as lowest priority.
2. Re-initialization warning (#4): initialize() now logs debug message
when called a second time instead of silently returning stale instance.
3. _raw_args preserved in override (#5): temp context now copies _raw_args
from parent so get_raw() works correctly inside override blocks.
4. test_local_mode_detection env cleanup (#7): test now saves/restores
API key env vars to prevent failures when ANTHROPIC_API_KEY is set.
5. _load_config_file error handling (#8): wraps FileNotFoundError and
JSONDecodeError with user-friendly ValueError messages.
6. Lint fixes: added logging import, fixed Generator import from
collections.abc, fixed AgentClient return type annotation.
Remaining P2/P3 items (documented, not blocking):
- Lock TOCTOU in override() — safe on CPython, needs fix for no-GIL
- get() reads _instance without lock — same CPython caveat
- config_path not stored on instance
- AnalysisSettings.depth not Literal constrained
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address all remaining P2/P3 review issues in ExecutionContext
1. Thread safety: get() now acquires _lock before reading _instance (#2)
2. Thread safety: override() saves/restores _initialized flag to prevent
re-init during override blocks (#10)
3. Config path stored: _config_path PrivateAttr + config_path property (#6)
4. Literal validation: AnalysisSettings.depth now uses
Literal["surface", "deep", "full"] — rejects invalid values (#9)
5. Test updated: test_analysis_depth_choices now expects ValidationError
for invalid depth, added test_analysis_depth_valid_choices
6. Lint cleanup: removed unused imports, fixed whitespace in tests
All 10 previously reported issues now resolved.
26 tests pass, lint clean.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: restore 5 truncated scrapers, migrate unified_scraper, fix context init
5 scrapers had main() truncated with "# Original main continues here..."
after Kimi's migration — business logic was never connected:
- html_scraper.py — restored HtmlToSkillConverter extraction + build
- pptx_scraper.py — restored PptxToSkillConverter extraction + build
- confluence_scraper.py — restored ConfluenceToSkillConverter with 3 modes
- notion_scraper.py — restored NotionToSkillConverter with 4 sources
- chat_scraper.py — restored ChatToSkillConverter extraction + build
unified_scraper.py — migrated main() to context-first pattern with argv fallback
Fixed context initialization chain:
- main.py no longer initializes ExecutionContext (was stealing init from commands)
- create_command.py now passes config_path from source_info.parsed
- execution_context.py handles SourceInfo.raw_input (not raw_source)
All 18 scrapers now genuinely migrated. 26 tests pass, lint clean.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: resolve 7 data flow conflicts between ExecutionContext and legacy paths
Critical fixes (CLI args silently lost):
- unified_scraper Phase 6: reads ctx.enhancement.level instead of raw JSON
when args=None (#3, #4)
- unified_scraper Phase 6 agent: reads ctx.enhancement.agent instead of
3 independent env var lookups (#5)
- doc_scraper._run_enhancement: uses agent_client.api_key instead of raw
os.environ.get() — respects config file api_key (#1)
Important fixes:
- main._handle_analyze_command: populates _fake_args from ExecutionContext
so --agent and --api-key aren't lost in analyze→enhance path (#6)
- doc_scraper type annotations: replaced forward refs with Any to avoid
F821 undefined name errors
All changes include RuntimeError fallback for backward compatibility when
ExecutionContext isn't initialized.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: 3 crashes + 1 stub in migrated scrapers found by deep scan
1. github_scraper.py: args.scrape_only and args.enhance_level crash when
args=None (context path). Guarded with if args and getattr(). Also
fixed agent fallback to read ctx.enhancement.agent.
2. codebase_scraper.py: args.output and args.skip_api_reference crash in
summary block when args=None. Replaced with output_dir local var and
ctx.analysis.skip_api_reference.
3. epub_scraper.py: main() was still a stub ending with "# Rest of main()
continues..." — restored full extraction + build + enhancement logic
using ctx values exclusively.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: complete ExecutionContext migration for remaining scrapers
Kimi's Phase 4 scraper migrations + Claude's review fixes.
All 18 scrapers now use context-first pattern with argv fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: Phase 1 — ExecutionContext.get() always returns context (no RuntimeError)
get() now returns a default context instead of raising RuntimeError when
not explicitly initialized. This eliminates the need for try/except
RuntimeError blocks in all 18 scrapers.
Components can always call ExecutionContext.get() safely — it returns
defaults if not initialized, or the explicitly initialized instance.
Updated tests: test_get_returns_defaults_when_not_initialized,
test_reset_clears_instance (no longer expects RuntimeError).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: Phase 2a-c — remove 16 individual scraper CLI commands
Removed individual scraper commands from:
- COMMAND_MODULES in main.py (16 entries: scrape, github, pdf, word,
epub, video, jupyter, html, openapi, asciidoc, pptx, rss, manpage,
confluence, notion, chat)
- pyproject.toml entry points (16 skill-seekers-<type> binaries)
- parsers/__init__.py (16 parser registrations)
All source types now accessed via: skill-seekers create <source>
Kept: create, unified, analyze, enhance, package, upload, install,
install-agent, config, doctor, and utility commands.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: create SkillConverter base class + converter registry
New base interface that all 17 converters will inherit:
- SkillConverter.run() — extract + build (same call for all types)
- SkillConverter.extract() — override in subclass
- SkillConverter.build_skill() — override in subclass
- get_converter(source_type, config) — factory from registry
- CONVERTER_REGISTRY — maps source type → (module, class)
create_command will use get_converter() instead of _call_module().
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: Grand Unification — one command, one interface, direct converters
Complete the Grand Unification refactor: `skill-seekers create` is now
the single entry point for all 18 source types. Individual scraper CLI
commands (scrape, github, pdf, analyze, unified, etc.) are removed.
## Architecture changes
- **18 SkillConverter subclasses**: Every scraper now inherits SkillConverter
with extract() + build_skill() + SOURCE_TYPE. Factory via get_converter().
- **create_command.py rewritten**: _build_config() constructs config dicts
from ExecutionContext for each source type. Direct converter.run() calls
replace the old _build_argv() + sys.argv swap + _call_module() machinery.
- **main.py simplified**: create command bypasses _reconstruct_argv entirely,
calls CreateCommand(args).execute() directly. analyze/unified commands
removed (create handles both via auto-detection).
- **CreateParser mode="all"**: Top-level parser now accepts all 120+ flags
(--browser, --max-pages, --depth, etc.) since create is the only entry.
- **Centralized enhancement**: Runs once in create_command after converter,
not duplicated in each scraper.
- **MCP tools use converters**: 5 scraping tools call get_converter()
directly instead of subprocess. Config type auto-detected from keys.
- **ConfigValidator → UniSkillConfigValidator**: Renamed with backward-
compat alias.
- **Data flow**: AgentClient + LocalSkillEnhancer read ExecutionContext
first, env vars as fallback.
## What was removed
- main() from all 18 scraper files (~3400 lines)
- 18 CLI commands from COMMAND_MODULES + pyproject.toml entry points
- analyze + unified parsers from parser registry
- _build_argv, _call_module, _SKIP_ARGS, _DEST_TO_FLAG, all _route_*()
- setup_argument_parser, get_configuration, _check_deprecated_flags
- Tests referencing removed commands/functions
## Net impact
51 files changed, ~6000 lines removed. 2996 tests pass, 0 failures.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: review fixes for Grand Unification PR
- Add autouse conftest fixture to reset ExecutionContext singleton between tests
- Replace hardcoded defaults in _is_explicitly_set() with parser-derived defaults
- Upgrade ExecutionContext double-init log from debug to info
- Use logger.exception() in SkillConverter.run() to preserve tracebacks
- Fix docstring "17 types" → "18 types" in skill_converter.py
- DRY up 10 copy-paste help handlers into dict + loop (~100 lines removed)
- Fix 2 CI workflows still referencing removed `skill-seekers scrape` command
- Remove broken pyproject.toml entry point for codebase_scraper:main
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: resolve 12 logic/flow issues found in deep review
Critical fixes:
- UnifiedScraper.run(): replace sys.exit(1) with return 1, add return 0
- doc_scraper: use ExecutionContext.get() when already initialized instead
of re-calling initialize() which silently discards new config
- unified_scraper: define enhancement_config before try/except to prevent
UnboundLocalError in LOCAL enhancement timeout read
Important fixes:
- override(): cleaner tuple save/restore for singleton swap
- --agent without --api-key now sets mode="local" so env API key doesn't
override explicit agent choice
- Remove DeprecationWarning from _reconstruct_argv (fires on every
non-create command in production)
- Rewrite scrape_generic_tool to use get_converter() instead of subprocess
calls to removed main() functions
- SkillConverter.run() checks build_skill() return value, returns 1 if False
- estimate_pages_tool uses -m module invocation instead of .py file path
Low-priority fixes:
- get_converter() raises descriptive ValueError on class name typo
- test_default_values: save/clear API key env vars before asserting mode
- test_get_converter_pdf: fix config key "path" → "pdf_path"
3056 passed, 4 failed (pre-existing dep version issues), 32 skipped.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: update MCP server tests to mock converter instead of subprocess
scrape_docs_tool now uses get_converter() + _run_converter() in-process
instead of run_subprocess_with_streaming. Update 4 TestScrapeDocsTool
tests to mock the converter layer instead of the removed subprocess path.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: YusufKaraaslanSpyke <yusuf@spykegames.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New BrowserRenderer class uses Playwright to render JavaScript-heavy
documentation sites (React, Vue SPAs) that return empty HTML shells
with requests.get(). Activated via --browser flag on web scraping.
- browser_renderer.py: Playwright wrapper with lazy browser launch,
auto-install Chromium on first use, context manager support
- doc_scraper.py: browser_mode config, _render_with_browser() helper,
integrated into scrape_page() and scrape_page_async()
- SPA detection warnings now suggest --browser flag
- Optional dep: pip install "skill-seekers[browser]"
- 14 real e2e tests (actual Chromium, no mocks)
- UML updated: Scrapers class diagram (BrowserRenderer + dependency),
Parsers (DoctorParser), Utilities (Doctor), Components, and new
Browser Rendering sequence diagram (#20)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8 diagnostic checks: Python version (3.10+), package install, git,
14 core deps, 10 optional deps, API keys, MCP server, output dir.
Each check reports pass/warn/fail with --verbose for extra detail.
Exit code 0 if no critical failures, 1 otherwise.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 1 - OpenCode Integration:
- Add OpenCodeAdaptor with directory-based packaging and dual-format YAML frontmatter
- Kebab-case name validation matching OpenCode's regex spec
Phase 2 - OpenAI-Compatible LLM Platforms:
- Extract OpenAICompatibleAdaptor base class from MiniMax (shared format/package/upload/enhance)
- Refactor MiniMax to ~20 lines of constants inheriting from base
- Add 6 new LLM adaptors: Kimi, DeepSeek, Qwen, OpenRouter, Together AI, Fireworks AI
- All use OpenAI-compatible API with platform-specific constants
Phase 3 - CLI Agent Expansion:
- Add 7 new install-agent paths: roo, cline, aider, bolt, kilo, continue, kimi-code
- Total agents: 11 -> 18
Phase 4 - Advanced Features:
- OpenCode skill splitter (auto-split large docs into focused sub-skills with router)
- Bi-directional skill format converter (import/export between OpenCode and any platform)
- GitHub Actions template for automated skill updates
Totals: 12 --target platforms, 18 --agent paths, 2915 tests passing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add MiniMax AI as LLM platform adaptor
Original implementation by octo-patch in PR #318.
This commit includes comprehensive improvements and documentation.
Code Improvements:
- Fix API key validation to properly check JWT format (eyJ prefix)
- Add specific exception handling for timeout and connection errors
- Remove unused variable in upload method
Dependencies:
- Add MiniMax to [all-llms] extra group in pyproject.toml
Tests:
- Remove duplicate setUp method in integration test class
- Add 4 new test methods:
* test_package_excludes_backup_files
* test_upload_success_mocked (with OpenAI mocking)
* test_upload_network_error
* test_upload_connection_error
* test_validate_api_key_jwt_format
- Update test_validate_api_key_valid to use JWT format keys
- Fix test assertions for error message matching
Documentation:
- Create comprehensive MINIMAX_INTEGRATION.md guide (380+ lines)
- Update MULTI_LLM_SUPPORT.md with MiniMax platform entry
- Update 01-installation.md extras table
- Update INTEGRATIONS.md AI platforms table
- Update AGENTS.md adaptor import pattern example
- Fix README.md platform count from 4 to 5
All tests pass (33 passed, 3 skipped)
Lint checks pass
Co-authored-by: octo-patch <octo-patch@users.noreply.github.com>
* fix: improve MiniMax adaptor — typed exceptions, key validation, tests, docs
- Remove invalid "minimax" self-reference from all-llms dependency group
- Use typed OpenAI exceptions (APITimeoutError, APIConnectionError)
instead of string-matching on generic Exception
- Replace incorrect JWT assumption in validate_api_key with length check
- Use DEFAULT_API_ENDPOINT constant instead of hardcoded URLs (3 sites)
- Add Path() cast for output_path before .is_dir() call
- Add sys.modules mock to test_enhance_missing_library
- Add mocked test_enhance_success with backup/content verification
- Update test assertions for new exception types and key validation
- Add MiniMax to __init__.py docstrings (module, get_adaptor, list_platforms)
- Add MiniMax sections to MULTI_LLM_SUPPORT.md (install, format, API key,
workflow example, export-to-all)
Follows up on PR #318 by @octo-patch (feat: add MiniMax AI as LLM platform adaptor).
Co-Authored-By: Octopus <octo-patch@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: octo-patch <octo-patch@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Summary
Add `skill-seekers sync-config` subcommand that crawls a docs site's navigation,
diffs discovered URLs against a config's start_urls, and optionally writes the
updated list back with --apply.
- BFS link discovery with configurable depth (default 2), max-pages, rate-limit
- Respects url_patterns.include/exclude from config
- Supports optional nav_seed_urls config field
- Handles both unified (sources array) and legacy flat config formats
- MCP tool sync_config included
- 57 tests (39 unit + 18 E2E with local HTTP server)
- Fixed CI: renamed summary job to "Tests" to match branch protection rule
Closes#306
Update version across pyproject.toml, _version.py fallbacks,
CHANGELOG.md, and README badges for v3.2.0 release.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Auto-detects NVIDIA (CUDA), AMD (ROCm), or CPU-only GPU and installs the
correct PyTorch variant + easyocr + all visual extraction dependencies.
Removes easyocr from video-full pip extras to avoid pulling ~2GB of wrong
CUDA packages on non-NVIDIA systems.
New files:
- video_setup.py (835 lines): GPU detection, PyTorch install, ROCm config,
venv checks, system dep validation, module selection, verification
- test_video_setup.py (60 tests): Full coverage of detection, install, verify
Updated docs: CHANGELOG, AGENTS.md, CLAUDE.md, README.md, CLI_REFERENCE,
FAQ, TROUBLESHOOTING, installation guide, video dependency plan
All 2523 tests passing (15 skipped).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix extract_visual_data returning 2-tuple instead of 3 (ValueError crash)
- Move pytesseract from core deps to [video-full] optional group
- Add 30-min timeout + user feedback to video enhancement subprocess
- Add scrape_video_impl to MCP server fallback import block
- Detect auto-generated YouTube captions via is_generated property
- Forward --vision-ocr and --video-playlist through create command
- Fix filename collision for non-ASCII video titles (fallback to video_id)
- Make _vision_used a proper dataclass field on FrameSubSection
- Expose 6 visual params in MCP scrape_video tool
- Add install instructions on missing video deps in unified scraper
- Update MCP docstring tool counts (25→33, 7 categories)
- Add video and word commands to main.py docstring
- Document video-full exclusion from [all] deps in pyproject.toml
- Update parser registry test count (22→23 for video parser)
All 2437 tests passing, 0 failures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sync with latest development changes including ruff formatting,
bug fixes, and pinecone adaptor additions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- pyproject.toml: version 3.0.0 → 3.1.0
- src/skill_seekers/_version.py: update hardcoded fallback to 3.1.0
- CHANGELOG.md: comprehensive [3.1.0] release notes covering all
features and fixes since v3.0.0 (unified create command, workflow
presets, RST parser, smart enhance dispatcher, CLI flag parity,
60 new workflow YAMLs, test suite improvements)
- Deprecation messages: update "removed in v3.0.0" → "v4.0.0" across
analyze_presets.py, codebase_scraper.py, mcp/server.py
- tests/test_cli_paths.py: update version assertion to 3.1.0
- tests/test_package_structure.py: update __version__ assertions to 3.1.0
- tests/test_preset_system.py: update deprecation message version to v4.0.0
All 2267 tests passing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes several categories of test failures to achieve a clean test suite:
**Python 3.14 / chromadb compatibility**
- chroma.py: broaden except clause to catch pydantic ConfigError on Python 3.14
- test_adaptors_e2e.py, test_integration_adaptors.py: skip on (ImportError, Exception)
**sys.modules corruption (test isolation)**
- test_swift_detection.py: save/restore all skill_seekers.cli modules AND parent
package attributes in test_empty_swift_patterns_handled_gracefully; prevents
@patch decorators in downstream test files from targeting stale module objects
**Removed unnecessary @unittest.skip decorators**
- test_claude_adaptor.py, test_gemini_adaptor.py, test_openai_adaptor.py: remove
skip from tests that already had pass-body or were compatible once deps installed
**Fixed openai import guard for installed package**
- test_openai_adaptor.py: use patch.dict(sys.modules, {"openai": None}) for
test_upload_missing_library since openai is now a transitive dep
**langchain import path update**
- test_rag_chunker.py: fix from langchain.schema → langchain_core.documents
**config_extractor tomllib fallback**
- config_extractor.py: use stdlib tomllib (Python 3.11+) as fallback when
tomli/toml packages are not installed
**Remove redundant sys.path.insert() calls**
- codebase_scraper.py, doc_scraper.py, enhance_skill.py, enhance_skill_local.py,
estimate_pages.py, install_skill.py: remove legacy path manipulation no longer
needed with pip install -e . (src/ layout)
**Test fixes: removed @requires_github from fully-mocked tests**
- test_unified_analyzer.py: 5 tests that mock GitHubThreeStreamFetcher don't
need a real token; remove decorator so they always run
**macOS-specific test improvements**
- test_terminal_detection.py: use @patch(sys.platform, "darwin") instead of
runtime skipTest() so tests run on all platforms
**Dependency updates**
- pyproject.toml, uv.lock: add langchain and llama-index as core dependencies
**New workflow presets and tests**
- src/skill_seekers/workflows/: add 60 new domain-specific workflow YAML presets
- tests/test_mcp_workflow_tools.py: tests for MCP workflow tool implementations
- tests/test_unified_scraper_orchestration.py: tests for UnifiedScraper methods
Result: 2115 passed, 158 skipped (external services/long-running), 0 failures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes issues #289 and #286 (agent switching and Docker/root failures).
enhance_command.py (new smart dispatcher):
- Routes skill-seekers enhance to API mode (Gemini/OpenAI/Claude API)
when an API key is available, or LOCAL mode (Claude Code CLI) otherwise
- Decision priority: --target flag > config default_agent > auto-detect
from env vars (ANTHROPIC_API_KEY → claude, GOOGLE_API_KEY → gemini,
OPENAI_API_KEY → openai) > LOCAL fallback
- Blocks LOCAL mode when running as root (Docker/VPS) with clear error
message + API mode instructions
- Supports --dry-run, --target, --api-key as first-class flags
arguments/enhance.py:
- Added --target, --api-key, --dry-run, --interactive-enhancement to
ENHANCE_ARGUMENTS (shared by unified CLI parser and standalone entry point)
enhance_skill_local.py:
- Error output no longer truncated at 200 chars (shows up to 20 lines)
- Detects root/permission errors in stderr and prints actionable hint
config_manager.py:
- Added default_agent field to DEFAULT_CONFIG ai_enhancement section
- Added get_default_agent() and set_default_agent() methods
main.py:
- enhance command routed to enhance_command (was enhance_skill_local)
- _handle_analyze_command uses smart dispatcher for post-analysis enhancement
pyproject.toml:
- skill-seekers-enhance entry point updated to enhance_command:main
Tests: 1977 passed, 0 failed (28 new tests in test_enhance_command.py)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
workflow_tools.py imports yaml at module level, but PyYAML was not
declared in requirements.txt or pyproject.toml core dependencies.
This caused ModuleNotFoundError when tools/__init__.py was loaded,
silently breaking server.py's try block and leaving list_tools
undefined -- causing all test_mcp_server.py tests to fail in CI.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add YAML-based enhancement workflow presets shipped inside the package
(default, minimal, security-focus, architecture-comprehensive, api-documentation)
- Add `skill-seekers workflows` subcommand: list, show, copy, add, remove, validate
- copy/add/remove all accept multiple names/files in one invocation with partial-failure behaviour
- `add --name` override restricted to single-file operations
- Add 5 MCP tools: list_workflows, get_workflow, create_workflow, update_workflow, delete_workflow
- Fix: create command _add_common_args() now correctly forwards each --enhance-workflow
as a separate flag instead of passing the whole list as a single argument
- Update README: reposition as "data layer for AI systems" with AI Skills front and centre
- Update CHANGELOG, QUICK_REFERENCE, CLAUDE.md with workflow preset details
- 1,880+ tests passing
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Filter out chunks smaller than min_chunk_size (default 100 tokens)
- Exception: Keep all chunks if entire document is smaller than target size
- All 15 tests passing (100% pass rate)
Fixes edge case where very small chunks (e.g., 'Short.' = 6 chars) were
being created despite min_chunk_size=100 setting.
Test: pytest tests/test_rag_chunker.py -v
- Ignore F541 (f-string without placeholders) - style preference
- Ignore ARG002 (unused method arguments) - often needed for interface compliance
- Ignore B007 (loop variable not used) - sometimes intentional
- Ignore I001 (import block unsorted) - handled by formatter
- Ignore SIM114 (combine if branches) - can reduce readability
These are style suggestions, not bugs. Keeps CI focused on actual errors.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major feature release with enhanced code analysis and documentation.
Features:
- C3.9: Project documentation extraction
- Granular AI enhancement control (--enhance-level 0-3)
- C# language support for test extraction
- 6-12x faster parallel LOCAL mode AI enhancement
- Auto-enhancement and LOCAL mode fallbacks
- GLM-4.7 and custom Claude-compatible API support
Bug Fixes:
- Fixed C# test extraction language errors
- Fixed config type field mismatch
- Fixed LocalSkillEnhancer import issues
- Fixed critical linter errors
Contributors:
- @xuintl - Chinese README improvements
- @Zhichang Yu - GLM-4.7 support and PDF fixes
- @YusufKaraaslanSpyke - Core features and maintenance
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Create src/skill_seekers/_version.py as single source of truth
- Read version dynamically from pyproject.toml at runtime
- Update all __init__.py files to import from _version module
- Add tomli dependency for Python <3.11 (built-in tomllib for 3.11+)
- Remove hardcoded version duplicates (2.7.2 in 3 files)
- Fixes version mismatch: pyproject.toml (2.7.4) vs __init__.py (2.7.2)
Benefits:
- Single place to update version (pyproject.toml)
- No more version mismatches across files
- Automatic version consistency
- Works across Python 3.10-3.13
Before:
- pyproject.toml: 2.7.4
- src/skill_seekers/__init__.py: 2.7.2
- src/skill_seekers/cli/__init__.py: 2.7.2
- src/skill_seekers/mcp/__init__.py: 2.7.2
After:
- pyproject.toml: 2.7.4 (single source of truth)
- All other files: import from _version.py
- Add Twitter/X follow badge to both READMEs (English and Chinese)
- Add GitHub stars badge for social proof
- Add Author link to pyproject.toml pointing to X profile
- Set repository homepage URL to skillseekersweb.com
These changes improve discoverability and community engagement.
This patch release fixes the broken Chinese language selector link
on PyPI by using absolute GitHub URLs instead of relative paths.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This patch release focuses on internationalization and making Skill Seekers
accessible to the Chinese developer community.
Key updates:
- Complete Chinese (简体中文) README translation
- PyPI metadata updated with i18n support
- Natural Language classifiers added
- Community engagement issue created
See CHANGELOG.md for complete release notes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add Chinese (简体中文) mention in package description
- Add i18n, chinese, international keywords for better discoverability
- Add Natural Language classifiers for English and Chinese (Simplified)
- Add direct link to Chinese README in project URLs
This makes the Chinese translation more discoverable on PyPI and
appeals to the massive Chinese developer market.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Start development cycle for v2.8.0.
Version updated in 5 locations:
- pyproject.toml
- src/skill_seekers/__init__.py
- src/skill_seekers/cli/__init__.py
- src/skill_seekers/mcp/__init__.py
- src/skill_seekers/mcp/tools/__init__.py
All version numbers synchronized to prevent Issue #248.
[Unreleased] section in CHANGELOG.md ready for v2.8.0 changes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>