diff --git a/CHANGELOG.md b/CHANGELOG.md index b6ff98f..acfabed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,9 @@ All notable changes to Skill Seeker will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [3.1.3] - 2026-02-24 + +### 🐛 Hotfix — Explicit Chunk Flags & Argument Pipeline Cleanup ### Fixed - **Issue #299: `skill-seekers package --target claude` unrecognised argument crash** — `_reconstruct_argv()` in `main.py` emits default flag values back into argv when routing subcommands. `package_skill.py` had a 105-line inline argparser that used different flag names to those in `arguments/package.py`, so forwarded flags were rejected. Fixed by replacing the inline block with a call to `add_package_arguments(parser)` — the single source of truth. diff --git a/CLAUDE.md b/CLAUDE.md index 32c3d87..7f0250c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **Skill Seekers** is the **universal documentation preprocessor** for AI systems. It transforms documentation websites, GitHub repositories, and PDFs into production-ready formats for **16+ platforms**: RAG pipelines (LangChain, LlamaIndex, Haystack), vector databases (Pinecone, Chroma, Weaviate, FAISS, Qdrant), AI coding assistants (Cursor, Windsurf, Cline, Continue.dev), and LLM platforms (Claude, Gemini, OpenAI). -**Current Version:** v3.1.2-dev +**Current Version:** v3.1.3 **Python Version:** 3.10+ required **Status:** Production-ready, published on PyPI **Website:** https://skillseekersweb.com/ - Browse configs, share, and access documentation @@ -2256,7 +2256,7 @@ The `scripts/` directory contains utility scripts: ## 🎉 Recent Achievements -**v3.1.2 (In Development) - "Unified Argument Interface":** +**v3.1.3 (Released) - "Unified Argument Interface":** - 🔧 **Unified Scraper Arguments** - All scrapers (scrape, github, analyze, pdf) now share a common argument contract via `add_all_standard_arguments(parser)` in `arguments/common.py` - 🐛 **Fix `create` Argument Forwarding** - `create --dry-run`, `create owner/repo --dry-run`, `create ./path --dry-run` all work now (previously crashed) - đŸ—ī¸ **Argument Deduplication** - Removed duplicated arg definitions from github.py, scrape.py, analyze.py, pdf.py; all import shared args diff --git a/pyproject.toml b/pyproject.toml index f405532..f6b9430 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "skill-seekers" -version = "3.1.2" +version = "3.1.3" description = "Convert documentation websites, GitHub repositories, and PDFs into Claude AI skills. International support with Chinese (įŽ€äŊ“中文) documentation." readme = "README.md" requires-python = ">=3.10" diff --git a/src/skill_seekers/_version.py b/src/skill_seekers/_version.py index 8438eb6..52c494d 100644 --- a/src/skill_seekers/_version.py +++ b/src/skill_seekers/_version.py @@ -28,7 +28,7 @@ def get_version() -> str: """ if tomllib is None: # Fallback if TOML library not available - return "3.1.1" # Hardcoded fallback + return "3.1.3" # Hardcoded fallback try: # Get path to pyproject.toml (3 levels up from this file) @@ -37,7 +37,7 @@ def get_version() -> str: if not pyproject_path.exists(): # Fallback for installed package - return "3.1.1" # Hardcoded fallback + return "3.1.3" # Hardcoded fallback with open(pyproject_path, "rb") as f: pyproject_data = tomllib.load(f) @@ -46,7 +46,7 @@ def get_version() -> str: except Exception: # Fallback if anything goes wrong - return "3.1.1" # Hardcoded fallback + return "3.1.3" # Hardcoded fallback __version__ = get_version() diff --git a/tests/test_cli_paths.py b/tests/test_cli_paths.py index 9a50f0e..ad4e1af 100644 --- a/tests/test_cli_paths.py +++ b/tests/test_cli_paths.py @@ -138,7 +138,7 @@ class TestUnifiedCLIEntryPoints(unittest.TestCase): # Should show version output = result.stdout + result.stderr - self.assertIn("3.1.2", output) + self.assertIn("3.1.3", output) except FileNotFoundError: # If skill-seekers is not installed, skip this test diff --git a/tests/test_package_structure.py b/tests/test_package_structure.py index d5b9d7b..9a506fb 100644 --- a/tests/test_package_structure.py +++ b/tests/test_package_structure.py @@ -24,7 +24,7 @@ class TestCliPackage: import skill_seekers.cli assert hasattr(skill_seekers.cli, "__version__") - assert skill_seekers.cli.__version__ == "3.1.2" + assert skill_seekers.cli.__version__ == "3.1.3" def test_cli_has_all(self): """Test that skill_seekers.cli package has __all__ export list.""" @@ -88,7 +88,7 @@ class TestMcpPackage: import skill_seekers.mcp assert hasattr(skill_seekers.mcp, "__version__") - assert skill_seekers.mcp.__version__ == "3.1.2" + assert skill_seekers.mcp.__version__ == "3.1.3" def test_mcp_has_all(self): """Test that skill_seekers.mcp package has __all__ export list.""" @@ -108,7 +108,7 @@ class TestMcpPackage: import skill_seekers.mcp.tools assert hasattr(skill_seekers.mcp.tools, "__version__") - assert skill_seekers.mcp.tools.__version__ == "3.1.2" + assert skill_seekers.mcp.tools.__version__ == "3.1.3" class TestPackageStructure: @@ -212,7 +212,7 @@ class TestRootPackage: import skill_seekers assert hasattr(skill_seekers, "__version__") - assert skill_seekers.__version__ == "3.1.2" + assert skill_seekers.__version__ == "3.1.3" def test_root_has_metadata(self): """Test that skill_seekers root package has metadata."""