← back to AgentAbrams

media/cli.py

95 lines

#!/usr/bin/env python3
"""
cli.py — AgentAbrams CLI entrypoint.

Usage:
    aa build <post.md> [developer_name]
    aa new <date> <title>
    aa lint <file.md>
    aa validate
    aa check
"""

import subprocess
import sys
from pathlib import Path

PROJECT_ROOT = Path(__file__).parent.parent


def cmd_build(args):
    if not args:
        print("Usage: aa build <post.md> [developer_name]")
        sys.exit(2)
    md_path = args[0]
    developer = args[1] if len(args) > 1 else "Agent Abrams"
    sys.path.insert(0, str(PROJECT_ROOT / "media"))
    from engine import build
    build(md_path, developer)


def cmd_new(args):
    if len(args) < 2:
        print("Usage: aa new <YYYY-MM-DD> <title>")
        sys.exit(2)
    subprocess.run(
        [sys.executable, str(PROJECT_ROOT / "snippets/new_post.py"), args[0], args[1]],
        check=True,
    )


def cmd_lint(args):
    if not args:
        print("Usage: aa lint <file.md>")
        sys.exit(2)
    subprocess.run(
        [sys.executable, str(PROJECT_ROOT / "snippets/redact_lint.py"), args[0]],
    )


def cmd_validate(args):
    subprocess.run(
        [sys.executable, str(PROJECT_ROOT / "snippets/validate_skills.py")],
    )


def cmd_check(args):
    subprocess.run(
        ["bash", str(PROJECT_ROOT / "snippets/precommit.sh")],
    )


COMMANDS = {
    "build": cmd_build,
    "new": cmd_new,
    "lint": cmd_lint,
    "validate": cmd_validate,
    "check": cmd_check,
}


def main():
    if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help", "help"):
        print("""AgentAbrams CLI

Usage:
    aa build <post.md> [developer]   Generate all media from a markdown file
    aa new <date> <title>            Create a new post skeleton
    aa lint <file.md>                Run redaction linter on a file
    aa validate                      Validate all skills JSON
    aa check                         Run full pre-commit checks
""")
        sys.exit(0)

    command = sys.argv[1]
    if command not in COMMANDS:
        print(f"Unknown command: {command}")
        print(f"Available: {', '.join(COMMANDS.keys())}")
        sys.exit(1)

    COMMANDS[command](sys.argv[2:])


if __name__ == "__main__":
    main()