diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bc7c22..e72a419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ elfmem uses [Semantic Versioning](https://semver.org/). --- +## [0.8.0] — 2026-04-28 + +### Added +- **`elfmem --version` / `-V` CLI flag:** Prints installed version and exits. Version is read from package metadata (`importlib.metadata`), single source of truth in `pyproject.toml`. +- **`elfmem.__version__`:** Exported from the package root for programmatic access. + ## [0.7.0] — 2026-04-28 ### Added diff --git a/pyproject.toml b/pyproject.toml index 43d1edf..f9595ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "elfmem" -version = "0.7.0" +version = "0.8.0" description = "Adaptive memory for LLM agents — adaptive decay, knowledge graph, zero infrastructure" readme = "README.md" requires-python = ">=3.11" diff --git a/src/elfmem/__init__.py b/src/elfmem/__init__.py index f4f8fbc..9476aa9 100644 --- a/src/elfmem/__init__.py +++ b/src/elfmem/__init__.py @@ -17,6 +17,8 @@ s = await system.status() # health snapshot + suggested action """ +from importlib.metadata import version as _version + from elfmem.api import MemorySystem from elfmem.config import ElfmemConfig, LoggingConfig from elfmem.exceptions import ( @@ -56,7 +58,10 @@ TokenUsage, ) +__version__ = _version("elfmem") + __all__ = [ + "__version__", # Core "MemorySystem", "ElfmemConfig", diff --git a/src/elfmem/cli.py b/src/elfmem/cli.py index c92d3c5..a9802bc 100644 --- a/src/elfmem/cli.py +++ b/src/elfmem/cli.py @@ -40,6 +40,7 @@ " pip install 'elfmem[cli]' or uv add 'elfmem[cli]'" ) from None +from elfmem import __version__ from elfmem import project as _project from elfmem.api import MemorySystem, format_recall_response from elfmem.exceptions import ElfmemError @@ -56,6 +57,13 @@ SystemStatus, ) + +def _version_callback(value: bool) -> None: + if value: + print(f"elfmem {__version__}") + raise typer.Exit() + + app = typer.Typer( name="elfmem", help="Adaptive memory for AI agents.", @@ -63,6 +71,21 @@ ) +@app.callback() +def _main( + version: Annotated[ + bool, + typer.Option( + "--version", "-V", + help="Show version and exit.", + callback=_version_callback, + is_eager=True, + ), + ] = False, +) -> None: + """Adaptive memory for AI agents.""" + + # ── Shared helpers ────────────────────────────────────────────────────────────