"""CLI: execute exactly one task spec.""" from __future__ import annotations import argparse import json import sys from agent_harness.runner import run_task from agent_harness.taskspec import TaskSpec, TaskSpecError def main(argv: list[str] | None = None) -> int: parser = argparse.ArgumentParser(prog="executor-worker") sub = parser.add_subparsers(dest="command", required=True) run = sub.add_parser("run", help="Execute one task from a JSON spec file") run.add_argument("--task-file", required=True) run.add_argument("--no-hub", action="store_true", help="Skip hub reporting") scan = sub.add_parser( "mail-scan", help="Deterministic company-mailbox scan (no LLM session)" ) scan.add_argument("--target-repo", required=True) scan.add_argument("--config", default="integrations/mailbox-binky-company.yml") scan.add_argument("--out", default="mailmeta/reports") scan.add_argument("--no-hub", action="store_true", help="Skip hub reporting") args = parser.parse_args(argv) if args.command == "mail-scan": from pathlib import Path from agent_harness.mailscan import run_mail_scan result = run_mail_scan( target_repo=Path(args.target_repo).expanduser(), config=args.config, out_dir=args.out, report_to_hub=not args.no_hub, ) print( json.dumps( { "ok": result.ok, "report": result.report_path, "new_messages": result.new_messages, "auth_lane": result.auth_lane, "reason": result.reason, }, indent=2, ) ) return 0 if result.ok else 1 try: spec = TaskSpec.from_file(args.task_file) except (TaskSpecError, OSError, json.JSONDecodeError) as exc: print(f"invalid task spec: {exc}", file=sys.stderr) return 2 result = run_task(spec, report_to_hub=not args.no_hub) print( json.dumps( { "ok": result.ok, "committed": result.committed, "head_after": result.head_after, "persona_source": result.persona_source, "reason": result.reason, }, indent=2, ) ) return 0 if result.ok else 1 if __name__ == "__main__": raise SystemExit(main())