Skip to content

Releases: yusufkaraaslan/Skill_Seekers

v3.9.1

Choose a tag to compare

@github-actions github-actions released this 03 Aug 00:52
c333a37

[3.9.1] - 2026-08-02

Theme: Documentation and project-infrastructure release. No runtime code changed — the package is functionally identical to 3.9.0.

Added

  • Sponsorship program (#442) — SPONSORSHIP.md (five tiers plus the rules), SPONSORS.md, and a sponsors.json single source of truth rendered into all 12 READMEs by scripts/render_sponsors.py. Adding a sponsor is one JSON edit instead of thirteen hand edits, and CI (--check) fails on drift. .github/FUNDING.yml gains GitHub Sponsors alongside Buy Me a Coffee.
  • Sponsor URLs are policy-checked in code — the renderer refuses any sponsor link carrying utm_/ref/fbclid/gclid-style parameters, enforcing rule 4 of the published policy. This immediately caught 24 UTM-tagged links already present across the READMEs; all sponsor links are now clean.

Changed

  • README restructured into a lean landing page — 1,371 → 424 lines, with the deep-dive material moved behind links to the docs/ pages that already covered it. Mirrored across all 11 translations (~16,500 → ~5,100 lines total), each keeping its machine-translation notice and language switcher.
  • Repo root declutteredBULLETPROOF_QUICKSTART.mddocs/getting-started/, the dated DOCUMENTATION_AUDIT_REPORT_2026-05-30.mddocs/archive/historical/, with every reference repointed.
  • QWEN.md reduced from 719 to 64 lines — it duplicated AGENTS.md while advertising three different version numbers at once (v3.6.0, 3.3.0, and "17+ source types" beside "18 source types"). It is now a pointer to AGENTS.md that keeps the essential commands and conventions inline and carries no hardcoded version.

Fixed

  • Stale and incorrect README claims corrected against the codebase — version badge 3.7.0 → 3.9.0; the documented scan --quick|--comprehensive|--enhance flags do not exist and are now create --preset quick|standard|comprehensive; export targets "16 formats"/"21 platforms" → 22; CLI reference "all 20 commands" → 19; the install-agent table 15 → 19 entries; workflow presets "24+" → 68; and the dead # skill-seekers list-configs line removed.
  • Three overlapping troubleshooting guides unified — root TROUBLESHOOTING.md (485 lines), docs/TROUBLESHOOTING.md (1,102) and docs/user-guide/06-troubleshooting.md (108) shared only 2 of 22 headings, so none was a stale copy. docs/TROUBLESHOOTING.md is now the single comprehensive reference (1,398 lines) with the five sections that existed only at root merged in; the user-guide chapter stays as the short entry in the numbered series.
  • 92 broken relative links repaired across the docs tree (109 → 17) — targets relinked to their real locations, case/separator mismatches fixed (integrations/cursor.mdCURSOR.md, advanced/api-reference.mdreference/API_REFERENCE.md), and links to never-written docs unlinked rather than left as 404s. The remaining 17 are intentional (template placeholders, illustrative generated-output samples, archived snapshots).
  • Version stamps refreshed in 28 docs files (14 English + 14 zh-CN) from v3.6.0 to v3.9.0. Historical references in MIGRATION_GUIDE.md and "added in vX.Y.Z" notes are deliberately untouched.
  • test_cli_paths.py no longer pins a version literal — it asserted "3.9.0" and broke the moment the dev version moved, the same fragility already fixed in test_package_structure.py. It now tracks skill_seekers.__version__.
  • The published MCP Docker image was broken and is now fixedDockerfile.mcp installed the MCP SDK with a bare pip install mcp, bypassing the mcp>=1.25,<2 pin in pyproject.toml. Once mcp 2.0.0 shipped, that resolved to 2.x, where FastMCP moved out of mcp.server, so the container died on startup with cannot import name 'FastMCP'. It now installs via the [mcp] extra so the pin applies. Verified by building the image and confirming the server answers /health in ~4s on mcp 1.29.0.
  • Docker MCP image smoke test polls for readiness — the PR-only Test MCP image job waited a fixed 10s before curling /health, then failed with no diagnostics. It now polls for up to 60s and dumps container logs on timeout. That log dump is what surfaced the broken-image bug above, which the old silent failure had masked for months.

v3.9.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 11:33
0465044

[3.9.0] - 2026-07-29

Added

  • HTML parser fallback for broken markup (#96, task F1.4) — new parse_html() helper (cli/html_parsing.py) keeps html.parser as the primary parser (well-formed pages stay byte-identical) but retries with lxml (if installed) then html5lib when parsing raises or yields a tag-free tree for tag-bearing markup, so severely malformed pages no longer scrape as empty. Wired into all web-scraper parse sites (doc_scraper.py) and local HTML file parsing (html_scraper.py); html5lib added as a core dependency so the fallback always exists.
  • Doc scraper retries transient network failures (#97) — scrape_page/scrape_page_async now wrap fetches in retry_with_backoff, so a connection blip or 5xx no longer silently drops the page and ships an incomplete skill. Only transient faults retry (connect/timeout errors, 5xx); 4xx is a definitive answer and returns un-retried. Attempts configurable via the new max_retries config option (default 3; 1 disables retrying).
  • MCP fetch_config retries transient network failures (#92) — the registry list/detail/download GETs go through _get_with_retry (3 attempts, exponential backoff); 4xx like "config not found" still returns immediately.
  • Whisper transcription fallback (Tier 2) implemented (#420) — transcribe_with_whisper() was a placeholder that always raised, so local videos without subtitle files produced no transcript despite the documented 3-tier fallback. Now implemented with faster-whisper (device auto, --whisper-model size, language hint, per-segment confidence), and get_transcript() logs the actual transcription error instead of swallowing it.
  • MiniMax image OCR + registry-driven multimodal provider support (#423) — MiniMax joins the AI provider registry for text enhancement and vision OCR (MINIMAX_API_REGION global_en/cn_zh, MINIMAX_API_PROTOCOL openai/anthropic — China-issued keys no longer 401 against the global endpoint). API_PROVIDERS entries now declare wire protocol and supports_images, _call_api branches on protocol (not provider name), and AgentClient.call_with_image() serves all image-capable providers with SKILL_SEEKER_VISION_PROVIDER auto-detection for video_visual frame OCR.
  • word (docx) source in the scrape_generic MCP tool (#41) — the converter existed in CONVERTER_REGISTRY but the MCP surface never listed it, so MCP clients had no way to scrape .docx sources.

Changed

  • Token-lean GitHub issue defaults (#169) — GitHub-sourced skills no longer bundle a repo's full closed-issue history by default: issue_state defaults to "open" (was "all"), max_issues to 20 (was 100), and labels/milestones are emitted only with the new include_issue_labels/include_issue_milestones flags (default off). issues.md omits empty sections and no longer prints "No labels" stubs. All defaults overridable.

Fixed

  • Unified multi-source skip_scrape now rebuilds from cacheUnifiedScraper reloads each configured source from .skillseeker-cache/cached extraction files before conflict detection and build, so cached unified configs no longer re-scrape the network (#405).
  • Quality completeness checks no longer match inside code blocks (#229) — SkillQualityChecker._check_skill_completeness ran its workflow-step/prerequisites/error-handling regexes against raw SKILL.md, so a # Step 1: comment in a fenced example counted as workflow guidance. Fenced blocks and inline code are stripped before matching; prose detection unchanged.
  • Pattern-detector precision: getters are not factories, Java Singletons are detectable (#425) — FactoryDetector matched creation keywords as substrings, so a plain Java POJO scored Factory from its getters and a canonical getInstance() Singleton was misclassified as Factory. Creation verbs now match as word-boundary prefixes with accessor prefixes (get/set/is/has) excluded, and SingletonDetector recognizes class-named constructors (Java/C#/C++) and an overridden __new__. Also: dependency-graph node keys use as_posix() so Windows paths can't zero out import resolution, and a multi-file graph resolving zero edges now logs a warning.
  • Per-frame failures no longer abort visual extraction (#426) — one exception in the classify → OCR → track loop killed the whole video's --visual extraction; a failing frame now logs a warning and is skipped while the scan continues.
  • Two CPU-environment crashes in visual extraction (#419) — newer OpenCV builds return (N, 4) from HoughLinesP, crashing region classification (reshape(-1, 4) handles every layout); and EasyOCR's quantized backend SIGILLed on x86 CPUs without AVX2 (QEMU default model, homelab VMs) — AVX2 is now detected via /proc/cpuinfo and quantize=False passed when missing (slower fp32, but completes).
  • Kotlin analyzer is string-aware (#407) — brace counting and declaration extraction now mask strings and comments via a single offset-preserving C-style scanner, fixing dropped declarations from backtick-escaped identifiers, ${...} string-template interpolation, C++14 digit separators, and unterminated block comments.
  • Streaming-package consumer snippets handle the real package shape (#416) — the usage examples generated by the LangChain/LlamaIndex/Haystack adaptors assumed a bare JSON list, but streaming packages wrap content in {"documents": ...}/{"nodes": ...}; the snippets now handle both, and dead example classes were removed from streaming_adaptor.py.
  • Docker docs point at pullable images (#412) — all documented references now use the public Hub namespace yusyuss with the CLI (skill-seekers) vs MCP (skill-seekers-mcp) image used correctly per context; Helm values and the raw Kubernetes manifest no longer reference unpullable names.

Security

  • CORS origins are env-driven across all three servers (#422, #424) — the API, embedding, and MCP HTTP servers shipped allow_origins=["*"] with allow_credentials=True, a combination browsers reject. A shared resolve_cors_config() reads CORS_ORIGINS (comma-separated or *) and enables credentials only for a concrete origin list; a wildcard mixed into the list can't re-enable the rejected combo. Docker LABEL versions synced to pyproject and the stale MCP tool-count label corrected (35 → 40).

v3.8.0

Choose a tag to compare

@github-actions github-actions released this 15 Jun 21:23

[3.8.0] - 2026-06-15

Theme: The Grand Unification refactor (one build pipeline, one AI transport, one parser definition, in-process MCP tools — see docs/UNIFICATION_PLAN.md) with a 13-bug audit fix-up and a real-world end-to-end CLI testing pass — plus MiniMax-M3, model selection, registry-driven platform targets, a Windows subprocess fix, and codebase de-duplication.

Fixed

  • Codebase skills built from a config no longer drop the API reference + dependency graph — the local source carried api_reference and dependency_graph, but the unified builder never wrote them out, so a skill built from a scan-emitted *-codebase.json shipped without its API reference (it was stranded in the scrape cache). Both are now promoted into references/codebase_analysis/<source>/ and linked from the index.
  • create ./path defaults to deep analysis — local codebase create defaulted to surface depth, producing an empty code_analysis.json and a misleading "analyzed 0 files" log; it now defaults to deep (matching the scraper default and the scan-config path), with an explicit --depth still taking precedence.
  • package works non-interactively — the quality-gate prompt raised EOFError when stdin wasn't a TTY (CI/pipes); it now auto-proceeds on a non-TTY or with the new --yes/-y flag, while an interactive terminal still prompts.
  • quality prints the score — the standalone command saved quality_report.json but printed nothing; it now shows the score/grade summary, and the report serializes metric levels as "info"/"warning" instead of the Python enum repr "MetricLevel.INFO".
  • doctor no longer miscounts GITHUB_TOKEN as an AI provider key — the API-keys check now names which keys are set, so a bare GitHub token isn't misread as a provider key being configured.
  • estimate <url> gives an actionable error — passing a URL (which create accepts) printed a bare "Config file not found"; it now explains that estimate takes a config file and points at create --dry-run, and exits non-zero.
  • Web sitemap discovery fails fast on unreachable hosts — the pre-crawl sitemap probes used a single scalar timeout; they now use a (connect, read) timeout so an unreachable host doesn't block the full window before the crawl starts.
  • Fork-bomb guard covers the primary LOCAL enhance path_run_agent_command now marks SKILL_SEEKER_ENHANCE_ACTIVE in the spawned agent's environment (including terminal-mode scripts) and run() refuses nested spawns, so a local agent enhancing a skill can no longer recursively launch enhancement.
  • --dry-run and --output honored for unified configscreate skipped injecting both into UnifiedScraper (every other source type got them); dry-run now previews and returns without creating directories, for legacy and unified configs alike.
  • Trailing-slash --output no longer leaks intermediates into the packaged skillSkillConverter resolves skill_dir once and strips trailing separators, so --output out/x/ can't place _extracted.json inside the skill directory.
  • snake_case config classificationconfig_extractor._path_has_word used \b, which never matches inside snake_case names (app_db.yaml); explicit lookarounds fix detection while keeping dbeaver/blog false positives excluded.
  • How-to guides no longer come out empty for control-flow-wrapped tests — step extraction recursively descends with/for/if/try blocks in source order, and empty AST results fall back to the heuristic instead of emitting empty guides.
  • Slack 429 retry exhaustion logs a truncation warning (matching the Discord path) instead of silently breaking pagination.
  • Kimi CLI output parsing no longer swallows unknown records — record boundary is any CamelCase constructor, so new record types (ToolCallPart, …) can't leak internals into extracted text.
  • scan re-runs no longer churn .archived/ — canonical-named files fetched into the out-dir are removed after copying to the slug target, eliminating phantom "removed" diffs on every re-scan.
  • Dry-run page estimates dedupe utm_* variants_enqueue_url normalizes tracking params the same way the real crawl does.
  • MCP per-page diagnostics from worker threads are no longer dropped — contextvars are propagated into ThreadPoolExecutor workers (doc scraper, PDF extractor, enhancers, video visual), so the per-call log capture sees them.
  • Gemini/OpenAI adaptor enhancement gained the truncation gate and atomic save — both adaptors previously accepted truncated AI output and used a destructive rename-then-write save (a failed write left no SKILL.md); all adaptors now share one enhance flow with central truncation detection and backup+atomic-replace (enhance_skill's save path fixed the same way).
  • MCP extract_config_patterns tool works — it passed flags config_extractor's parser rejects, so it failed on every invocation; now mapped to the real flags and pinned by a regression test.
  • Unified-CLI flags that were silently rejected now workestimate --unlimited/--timeout, update --generate-package/--apply-update, quality --output, stream --streaming-overlap-chars/--batch-size/--checkpoint, multilang --report/--export, install --target, and extract-test-examples --recursive were accepted by the standalone modules but rejected with "unrecognized arguments" by skill-seekers <cmd> (central-parser drift). A programmatic drift-guard test now fails CI if any module flag is missing from its central parser.
  • Windows: large subprocess output no longer freezes MCP tools (#397) — run_subprocess_with_streaming replaced its select()-based polling loop (unsupported on Windows pipes) with reader threads, and now bounds the timeout reliably. Previously scrape_docs/scrape_github and other tools could deadlock on a full (>64 KB) pipe buffer on Windows. The fix is applied to the single shared implementation, so all callers benefit.

Changed

  • quality --threshold defaults to None — without it, quality is report-only and keeps the historical exit-0 contract; the quality gate (non-zero exit below the score) fires only when --threshold is explicitly given.
  • All enhancement API calls go through AgentClient — one transport with a consistent truncation gate, timeout policy, and error classification. ANTHROPIC_BASE_URL, per-provider model overrides (ANTHROPIC_MODEL/GOOGLE_MODEL/OPENAI_MODEL/MOONSHOT_MODEL), and the global SKILL_SEEKER_MODEL / SKILL_SEEKER_PROVIDER overrides are now honored everywhere. API-key auto-detection follows the API_PROVIDERS registry order (Anthropic → Google → OpenAI → Moonshot). video_visual frame classification is the documented multimodal exception.
  • MCP tools run in-processestimate_pages, detect_patterns, extract_test_examples, extract_config_patterns, build_how_to_guides, split_config, generate_router, package_skill, and upload_skill call the real CLI main() via a shared run_cli_main() helper instead of spawning subprocesses (faster startup, identical output contract; former hard subprocess timeouts become advisory). enhance_skill (LOCAL agent) and install_skill's enhancement step stay subprocess by design (fork-bomb-guard semantics).
  • Platform --target choices are derived from the adaptor registry (#400) — enhance, upload, package, and install now compute their choices from get_enhancement_platforms() / get_upload_platforms() / list_platforms() instead of hand-maintained lists, so newly registered adaptors appear automatically and the lists can no longer drift. Non-breaking (each new list is a superset of the old).

Added

  • stream --output — collected chunks are written as JSON (the flag existed in the central parser but chunks were processed and dropped).
  • multilang --languages — restricts --detect/--export to the given languages (previously a central-parser fiction).
  • skill_seekers.services packagemarketplace_manager, marketplace_publisher, config_publisher, source_manager, and git_repo moved out of mcp/ so the CLI can import this domain logic without the optional [mcp] extra. Back-compat shims remain at the old skill_seekers.mcp.* paths.
  • get_converter("config", {...})UnifiedScraper now accepts the factory-shaped config dict, so unified configs construct through the same factory as every other source type (legacy positional construction still supported).
  • cli/exit_codes.py — standard exit-code constants (EXIT_SUCCESS/EXIT_ERROR/EXIT_VALIDATION/EXIT_INTERRUPT).
  • --model flag for enhance and package (#395, #398) — override the platform's default model, e.g. skill-seekers enhance output/react/ --target minimax --model MiniMax-M2.7 or skill-seekers package output/react/ --target minimax --model MiniMax-M2.7. Honored uniformly across all enhancement adaptors and recorded in package metadata. Resurrects the previously-dead custom_model config key.
  • MiniMax-M3 is the new default MiniMax model (#395) — fresh --target minimax runs use M3; the previous-generation M2.7 remains selectable via --model. Docs (MINIMAX_INTEGRATION.md, MULTI_LLM_SUPPORT.md) refreshed.
  • More enhancement targets (#395) — enhance --target now accepts every enhancement-capable adaptor (adds minimax, deepseek, qwen, openrouter, together, fireworks); previously only claude/gemini/openai/kimi were reachable.
  • More upload targets + supports_upload() capability (#400) — upload --target now accepts every adaptor with a real upload, adding minimax, deepseek, qwen, openrouter, together, fireworks, and pinecone. New supports_upload() adaptor method and get_upload_platforms() helper.

Internal

  • DocumentSkillBuilder — the build side of all 9 document scrapers (epub, word, pptx, html,...
Read more

v3.7.0

Choose a tag to compare

@github-actions github-actions released this 30 May 20:46

[3.7.0] - 2026-05-30

Theme: AI-driven project knowledge base (skill-seekers scan) — bootstrap a complete skill set for a project in one command, with safety/observability/coverage hardening throughout.

Added

  • skill-seekers scan <dir> command (#327) — point at any project; an AI agent inspects manifests, README, Dockerfile/CI, sampled source files (first 2 KB each), and the git remote, then emits one Skill Seekers config per detected framework plus a <project>-codebase.json for the project's own code. Each config stamped with metadata.detected_version so re-scans report added / version-bumped / removed dependencies. Internationalized canonical-name resolver (CJK + EU language suffixes) so detections like "Godot 引擎" resolve godot. Out-dir cache means re-scans reuse prior emissions and respect manual edits. Doctor-style report with pluralized counts and resolved / AI-generated / unresolved / archived breakdown.
  • Coverage: scan recognizes ~50 manifest types (Pipfile, environment.yml, deno.json, flake.nix, Chart.yaml, stack.yaml, deps.edn, dune-project, BUILD.bazel, …) and walks src/lib/app/cmd/crates/packages/apps/services/backend/frontend plus root-level files (catches Django, flat-layout Python, Go, Rust workspaces, JS monorepos).
  • Cost + safety flags: --max-ai-generations N (default 10) caps unbounded AI generation for monorepos; --dry-run previews what would be emitted without writing or invoking AI; --probe-urls HEAD-probes AI-generated URLs with retry-on-404; --no-fetch / --no-generate / --no-publish-prompt for offline / CI use.
  • Community submission (opt-in): freshly AI-generated configs can be submitted to the community registry via a native-async flow. Pre-checks GITHUB_TOKEN, idempotency-guards against duplicate issues, retries transient failures with backoff.
  • Archival: configs that disappear from detections are moved (not deleted) to out_dir/.archived/<UTC-timestamp>/ so the user never loses hand-edited work and out_dir stays clean.
  • Docs: new docs/getting-started/05-scan-a-project.md; entries in README, FAQ, CLI Reference, Feature Matrix, Config Format, Environment Variables, and the Quick Start cross-link.

Changed

  • CLI dispatch unified (#327) — scan and doctor now consume the parsed-args namespace directly via Command(args).execute() instead of building a second argparse.ArgumentParser. Eliminates the _reconstruct_argv hack for these commands; remaining ~14 commands flagged for migration.
  • Config schema: detected_version lives under metadata.detected_version (alongside metadata.version for the config-schema version) rather than at top level. Backwards-compatible reader; old top-level placements migrate on next stamp.
  • SourceDetector.CODE_PROJECT_MARKERS is now public (was _CODE_PROJECT_MARKERS); cross-module callers no longer reach into a private attribute.

Fixed

  • Correctness (#327) — diff layer keyed by stable filename slug instead of internal config name (eliminates phantom add/remove churn); resolve_config_path lookups now append .json so local-disk + user-dir paths actually find files; out-dir cache prevents redundant API/AI calls on re-scan; lowercase filename slugs prevent duplicate-file accumulation across runs.
  • Safety (#327) — atomic JSON writes via os.replace so SIGINT mid-write can't corrupt a config and silently flip it to "removed" on the next scan; _safe_size guards stat() so a broken symlink in src/ no longer crashes the scan; AgentClient.call exceptions caught and logged; AI-generated config names rejected if they fail the registry regex; URL probe catches AI hallucinations of base_url before writing.
  • Observability (#327) — logging.basicConfig in scan so logger.warning/error reaches the user (was silently dropped); non-zero exit code when no configs and no codebase config were emitted, so CI pipelines detect total-failure scans.
  • Publish flow (#327) — native async (asyncio.run at single entry, asyncio.to_thread for input()); pre-check GITHUB_TOKEN with actionable hint instead of asking N "yes/no" questions and failing N times; idempotency check (search existing open issues) prevents duplicate submissions; retry with backoff on transient failures; nested-event-loop detection with clear message instead of opaque traceback.

v3.6.0

Choose a tag to compare

@github-actions github-actions released this 03 May 10:54

[3.6.0] - 2026-05-03

Theme: Quality-of-life release — packaging targets, GitHub issue workflow, codebase analysis fixes, and source detection hardening.

Added

  • IBM Bob packaging target — new --target bob adaptor and agent install support for IBM's Bob agent platform (#366)
  • GitHub issue filtering--github-issue-state, --github-issue-labels, and --github-issue-since filters in the GitHub scraper for narrowing which issues are pulled (#367)
  • Per-issue files — GitHub scraper now writes one Markdown file per issue instead of a single bundle, improving navigation and downstream chunking (#367)
  • Pinecone frontmatter — Pinecone vector exports now include consistent YAML frontmatter for metadata round-tripping (#367)

Fixed

  • Unified scraper now generates codebase_analysis/ index — local sources were producing C3.x outputs with broken SKILL.md links; the unified skill builder now wires up the index and resolves links correctly (#362, #376)
  • Guides fallback fires correctlyunified_skill_builder was emitting a truthy placeholder for empty guides which suppressed the fallback content; placeholder removed (#364, #375)
  • HTML URLs no longer treated as local filessource_detector now checks for http(s):// before falling through to the local-path branch, fixing false-positive routing (#373)
  • PDF extracted images appear in markdownpdf_scraper now inserts ![](…) references for images extracted from PDFs so they render in the generated SKILL.md (#369)
  • C3.x output for local sourcesunified command was skipping the C3.x analysis pipeline for local codebase sources; now emits the full pattern/test/guide/config/router output (#363, #372)
  • Language filter passed to C3.x clone analysis — repos cloned for analysis now respect --languages instead of analyzing every file (fixes #361, #370)
  • Unity vs Unreal detection — Unity projects with C# imports were being misidentified as Unreal; detection now keys on C# import patterns (fixes #365, #368)

v3.5.1

Choose a tag to compare

@github-actions github-actions released this 12 Apr 19:00

[3.5.1] - 2026-04-12

Added

  • Centralized defaults.json config — single source of truth for all default values (rate_limit, max_pages, workers, async_mode, enhancement, analysis, RAG settings). New defaults.py loader module. All 15+ files that previously hardcoded defaults now read from this file (#356)
  • Low-signal code snippet filtering_is_low_signal_code_snippet() filters junk patterns like bare True, options, single identifiers from quick references (#360)
  • Pattern description normalization_normalize_pattern_description() cleans boilerplate prefixes and truncates to first meaningful sentence (#360)
  • Example language priority ranking_example_language_priority() ranks Python > Bash > JSON > etc. for SKILL.md examples (#360)
  • checkpoint_exists() method on DocToSkillConverter — was called but never defined (#360)
  • Unified config source normalizationDocToSkillConverter.__init__ merges fields from sources[0] into flat config for compatibility (#360)
  • display_name support in SKILL.md generation — produces cleaner titles and slugs (#360)
  • New tests: test_doc_scraper_entrypoint.py (regression for _run_scraping), quick-reference quality tests, docs-only compatibility tests, nested reference coverage tests (#360)

Changed

  • max_pages default is now unlimited (-1) — the scraper fetches all pages unless the user explicitly sets --max-pages. Previously defaulted to 500 (#356)
  • --no-rate-limit flag now works — was defined in CLI arguments but never consumed by ExecutionContext (#356)
  • constants.py reads from defaults.json — no longer contains hardcoded magic numbers (#356)
  • ExecutionContext.ScrapingSettingsrate_limit and max_pages now use real defaults instead of None, preventing None-poisoning downstream (#356)
  • SKILL.md frontmatter cleanup — empty doc_version: and version: fields are now omitted; placeholder sections removed (#360)
  • Enhancement routing through platform adaptors instead of importing nonexistent enhance_skill_md helper (#360)
  • quality_metrics.py uses rglob for nested reference directories in unified skills (#360)

Fixed

  • TypeError: '>' not supported between instances of 'NoneType' and 'int'rate_limit defaulted to None in ExecutionContext, which flowed through config.get("rate_limit", DEFAULT) (dict.get returns None when the key exists with value None, ignoring the fallback). Fixed in doc_scraper.py (sync + async paths), estimate_pages.py, and sync_config.py (#356, #359)
  • discover_urls() loop never executed with unlimited max_pageslen(discovered) < -1 is always False. Added unlimited mode guard (#356)
  • converter.scrape() called nonexistent method in _run_scraping() — changed to converter.scrape_all() (#360)
  • None-safety for BeautifulSoup attributeslink["href"], sitemap.text, meta_desc["content"] guarded against None XML text nodes (#360)
  • Python 3.10 compatibility — backslash in f-string in quality_metrics.py not supported before 3.12 (#360)

v3.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Apr 13:00

[3.5.0] - 2026-04-09

Theme: Grand Unification — one command, one interface, direct converters. Agent-agnostic architecture, marketplace pipeline, smart SPA discovery, all content extraction enabled by default. 80+ files changed across the codebase.

Added

  • Grand Unification — unified create command as single entry point for all 18 source types with auto-detection, direct converter invocation, and centralized enhancement (#346)
  • Agent-agnostic AgentClient abstraction — all 5 enhancers now support Claude, Kimi, Codex, Copilot, OpenCode, and custom agents via a unified interface. Auto-detects agent from API keys instead of hardcoding (#336)
  • Kimi CLI integration with stdin piping and output parsing (#336)
  • MarketplacePublisher — publish skills to Claude Code plugin marketplace repos (#336)
  • MarketplaceManager — register and manage marketplace repositories (#336)
  • ConfigPublisher — push configs to registered config source repos (#336)
  • push_config MCP tool for automated config publishing (#336)
  • Smart SPA discovery engine — three-layer discovery: sitemap.xml, llms.txt, SPA nav rendering (#336)
  • "browser": true config support for JavaScript SPA sites with browser renderer timeout defaults (60s, domcontentloaded) (#336)
  • Dynamic routing via _build_argv() — replaced manual arg forwarding with dynamic forwarder, added 7 missing CLI flags (#336)
  • Kotlin language support for codebase analysis — Full C3.x pipeline support: AST parsing (classes, objects, functions, data/sealed classes, extension functions, coroutines), dependency extraction, design pattern recognition (object declaration→Singleton, companion object→Factory, sealed class→Strategy), test example extraction (JUnit, Kotest, MockK, Spek), language detection patterns, config detection (build.gradle.kts), and extension maps across all analyzers (#287)
  • Headless browser rendering (--browser flag) — uses Playwright to render JavaScript SPA sites (React, Vue, etc.) that return empty HTML shells. Auto-installs Chromium on first use. Optional dep: pip install "skill-seekers[browser]" (#321)
  • skill-seekers doctor command — 8 diagnostic checks (Python version, package install, git, core/optional deps, API keys, MCP server, output dir) with pass/warn/fail status and --verbose flag (#316)
  • Prompt injection check workflow — bundled prompt-injection-check workflow scans scraped content for injection patterns (role assumption, instruction overrides, delimiter injection, hidden instructions). Added as first stage in default and security-focus workflows. Flags suspicious content without removing it (#324)
  • Codex CLI plugin manifest (.codex-plugin/plugin.json) for OpenAI Codex integration (#350)
  • 6 behavioral UML diagrams — 3 sequence (create pipeline, GitHub+C3.x flow, MCP invocation), 2 activity (source detection, enhancement pipeline), 1 component (runtime dependencies with interface contracts)
  • 134 new teststest_agent_client.py, test_config_publisher.py, _build_argv tests. Total: 3194 passed, 39 expected skips (#336)

Changed

  • All content extraction features enabled by default — pattern detection, test examples, how-to guides, config extraction, and router generation no longer require explicit opt-in
  • Renamed claude-enhanced merge mode to ai-enhanced — backward compatibility alias kept (#336)
  • Removed 118+ hardcoded Claude references across 60+ files (#336)
  • Refactored 5 enhancers to use AgentClient abstraction (#336)
  • Removed 50-file GitHub API analysis limit (#336)
  • Removed 100-file config extraction limit (#336)
  • Fixed unified scraper default max_pages from 100 to 500 (#336)
  • Centralized enhancement timeouts to 45min default with unlimited support (#336)
  • Excluded slow MCP/e2e tests from CI coverage step to prevent timeout

Fixed

  • glob('*.md') replaced with rglob('*.md') in all adaptors — fixes packaging when skills are in nested directories (#349)
  • scraped_data list-vs-dict bug in conflict detection (#336)
  • base_url passthrough to doc scraper subprocess (#336)
  • URL filtering now uses base directory correctly (#336)
  • C3.x analysis data loss (#336)
  • --enhance-level flag not passed correctly (#336)
  • guide_enhancer method rename_call_claude_api renamed to _call_ai (#336)
  • 11 pre-existing test failures fixed (#336)
  • Per-file language detection in GitHub scraper (#336)
  • GitHub language detection crashes with TypeError when API response contains non-integer metadata keys (e.g., "url") — now filters to integer values only (#322)
  • C3.x codebase analysis crashes with TypeError_run_c3_analysis() and _analyze_c3x() passed removed enhance_with_ai/ai_mode kwargs to analyze_codebase() instead of enhance_level (#323)

Security

  • Removed command injection via cloned repo script execution (#336)
  • Replaced git add -A with targeted staging in marketplace publisher (#336)
  • Clear auth tokens from cached .git/config after clone (#336)
  • Use defusedxml for sitemap XML parsing (XXE protection) (#336)
  • Path traversal validation for config names (#336)

v3.4.0 — 12 LLM Platforms, SPA Detection, UML Architecture

Choose a tag to compare

@yusufkaraaslan yusufkaraaslan released this 25 Mar 19:21

What's New in v3.4.0

Theme: 8 new LLM platform adaptors (12 total), 7 new CLI agent paths (18 total), OpenCode skill tools, SPA site detection, 8 bug fixes, and full UML architecture documentation.

Platform Expansion: 5 → 12 LLM Targets

New Platform Flag Base
OpenCode --target opencode Directory-based, dual YAML
Kimi --target kimi OpenAI-compatible
DeepSeek --target deepseek OpenAI-compatible
Qwen --target qwen OpenAI-compatible
OpenRouter --target openrouter OpenAI-compatible
Together AI --target together OpenAI-compatible
Fireworks AI --target fireworks OpenAI-compatible

All new platforms inherit from a shared OpenAI-compatible base class for consistent behavior.

Agent Expansion: 11 → 18 Install Paths

New agents: roo, cline, aider, bolt, kilo, continue, kimi-code

OpenCode Skill Tools

  • Skill splitter — auto-split large docs into focused sub-skills with router
  • Bi-directional converter — import/export between OpenCode and any platform format

Distribution

  • Smithery manifest (smithery.yaml)
  • GitHub Actions template for automated skill updates
  • Claude Code Plugin with slash commands

Bug Fixes

  • sanitize_url() crash on Python 3.14 strict urlparse (#284)
  • Blind /index.html.md append breaking non-Docusaurus sites (#277)
  • Unified scraper temp config format (#317)
  • Unicode arrows breaking Windows cp1252 terminals
  • CLI flags in plugin slash commands
  • MiniMax adaptor improvements (#319)
  • Misleading "Scraped N pages" count — now shows (N saved, M skipped) (#320)
  • SPA site detection — warns when site requires JavaScript rendering (#320, #321)

Documentation

  • Full UML architecture — 14 class diagrams synced from source code via StarUML
  • StarUML HTML API reference export
  • Ecosystem section linking all Skill Seekers repos
  • Architecture references in README and CONTRIBUTING
  • Consolidated Docs/ into docs/

Test Results

2929 passed, 39 skipped, 0 failures

Install / Upgrade

pip install --upgrade skill-seekers

Full changelog: https://github.com/yusufkaraaslan/Skill_Seekers/blob/main/CHANGELOG.md

v3.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Mar 22:27

[3.3.0] - 2026-03-16

Theme: 10 new source types (17 total), EPUB unified integration, sync-config command, performance optimizations, 12 README translations, and 19 bug fixes. 117 files changed, +41,588 lines since v3.2.0.

Supported Source Types (17)

# Type CLI Command Config Type Auto-Detection
1 Documentation (web) scrape / create <url> documentation HTTP/HTTPS URLs
2 GitHub repository github / create owner/repo github owner/repo or github.com URLs
3 PDF document pdf / create file.pdf pdf .pdf extension
4 Word document word / create file.docx word .docx extension
5 EPUB e-book epub / create file.epub epub .epub extension
6 Video video / create <url/file> video YouTube/Vimeo URLs, video extensions
7 Local codebase analyze / create ./path local Directory paths
8 Jupyter Notebook jupyter / create file.ipynb jupyter .ipynb extension
9 Local HTML html / create file.html html .html/.htm extensions
10 OpenAPI/Swagger openapi / create spec.yaml openapi .yaml/.yml with OpenAPI content
11 AsciiDoc asciidoc / create file.adoc asciidoc .adoc/.asciidoc extensions
12 PowerPoint pptx / create file.pptx pptx .pptx extension
13 RSS/Atom feed rss / create feed.rss rss .rss/.atom extensions
14 Man pages manpage / create cmd.1 manpage .1.8/.man extensions
15 Confluence wiki confluence confluence API or export directory
16 Notion pages notion notion API or export directory
17 Slack/Discord chat chat chat Export directory or API

Added

10 New Skill Source Types (17 total)

Skill Seekers now supports 17 source types — up from 7. Every new type is fully integrated into the CLI (skill-seekers <type>), create command auto-detection, unified multi-source configs, config validation, the MCP server, and the skill builder.

  • Jupyter Notebookskill-seekers jupyter --notebook file.ipynb or skill-seekers create file.ipynb

    • Extracts markdown cells, code cells with outputs, kernel metadata, imports, and language detection
    • Handles single files and directories of notebooks; filters .ipynb_checkpoints
    • Optional dependency: pip install "skill-seekers[jupyter]" (nbformat)
    • Entry point: skill-seekers-jupyter
  • Local HTMLskill-seekers html --html-path file.html or skill-seekers create file.html

    • Parses HTML using BeautifulSoup with smart main content detection (<article>, <main>, .content, largest div)
    • Extracts headings, code blocks, tables (to markdown), images, links; converts inline HTML to markdown
    • Handles single files and directories; supports .html, .htm, .xhtml extensions
    • No extra dependencies (BeautifulSoup is a core dep)
  • OpenAPI/Swaggerskill-seekers openapi --spec spec.yaml or skill-seekers create spec.yaml

    • Parses OpenAPI 3.0/3.1 and Swagger 2.0 specs from YAML or JSON (local files or URLs via --spec-url)
    • Extracts endpoints, parameters, request/response schemas, security schemes, tags
    • Resolves $ref references with circular reference protection; handles allOf/oneOf/anyOf
    • Groups endpoints by tags; generates comprehensive API reference markdown
    • Source detection sniffs YAML file content for openapi: or swagger: keys (avoids false positives on non-API YAML files)
    • Optional dependency: pip install "skill-seekers[openapi]" (pyyaml — already a core dep, guard added for safety)
  • AsciiDocskill-seekers asciidoc --asciidoc-path file.adoc or skill-seekers create file.adoc

    • Regex-based parser (no external library required) with optional asciidoc library support
    • Extracts headings (= through =====), [source,lang] code blocks, |=== tables, admonitions (NOTE/TIP/WARNING/IMPORTANT/CAUTION), and include:: directives
    • Converts AsciiDoc formatting to markdown; handles single files and directories
    • Optional dependency: pip install "skill-seekers[asciidoc]" (asciidoc library for advanced rendering)
  • PowerPoint (.pptx)skill-seekers pptx --pptx file.pptx or skill-seekers create file.pptx

    • Extracts slide text, speaker notes, tables, images (with alt text), and grouped shapes
    • Detects code blocks by monospace font analysis (30+ font families)
    • Groups slides into sections by layout type; handles single files and directories
    • Optional dependency: pip install "skill-seekers[pptx]" (python-pptx)
  • RSS/Atom Feedsskill-seekers rss --feed-url <url> / --feed-path file.rss or skill-seekers create feed.rss

    • Parses RSS 2.0, RSS 1.0, and Atom feeds via feedparser
    • Optionally follows article links (--follow-links, default on) to scrape full page content using BeautifulSoup
    • Extracts article titles, summaries, authors, dates, categories; configurable --max-articles (default 50)
    • Source detection matches .rss and .atom extensions (.xml excluded to avoid false positives)
    • Optional dependency: pip install "skill-seekers[rss]" (feedparser)
  • Man Pagesskill-seekers manpage --man-names git,curl / --man-path dir/ or skill-seekers create git.1

    • Extracts man pages by running man command via subprocess or reading .1.8/.man files directly
    • Handles gzip/bzip2/xz compressed man files; strips troff/groff formatting (backspace overstriking, macros, font escapes)
    • Parses structured sections (NAME, SYNOPSIS, DESCRIPTION, OPTIONS, EXAMPLES, SEE ALSO)
    • Source detection uses basename heuristic to avoid false positives on log rotation files (e.g., access.log.1)
    • No external dependencies (stdlib only)
  • Confluenceskill-seekers confluence --base-url <url> --space-key <key> or --export-path dir/

    • API mode: fetches pages from Confluence REST API with pagination (atlassian-python-api)
    • Export mode: parses Confluence HTML/XML export directories
    • Extracts page content, code/panel/info/warning macros, page hierarchy, tables
    • Optional dependency: pip install "skill-seekers[confluence]" (atlassian-python-api)
  • Notionskill-seekers notion --database-id <id> / --page-id <id> or --export-path dir/

    • API mode: fetches pages via Notion API with support for 20+ block types (paragraph, heading, code, callout, toggle, table, etc.)
    • Export mode: parses Notion Markdown/CSV export directories
    • Extracts rich text with annotations (bold, italic, code, links), 16+ property types for database entries
    • Optional dependency: pip install "skill-seekers[notion]" (notion-client)
  • Slack/Discord Chatskill-seekers chat --export-path dir/ or --token <token> --channel <channel>

    • Slack: parses workspace JSON exports or fetches via Slack Web API (slack_sdk)
    • Discord: parses DiscordChatExporter JSON or fetches via Discord HTTP API
    • Extracts messages, code snippets (fenced blocks), shared URLs, threads, reactions, attachments
    • Generates per-channel summaries and topic categorization
    • Optional dependency: pip install "skill-seekers[chat]" (slack-sdk)

EPUB Unified Pipeline Integration

  • EPUB (.epub) input support via skill-seekers create book.epub or skill-seekers epub --epub book.epub
    • Extracts chapters, metadata (Dublin Core), code blocks, images, and tables from EPUB 2 and EPUB 3 files
    • DRM detection with clear error messages (Adobe ADEPT, Apple FairPlay, Readium LCP)
    • Font obfuscation correctly identified as non-DRM
    • EPUB 3 TOC bug workaround (ignore_ncx option)
    • --help-epub flag for EPUB-specific help
    • Optional dependency: pip install "skill-seekers[epub]" (ebooklib)
    • 107 tests across 14 test classes
  • EPUB added to unified scraper_scrape_epub() method, scraped_data["epub"], config validation (_validate_epub_source), and dry-run display. Previously EPUB worked standalone but was missing from multi-source configs.

Unified Skill Builder — Generic Merge System

  • _generic_merge() — Priority-based section merge for any combination of source types not covered by existing pairwise synthesis (docs+github, docs+pdf, etc.). Produces YAML frontmatter + source-attributed sections.
  • _append_extra_sources() — Appends additional source type content (e.g., Jupyter + PPTX) to pairwise-synthesized SKILL.md.
  • _generate_generic_references() — Generates references/<type>/index.md for any source type, with ID resolution fallback chain.
  • _SOURCE_LABELS dict — Human-readable labels for all 17 source types used in merge attribution.

Config Validator Expansion

  • 17 source types in VALID_SOURCE_TYPES — All new types plus word and video now have per-type validation methods.
  • _validate_word_source() — Validates path field for Word documents (was previously missing).
  • _validate_video_source() — Validates url, path, or playlist field for video sources (was previously missing).
  • 11 new _validate_*_source() methods — One for each new type with appropriate required-field checks.

Source Detection Improvements

  • 7 new file extension detections in SourceDetector.detect().ipynb, .html/.htm, .pptx, .adoc/.asciidoc, .rss/.atom, .1.8/.man, .yaml/.yml (with content sniffing)
  • _looks_like_openapi() — Content sniffing for YAML files: only classifies as OpenAPI if the file contains openapi: or swagger: key in first 20 lines (prevents false positives on docker-compose, Ansible, Kubernetes manifests, etc.)
  • Man page basename heuristic.1.8 extensions only detected as man pages if the basename has no dots (e.g., git.1 matches but access.log.1 does not)
  • .xml excluded from RSS detection — Too generic; only...
Read more

v3.2.0 — Video Extraction, Word Support, Pinecone Adaptor

Choose a tag to compare

@yusufkaraaslan yusufkaraaslan released this 02 Mar 09:44

v3.2.0 — Video Extraction, Word Support, Pinecone Adaptor

Theme: Video source support, Word document support, Pinecone adaptor, and quality improvements. 94 files changed, +23,500 lines since v3.1.3. 2,540 tests passing.

🎬 Video Extraction Pipeline

Complete video extraction system that converts YouTube videos and local video files into AI-consumable skills.

  • skill-seekers video --url <youtube-url> — New CLI command for video scraping
  • skill-seekers create <youtube-url> — Auto-detects YouTube URLs
  • Transcript extraction — 3-tier fallback: YouTube API → yt-dlp → faster-whisper
  • Visual OCR — Multi-engine ensemble (EasyOCR + pytesseract) for code frames
  • Panel detection — Splits IDE screenshots into independent sub-sections
  • Code timeline — Tracks code evolution across frames with edit history
  • Two-pass AI enhancement — Cleans OCR noise using transcript context
  • GPU auto-detectionskill-seekers video --setup detects CUDA/ROCm/CPU and installs correct PyTorch
  • 197 tests covering models, metadata, transcript, visual, OCR, and CLI

📄 Word Document (.docx) Support

  • skill-seekers word --docx <file> — Full pipeline: mammoth → HTML → sections → SKILL.md
  • skill-seekers create document.docx — Auto-detects .docx files
  • Smart code detection — Identifies monospace paragraphs as code blocks
  • Install: pip install skill-seekers[docx]

🌲 Pinecone Vector Database Adaptor

  • skill-seekers package output/ --format pinecone --upload — Direct Pinecone upload
  • Full CRUD operations with namespace support
  • OpenAI and Sentence Transformers embedding support
  • Batch upsert with configurable batch sizes
  • 764 tests for comprehensive coverage

🐛 Bug Fixes

  • 6 OCR quality fixes — Skip webcam frames, clean IDE decorations, fix duplicate lines, filter UI junk
  • 15 video pipeline fixes — Timeout handling, MCP integration, filename collisions, dependency management
  • Issue #300 — Selector fallback & dry-run link discovery (ReactFlow found 20+ pages, was 1)
  • Issue #301setup.sh macOS fix
  • RAG chunking crash — Fixed AttributeError: output_dir
  • Chunk overlap auto-scaling — Scales to max(50, chunk_tokens // 10)
  • Reference file limits removed — No more caps on GitHub issues, releases, or code blocks
  • See CHANGELOG.md for full details

📦 Install / Upgrade

pip install --upgrade skill-seekers

# With video support
pip install skill-seekers[video]
skill-seekers video --setup  # Auto-detect GPU, install deps

# With Word support
pip install skill-seekers[docx]

# With Pinecone
pip install skill-seekers[pinecone]

# Everything
pip install skill-seekers[all]

Full Changelog: https://github.com/yusufkaraaslan/Skill_Seekers/blob/main/CHANGELOG.md