"""Command line interface for the PAM deploy agent.""" from __future__ import annotations import argparse import json from dataclasses import asdict from .agent import PamDeployAgent from .checkpoint_store import redact_mapping from .params_loader import load_params_file def main() -> None: parser = argparse.ArgumentParser(prog="pam-deploy-agent") sub = parser.add_subparsers(dest="command", required=True) preview = sub.add_parser("preview") preview.add_argument("--config", required=True) preview.add_argument("--strategy", default="hybrid_node_mcp", choices=["hybrid_node_mcp", "script_only", "fake"]) analyze = sub.add_parser("analyze") analyze.add_argument("--text", required=True) analyze.add_argument("--config") run = sub.add_parser("run-global") run.add_argument("--config", required=True) run.add_argument("--strategy", default="fake", choices=["hybrid_node_mcp", "script_only", "fake"]) run.add_argument("--confirm", action="store_true") deploy = sub.add_parser("run-deploy") deploy.add_argument("--config", required=True) deploy.add_argument("--strategy", default="fake", choices=["hybrid_node_mcp", "script_only", "fake"]) deploy.add_argument("--target-ip", action="append", default=[]) deploy.add_argument("--confirm", action="store_true") args = parser.parse_args() params = load_params_file(args.config) if getattr(args, "config", None) else {} agent = PamDeployAgent() if args.command == "analyze": result = agent.analyze_request(args.text, params) payload = redact_mapping({key: asdict(value) for key, value in result.items()}) print(json.dumps(payload, ensure_ascii=False, indent=2)) return if args.command == "preview": print(agent.preview(params, args.strategy)) return if not args.confirm: raise SystemExit("Refusing to execute actions without --confirm.") if args.command == "run-global": state = agent.create_state(params=params, execution_strategy=args.strategy) state = agent.run_global_flow(state) print(json.dumps({"events": state.events}, ensure_ascii=False, indent=2)) return state = agent.create_state( params=params, execution_strategy=args.strategy, target_ips=args.target_ip, ) state = agent.run_deploy_flow(state) print(agent.render_report(state)) if __name__ == "__main__": main()