diff --git a/pyproject.toml b/pyproject.toml index 9a1af00..afd125e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,7 @@ dependencies = [ "Pygments>=2.19.2", "pathspec>=0.12.1", "networkx>=3.0", + "tomli>=2.0.0; python_version < '3.11'", # TOML parser for version reading ] [project.optional-dependencies] diff --git a/src/skill_seekers/__init__.py b/src/skill_seekers/__init__.py index b691d5e..8bbe6b1 100644 --- a/src/skill_seekers/__init__.py +++ b/src/skill_seekers/__init__.py @@ -5,18 +5,13 @@ This package provides tools for automatically scraping, organizing, and packagin documentation from various sources into uploadable Claude AI skills. """ -__version__ = "2.7.2" +from skill_seekers._version import __version__ + __author__ = "Yusuf Karaaslan" __license__ = "MIT" -# Expose main components for easier imports -from skill_seekers.cli import __version__ as cli_version -from skill_seekers.mcp import __version__ as mcp_version - __all__ = [ "__version__", "__author__", "__license__", - "cli_version", - "mcp_version", ] diff --git a/src/skill_seekers/_version.py b/src/skill_seekers/_version.py new file mode 100644 index 0000000..7d3c560 --- /dev/null +++ b/src/skill_seekers/_version.py @@ -0,0 +1,52 @@ +""" +Single source of truth for skill-seekers version. + +This module dynamically reads the version from pyproject.toml to avoid +version mismatches across multiple files. +""" + +import sys +from pathlib import Path + +# Use tomllib (built-in) for Python 3.11+, tomli (package) for earlier versions +if sys.version_info >= (3, 11): + import tomllib +else: + try: + import tomli as tomllib + except ImportError: + # Fallback if tomli not available + tomllib = None + + +def get_version() -> str: + """ + Read version from pyproject.toml. + + Returns: + Version string (e.g., "2.7.4") + """ + if tomllib is None: + # Fallback if TOML library not available + return "2.7.4" # Hardcoded fallback + + try: + # Get path to pyproject.toml (3 levels up from this file) + repo_root = Path(__file__).parent.parent.parent + pyproject_path = repo_root / "pyproject.toml" + + if not pyproject_path.exists(): + # Fallback for installed package + return "2.7.4" # Hardcoded fallback + + with open(pyproject_path, "rb") as f: + pyproject_data = tomllib.load(f) + + return pyproject_data["project"]["version"] + + except Exception: + # Fallback if anything goes wrong + return "2.7.4" # Hardcoded fallback + + +__version__ = get_version() diff --git a/src/skill_seekers/cli/__init__.py b/src/skill_seekers/cli/__init__.py index eda6b86..21806c2 100644 --- a/src/skill_seekers/cli/__init__.py +++ b/src/skill_seekers/cli/__init__.py @@ -28,7 +28,8 @@ except ImportError: open_folder = None read_reference_files = None -__version__ = "2.7.2" +# Import centralized version +from skill_seekers._version import __version__ __all__ = [ "LlmsTxtDetector", @@ -36,4 +37,5 @@ __all__ = [ "LlmsTxtParser", "open_folder", "read_reference_files", + "__version__", ] diff --git a/src/skill_seekers/mcp/__init__.py b/src/skill_seekers/mcp/__init__.py index 9bf880a..829384c 100644 --- a/src/skill_seekers/mcp/__init__.py +++ b/src/skill_seekers/mcp/__init__.py @@ -28,6 +28,7 @@ Usage: in ~/.config/claude-code/mcp.json """ -__version__ = "2.7.2" +# Import centralized version +from skill_seekers._version import __version__ -__all__ = ["agent_detector"] +__all__ = ["agent_detector", "__version__"]