hotfix: v3.1.1 — fix create command max_pages AttributeError

Merge fix from development (#293, #294) and bump version to 3.1.1.
Fixes crash when max_pages argument was not provided in web source routing.

https://claude.ai/code/session_01HS5q7ghjfEUravNPZRCGux
This commit is contained in:
Claude
2026-02-23 06:37:39 +00:00
parent 1ebf797b34
commit 40cec4dffd
6 changed files with 20 additions and 10 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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()

View File

@@ -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

View File

@@ -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."""

2
uv.lock generated
View File

@@ -5204,7 +5204,7 @@ wheels = [
[[package]]
name = "skill-seekers"
version = "3.0.0"
version = "3.1.1"
source = { editable = "." }
dependencies = [
{ name = "anthropic" },