diff --git a/CHANGELOG.md b/CHANGELOG.md index 5df4f1e..0c30d81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ 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). +## [3.1.1] - 2026-02-23 + +### 🐛 Hotfix + +### Fixed +- **`create` command `max_pages` AttributeError** — Fixed crash when `max_pages` argument was not provided in web source routing. Uses `getattr()` for safe attribute access (#293, #294) + +### Changed +- Version bump to 3.1.1 + ## [3.1.0] - 2026-02-23 ### đŸŽ¯ "Unified CLI & Developer Experience" — Feature Release diff --git a/pyproject.toml b/pyproject.toml index 0c952c0..fa01832 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "skill-seekers" -version = "3.1.0" +version = "3.1.1" 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 9cdb03c..8438eb6 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.0" # Hardcoded fallback + return "3.1.1" # 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.0" # Hardcoded fallback + return "3.1.1" # 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.0" # Hardcoded fallback + return "3.1.1" # Hardcoded fallback __version__ = get_version() diff --git a/tests/test_cli_paths.py b/tests/test_cli_paths.py index efe3bb3..c12e443 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.0", output) + self.assertIn("3.1.1", 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 a33e8a5..dc16ec7 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.0" + assert skill_seekers.cli.__version__ == "3.1.1" 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.0" + assert skill_seekers.mcp.__version__ == "3.1.1" 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.0" + assert skill_seekers.mcp.tools.__version__ == "3.1.1" class TestPackageStructure: @@ -212,7 +212,7 @@ class TestRootPackage: import skill_seekers assert hasattr(skill_seekers, "__version__") - assert skill_seekers.__version__ == "3.1.0" + assert skill_seekers.__version__ == "3.1.1" def test_root_has_metadata(self): """Test that skill_seekers root package has metadata.""" diff --git a/uv.lock b/uv.lock index 4817a7d..b16a7ef 100644 --- a/uv.lock +++ b/uv.lock @@ -5204,7 +5204,7 @@ wheels = [ [[package]] name = "skill-seekers" -version = "3.0.0" +version = "3.1.1" source = { editable = "." } dependencies = [ { name = "anthropic" },