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