From 7f959dd39104421b211a1cadde6c5d4b53f5831c Mon Sep 17 00:00:00 2001 From: CodeAlex52 <59381946+CodeAlex52@users.noreply.github.com> Date: Sun, 11 Oct 2026 15:21:52 +0800 Subject: [PATCH] feat(cli): add --version flag (closes #2) --- src/agentcorp/cli.py | 29 +++++++++++++++++++++++++++++ tests/test_cli_version.py | 15 +++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 tests/test_cli_version.py diff --git a/src/agentcorp/cli.py b/src/agentcorp/cli.py index 819bbdb..26630d2 100644 --- a/src/agentcorp/cli.py +++ b/src/agentcorp/cli.py @@ -16,6 +16,7 @@ import logging import signal import sys +from importlib import metadata as importlib_metadata from pathlib import Path from typing import Any @@ -36,6 +37,34 @@ help="AgentCorp — local-first, event-sourced multi-agent delivery orchestrator.", ) + +def _agentcorp_version() -> str: + """Installed distribution version; in a source checkout fall back to the in-tree value.""" + try: + return importlib_metadata.version("agentcorp") + except importlib_metadata.PackageNotFoundError: # pragma: no cover - source checkout + return "0.1.0" + + +def _version_callback(value: bool) -> None: + if value: + typer.echo(f"agentcorp {_agentcorp_version()}") + raise typer.Exit() + + +@app.callback() +def _main( + version: bool = typer.Option( + False, + "--version", + callback=_version_callback, + is_eager=True, + help="Show the version and exit.", + ), +) -> None: + """AgentCorp — local-first, event-sourced multi-agent delivery orchestrator.""" + + DEFAULT_DB = ".agentcorp/agentcorp.db" diff --git a/tests/test_cli_version.py b/tests/test_cli_version.py new file mode 100644 index 0000000..882d6a5 --- /dev/null +++ b/tests/test_cli_version.py @@ -0,0 +1,15 @@ +"""``agentcorp --version`` stays wired to the installed distribution metadata.""" + +from __future__ import annotations + +import re + +from typer.testing import CliRunner + +from agentcorp.cli import app + + +def test_version_flag_prints_package_version() -> None: + result = CliRunner().invoke(app, ["--version"]) + assert result.exit_code == 0 + assert re.fullmatch(r"agentcorp \d+\.\d+\.\d+\n", result.output)